From a5c81cfd3b8f991e5d35e02b097273acc127dc36 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 19 Jun 2015 20:04:09 +0300 Subject: [PATCH 1/4] moved countrycodeinput to flatinput, started InputField with bottom border --- Telegram/Resources/style.txt | 38 +- Telegram/Resources/style_classes.txt | 30 ++ Telegram/SourceFiles/gui/countrycodeinput.cpp | 83 ---- Telegram/SourceFiles/gui/countrycodeinput.h | 47 --- Telegram/SourceFiles/gui/flatinput.cpp | 367 +++++++++++++++++- Telegram/SourceFiles/gui/flatinput.h | 103 +++++ Telegram/SourceFiles/intro/introphone.h | 1 - Telegram/Telegram.vcxproj | 27 -- Telegram/Telegram.vcxproj.filters | 15 - 9 files changed, 528 insertions(+), 183 deletions(-) delete mode 100644 Telegram/SourceFiles/gui/countrycodeinput.cpp delete mode 100644 Telegram/SourceFiles/gui/countrycodeinput.h diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 4a67b66a0..ead515ffe 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -19,6 +19,7 @@ defaultFontFamily: 'Open Sans'; semibold: 'Open Sans Semibold'; fsize: 13px; +normalFont: font(fsize); spriteFile: ':/gui/art/sprite.png' / 2:':/gui/art/sprite_125x.png' / 3:':/gui/art/sprite_150x.png' / 4:':/gui/art/sprite_200x.png'; emojiImgSize: 18px; // exceptional value for retina @@ -32,9 +33,9 @@ counterMacInvColor: #ffffff01; lineWidth: 1px; -transparent: rgba(255, 255, 255, 0); -white: rgba(255, 255, 255, 255); -black: rgba(0, 0, 0, 255); +transparent: #fff0; +white: #fff; +black: #000; color1: #c03d33; // red color2: #4fad2d; // green @@ -50,12 +51,37 @@ wideModeWidth: 640px; wndMinHeight: 480px; wndDefWidth: 800px; wndDefHeight: 600px; -wndBG: #FFF; +wndBG: white; wndShadow: sprite(209px, 46px, 19px, 19px); wndShadowShift: 1px; layerAlpha: 0.5; -layerBG: #000; +layerBG: black; + +defaultInputField: InputField { + textFg: black; + textMargins: margins(5px, 5px, 5px, 5px); + textAlign: align(left); + + placeholderFg: #999; + placeholderFgActive: #aaa; + placeholderMargins: margins(2px, 0px, 2px, 0px); + placeholderAlign: align(left); + placeholderShift: 50px; + duration: 200; + + borderFg: #e0e0e0; + borderFgActive: #62c0f7; + borderFgError: #e48383; + + border: 1px; + borderActive: 2px; + borderError: 2px; + + font: normalFont; + + height: 32px; +} titleBG: #6389a8; titleColor: #0f8dcc;//rgb(20, 136, 210); @@ -200,7 +226,7 @@ btnDefBack: flatButton(btnDefFlat) { } linkCropLimit: 360px; -linkFont: font(fsize); +linkFont: normalFont; linkOverFont: font(fsize underline); btnDefLink: linkButton { color: btnYesColor; diff --git a/Telegram/Resources/style_classes.txt b/Telegram/Resources/style_classes.txt index 2f06f4a85..c5e24ba34 100644 --- a/Telegram/Resources/style_classes.txt +++ b/Telegram/Resources/style_classes.txt @@ -267,3 +267,33 @@ botKeyboardButton { textTop: number; downTextTop: number; } + +InputField { + textFg: color; + textMargins: margins; + textAlign: align; + + placeholderFg: color; + placeholderFgActive: color; + placeholderMargins: margins; + placeholderAlign: align; + placeholderShift: number; + + duration: number; + + borderFg: color; + borderFgActive: color; + borderFgError: color; + + border: number; + borderActive: number; + borderError: number; + + font: font; + + width: number; + height: number; + + iconSprite: sprite; + iconPosition: point; +} diff --git a/Telegram/SourceFiles/gui/countrycodeinput.cpp b/Telegram/SourceFiles/gui/countrycodeinput.cpp deleted file mode 100644 index 8e78188bc..000000000 --- a/Telegram/SourceFiles/gui/countrycodeinput.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* -This file is part of Telegram Desktop, -the official desktop version of Telegram messaging app, see https://telegram.org - -Telegram Desktop is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -It is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org -*/ -#include "stdafx.h" -#include "style.h" - -#include "gui/countrycodeinput.h" -#include "gui/countryinput.h" - -CountryCodeInput::CountryCodeInput(QWidget *parent, const style::flatInput &st) : FlatInput(parent, st), _nosignal(false) { - -} - -void CountryCodeInput::startErasing(QKeyEvent *e) { - setFocus(); - keyPressEvent(e); -} - -void CountryCodeInput::codeSelected(const QString &code) { - QString old(text()); - setText('+' + code); - _nosignal = true; - correctValue(0, old); - _nosignal = false; - emit changed(); -} - -void CountryCodeInput::correctValue(QKeyEvent *e, const QString &was) { - QString oldText(text()), newText, addToNumber; - int oldPos(cursorPosition()), newPos(-1), oldLen(oldText.length()), start = 0, digits = 5; - newText.reserve(oldLen + 1); - newText += '+'; - if (oldLen && oldText[0] == '+') { - ++start; - } - for (int i = start; i < oldLen; ++i) { - QChar ch(oldText[i]); - if (ch.isDigit()) { - if (!digits || !--digits) { - addToNumber += ch; - } else { - newText += ch; - } - } - if (i == oldPos) { - newPos = newText.length(); - } - } - if (!addToNumber.isEmpty()) { - QString validCode = findValidCode(newText.mid(1)); - addToNumber = newText.mid(1 + validCode.length()) + addToNumber; - newText = '+' + validCode; - } - if (newPos < 0 || newPos > newText.length()) { - newPos = newText.length(); - } - if (newText != oldText) { - setText(newText); - if (newPos != oldPos) { - setCursorPosition(newPos); - } - } - if (!_nosignal && was != newText) { - emit codeChanged(newText.mid(1)); - } - if (!addToNumber.isEmpty()) { - emit addedToNumber(addToNumber); - } -} diff --git a/Telegram/SourceFiles/gui/countrycodeinput.h b/Telegram/SourceFiles/gui/countrycodeinput.h deleted file mode 100644 index 57c897b5a..000000000 --- a/Telegram/SourceFiles/gui/countrycodeinput.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -This file is part of Telegram Desktop, -the official desktop version of Telegram messaging app, see https://telegram.org - -Telegram Desktop is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -It is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE -Copyright (c) 2014 John Preston, https://desktop.telegram.org -*/ -#pragma once - -#include "gui/flatinput.h" - -class CountryCodeInput : public FlatInput { - Q_OBJECT - -public: - - CountryCodeInput(QWidget *parent, const style::flatInput &st); - -public slots: - - void startErasing(QKeyEvent *e); - void codeSelected(const QString &code); - -signals: - - void codeChanged(const QString &code); - void addedToNumber(const QString &added); - -protected: - - void correctValue(QKeyEvent *e, const QString &was); - -private: - - bool _nosignal; - -}; diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index e2432d844..5eafb922d 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -20,11 +20,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "flatinput.h" #include "window.h" +#include "countryinput.h" namespace { - class FlatInputStyle : public QCommonStyle { + template + class InputStyle : public QCommonStyle { public: - FlatInputStyle() { + InputStyle() { } void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const { @@ -32,14 +34,15 @@ namespace { QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const { switch (r) { case SE_LineEditContents: - const FlatInput *w = widget ? qobject_cast(widget) : 0; + const InputClass *w = widget ? qobject_cast(widget) : 0; return w ? w->getTextRect() : QCommonStyle::subElementRect(r, opt, widget); break; } return QCommonStyle::subElementRect(r, opt, widget); } }; - FlatInputStyle _flatInputStyle; + InputStyle _flatInputStyle; + InputStyle _inputFieldStyle; } FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _fullph(pholder), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), @@ -285,3 +288,359 @@ void FlatInput::notaBene() { a_borderColor.start(_st.borderError->c); anim::start(this); } + +CountryCodeInput::CountryCodeInput(QWidget *parent, const style::flatInput &st) : FlatInput(parent, st), _nosignal(false) { + +} + +void CountryCodeInput::startErasing(QKeyEvent *e) { + setFocus(); + keyPressEvent(e); +} + +void CountryCodeInput::codeSelected(const QString &code) { + QString old(text()); + setText('+' + code); + _nosignal = true; + correctValue(0, old); + _nosignal = false; + emit changed(); +} + +void CountryCodeInput::correctValue(QKeyEvent *e, const QString &was) { + QString oldText(text()), newText, addToNumber; + int oldPos(cursorPosition()), newPos(-1), oldLen(oldText.length()), start = 0, digits = 5; + newText.reserve(oldLen + 1); + newText += '+'; + if (oldLen && oldText[0] == '+') { + ++start; + } + for (int i = start; i < oldLen; ++i) { + QChar ch(oldText[i]); + if (ch.isDigit()) { + if (!digits || !--digits) { + addToNumber += ch; + } else { + newText += ch; + } + } + if (i == oldPos) { + newPos = newText.length(); + } + } + if (!addToNumber.isEmpty()) { + QString validCode = findValidCode(newText.mid(1)); + addToNumber = newText.mid(1 + validCode.length()) + addToNumber; + newText = '+' + validCode; + } + if (newPos < 0 || newPos > newText.length()) { + newPos = newText.length(); + } + if (newText != oldText) { + setText(newText); + if (newPos != oldPos) { + setCursorPosition(newPos); + } + } + if (!_nosignal && was != newText) { + emit codeChanged(newText.mid(1)); + } + if (!addToNumber.isEmpty()) { + emit addedToNumber(addToNumber); + } +} + +InputField::InputField(QWidget *parent, const style::InputField &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), +_lastText(v), +_keyEvent(0), +_customUpDown(false), + +_placeholderFull(pholder), +_placeholderVisible(!v.length()), +a_placeholderLeft(_placeholderVisible ? 0 : st.placeholderShift), +a_placeholderOpacity(_placeholderVisible ? 1 : 0), +a_placeholderFg(st.placeholderFg->c), +_placeholderFgAnim(animFunc(this, &InputField::placeholderFgStep)), +_placeholderShiftAnim(animFunc(this, &InputField::placeholderShiftStep)), + +a_borderFg(st.borderFg->c), +a_borderOpacityActive(0), +_borderAnim(animFunc(this, &InputField::borderStep)), + +_focused(false), _error(false), _st(&st) { + resize(_st->width, _st->height); + + setFont(_st->font->f); + setAlignment(_st->textAlign); + setLayoutDirection(cLangDir()); + + QPalette p(palette()); + p.setColor(QPalette::Text, _st->textFg->c); + setPalette(p); + + connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(onTextChange(const QString &))); + connect(this, SIGNAL(textEdited(const QString &)), this, SLOT(onTextEdited())); + if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu())); + + setStyle(&_inputFieldStyle); + setTextMargins(0, 0, 0, 0); + setContentsMargins(0, 0, 0, 0); + + setAttribute(Qt::WA_AcceptTouchEvents); + _touchTimer.setSingleShot(true); + connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); +} + +void InputField::setCustomUpDown(bool customUpDown) { + _customUpDown = customUpDown; +} + +void InputField::onTouchTimer() { + _touchRightButton = true; +} + +bool InputField::event(QEvent *e) { + if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate || e->type() == QEvent::TouchEnd || e->type() == QEvent::TouchCancel) { + QTouchEvent *ev = static_cast(e); + if (ev->device()->type() == QTouchDevice::TouchScreen) { + touchEvent(ev); + return QLineEdit::event(e); + } + } + return QLineEdit::event(e); +} + +void InputField::touchEvent(QTouchEvent *e) { + switch (e->type()) { + case QEvent::TouchBegin: + if (_touchPress || e->touchPoints().isEmpty()) return; + _touchTimer.start(QApplication::startDragTime()); + _touchPress = true; + _touchMove = _touchRightButton = false; + _touchStart = e->touchPoints().cbegin()->screenPos().toPoint(); + break; + + case QEvent::TouchUpdate: + if (!_touchPress || e->touchPoints().isEmpty()) return; + if (!_touchMove && (e->touchPoints().cbegin()->screenPos().toPoint() - _touchStart).manhattanLength() >= QApplication::startDragDistance()) { + _touchMove = true; + } + break; + + case QEvent::TouchEnd: + if (!_touchPress) return; + if (!_touchMove && window()) { + Qt::MouseButton btn(_touchRightButton ? Qt::RightButton : Qt::LeftButton); + QPoint mapped(mapFromGlobal(_touchStart)), winMapped(window()->mapFromGlobal(_touchStart)); + + if (_touchRightButton) { + QContextMenuEvent contextEvent(QContextMenuEvent::Mouse, mapped, _touchStart); + contextMenuEvent(&contextEvent); + } + } + _touchTimer.stop(); + _touchPress = _touchMove = _touchRightButton = false; + break; + + case QEvent::TouchCancel: + _touchPress = false; + _touchTimer.stop(); + break; + } +} + +QRect InputField::getTextRect() const { + QMargins m = _st->textMargins + QMargins(-2, -1, -2, -1); + if (rtl()) { + int l = m.left(); + m.setLeft(m.right()); + m.setRight(l); + } + return rect().marginsRemoved(m); +} + +void InputField::paintEvent(QPaintEvent *e) { + Painter p(this); + + if (_st->border) { + p.fillRect(0, height() - _st->border, width(), _st->border, _st->borderFg->b); + } + if (_st->borderActive && a_borderOpacityActive.current() > 0) { + p.setOpacity(a_borderOpacityActive.current()); + p.fillRect(0, height() - _st->borderActive, width(), _st->borderActive, a_borderFg.current()); + p.setOpacity(1); + } + if (_st->iconSprite.pxWidth()) { + p.drawSpriteLeft(_st->iconPosition, width(), _st->iconSprite); + } + + bool drawPlaceholder = _placeholderVisible; + if (_placeholderShiftAnim.animating()) { + p.setOpacity(a_placeholderOpacity.current()); + drawPlaceholder = true; + } + if (drawPlaceholder) { + p.save(); + p.setClipRect(rect()); + + QRect r(rect().marginsRemoved(_st->textMargins + _st->placeholderMargins)); + r.moveLeft(r.left() + a_placeholderLeft.current()); + if (rtl()) r.moveLeft(width() - r.left() - r.width()); + + p.setFont(_st->font->f); + p.setPen(a_placeholderFg.current()); + p.drawText(r, _placeholder, _st->placeholderAlign); + + p.restore(); + } + QLineEdit::paintEvent(e); +} + +void InputField::focusInEvent(QFocusEvent *e) { + if (!_focused) { + _focused = true; + + a_placeholderFg.start(_st->placeholderFgActive->c); + _placeholderFgAnim.start(); + + a_borderFg.start((_error ? _st->borderFgError : _st->borderFgActive)->c); + a_borderOpacityActive.start(1); + _borderAnim.start(); + } + QLineEdit::focusInEvent(e); + emit focused(); +} + +void InputField::focusOutEvent(QFocusEvent *e) { + if (_focused) { + _focused = false; + + a_placeholderFg.start(_st->placeholderFg->c); + _placeholderFgAnim.start(); + + a_borderFg.start((_error ? _st->borderFgError : _st->borderFg)->c); + a_borderOpacityActive.start(_error ? 1 : 0); + _borderAnim.start(); + } + QLineEdit::focusOutEvent(e); + emit blurred(); +} + +void InputField::resizeEvent(QResizeEvent *e) { + int32 availw = width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 2; + _placeholder = (_st->font->m.width(_placeholderFull) > availw) ? _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, availw) : _placeholderFull; + update(); +} + +QSize InputField::sizeHint() const { + return geometry().size(); +} + +QSize InputField::minimumSizeHint() const { + return geometry().size(); +} + +bool InputField::placeholderFgStep(float64 ms) { + float dt = ms / _st->duration; + bool res = true; + if (dt >= 1) { + res = false; + a_placeholderFg.finish(); + } else { + a_placeholderFg.update(dt, anim::linear); + } + update(); + return res; +} + +bool InputField::placeholderShiftStep(float64 ms) { + float dt = ms / _st->duration; + bool res = true; + if (dt >= 1) { + res = false; + a_placeholderLeft.finish(); + a_placeholderOpacity.finish(); + } else { + a_placeholderLeft.update(dt, anim::linear); + a_placeholderOpacity.update(dt, anim::linear); + } + update(); + return res; +} + +bool InputField::borderStep(float64 ms) { + float dt = ms / _st->duration; + bool res = true; + if (dt >= 1) { + res = false; + a_borderFg.finish(); + a_borderOpacityActive.finish(); + } else { + a_borderFg.update(dt, anim::linear); + a_borderOpacityActive.update(dt, anim::linear); + } + update(); + return res; +} + +void InputField::updatePlaceholder() { + bool placeholderVisible = !_lastText.isEmpty(); + if (placeholderVisible != _placeholderVisible) { + _placeholderVisible = placeholderVisible; + + a_placeholderLeft.start(_placeholderVisible ? 0 : _st->placeholderShift); + a_placeholderOpacity.start(_placeholderVisible ? 1 : 0); + _placeholderShiftAnim.start(); + } +} + +void InputField::correctValue(QKeyEvent *e, const QString &was) { +} + +void InputField::keyPressEvent(QKeyEvent *e) { + QString was(_lastText); + + _keyEvent = e; + if (_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) { + e->ignore(); + } else { + QLineEdit::keyPressEvent(e); + } + + if (was == _lastText) { // call correct manually + correctValue(_keyEvent, was); + _lastText = text(); + if (was != _lastText) emit changed(); + updatePlaceholder(); + } + if (e->key() == Qt::Key_Escape) { + emit cancelled(); + } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { + emit accepted(); + } + _keyEvent = 0; +} + +void InputField::onTextEdited() { + QString was(_lastText); + correctValue(_keyEvent, was); + _lastText = text(); + if (was != _lastText) emit changed(); + updatePlaceholder(); + if (App::wnd()) App::wnd()->updateGlobalMenu(); +} + +void InputField::onTextChange(const QString &text) { + _lastText = text; + if (App::wnd()) App::wnd()->updateGlobalMenu(); +} + +void InputField::setError(bool error) { + if (error != _error) { + _error = error; + + a_borderFg.start((_error ? _st->borderFgError : (_focused ? _st->borderFgActive : _st->borderFg))->c); + a_borderOpacityActive.start((_error || _focused) ? 1 : 0); + _borderAnim.start(); + } +} diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index b0502c7a1..2c5c6c66e 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -89,3 +89,106 @@ private: bool _touchPress, _touchRightButton, _touchMove; QPoint _touchStart; }; + +class CountryCodeInput : public FlatInput { + Q_OBJECT + +public: + + CountryCodeInput(QWidget *parent, const style::flatInput &st); + + public slots: + + void startErasing(QKeyEvent *e); + void codeSelected(const QString &code); + +signals: + + void codeChanged(const QString &code); + void addedToNumber(const QString &added); + +protected: + + void correctValue(QKeyEvent *e, const QString &was); + +private: + + bool _nosignal; + +}; + +class InputField : public QLineEdit { + Q_OBJECT + +public: + + InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); + + bool event(QEvent *e); + void touchEvent(QTouchEvent *e); + void paintEvent(QPaintEvent *e); + void focusInEvent(QFocusEvent *e); + void focusOutEvent(QFocusEvent *e); + void keyPressEvent(QKeyEvent *e); + void resizeEvent(QResizeEvent *e); + + void setError(bool error); + + void updatePlaceholder(); + + QRect getTextRect() const; + + bool placeholderFgStep(float64 ms); + bool placeholderShiftStep(float64 ms); + bool borderStep(float64 ms); + + QSize sizeHint() const; + QSize minimumSizeHint() const; + + void setCustomUpDown(bool customUpDown); + +public slots: + + void onTextChange(const QString &text); + void onTextEdited(); + + void onTouchTimer(); + +signals: + + void changed(); + void cancelled(); + void accepted(); + void focused(); + void blurred(); + +protected: + + virtual void correctValue(QKeyEvent *e, const QString &was); + +private: + + QString _lastText; + QKeyEvent *_keyEvent; + + bool _customUpDown; + + QString _placeholder, _placeholderFull; + bool _placeholderVisible; + anim::ivalue a_placeholderLeft; + anim::fvalue a_placeholderOpacity; + anim::cvalue a_placeholderFg; + Animation _placeholderFgAnim, _placeholderShiftAnim; + + anim::fvalue a_borderOpacityActive; + anim::cvalue a_borderFg; + Animation _borderAnim; + + bool _focused, _error; + + const style::InputField *_st; + + QTimer _touchTimer; + bool _touchPress, _touchRightButton, _touchMove; + QPoint _touchStart; +}; diff --git a/Telegram/SourceFiles/intro/introphone.h b/Telegram/SourceFiles/intro/introphone.h index a36602002..2eaee4580 100644 --- a/Telegram/SourceFiles/intro/introphone.h +++ b/Telegram/SourceFiles/intro/introphone.h @@ -20,7 +20,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include "gui/flatbutton.h" #include "gui/phoneinput.h" -#include "gui/countrycodeinput.h" #include "gui/countryinput.h" #include "intro.h" diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index f392e9280..edce240a6 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -208,10 +208,6 @@ true true - - true - true - true true @@ -474,10 +470,6 @@ true true - - true - true - true true @@ -765,10 +757,6 @@ true true - - true - true - true true @@ -1001,7 +989,6 @@ - @@ -1467,20 +1454,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing countrycodeinput.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - Moc%27ing countrycodeinput.h... - Moc%27ing countrycodeinput.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index 6694d680f..27c4e9f0f 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -87,9 +87,6 @@ gui - - gui - gui @@ -546,15 +543,6 @@ Generated Files\Release - - Generated Files\Deploy - - - Generated Files\Debug - - - Generated Files\Release - Generated Files\Deploy @@ -1020,9 +1008,6 @@ gui - - gui - gui From 86f0216447f8d06d9df01474bfc85a1fc32a45e7 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 18 Aug 2015 19:10:01 +0300 Subject: [PATCH 2/4] merged master --- MSVC.md | 16 +- QTCREATOR.md | 28 +- README.md | 19 +- Telegram/DeployLinux.sh | 15 +- Telegram/DeployLinux32.sh | 15 +- Telegram/DeployMacWin.sh | 73 +- Telegram/DeployWin.sh | 43 +- Telegram/MetaEmoji.pro | 4 +- Telegram/MetaEmoji.vcxproj | 6 +- Telegram/MetaEmoji.xcodeproj/project.pbxproj | 568 +- .../MetaEmoji.xcodeproj/qt_preprocess.mak | 18 +- Telegram/MetaLang.pro | 4 +- Telegram/MetaLang.vcxproj | 6 +- Telegram/MetaLang.xcodeproj/project.pbxproj | 596 +- Telegram/MetaLang.xcodeproj/qt_preprocess.mak | 18 +- Telegram/MetaStyle.pro | 4 +- Telegram/MetaStyle.vcxproj | 6 +- Telegram/MetaStyle.xcodeproj/project.pbxproj | 592 +- .../MetaStyle.xcodeproj/qt_preprocess.mak | 18 +- Telegram/Packer.plist | 2 +- Telegram/Packer.pro | 4 +- Telegram/Packer.vcxproj | 2 +- Telegram/Packer.xcodeproj/project.pbxproj | 580 +- Telegram/Packer.xcodeproj/qt_preprocess.mak | 16 +- Telegram/PrepareLinux.sh | 30 +- Telegram/PrepareLinux32.sh | 30 +- Telegram/PrepareMac.sh | 33 +- Telegram/PrepareWin.bat | 38 +- Telegram/Resources/lang.strings | 65 +- Telegram/Resources/numbers.txt | 231 + Telegram/Resources/style.txt | 173 +- Telegram/SourceFiles/_other/genstyles.cpp | 152 + Telegram/SourceFiles/_other/packer.h | 1 + Telegram/SourceFiles/apiwrap.cpp | 431 +- Telegram/SourceFiles/apiwrap.h | 20 +- Telegram/SourceFiles/app.cpp | 367 +- Telegram/SourceFiles/app.h | 38 +- Telegram/SourceFiles/application.cpp | 66 +- Telegram/SourceFiles/art/sprite.png | Bin 170813 -> 171310 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 224571 -> 225082 bytes Telegram/SourceFiles/audio.cpp | 1458 +- Telegram/SourceFiles/audio.h | 166 +- Telegram/SourceFiles/autoupdater.cpp | 19 +- Telegram/SourceFiles/boxes/aboutbox.cpp | 2 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 2 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 9 +- Telegram/SourceFiles/boxes/confirmbox.h | 5 + Telegram/SourceFiles/boxes/connectionbox.cpp | 34 +- Telegram/SourceFiles/boxes/connectionbox.h | 1 + Telegram/SourceFiles/boxes/contactsbox.cpp | 47 +- Telegram/SourceFiles/boxes/contactsbox.h | 4 +- Telegram/SourceFiles/boxes/photosendbox.cpp | 9 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 10 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 66 +- Telegram/SourceFiles/boxes/stickersetbox.h | 4 +- Telegram/SourceFiles/config.h | 26 +- Telegram/SourceFiles/dialogswidget.cpp | 368 +- Telegram/SourceFiles/dialogswidget.h | 30 +- Telegram/SourceFiles/dropdown.cpp | 337 +- Telegram/SourceFiles/dropdown.h | 30 +- Telegram/SourceFiles/fileuploader.cpp | 1 + Telegram/SourceFiles/gui/filedialog.cpp | 6 +- Telegram/SourceFiles/gui/flatinput.cpp | 527 +- Telegram/SourceFiles/gui/flatinput.h | 187 +- Telegram/SourceFiles/gui/flattextarea.cpp | 69 +- Telegram/SourceFiles/gui/flattextarea.h | 7 +- Telegram/SourceFiles/gui/images.h | 14 + Telegram/SourceFiles/gui/phoneinput.cpp | 93 +- Telegram/SourceFiles/gui/phoneinput.h | 9 +- Telegram/SourceFiles/gui/scrollarea.cpp | 27 +- Telegram/SourceFiles/gui/scrollarea.h | 1 + Telegram/SourceFiles/gui/style_core.h | 11 +- Telegram/SourceFiles/gui/text.cpp | 38 +- Telegram/SourceFiles/gui/text.h | 23 +- Telegram/SourceFiles/gui/twidget.cpp | 12 +- Telegram/SourceFiles/gui/twidget.h | 50 +- Telegram/SourceFiles/history.cpp | 1005 +- Telegram/SourceFiles/history.h | 109 +- Telegram/SourceFiles/historywidget.cpp | 2340 +-- Telegram/SourceFiles/historywidget.h | 122 +- Telegram/SourceFiles/intro/introphone.cpp | 6 +- Telegram/SourceFiles/lang.cpp | 36 +- Telegram/SourceFiles/langs/lang_de.strings | 71 +- Telegram/SourceFiles/langs/lang_es.strings | 67 +- Telegram/SourceFiles/langs/lang_it.strings | 67 +- Telegram/SourceFiles/langs/lang_ko.strings | 57 +- Telegram/SourceFiles/langs/lang_nl.strings | 67 +- Telegram/SourceFiles/langs/lang_pt_BR.strings | 71 +- Telegram/SourceFiles/localimageloader.cpp | 50 +- Telegram/SourceFiles/localstorage.cpp | 426 +- Telegram/SourceFiles/localstorage.h | 10 +- Telegram/SourceFiles/logs.cpp | 3 + Telegram/SourceFiles/main.cpp | 12 + Telegram/SourceFiles/mainwidget.cpp | 771 +- Telegram/SourceFiles/mainwidget.h | 59 +- Telegram/SourceFiles/mediaview.cpp | 194 +- Telegram/SourceFiles/mediaview.h | 2 +- Telegram/SourceFiles/mtproto/generate.py | 7 + .../SourceFiles/mtproto/mtpConnection.cpp | 294 +- Telegram/SourceFiles/mtproto/mtpConnection.h | 55 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 334 +- Telegram/SourceFiles/mtproto/mtpScheme.h | 1321 +- Telegram/SourceFiles/mtproto/scheme.tl | 59 +- Telegram/SourceFiles/numbers.h | 21 + Telegram/SourceFiles/overviewwidget.cpp | 433 +- Telegram/SourceFiles/overviewwidget.h | 21 +- Telegram/SourceFiles/playerwidget.cpp | 625 + Telegram/SourceFiles/playerwidget.h | 113 + Telegram/SourceFiles/profilewidget.cpp | 184 +- Telegram/SourceFiles/profilewidget.h | 19 +- Telegram/SourceFiles/pspecific_linux.cpp | 62 +- Telegram/SourceFiles/pspecific_linux.h | 6 +- Telegram/SourceFiles/pspecific_mac.cpp | 14 +- Telegram/SourceFiles/pspecific_mac.h | 10 +- Telegram/SourceFiles/pspecific_mac_p.h | 6 +- Telegram/SourceFiles/pspecific_mac_p.mm | 44 +- Telegram/SourceFiles/pspecific_wnd.cpp | 968 +- Telegram/SourceFiles/pspecific_wnd.h | 9 +- Telegram/SourceFiles/settings.cpp | 28 +- Telegram/SourceFiles/settings.h | 22 +- Telegram/SourceFiles/settingswidget.cpp | 147 +- Telegram/SourceFiles/settingswidget.h | 16 +- Telegram/SourceFiles/stdafx.cpp | 2 + Telegram/SourceFiles/stdafx.h | 2 +- Telegram/SourceFiles/structs.cpp | 213 +- Telegram/SourceFiles/structs.h | 192 +- Telegram/SourceFiles/telegram.qrc | 80 +- Telegram/SourceFiles/types.h | 90 +- Telegram/SourceFiles/window.cpp | 41 +- Telegram/SourceFiles/window.h | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.pro | 30 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.vcxproj | 446 +- Telegram/Telegram.vcxproj.filters | 22 + Telegram/Telegram.xcodeproj/project.pbxproj | 656 +- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 153 +- Telegram/Version.sh | 4 +- Telegram/_qt_5_4_0_patch.diff | 940 -- .../src/corelib/tools/qunicodetables.cpp | 11084 -------------- .../platforms/windows/qwindowskeymapper.cpp | 1223 -- .../src/3rdparty/libwebp/src/dec/vp8l.c | 1385 -- Telegram/_qt_5_5_0_patch.diff | 11750 +++++++++++++++ .../qtbase/mkspecs/common/msvc-desktop.conf} | 94 +- .../qmake/generators/mac/pbuilder_pbx.cpp | 441 +- .../qtbase/qmake/generators/makefile.cpp | 612 +- .../src/3rdparty/pcre/pcre16_valid_utf16.c | 2 +- .../qtbase/src/corelib/kernel/qobjectdefs.h | 509 + .../src/corelib/tools/qunicodetables.cpp | 12111 ++++++++++++++++ .../qtbase/src/gui/image/qbmphandler.cpp | 41 +- .../src/gui/kernel/qplatformdialoghelper.h | 14 +- .../qtbase/src/gui/painting/qimagescale.cpp | 748 + .../qtbase/src/gui/painting/qpaintengine_p.h | 18 +- .../qtbase/src/gui/text/qtextlayout.cpp | 36 +- .../qtbase/src/gui/text/qtextlayout.h | 14 +- .../socket/qnativesocketengine_win.cpp | 201 +- .../basic/qbasicfontdatabase.cpp | 216 +- .../fontconfig/qfontconfigdatabase.cpp | 169 +- .../mac/qcoretextfontdatabase.mm | 126 +- .../platforminputcontexts/compose/compose.pro | 29 + .../platforminputcontexts/fcitx/fcitx.json | 3 + .../platforminputcontexts/fcitx/fcitx.pro | 38 + .../fcitx/fcitxqtconnection.cpp | 369 + .../fcitx/fcitxqtconnection.h | 111 + .../fcitx/fcitxqtconnection_p.h | 68 + .../fcitx/fcitxqtdbusaddons_export.h | 41 + .../fcitx/fcitxqtdbusaddons_version.h | 11 + .../fcitx/fcitxqtformattedpreedit.cpp | 78 + .../fcitx/fcitxqtformattedpreedit.h | 51 + .../fcitx/fcitxqtinputcontextproxy.cpp | 26 + .../fcitx/fcitxqtinputcontextproxy.h | 136 + .../fcitx/fcitxqtinputmethoditem.cpp | 95 + .../fcitx/fcitxqtinputmethoditem.h | 64 + .../fcitx/fcitxqtinputmethodproxy.cpp | 26 + .../fcitx/fcitxqtinputmethodproxy.h | 217 + .../fcitx/fcitxqtkeyboardlayout.cpp | 100 + .../fcitx/fcitxqtkeyboardlayout.h | 58 + .../fcitx/fcitxqtkeyboardproxy.cpp | 26 + .../fcitx/fcitxqtkeyboardproxy.h | 74 + .../org.fcitx.Fcitx.InputContext.xml | 81 + .../org.fcitx.Fcitx.InputMethod.xml | 81 + .../interfaces/org.fcitx.Fcitx.Keyboard.xml | 20 + .../platforminputcontexts/fcitx/keydata.h | 1612 ++ .../fcitx/keyserver_x11.h | 173 + .../platforminputcontexts/fcitx/keyuni.cpp | 56 + .../platforminputcontexts/fcitx/keyuni.h | 29 + .../platforminputcontexts/fcitx/main.cpp | 35 + .../platforminputcontexts/fcitx/main.h | 37 + .../fcitx/qfcitxplatforminputcontext.cpp | 770 + .../fcitx/qfcitxplatforminputcontext.h | 269 + .../platforminputcontexts/fcitx/utils.cpp | 177 + .../platforminputcontexts/fcitx/utils.h | 35 + .../fcitx/xkbcommon/xkbcommon-compat.h | 98 + .../fcitx/xkbcommon/xkbcommon-compose.h | 488 + .../fcitx/xkbcommon/xkbcommon-keysyms.h | 3012 ++++ .../fcitx/xkbcommon/xkbcommon-names.h | 45 + .../fcitx/xkbcommon/xkbcommon-x11.h | 244 + .../fcitx/xkbcommon/xkbcommon.h | 1723 +++ .../platforminputcontexts.pro | 10 + .../cocoa/qcocoaapplicationdelegate.mm | 38 +- .../platforms/cocoa/qcocoasystemtrayicon.mm | 57 +- .../plugins/platforms/cocoa/qcocoawindow.mm | 166 +- .../src/plugins/platforms/cocoa/qnsview.mm | 266 +- .../windows/qwindowsdialoghelpers.cpp | 135 +- .../platforms/windows/qwindowswindow.cpp | 471 +- .../platforms/windows/qwindowswindow.h | 37 +- .../src/widgets/dialogs/qfiledialog.cpp | 213 +- .../qtbase/src/widgets/dialogs/qfiledialog.h | 38 +- .../src/widgets/dialogs/qfiledialog_p.h | 48 +- .../qtbase/src/widgets/kernel/qwidget.cpp | 391 +- .../src/widgets/util/qsystemtrayicon.cpp | 62 +- .../widgets/widgets/qwidgetlinecontrol.cpp | 52 +- .../widgets/widgets/qwidgettextcontrol.cpp | 46 +- XCODE.md | 24 +- XCODEold.md | 172 + 216 files changed, 52456 insertions(+), 22440 deletions(-) create mode 100644 Telegram/Resources/numbers.txt create mode 100644 Telegram/SourceFiles/numbers.h create mode 100644 Telegram/SourceFiles/playerwidget.cpp create mode 100644 Telegram/SourceFiles/playerwidget.h delete mode 100644 Telegram/_qt_5_4_0_patch.diff delete mode 100644 Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp delete mode 100644 Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp delete mode 100644 Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c create mode 100644 Telegram/_qt_5_5_0_patch.diff rename Telegram/{_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf => _qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf} (59%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/qmake/generators/mac/pbuilder_pbx.cpp (84%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/qmake/generators/makefile.cpp (88%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c (99%) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/image/qbmphandler.cpp (96%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/kernel/qplatformdialoghelper.h (96%) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/painting/qpaintengine_p.h (84%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/text/qtextlayout.cpp (98%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/text/qtextlayout.h (94%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/network/socket/qnativesocketengine_win.cpp (95%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp (63%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp (87%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm (90%) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm (92%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm (91%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm (93%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qnsview.mm (89%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp (94%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp (85%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.h (91%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog.cpp (95%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog.h (93%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog_p.h (89%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/kernel/qwidget.cpp (97%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/util/qsystemtrayicon.cpp (92%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp (98%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp (98%) create mode 100644 XCODEold.md diff --git a/MSVC.md b/MSVC.md index c93ac3d23..395c4ebdf 100644 --- a/MSVC.md +++ b/MSVC.md @@ -134,23 +134,23 @@ Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\\Program Fi PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:$PKG_CONFIG_PATH" - ./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib" + ./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib" make make install -####Qt 5.4.0, slightly patched +####Qt 5.5.0, slightly patched -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.zip +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.zip -Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder +Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder Apply patch -* OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_4\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** +* OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_5\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** * OR in Git Bash go to **/d/TBuild/Libraries/QtStatic/** and run - git apply ./../../tdesktop/Telegram/_qt_5_4_0_patch.diff + git apply ./../../tdesktop/Telegram/_qt_5_5_0_patch.diff #####Building library @@ -183,8 +183,8 @@ Close all VS2013 instances and install to default location * Launch VS2013 for configuring Qt Addin * QT5 > Qt Options > Add - * Version name: **QtStatic.5.4.0** + * Version name: **QtStatic.5.5.0** * Path: **D:\TBuild\Libraries\QtStatic\qtbase** -* Default Qt/Win version: **QtStatic.5.4.0** – **OK** +* Default Qt/Win version: **QtStatic.5.5.0** – **OK** * File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** * Build \ Build Solution (Debug and Release configurations) diff --git a/QTCREATOR.md b/QTCREATOR.md index dd0f89d80..c4d05c691 100644 --- a/QTCREATOR.md +++ b/QTCREATOR.md @@ -50,7 +50,7 @@ Download sources [ffmpeg-2.6.3.tar.bz2](http://ffmpeg.org/releases/ffmpeg-2.6.3. sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev sudo apt-get install yasm - ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus make sudo make install @@ -76,18 +76,28 @@ then go to **/home/user/TBuild/Libraries/openal-soft/build** and run make sudo make install -####Qt 5.4.0, slightly patched +####libxkbcommon (required for Fcitx Qt plugin) -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz +In Terminal go to **/home/user/TBuild/Libraries** and run -Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder + sudo apt-get install xutils-dev bison python-xcbgen + git clone https://github.com/xkbcommon/libxkbcommon.git + ./autogen.sh --disable-x11 + make + sudo make install + +####Qt 5.5.0, slightly patched + +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz + +Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder Apply patch: -* OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/** -* OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run +* OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/** +* OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run - git apply _qt_5_4_0_patch.diff + git apply _qt_5_5_0_patch.diff #####Building library @@ -106,8 +116,8 @@ building (**make** command) will take really long time. ###Building Telegram Desktop * Launch Qt Creator, all projects will be taken from **/home/user/TBuild/tdesktop/Telegram** -* Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.4.0/bin/qmake > **Qt 5.4.0 (Qt-5.4.0)** > Apply -* Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.4.0 (Qt-5.4.0)** > Apply +* Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.5.0/bin/qmake > **Qt 5.5.0 (Qt-5.5.0)** > Apply +* Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.5.0 (Qt-5.5.0)** > Apply * Open MetaStyle.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateStyle** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateStyle** and build for Debug * Open MetaEmoji.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateEmoji** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateEmoji** and build for Debug * Open MetaLang.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateLang** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateLang** and build for Debug diff --git a/README.md b/README.md index 2ac7de5b0..1b4b41452 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,15 @@ Source code is published under GPL v3, license is available [here](https://githu ###Supported systems -* Windows XP - Windows 8.1 (**not** RT) -* Mac OS X 10.7 - Mac OS X 10.10 +* Windows XP - Windows 10 (**not** RT) +* Mac OS X 10.8 - Mac OS X 10.10 +* Mac OS X 10.6 - Mac OS X 10.7 (separate build) * Ubuntu 12.04 - Ubuntu 14.04 +* Fedora 22 ###Third-party -* Qt 5.4.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) +* Qt 5.3.2 and 5.5.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) * OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html)) * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) @@ -25,7 +27,9 @@ Source code is published under GPL v3, license is available [here](https://githu ###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) -###[Build instructions for XCode 6.3.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) +###[Build instructions for XCode 6.4](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) + +###[Build instructions for XCode 6.4 for OS X 10.6 and 10.7](https://github.com/telegramdesktop/tdesktop/blob/master/XCODEold.md) ###[Build instructions for Qt Creator 3.2.0 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) @@ -58,15 +62,12 @@ for Mac: ####MetaEmoji -from two folders -* SourceFiles/art/Emoji -* SourceFiles/art/Emoji_200x - -and some inner config creates four sprites and text2emoji replace code +creates four sprites and text2emoji replace code * SourceFiles/art/emoji.png * SourceFiles/art/emoji_125x.png * SourceFiles/art/emoji_150x.png * SourceFiles/art/emoji_200x.png +* SourceFiles/art/emoji_250x.png * SourceFiles/gui/emoji_config.cpp ####MetaStyle diff --git a/Telegram/DeployLinux.sh b/Telegram/DeployLinux.sh index 629f68693..db3478e4e 100755 --- a/Telegram/DeployLinux.sh +++ b/Telegram/DeployLinux.sh @@ -1,20 +1,21 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then echo "tlinuxupd$AppVersion not found!"; exit 1 fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then echo "tsetup.$AppVersionStr$DevPostfix.tar.xz not found!" exit 1 fi -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/ -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/ diff --git a/Telegram/DeployLinux32.sh b/Telegram/DeployLinux32.sh index 3540d3cbd..3280df52b 100755 --- a/Telegram/DeployLinux32.sh +++ b/Telegram/DeployLinux32.sh @@ -1,21 +1,22 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then echo "tlinux32upd$AppVersion not found!" exit 1 fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then echo "tsetup32.$AppVersionStr$DevPostfix.zip not found!" exit 1 fi -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/ -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/ diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index 1e8a06b12..98d0d7f00 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -1,38 +1,65 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then - echo "tmacupd$AppVersion not found!" - exit 1 +if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then + echo "tmacupd$AppVersion not found!" + exit 1 fi -if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!" - exit 1 +if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tupdate$AppVersion" ]; then - echo "tupdate$AppVersion not found!" - exit 1 +if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion" ]; then + echo "tmac32upd$AppVersion not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip" ]; then - echo "tportable.$AppVersionStr$DevPostfix.zip not found!" - exit 1 +if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg" ]; then + echo "tsetup32.$AppVersionStr$DevPostfix.dmg not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" - exit 1 +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then + echo "tupdate$AppVersion not found!" + exit 1 fi -scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ -scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ -scp ./../../tother/tsetup/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ -scp ./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ -scp ./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then + echo "tportable.$AppVersionStr$DevPostfix.zip not found!" + exit 1 +fi + +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" + exit 1 +fi + +if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" ]; then + mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" +fi + +scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ +scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ +scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion tmaster:tdesktop/www/tmac32/ +scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac32/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ + +mv -v ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/ + +cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -rv ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -rv ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram32.app.dSYM + diff --git a/Telegram/DeployWin.sh b/Telegram/DeployWin.sh index 1284d6da5..8a667e9fe 100644 --- a/Telegram/DeployWin.sh +++ b/Telegram/DeployWin.sh @@ -1,26 +1,39 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then - echo "tupdate$AppVersion not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then + echo "tupdate$AppVersion not found!" + exit 1 fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then - echo "tportable.$AppVersionStr$DevPostfix.zip not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then + echo "tportable.$AppVersionStr$DevPostfix.zip not found!" + exit 1 fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" + exit 1 fi -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/ -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/ -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/ +if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor" ]; then + mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor" +fi + +if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix" ]; then + mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +fi + +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ + diff --git a/Telegram/MetaEmoji.pro b/Telegram/MetaEmoji.pro index 9c8cff740..422dffca1 100644 --- a/Telegram/MetaEmoji.pro +++ b/Telegram/MetaEmoji.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/memain.h \ ./SourceFiles/_other/genemoji.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaEmoji.vcxproj b/Telegram/MetaEmoji.vcxproj index a2ddc04a4..6b43558eb 100644 --- a/Telegram/MetaEmoji.vcxproj +++ b/Telegram/MetaEmoji.vcxproj @@ -105,7 +105,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -123,7 +123,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -142,7 +142,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd diff --git a/Telegram/MetaEmoji.xcodeproj/project.pbxproj b/Telegram/MetaEmoji.xcodeproj/project.pbxproj index c56fff40c..e6817e61c 100644 --- a/Telegram/MetaEmoji.xcodeproj/project.pbxproj +++ b/Telegram/MetaEmoji.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -62,160 +63,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genemoji.cpp; path = SourceFiles/_other/genemoji.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 3AC2626B26B65AA88F06BFB5 /* memain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memain.cpp; path = SourceFiles/_other/memain.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 58308B26DE991A86E8589883 /* genemoji.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genemoji.h; path = SourceFiles/_other/genemoji.h; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genemoji.cpp; path = GeneratedFiles/Debug/moc_genemoji.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C3345709A0BD182590087379 /* MetaEmoji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaEmoji.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E981470FA003A8DCE3C52E59 /* memain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memain.h; path = SourceFiles/_other/memain.h; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F13124A218B58585B027D96A /* MetaEmoji.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaEmoji.pro; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -247,6 +249,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -294,127 +297,127 @@ isa = PBXGroup; children = ( F13124A218B58585B027D96A /* MetaEmoji.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -431,6 +434,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -598,25 +602,25 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Emoji.plist; INSTALL_DIR = ../Mac/ReleaseEmoji/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateEmoji/; @@ -645,10 +649,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -688,25 +692,25 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Emoji.plist; INSTALL_DIR = ../Mac/DebugEmoji/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateEmoji/; @@ -736,10 +740,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); diff --git a/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak index ef67200da..258380179 100644 --- a/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaEmoji.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -54,7 +54,7 @@ GeneratedFiles/Debug/moc_genemoji.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ SourceFiles/_other/genemoji.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -66,5 +66,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/MetaLang.pro b/Telegram/MetaLang.pro index 14237c7ad..d2eaa5213 100644 --- a/Telegram/MetaLang.pro +++ b/Telegram/MetaLang.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/mlmain.h \ ./SourceFiles/_other/genlang.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaLang.vcxproj b/Telegram/MetaLang.vcxproj index d273a3e92..3b9617b5c 100644 --- a/Telegram/MetaLang.vcxproj +++ b/Telegram/MetaLang.vcxproj @@ -105,7 +105,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -123,7 +123,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false @@ -140,7 +140,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false diff --git a/Telegram/MetaLang.xcodeproj/project.pbxproj b/Telegram/MetaLang.xcodeproj/project.pbxproj index 5f24dc7fe..13aedfb39 100644 --- a/Telegram/MetaLang.xcodeproj/project.pbxproj +++ b/Telegram/MetaLang.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ /* Begin PBXBuildFile section */ 0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 680437016D61255E7F889A94 /* moc_genlang.cpp */; settings = {ATTRIBUTES = (); }; }; + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -63,160 +64,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaLang.pro; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 54D6D1A7260739988F6FC406 /* genlang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genlang.h; path = SourceFiles/_other/genlang.h; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 669AB12AE74AC219B4669D79 /* genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genlang.cpp; path = SourceFiles/_other/genlang.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; 680437016D61255E7F889A94 /* moc_genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genlang.cpp; path = GeneratedFiles/Debug/moc_genlang.cpp; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 83FFCB79DDEB015B4A5CB301 /* MetaLang.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaLang.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; A83296E7180A28ABB0FD85D2 /* mlmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mlmain.cpp; path = SourceFiles/_other/mlmain.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; D7D645CBFF3B86CF39CEF3DA /* mlmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mlmain.h; path = SourceFiles/_other/mlmain.h; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -248,6 +250,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -295,127 +298,127 @@ isa = PBXGroup; children = ( 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -432,6 +435,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -516,7 +520,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0640; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaLang" */; compatibilityVersion = "Xcode 3.2"; @@ -603,6 +607,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -611,25 +616,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Lang.plist; INSTALL_DIR = ../Mac/ReleaseLang/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateLang; @@ -658,10 +663,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -691,6 +696,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -700,25 +706,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Lang.plist; INSTALL_DIR = ../Mac/DebugLang/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateLang; @@ -748,10 +754,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -769,15 +775,15 @@ COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/ReleaseLang/; PRODUCT_NAME = MetaLang; @@ -795,15 +801,15 @@ GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/DebugLang/; PRODUCT_NAME = MetaLang; diff --git a/Telegram/MetaLang.xcodeproj/qt_preprocess.mak b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak index bda38ce72..3b9048805 100644 --- a/Telegram/MetaLang.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugLang/MetaLang.app/Contents/MacOS/MetaLang -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaLang.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -52,7 +52,7 @@ GeneratedFiles/Debug/moc_genlang.cpp: ../../Libraries/QtStatic/qtbase/include/Qt ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ SourceFiles/_other/genlang.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -64,5 +64,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/MetaStyle.pro b/Telegram/MetaStyle.pro index 304942e8f..82b5d05eb 100644 --- a/Telegram/MetaStyle.pro +++ b/Telegram/MetaStyle.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/msmain.h \ ./SourceFiles/_other/genstyles.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaStyle.vcxproj b/Telegram/MetaStyle.vcxproj index 2f6148262..8a1cb42fb 100644 --- a/Telegram/MetaStyle.vcxproj +++ b/Telegram/MetaStyle.vcxproj @@ -126,7 +126,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -145,7 +145,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false @@ -162,7 +162,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false diff --git a/Telegram/MetaStyle.xcodeproj/project.pbxproj b/Telegram/MetaStyle.xcodeproj/project.pbxproj index 9c558c041..04a822d2a 100644 --- a/Telegram/MetaStyle.xcodeproj/project.pbxproj +++ b/Telegram/MetaStyle.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -63,160 +64,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaStyle.pro; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2CBD32689B153445ED220FAE /* MetaStyle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaStyle.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6FF81CB4A724CE1990CEE99A /* msmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = msmain.h; path = SourceFiles/_other/msmain.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genstyles.cpp; path = GeneratedFiles/Debug/moc_genstyles.cpp; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A35D133D7C0EFB42FA85D194 /* genstyles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genstyles.h; path = SourceFiles/_other/genstyles.h; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EF5243ECB3132AF2796F09DF /* msmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = msmain.cpp; path = SourceFiles/_other/msmain.cpp; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; F8BC976260B6D624F23C32D6 /* genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genstyles.cpp; path = SourceFiles/_other/genstyles.cpp; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -248,6 +250,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -295,127 +298,127 @@ isa = PBXGroup; children = ( 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -432,6 +435,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -612,25 +616,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Style.plist; INSTALL_DIR = ../Mac/ReleaseStyle/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateStyle; @@ -659,10 +663,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -702,25 +706,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Style.plist; INSTALL_DIR = ../Mac/DebugStyle/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateStyle; @@ -750,10 +754,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -771,15 +775,15 @@ COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/ReleaseStyle/; PRODUCT_NAME = MetaStyle; @@ -797,15 +801,15 @@ GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/DebugStyle/; PRODUCT_NAME = MetaStyle; diff --git a/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak index c4b262dea..3d1238690 100644 --- a/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugStyle/MetaStyle.app/Contents/MacOS/MetaStyle -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaStyle.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -51,7 +51,7 @@ GeneratedFiles/Debug/moc_genstyles.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \ SourceFiles/_other/genstyles.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -63,5 +63,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/Packer.plist b/Telegram/Packer.plist index f1583971a..69da5da44 100644 --- a/Telegram/Packer.plist +++ b/Telegram/Packer.plist @@ -9,7 +9,7 @@ CFBundleIconFile CFBundleIdentifier - com.ddesktop.${PRODUCT_NAME:rfc1034identifier} + com.tdesktop.$(PRODUCT_NAME:rfc1034identifier) CFBundlePackageType APPL CFBundleSignature diff --git a/Telegram/Packer.pro b/Telegram/Packer.pro index 6e4e51244..584b92e52 100644 --- a/Telegram/Packer.pro +++ b/Telegram/Packer.pro @@ -35,8 +35,8 @@ unix { } } -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include LIBS += -lcrypto -lssl -lz -llzma diff --git a/Telegram/Packer.vcxproj b/Telegram/Packer.vcxproj index 19127ea18..f9b770acd 100644 --- a/Telegram/Packer.vcxproj +++ b/Telegram/Packer.vcxproj @@ -113,7 +113,7 @@ Console $(OutDir)\$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;$(QTDIR)\lib;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;LzmaLib.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;qtpcre.lib;LzmaLib.lib;%(AdditionalDependencies) false diff --git a/Telegram/Packer.xcodeproj/project.pbxproj b/Telegram/Packer.xcodeproj/project.pbxproj index ca59985a8..2f63e3a9e 100644 --- a/Telegram/Packer.xcodeproj/project.pbxproj +++ b/Telegram/Packer.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -60,157 +61,158 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -242,6 +244,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -279,127 +282,127 @@ isa = PBXGroup; children = ( 5520A59148EC5EC44EF0D3CD /* Packer.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -408,6 +411,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -483,7 +487,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0640; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */; compatibilityVersion = "Xcode 3.2"; @@ -554,6 +558,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -562,26 +567,26 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, /usr/local/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Packer.plist; INSTALL_DIR = "../Mac/$(CONFIGURATION)"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; @@ -612,10 +617,10 @@ "-stdlib=libc++", "-lcrypto", "-lssl", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", "-llzma", @@ -645,6 +650,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -654,26 +660,26 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, /usr/local/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Packer.plist; INSTALL_DIR = "../Mac/$(CONFIGURATION)"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; @@ -705,10 +711,10 @@ "-stdlib=libc++", "-lcrypto", "-lssl", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", "-llzma", @@ -726,6 +732,10 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/usr/local/Qt-5.5.0/lib", + ); OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OTHER_CFLAGS = ( "-pipe", @@ -765,6 +775,10 @@ DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/usr/local/Qt-5.5.0/lib", + ); OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OTHER_CFLAGS = ( "-pipe", diff --git a/Telegram/Packer.xcodeproj/qt_preprocess.mak b/Telegram/Packer.xcodeproj/qt_preprocess.mak index 2bb904e81..b9fdf82de 100644 --- a/Telegram/Packer.xcodeproj/qt_preprocess.mak +++ b/Telegram/Packer.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: Packer.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -48,5 +48,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: +compiler_clean: diff --git a/Telegram/PrepareLinux.sh b/Telegram/PrepareLinux.sh index 530fe2885..68c83d4f1 100755 --- a/Telegram/PrepareLinux.sh +++ b/Telegram/PrepareLinux.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then DevParam='-dev' fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi @@ -40,12 +41,17 @@ echo "Packer done!" if [ ! -d "./../Linux/Release/deploy" ]; then mkdir "./../Linux/Release/deploy" fi -echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ -cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram + +if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" +fi + +echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix.."; +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareLinux32.sh b/Telegram/PrepareLinux32.sh index ead20e14f..2ebb3ee8e 100755 --- a/Telegram/PrepareLinux32.sh +++ b/Telegram/PrepareLinux32.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then DevParam='-dev' fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi @@ -40,12 +41,17 @@ echo "Packer done!" if [ ! -d "./../Linux/Release/deploy" ]; then mkdir "./../Linux/Release/deploy" fi -echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ -cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram + +if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" +fi + +echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix.."; +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index e641309c6..584bd442e 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -12,17 +13,17 @@ echo "" echo "Preparing version $AppVersionStr$DevPostfix.." echo "" -if [ -d "./../Mac/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Mac/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi -if [ -f "./../Mac/Release/tupdate$AppVersion" ]; then +if [ -f "./../Mac/Release/tmacupd$AppVersion" ]; then echo "Update file for version $AppVersion already exists!" exit 1 fi @@ -73,19 +74,23 @@ hdiutil convert tsetup.dmg -format UDZO -imagekey zlib-level=9 -ov -o tsetup.$Ap cd ./../../Telegram cd ./../Mac/Release && ./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion $DevParam && cd ./../../Telegram -if [ ! -d "./../Mac/Release/deploy/" ]; then +if [ ! -d "./../Mac/Release/deploy" ]; then mkdir "./../Mac/Release/deploy" fi -echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr.."; -mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ +if [ ! -d "./../Mac/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Mac/Release/deploy/$AppVersionStrMajor" +fi + +echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr.."; +mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ rm ./../Mac/Release/Telegram.app/Contents/MacOS/Telegram rm ./../Mac/Release/Telegram.app/Contents/Frameworks/Updater rm -rf ./../Mac/Release/Telegram.app/Contents/_CodeSignature -mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ -mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg +mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 0ff3979ad..2e28a555b 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,11 @@ @echo OFF -set "AppVersion=8028" -set "AppVersionStrSmall=0.8.28" -set "AppVersionStr=0.8.28" -set "AppVersionStrFull=0.8.28.0" -set "DevChannel=1" +set "AppVersionStrMajor=0.8" +set "AppVersion=8051" +set "AppVersionStrSmall=0.8.51" +set "AppVersionStr=0.8.51" +set "AppVersionStrFull=0.8.51.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev @@ -23,8 +24,8 @@ echo. echo Preparing version %AppVersionStr%%DevPostfix%.. echo. -if exist ..\Win32\Deploy\deploy\%AppVersionStr%\ goto error_exist1 -if exist ..\Win32\Deploy\deploy\%AppVersionStr%.dev\ goto error_exist2 +if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%\ goto error_exist1 +if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%.dev\ goto error_exist2 if exist ..\Win32\Deploy\tupdate%AppVersion% goto error_exist3 set "PATH=%PATH%;C:\Program Files\7-Zip;C:\Program Files (x86)\Inno Setup 5" @@ -46,17 +47,18 @@ call Packer.exe -version %AppVersion% -path Telegram.exe -path Updater.exe %DevP if %errorlevel% neq 0 goto error1 if not exist deploy mkdir deploy -mkdir deploy\%AppVersionStr%%DevPostfix% -mkdir deploy\%AppVersionStr%%DevPostfix%\Telegram +if not exist deploy\%AppVersionStrMajor% mkdir deploy\%AppVersionStrMajor% +mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix% +mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram -move Telegram.exe deploy\%AppVersionStr%%DevPostfix%\Telegram\ -move Updater.exe deploy\%AppVersionStr%%DevPostfix%\ -move Telegram.pdb deploy\%AppVersionStr%%DevPostfix%\ -move Updater.pdb deploy\%AppVersionStr%%DevPostfix%\ -move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStr%%DevPostfix%\ -move tupdate%AppVersion% deploy\%AppVersionStr%%DevPostfix%\ +move Telegram.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram\ +move Updater.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move Telegram.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move Updater.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move tupdate%AppVersion% deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ -cd deploy\%AppVersionStr%%DevPostfix% +cd deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix% 7z a -mx9 tportable.%AppVersionStr%%DevPostfix%.zip Telegram\ if %errorlevel% neq 0 goto error2 @@ -64,11 +66,11 @@ echo . echo Version %AppVersionStr%%DevPostfix% is ready for deploy! echo . -cd ..\..\..\..\Telegram +cd ..\..\..\..\..\Telegram goto eof :error2 -cd ..\.. +cd ..\..\.. :error1 cd ..\..\Telegram echo ERROR occured! diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index d0852fc38..eb93c89ae 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Open Telegram"; "lng_minimize_to_tray" = "Minimize to tray"; "lng_quit_from_tray" = "Quit Telegram"; -"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\n\nIf this icon disappears from tray menu,\nyou can drag it back here from hidden icons."; +"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\nIf this icon disappears from tray menu,\nyou can drag it here from hidden icons."; "lng_month1" = "January"; "lng_month2" = "February"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Try now"; "lng_status_service_notifications" = "service notifications"; +"lng_status_support" = "support"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "has access to messages"; "lng_status_bot_not_reads_all" = "has no access to messages"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Group name"; "lng_dlg_create_group" = "Create"; "lng_no_contacts" = "You have no contacts"; +"lng_no_chats" = "Your chats will be here"; "lng_contacts_loading" = "Loading.."; "lng_contacts_not_found" = "No contacts found"; +"lng_dlg_search_chat" = "Search in this chat"; +"lng_dlg_search_for_messages" = "Search for messages"; "lng_settings_save" = "Save"; "lng_settings_upload" = "Set Profile Photo"; @@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Change username"; "lng_username_about" = "You can choose a username on Telegram.\nIf you do, other people will be able to find\nyou by this username and contact you\nwithout knowing your phone number.\n\nYou can use a-z, 0-9 and underscores.\nMinimum length is 5 characters."; -"lng_username_invalid" = "This name is invalid."; -"lng_username_occupied" = "This name is already occupied."; -"lng_username_too_short" = "This name is too short."; -"lng_username_bad_symbols" = "This name has bad symbols."; -"lng_username_available" = "This name is available."; +"lng_username_invalid" = "This username is invalid."; +"lng_username_occupied" = "This username is already occupied."; +"lng_username_too_short" = "This username is too short."; +"lng_username_bad_symbols" = "This username has bad symbols."; +"lng_username_available" = "This username is available."; "lng_username_not_found" = "User @{user} not found."; "lng_settings_section_contact_info" = "Contact info"; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Desktop notifications"; "lng_settings_show_name" = "Show sender's name"; "lng_settings_show_preview" = "Show message preview"; +"lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "Play sound"; "lng_notification_preview" = "You have a new message"; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Connection type:"; "lng_connection_auto_connecting" = "Default (connecting..)"; -"lng_connection_auto" = "Default ({type} used)"; -"lng_connection_http_proxy" = "HTTP with proxy"; -"lng_connection_tcp_proxy" = "TCP with proxy"; +"lng_connection_auto" = "Default ({transport} used)"; +"lng_connection_proxy_connecting" = "Connecting through proxy.."; +"lng_connection_proxy" = "{transport} with proxy"; "lng_connection_header" = "Connection type"; "lng_connection_auto_rb" = "Auto (TCP if available or HTTP)"; "lng_connection_http_proxy_rb" = "HTTP with custom http-proxy"; "lng_connection_tcp_proxy_rb" = "TCP with custom socks5-proxy"; +"lng_connection_try_ipv6" = "Try connecting through IPv6"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Port"; "lng_connection_user_ph" = "Username"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Do you want to terminate this session?"; "lng_settings_reset_button" = "Terminate"; "lng_settings_reset_done" = "Other sessions terminated"; +"lng_settings_ask_question" = "Ask a Question"; +"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; +"lng_settings_faq_button" = "Go to FAQ"; +"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Log Out"; "lng_sure_logout" = "Are you sure you want to log out?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "About"; "lng_profile_settings_section" = "Settings"; +"lng_profile_actions_section" = "Actions"; "lng_profile_bot_settings" = "Settings"; "lng_profile_bot_help" = "Help"; "lng_profile_participants_section" = "Members"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Edit"; "lng_profile_enable_notifications" = "Notifications"; "lng_profile_clear_history" = "Clear history"; +"lng_profile_delete_conversation" = "Delete conversation"; +"lng_profile_clear_and_exit" = "Delete and exit"; +"lng_profile_search_messages" = "Search for messages"; +"lng_profile_block_user" = "Block user"; +"lng_profile_unblock_user" = "Unblock user"; +"lng_profile_block_bot" = "Stop and block bot"; +"lng_profile_unblock_bot" = "Unblock bot"; "lng_profile_send_message" = "Send Message"; "lng_profile_share_contact" = "Share Contact"; "lng_profile_invite_to_group" = "Add to Group"; @@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "New Group"; "lng_failed_add_participant" = "Could not add user. Try again later."; +"lng_failed_add_not_mutual" = "Sorry, if a person left a group, only a\nmutual contact can bring them back\n(they need to have your phone\nnumber, and you need theirs)."; "lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?"; "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; +"lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone."; "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; -"lng_message_empty" = "(empty)"; +"lng_message_empty" = "Empty Message"; +"lng_media_unsupported" = "Media Unsupported"; "lng_action_add_user" = "{from} added {user}"; "lng_action_kick_user" = "{from} kicked {user}"; @@ -459,10 +482,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Write a message.."; "lng_record_cancel" = "Release outside this field to cancel"; "lng_empty_history" = ""; -"lng_willbe_history" = "Please select chat to start messaging"; +"lng_willbe_history" = "Please select a chat to start messaging"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "You"; "lng_bot_description" = "What can this bot do?"; +"lng_unblock_button" = "Unblock"; "lng_bot_start" = "Start"; "lng_bot_choose_group" = "Choose Group"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} is typing"; "lng_users_typing" = "{user} and {second_user} are typing"; "lng_many_typing" = "{count:_not_used_|# is|# are} typing"; +"lng_send_action_record_video" = "recording video"; +"lng_user_action_record_video" = "{user} is recording video"; +"lng_send_action_upload_video" = "sending video"; +"lng_user_action_upload_video" = "{user} is sending video"; +"lng_send_action_record_audio" = "recording audio"; +"lng_user_action_record_audio" = "{user} is recording audio"; +"lng_send_action_upload_audio" = "sending audio"; +"lng_user_action_upload_audio" = "{user} is sending audio"; +"lng_send_action_upload_photo" = "sending photo"; +"lng_user_action_upload_photo" = "{user} is sending photo"; +"lng_send_action_upload_file" = "sending file"; +"lng_user_action_upload_file" = "{user} is sending file"; +"lng_send_action_geo_location" = "picking location"; +"lng_user_action_geo_location" = "{user} is picking location"; +"lng_send_action_choose_contact" = "choosing contact"; +"lng_user_action_choose_contact" = "{user} is choosing contact"; "lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}"; "lng_maps_point" = "Location"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Open Audio"; "lng_context_save_audio" = "Save Audio As.."; "lng_context_pack_info" = "Pack Info"; +"lng_context_pack_add" = "Add Stickers"; "lng_context_open_file" = "Open File"; "lng_context_save_file" = "Save File As.."; "lng_context_forward_file" = "Forward File"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "This new version includes support for bots using the new bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations.\n\nLearn more at {blog_link}"; +"lng_new_version_text" = "— Block users from their profile page\n— Added support for Windows toast notifications\n— Fixed input methods on Linux (Fcitx and IBus)"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/Resources/numbers.txt b/Telegram/Resources/numbers.txt new file mode 100644 index 000000000..2cc6c13a9 --- /dev/null +++ b/Telegram/Resources/numbers.txt @@ -0,0 +1,231 @@ +1876;JM;Jamaica;1876 XXX XXXX;11; +1869;KN;Saint Kitts & Nevis;1869 XXX XXXX;11; +1868;TT;Trinidad & Tobago;1868 XXX XXXX;11; +1784;VC;Saint Vincent & the Grenadines;1784 XXX XXXX;11; +1767;DM;Dominica;1767 XXX XXXX;11; +1758;LC;Saint Lucia;1758 XXX XXXX;11; +1721;SX;Sint Maarten;1721 XXX XXXX;11; +1684;AS;American Samoa;1684 XXX XXXX;11; +1671;GU;Guam;1671 XXX XXXX;11; +1670;MP;Northern Mariana Islands;1670 XXX XXXX;11; +1664;MS;Montserrat;1664 XXX XXXX;11; +1649;TC;Turks & Caicos Islands;1649 XXX XXXX;11; +1473;GD;Grenada;1473 XXX XXXX;11; +1441;BM;Bermuda;1441 XXX XXXX;11; +1345;KY;Cayman Islands;1345 XXX XXXX;11; +1340;VI;US Virgin Islands;1340 XXX XXXX;11; +1284;VG;British Virgin Islands;1284 XXX XXXX;11; +1268;AG;Antigua & Barbuda;1268 XXX XXXX;11; +1264;AI;Anguilla;1264 XXX XXXX;11; +1246;BB;Barbados;1246 XXX XXXX;11; +1242;BS;Bahamas;1242 XXX XXXX;11; +998;UZ;Uzbekistan;998 XX XXXXXXX;12; +996;KG;Kyrgyzstan +995;GE;Georgia +994;AZ;Azerbaijan;994 XX XXX XX XX;12; +993;TM;Turkmenistan;993 XX XXXXXX;11; +992;TJ;Tajikistan +977;NP;Nepal +976;MN;Mongolia +975;BT;Bhutan +974;QA;Qatar +973;BH;Bahrain;973 XXXX XXXX;11; +972;IL;Israel;972 XX XXX XXXX;12; +971;AE;United Arab Emirates;971 XX XXX XXXX;12; +970;PS;Palestine;970 XXX XX XXXX;12; +968;OM;Oman;968 XXXX XXXX;11; +967;YE;Yemen;967 XXX XXX XXX;12; +966;SA;Saudi Arabia; +965;KW;Kuwait;965 XXXX XXXX;11; +964;IQ;Iraq;964 XXX XXX XXXX;13; +963;SY;Syria +962;JO;Jordan;962 X XXXX XXXX;12; +961;LB;Lebanon +960;MV;Maldives +886;TW;Taiwan +880;BD;Bangladesh +856;LA;Laos +855;KH;Cambodia +853;MO;Macau +852;HK;Hong Kong +850;KP;North Korea +692;MH;Marshall Islands +691;FM;Micronesia +690;TK;Tokelau +689;PF;French Polynesia +688;TV;Tuvalu +687;NC;New Caledonia +686;KI;Kiribati +685;WS;Samoa +683;NU;Niue +682;CK;Cook Islands +681;WF;Wallis & Futuna +680;PW;Palau +679;FJ;Fiji +678;VU;Vanuatu +677;SB;Solomon Islands +676;TO;Tonga +675;PG;Papua New Guinea +674;NR;Nauru +673;BN;Brunei Darussalam;673 XXX XXXX;10; +672;NF;Norfolk Island +670;TL;Timor-Leste +599;BQ;Bonaire, Sint Eustatius & Saba +599;CW;Curaçao +598;UY;Uruguay;598 XXXX XXXX;11; +597;SR;Suriname;597 XXX XXXX;10; +596;MQ;Martinique +595;PY;Paraguay;595 XXX XXX XXX;12; +594;GF;French Guiana +593;EC;Ecuador +592;GY;Guyana +591;BO;Bolivia;591 X XXX XXXX;11; +590;GP;Guadeloupe +509;HT;Haiti +508;PM;Saint Pierre & Miquelon +507;PA;Panama;507 XXXX XXXX;11; +506;CR;Costa Rica +505;NI;Nicaragua;505 XXXX XXXX;11; +504;HN;Honduras;504 XXXX XXXX;11; +503;SV;El Salvador;503 XXXX XXXX;11; +502;GT;Guatemala;502 X XXX XXXX;11; +501;BZ;Belize +500;FK;Falkland Islands +423;LI;Liechtenstein +421;SK;Slovakia +420;CZ;Czech Republic +389;MK;Macedonia +387;BA;Bosnia & Herzegovina +386;SI;Slovenia +385;HR;Croatia +382;ME;Montenegro +381;RS;Serbia;381 XX XXX XXXX;12; +380;UA;Ukraine;380 XX XXX XX XX;12; +378;SM;San Marino;378 XXX XXX XXXX;13; +377;MC;Monaco;377 XXXX XXXX;11; +376;AD;Andorra;376 XX XX XX;9; +375;BY;Belarus;375 XX XXX XXXX;12; +374;AM;Armenia;374 XX XXX XXX;11; +373;MD;Moldova;373 XX XXX XXX;11; +372;EE;Estonia; +371;LV;Latvia;371 XXX XXXXX;11; +370;LT;Lithuania;370 XXX XXXXX;11; +359;BG;Bulgaria; +358;FI;Finland; +357;CY;Cyprus;357 XXXX XXXX;11; +356;MT;Malta;356 XX XX XX XX;11; +355;AL;Albania;355 XX XXX XXXX;12; +354;IS;Iceland;354 XXX XXXX;10; +353;IE;Ireland;353 XX XXX XXXX;12; +352;LU;Luxembourg +351;PT;Portugal;351 X XXXX XXXX;12; +350;GI;Gibraltar;350 XXXX XXXX;11; +299;GL;Greenland;299 XXX XXX;9; +298;FO;Faroe Islands;298 XXX XXX;9; +297;AW;Aruba;297 XXX XXXX;10; +291;ER;Eritrea;291 X XXX XXX;10; +290;SH;Saint Helena;290 XX XXX;8; +269;KM;Comoros;269 XXX XXXX;10; +268;SZ;Swaziland;268 XXXX XXXX;11; +267;BW;Botswana;267 XX XXX XXX;11; +266;LS;Lesotho;266 XX XXX XXX;11; +265;MW;Malawi +264;NA;Namibia;264 XX XXX XXXX;12; +263;ZW;Zimbabwe;263 XX XXX XXXX;12; +262;RE;Réunion;262 XXX XXX XXX;12; +261;MG;Madagascar;261 XX XX XXX XX;12; +260;ZM;Zambia;260 XX XXX XXXX;12; +258;MZ;Mozambique;258 XX XXX XXXX;12; +257;BI;Burundi;257 XX XX XXXX;11; +256;UG;Uganda;256 XX XXX XXXX;12; +255;TZ;Tanzania;255 XX XXX XXXX;12; +254;KE;Kenya;254 XXX XXX XXX;12; +253;DJ;Djibouti;253 XX XX XX XX;11; +252;SO;Somalia;252 XX XXX XXX;11; +251;ET;Ethiopia;251 XX XXX XXXX;12; +250;RW;Rwanda;250 XXX XXX XXX;12; +249;SD;Sudan;249 XX XXX XXXX;12; +248;SC;Seychelles;248 X XX XX XX;10; +247;SH;Saint Helena;247 XXXX;7; +246;IO;Diego Garcia;246 XXX XXXX;10; +245;GW;Guinea-Bissau;245 XXX XXXX;10; +244;AO;Angola;244 XXX XXX XXX;12; +243;CD;Congo (Dem. Rep.);243 XX XXX XXXX;12; +242;CG;Congo (Rep.);242 XX XXX XXXX;12; +241;GA;Gabon;241 X XX XX XX;10; +240;GQ;Equatorial Guinea;240 XXX XXX XXX;12; +239;ST;São Tomé & Príncipe;239 XX XXXXX;10; +238;CV;Cape Verde;238 XXX XXXX;10; +237;CM;Cameroon;237 XXXX XXXX;11; +236;CF;Central African Rep.;236 XX XX XX XX;11; +235;TD;Chad;235 XX XX XX XX;11; +234;NG;Nigeria +233;GH;Ghana +232;SL;Sierra Leone;232 XX XXX XXX;11; +231;LR;Liberia; +230;MU;Mauritius; +229;BJ;Benin;229 XX XXX XXX;11; +228;TG;Togo;228 XX XXX XXX;11; +227;NE;Niger;227 XX XX XX XX;11; +226;BF;Burkina Faso;226 XX XX XX XX;11; +225;CI;Côte d`Ivoire;225 XX XXX XXX;11; +224;GN;Guinea;224 XXX XXX XXX;12; +223;ML;Mali;223 XXXX XXXX;11; +222;MR;Mauritania;222 XXXX XXXX;11; +221;SN;Senegal;221 XX XXX XXXX;12; +220;GM;Gambia;220 XXX XXXX;10; +218;LY;Libya;218 XX XXX XXXX;12; +216;TN;Tunisia;216 XX XXX XXX;11; +213;DZ;Algeria;213 XXX XX XX XX;12; +212;MA;Morocco;212 XX XXX XXXX;12; +211;SS;South Sudan;211 XX XXX XXXX;12; +98;IR;Iran;98 XXX XXX XXXX;12; +95;MM;Myanmar; +94;LK;Sri Lanka;94 XX XXX XXXX;11; +93;AF;Afghanistan;93 XXX XXX XXX;11; +92;PK;Pakistan;92 XXX XXX XXXX;12; +91;IN;India;91 XXXXX XXXXX;12; +90;TR;Turkey;90 XXX XXX XXXX;12 +86;CN;China;86 XXX XXXX XXXX;13; +84;VN;Vietnam; +82;KR;South Korea; +81;JP;Japan;81 XX XXXX XXXX;12; +66;TH;Thailand;66 X XXXX XXXX;11; +65;SG;Singapore;65 XXXX XXXX;10; +64;NZ;New Zealand; +63;PH;Philippines;63 XXX XXX XXXX;12; +62;ID;Indonesia; +61;AU;Australia;61 XXX XXX XXX;11; +60;MY;Malaysia; +58;VE;Venezuela;58 XXX XXX XXXX;12; +57;CO;Colombia;57 XXX XXX XXXX;12; +56;CL;Chile;56 X XXXX XXXX;11; +55;BR;Brazil;55 XX XXXXX XXXX;13; +54;AR;Argentina; +53;CU;Cuba;53 XXXX XXXX;10; +52;MX;Mexico; +51;PE;Peru;51 XXX XXX XXX;11; +49;DE;Germany;49 XXX XXXXXXXX;13; +48;PL;Poland;48 XX XXX XXXX;11; +47;NO;Norway;47 XXXX XXXX;10; +46;SE;Sweden;46 XX XXX XXXX;11; +45;DK;Denmark;45 XXXX XXXX;10; +44;GB;United Kingdom;44 XXXX XXXXXX;12; +43;AT;Austria; +41;CH;Switzerland;41 XX XXX XXXX;11; +40;RO;Romania;40 XXX XXX XXX;11; +39;IT;Italy;39 XXX XXX XXXX;12; +36;HU;Hungary;36 XX XXX XXXX;11; +34;ES;Spain;34 XXX XXX XXX;11; +33;FR;France;33 X XX XX XX XX;11; +32;BE;Belgium;32 XXX XX XX XX;11; +31;NL;Netherlands;31 X XX XX XX XX;11; +30;GR;Greece;30 XX XXXX XXXX;12; +27;ZA;South Africa;27 XX XXX XXXX;11; +20;EG;Egypt;20 XX XXX XXXX;11; +7;RU;Russian Federation;7 XXX XXX XX XX;11; +7;KZ;Kazakhstan;7 XXX XXX XX XX;11 +1;US;USA;1 XXX XXX XXXX;11; +1;PR;Puerto Rico;1 XXX XXX XXXX;11; +1;DO;Dominican Rep.;1 XXX XXX XXXX;11; +1;CA;Canada;1 XXX XXX XXXX;11; \ No newline at end of file diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index ead515ffe..d8c0f33f0 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -82,7 +82,15 @@ defaultInputField: InputField { height: 32px; } +dialogsSearchField: InputField(defaultInputField) { + textMargins: margins(34px, 5px, 34px, 5px); + iconSprite: sprite(227px, 21px, 24px, 24px); + iconPosition: point(6px, 5px); + + width: 240px; + height: 34px; +} titleBG: #6389a8; titleColor: #0f8dcc;//rgb(20, 136, 210); titleHeight: 39px; @@ -894,6 +902,8 @@ defaultTextStyle: textStyle { lineHeight: 0px; } serviceTextStyle: textStyle(defaultTextStyle) { + lnkFlags: msgServiceFont; + lnkOverFlags: font(fsize semibold underline); lnkColor: msgServiceColor; lnkDownColor: msgServiceColor; selectBg: msgServiceSelectBg; @@ -939,6 +949,8 @@ mediaDocOutImg: sprite(6px, 146px, 48px, 48px); mediaDocInImg: sprite(56px, 146px, 48px, 48px); mediaAudioOutImg: sprite(106px, 146px, 48px, 48px); mediaAudioInImg: sprite(156px, 146px, 48px, 48px); +mediaMusicOutImg: sprite(322px, 345px, 48px, 48px); +mediaMusicInImg: sprite(322px, 395px, 48px, 48px); mediaPlayOutImg: sprite(122px, 341px, 48px, 48px); mediaPlayInImg: sprite(172px, 341px, 48px, 48px); mediaPauseOutImg: sprite(222px, 341px, 48px, 48px); @@ -987,13 +999,18 @@ btnSend: flatButton(btnDefFlat) { width: -32px; height: 46px; - textTop: 13px; - overTextTop: 13px; - downTextTop: 14px; + textTop: 12px; + overTextTop: 12px; + downTextTop: 13px; font: font(16px); overFont: font(16px); } +btnUnblock: flatButton(btnSend) { + color: #d15948; + overColor: #d15948; + downColor: #db6352; +} btnAttachDocument: iconedButton(btnDefIconed) { icon: sprite(218px, 68px, 24px, 24px); @@ -1011,26 +1028,32 @@ btnAttachPhoto: iconedButton(btnAttachDocument) { } btnAttachEmoji: iconedButton(btnAttachDocument) { overBgColor: white; - icon: sprite(363px, 344px, 21px, 22px); + icon: sprite(374px, 344px, 21px, 22px); iconPos: point(6px, 12px); - downIcon: sprite(363px, 344px, 21px, 22px); + downIcon: sprite(374px, 344px, 21px, 22px); downIconPos: point(6px, 12px); width: 33px; } btnBotKbShow: iconedButton(btnAttachEmoji) { - icon: sprite(375px, 74px, 21px, 16px); - iconPos: point(6px, 16px); - downIcon: sprite(375px, 74px, 21px, 16px); - downIconPos: point(6px, 16px); + icon: sprite(375px, 74px, 21px, 21px); + iconPos: point(6px, 12px); + downIcon: sprite(375px, 74px, 21px, 21px); + downIconPos: point(6px, 12px); +} +btnBotCmdStart: iconedButton(btnAttachEmoji) { + icon: sprite(354px, 74px, 21px, 21px); + iconPos: point(6px, 12px); + downIcon: sprite(354px, 74px, 21px, 21px); + downIconPos: point(6px, 12px); } btnBotKbHide: iconedButton(btnAttachEmoji) { - icon: sprite(352px, 74px, 23px, 14px); + icon: sprite(373px, 95px, 23px, 14px); iconPos: point(5px, 17px); - downIcon: sprite(352px, 74px, 23px, 14px); + downIcon: sprite(373px, 95px, 23px, 14px); downIconPos: point(5px, 17px); } -btnRecordAudio: sprite(363px, 366px, 16px, 24px); +btnRecordAudio: sprite(379px, 390px, 16px, 24px); btnRecordAudioActive: sprite(379px, 366px, 16px, 24px); recordSignalColor: #f17077; recordSignalMin: 5px; @@ -1166,7 +1189,7 @@ notifyTextTop: 7px; notifySlowHideFunc: transition(easeInCirc); notifyWaitShortHide: 0; notifyWaitLongHide: 20000; -notifyFastAnim: 100; +notifyFastAnim: 150; notifyFastAnimFunc: transition(linear); notifyWidth: 316px; notifyHeight: 80px; @@ -1553,30 +1576,22 @@ stickersScroll: flatScroll(newScroll) { emojiScroll: flatScroll(newScroll) { deltat: 48px; } -emojiRecent: sprite(0px, 196px, 21px, 22px); -emojiRecentOver: sprite(287px, 220px, 21px, 22px); -emojiRecentActive: sprite(287px, 242px, 21px, 22px); -emojiPeople: sprite(21px, 196px, 21px, 22px); -emojiPeopleOver: sprite(308px, 220px, 21px, 22px); -emojiPeopleActive: sprite(308px, 242px, 21px, 22px); -emojiNature: sprite(42px, 196px, 21px, 22px); -emojiNatureOver: sprite(245px, 264px, 21px, 22px); +emojiRecentOver: sprite(0px, 196px, 21px, 22px); +emojiRecentActive: sprite(245px, 264px, 21px, 22px); +emojiPeopleOver: sprite(21px, 196px, 21px, 22px); +emojiPeopleActive: sprite(266px, 264px, 21px, 22px); +emojiNatureOver: sprite(42px, 196px, 21px, 22px); emojiNatureActive: sprite(245px, 286px, 21px, 22px); -emojiFood: sprite(63px, 196px, 21px, 22px); -emojiFoodOver: sprite(266px, 264px, 21px, 22px); +emojiFoodOver: sprite(63px, 196px, 21px, 22px); emojiFoodActive: sprite(266px, 286px, 21px, 22px); -emojiCelebration: sprite(84px, 196px, 21px, 22px); -emojiCelebrationOver: sprite(287px, 264px, 21px, 22px); +emojiCelebrationOver: sprite(84px, 196px, 21px, 22px); emojiCelebrationActive: sprite(287px, 286px, 21px, 22px); -emojiActivity: sprite(126px, 196px, 21px, 22px); -emojiActivityOver: sprite(321px, 344px, 21px, 22px); -emojiActivityActive: sprite(321px, 366px, 21px, 22px); -emojiTravel: sprite(105px, 196px, 21px, 22px); -emojiTravelOver: sprite(308px, 264px, 21px, 22px); +emojiActivityOver: sprite(126px, 196px, 21px, 22px); +emojiActivityActive: sprite(287px, 264px, 21px, 22px); +emojiTravelOver: sprite(105px, 196px, 21px, 22px); emojiTravelActive: sprite(308px, 286px, 21px, 22px); -emojiObjects: sprite(147px, 196px, 21px, 22px); -emojiObjectsOver: sprite(342px, 344px, 21px, 22px); -emojiObjectsActive: sprite(342px, 366px, 21px, 22px); +emojiObjectsOver: sprite(147px, 196px, 21px, 22px); +emojiObjectsActive: sprite(308px, 264px, 21px, 22px); emojiPanCategories: #f7f7f7; @@ -1585,7 +1600,7 @@ rbEmoji: flatCheckbox { bgColor: emojiPanCategories; disColor: emojiPanCategories; - width: 36px; + width: 42px; height: 46px; textTop: 0px; @@ -1596,82 +1611,83 @@ rbEmoji: flatCheckbox { cursor: cursor(pointer); disabledCursor: cursor(default); - imagePos: point(8px, 12px); + imagePos: point(11px, 12px); } rbEmojiRecent: flatCheckbox(rbEmoji) { - imageRect: emojiRecent; + imageRect: emojiRecentOver; chkImageRect: emojiRecentActive; overImageRect: emojiRecentOver; chkOverImageRect: emojiRecentActive; - disImageRect: emojiRecent; + disImageRect: emojiRecentOver; chkDisImageRect: emojiRecentActive; } rbEmojiPeople: flatCheckbox(rbEmoji) { - imageRect: emojiPeople; + imageRect: emojiPeopleOver; chkImageRect: emojiPeopleActive; overImageRect: emojiPeopleOver; chkOverImageRect: emojiPeopleActive; - disImageRect: emojiPeople; + disImageRect: emojiPeopleOver; chkDisImageRect: emojiPeopleActive; } rbEmojiNature: flatCheckbox(rbEmoji) { - imageRect: emojiNature; + imageRect: emojiNatureOver; chkImageRect: emojiNatureActive; overImageRect: emojiNatureOver; chkOverImageRect: emojiNatureActive; - disImageRect: emojiNature; + disImageRect: emojiNatureOver; chkDisImageRect: emojiNatureActive; } rbEmojiFood: flatCheckbox(rbEmoji) { - imageRect: emojiFood; + imageRect: emojiFoodOver; chkImageRect: emojiFoodActive; overImageRect: emojiFoodOver; chkOverImageRect: emojiFoodActive; - disImageRect: emojiFood; + disImageRect: emojiFoodOver; chkDisImageRect: emojiFoodActive; } rbEmojiCelebration: flatCheckbox(rbEmoji) { - imageRect: emojiCelebration; + imageRect: emojiCelebrationOver; chkImageRect: emojiCelebrationActive; overImageRect: emojiCelebrationOver; chkOverImageRect: emojiCelebrationActive; - disImageRect: emojiCelebration; + disImageRect: emojiCelebrationOver; chkDisImageRect: emojiCelebrationActive; } rbEmojiActivity: flatCheckbox(rbEmoji) { - imageRect: emojiActivity; + imageRect: emojiActivityOver; chkImageRect: emojiActivityActive; overImageRect: emojiActivityOver; chkOverImageRect: emojiActivityActive; - disImageRect: emojiActivity; + disImageRect: emojiActivityOver; chkDisImageRect: emojiActivityActive; } rbEmojiTravel: flatCheckbox(rbEmoji) { - imageRect: emojiTravel; + imageRect: emojiTravelOver; chkImageRect: emojiTravelActive; overImageRect: emojiTravelOver; chkOverImageRect: emojiTravelActive; - disImageRect: emojiTravel; + disImageRect: emojiTravelOver; chkDisImageRect: emojiTravelActive; } rbEmojiObjects: flatCheckbox(rbEmoji) { - imageRect: emojiObjects; + imageRect: emojiObjectsOver; chkImageRect: emojiObjectsActive; overImageRect: emojiObjectsOver; chkOverImageRect: emojiObjectsActive; - disImageRect: emojiObjects; + disImageRect: emojiObjectsOver; chkDisImageRect: emojiObjectsActive; } -emojiPanPadding: 10px; -emojiPanSize: size(39px, 35px); -emojiPanFullSize: size(300px, 321px); +emojiPanPadding: 12px; +emojiPanSize: size(45px, 41px); +emojiPanWidth: 345px; +emojiPanMaxHeight: 366px; emojiPanDuration: 200; emojiPanHover: #f0f4f7; emojiPanHeader: 42px; emojiPanHeaderFont: font(fsize semibold); emojiPanHeaderColor: #999; -emojiPanHeaderLeft: 17px; +emojiPanHeaderLeft: 22px; emojiPanHeaderTop: 12px; emojiPanHeaderBg: #fffffff2; @@ -1685,7 +1701,7 @@ emojiSwitchStickers: sprite(318px, 328px, 8px, 12px); emojiSwitchEmoji: sprite(310px, 328px, 8px, 12px); emojiSwitchColor: #42a8db; -stickerPanSize: size(55px, 55px); +stickerPanSize: size(64px, 64px); stickerPanPadding: 11px; stickerPanDelete: sprite(123px, 132px, 12px, 12px); stickerPanDeleteOpacity: 0.5; @@ -1744,11 +1760,11 @@ mvControlMargin: 0px; mvControlSize: 90px; mvIconSize: size(60px, 56px); -mvLeft: sprite(320px, 400px, 12px, 22px); -mvRight: sprite(332px, 400px, 12px, 22px); -mvClose: sprite(344px, 400px, 18px, 18px); -mvSave: sprite(362px, 400px, 14px, 19px); -mvMore: sprite(376px, 400px, 5px, 21px); +mvLeft: sprite(320px, 445px, 12px, 22px); +mvRight: sprite(332px, 445px, 12px, 22px); +mvClose: sprite(344px, 445px, 18px, 18px); +mvSave: sprite(362px, 445px, 14px, 19px); +mvMore: sprite(376px, 445px, 5px, 21px); mvDropdown: dropdown(dropdownDef) { shadow: sprite(0px, 0px, 0px, 0px); @@ -1957,8 +1973,6 @@ mentionFg: #777; mentionFgOver: #707070; mentionFgActive: #0080c0; mentionFgOverActive: #0077b3; -botCommandFont: font(fsize semibold); -botDescFont: font(fsize italic); sessionsHeight: 440px; sessionHeight: 70px; @@ -1989,3 +2003,36 @@ webPagePhotoSize: 100px; webPagePhotoDelta: 8px; botDescSkip: 8px; + +suppressAll: 0.2; +suppressSong: 0.05; + +playerHeight: 44px; +playerBg: #e4e9ef; +playerFg: #54748f; +playerTimeFg: #a4afba; +playerLineHeight: 3px; +playerMoverSize: size(2px, 7px); +playerLineActive: #6389a8; +playerLineInactive: #bac7d4; +playerSkip: 8px; +playerNameStyle: textStyle(defaultTextStyle) { + lnkColor: #6389a8; + lnkDownColor: #6389a8; + lnkFlags: font(fsize semibold); + lnkOverFlags: font(fsize semibold); +} +playerPlay: sprite(377px, 109px, 19px, 22px); +playerPause: sprite(379px, 131px, 17px, 20px); +playerNext: sprite(374px, 151px, 22px, 14px); +playerPrev: sprite(374px, 165px, 22px, 14px); +playerClose: sprite(361px, 97px, 12px, 12px); +playerFull: sprite(365px, 109px, 12px, 12px); +playerRepeat: sprite(365px, 121px, 12px, 14px); +playerVolume: sprite(352px, 179px, 44px, 12px); +playerInactiveOpacity: 0.8; +playerUnavailableOpacity: 0.3; +playerDuration: 200; + +playlistHoverBg: #f2f2f2; +playlistPadding: 10px; diff --git a/Telegram/SourceFiles/_other/genstyles.cpp b/Telegram/SourceFiles/_other/genstyles.cpp index f4797d0a8..5f705afb5 100644 --- a/Telegram/SourceFiles/_other/genstyles.cpp +++ b/Telegram/SourceFiles/_other/genstyles.cpp @@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "genstyles.h" #include +#include #ifdef Q_OS_WIN Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) @@ -1345,6 +1346,12 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr QCoreApplication::exit(1); return false; } + QString numbers_cpp = QString(styles_cpp).replace("style_auto.cpp", "numbers.cpp"); + if (numbers_cpp == styles_cpp) { + cout << "Bad output file name '" << numbers_cpp.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } QFile f(styles_in); if (!f.open(QIODevice::ReadOnly)) { @@ -1353,6 +1360,20 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr return false; } + QString numbers_in = QString(styles_in).replace("style.txt", "numbers.txt"); + if (numbers_in == styles_in) { + cout << "Bad input file name '" << numbers_in.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } + + QFile fnum(numbers_in); + if (!fnum.open(QIODevice::ReadOnly)) { + cout << "Could not open numbers input file '" << numbers_in.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } + QImage sprites[variantsCount]; int widths[variantsCount] = { 0 }; variantSprites = sprites; @@ -1854,6 +1875,137 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!"); if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!"); } + + QMap > numberRules; + QList numlines = fnum.readAll().split('\n'); + for (int i = 0, l = numlines.size(); i < l; ++i) { + QList strs = numlines.at(i).split(';'); + if (strs.isEmpty()) continue; + + QString code = QString::fromLatin1(strs.at(0)).trimmed(); + if (code.isEmpty() || QRegularExpression("[^0-9]").match(code).hasMatch()) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + + if (strs.size() < 5) { + numberRules.insert(code, QVector()); + } else { + QString lenstr = QString::fromLatin1(strs.at(4)).trimmed(), pattern = QString::fromLatin1(strs.at(3)).trimmed(); + if (QRegularExpression("[^0-9]").match(lenstr).hasMatch() || !pattern.startsWith(code + ' ')) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + QStringList lst = pattern.mid(code.size() + 1).split(' '); + int len = lenstr.toInt(), sum = code.size(); + QVector result; + for (int j = 0, c = lst.size(); j < c; ++j) { + if (lst.at(j).isEmpty()) continue; + if (QRegularExpression("[^X]").match(lst.at(j)).hasMatch()) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + result.push_back(lst.at(j).size()); + sum += lst.at(j).size(); + } + if (sum != len) { + throw Exception("Bad length in number.txt: " + numlines.at(i)); + } + numberRules.insert(code, result); + } + } + + QByteArray numText; + { + QTextStream tnum(&numText); + tnum << "\ +/*\n\ +Created from \'/Resources/style.txt\' by \'/MetaStyle\' project\n\ +\n\ +WARNING! All changes made in this file will be lost!\n\ +\n\ +This file is part of Telegram Desktop,\n\ +the official desktop version of Telegram messaging app, see https://telegram.org\n\ +\n\ +Telegram Desktop is free software: you can redistribute it and/or modify\n\ +it under the terms of the GNU General Public License as published by\n\ +the Free Software Foundation, either version 3 of the License, or\n\ +(at your option) any later version.\n\ +\n\ +It is distributed in the hope that it will be useful,\n\ +but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ +GNU General Public License for more details.\n\ +\n\ +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ +Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +*/\n"; + tnum << "#include \"stdafx.h\"\n#include \"numbers.h\"\n\n"; + tnum << "QVector phoneNumberParse(const QString &number) {\n"; + tnum << "\tQVector result;\n\n"; + tnum << "\tint32 len = number.size();\n"; + tnum << "\tif (len > 0) switch (number.at(0).unicode()) {\n"; + QString already; + for (QMap >::const_iterator i = numberRules.cend(), e = numberRules.cbegin(); i != e;) { + --i; + QString k = i.key(); + bool onlyLastChanged = true; + while (!already.isEmpty() && (already.size() > k.size() || !already.endsWith(k.at(already.size() - 1)))) { + if (!onlyLastChanged) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; + tnum << QString("\t").repeated(1 + already.size()) << "return result;\n"; + } + already = already.mid(0, already.size() - 1); + onlyLastChanged = false; + } + if (already == k) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; + } else { + bool onlyFirstCheck = true; + while (already.size() < k.size()) { + if (!onlyFirstCheck) tnum << QString("\t").repeated(1 + already.size()) << "if (len > " << already.size() << ") switch (number.at(" << already.size() << ").unicode()) {\n"; + tnum << QString("\t").repeated(1 + already.size()) << "case '" << k.at(already.size()).toLatin1() << "':\n"; + already.push_back(k.at(already.size())); + onlyFirstCheck = false; + } + } + if (i.value().isEmpty()) { + tnum << QString("\t").repeated(1 + already.size()) << "return QVector(1, " << k.size() << ");\n"; + } else { + tnum << QString("\t").repeated(1 + already.size()) << "result.reserve(" << (i.value().size() + 1) << ");\n"; + tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << k.size() << ");\n"; + for (int j = 0, l = i.value().size(); j < l; ++j) { + tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << i.value().at(j) << ");\n"; + } + tnum << QString("\t").repeated(1 + already.size()) << "return result;\n"; + } + } + bool onlyLastChanged = true; + while (!already.isEmpty()) { + if (!onlyLastChanged) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; +// tnum << QString("\t").repeated(1 + already.size()) << "\return result;\n"; + } + already = already.mid(0, already.size() - 1); + onlyLastChanged = false; + } + tnum << "\t}\n\n"; + tnum << "\treturn result;\n"; + tnum << "}\n"; + } + QFile num(numbers_cpp); + bool write_num = true; + if (num.open(QIODevice::ReadOnly)) { + QByteArray wasNum = num.readAll(); + if (wasNum.size() == numText.size()) { + if (!memcmp(wasNum.constData(), numText.constData(), numText.size())) { + write_num = false; + } + } + num.close(); + } + if (write_num) { + cout << "Numbers compiled, writing..\n"; + if (!num.open(QIODevice::WriteOnly)) throw Exception("Could not open numbers.cpp for writing!"); + if (num.write(numText) != numText.size()) throw Exception("Could not open numbers.cpp for writing!"); + } } catch (exception &e) { cout << e.what() << "\n"; QCoreApplication::exit(1); diff --git a/Telegram/SourceFiles/_other/packer.h b/Telegram/SourceFiles/_other/packer.h index f06997250..071c6f984 100644 --- a/Telegram/SourceFiles/_other/packer.h +++ b/Telegram/SourceFiles/_other/packer.h @@ -23,6 +23,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include #include +#include #include diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 56fcd6f5d..a0fe57772 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -83,91 +83,6 @@ void ApiWrap::requestReplyTo(HistoryReply *reply, MsgId to) { if (!req.req) _replyToTimer.start(1); } -void ApiWrap::requestFullPeer(PeerData *peer) { - if (!peer || _fullRequests.contains(peer)) return; - mtpRequestId req; - if (peer->chat) { - req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); - } else { - req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); - } - _fullRequests.insert(peer, req); -} - -void ApiWrap::requestWebPageDelayed(WebPageData *page) { - if (page->pendingTill <= 0) return; - _webPagesPending.insert(page, 0); - int32 left = (page->pendingTill - unixtime()) * 1000; - if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) { - _webPagesTimer.start((left < 0 ? 0 : left) + 1); - } -} - -void ApiWrap::clearWebPageRequest(WebPageData *page) { - _webPagesPending.remove(page); - if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop(); -} - -void ApiWrap::clearWebPageRequests() { - _webPagesPending.clear(); - _webPagesTimer.stop(); -} - -void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { - const MTPDmessages_chatFull &d(result.c_messages_chatFull()); - const MTPDchatFull &f(d.vfull_chat.c_chatFull()); - App::feedUsers(d.vusers); - App::feedChats(d.vchats); - App::feedParticipants(f.vparticipants); - const QVector &v(f.vbot_info.c_vector().v); - for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) { - switch (i->type()) { - case mtpc_botInfo: { - const MTPDbotInfo &b(i->c_botInfo()); - UserData *user = App::userLoaded(b.vuser_id.v); - if (user) { - user->setBotInfo(*i); - emit fullPeerUpdated(user); - } - } break; - } - } - PhotoData *photo = App::feedPhoto(f.vchat_photo); - ChatData *chat = peer->asChat(); - if (chat) { - if (photo) { - chat->photoId = photo->id; - photo->chat = chat; - } - chat->invitationUrl = (f.vexported_invite.type() == mtpc_chatInviteExported) ? qs(f.vexported_invite.c_chatInviteExported().vlink) : QString(); - } - - App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), f.vnotify_settings); - - _fullRequests.remove(peer); - emit fullPeerUpdated(peer); -} - -void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) { - const MTPDuserFull &d(result.c_userFull()); - App::feedUsers(MTP_vector(1, d.vuser)); - App::feedPhoto(d.vprofile_photo); - App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link); - App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings); - - peer->asUser()->setBotInfo(d.vbot_info); - - _fullRequests.remove(peer); - emit fullPeerUpdated(peer); -} - -bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) { - if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; - - _fullRequests.remove(peer); - return true; -} - void ApiWrap::resolveReplyTo() { if (_replyToRequests.isEmpty()) return; @@ -186,34 +101,6 @@ void ApiWrap::resolveReplyTo() { } } -void ApiWrap::resolveWebPages() { - QVector ids; - const WebPageItems &items(App::webPageItems()); - ids.reserve(_webPagesPending.size()); - int32 t = unixtime(), m = INT_MAX; - for (WebPagesPending::const_iterator i = _webPagesPending.cbegin(), e = _webPagesPending.cend(); i != e; ++i) { - if (i.value()) continue; - if (i.key()->pendingTill <= t) { - WebPageItems::const_iterator j = items.constFind(i.key()); - if (j != items.cend() && !j.value().isEmpty()) { - ids.push_back(MTP_int(j.value().begin().key()->id)); - } - } else { - m = qMin(m, i.key()->pendingTill - t); - } - } - if (!ids.isEmpty()) { - mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector(ids)), rpcDone(&ApiWrap::gotWebPages)); - for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend(); ++i) { - if (i.value()) continue; - if (i.key()->pendingTill <= t) { - i.value() = req; - } - } - } - if (m < INT_MAX) _webPagesTimer.start(m * 1000); -} - void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { switch (msgs.type()) { case mtpc_messages_messages: @@ -244,6 +131,324 @@ void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { } } +void ApiWrap::requestFullPeer(PeerData *peer) { + if (!peer || _fullPeerRequests.contains(peer)) return; + + mtpRequestId req; + if (peer->chat) { + req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer)); + } else { + req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer)); + } + _fullPeerRequests.insert(peer, req); +} + +void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { + const MTPDmessages_chatFull &d(result.c_messages_chatFull()); + const MTPDchatFull &f(d.vfull_chat.c_chatFull()); + + const QVector &vc(d.vchats.c_vector().v); + bool badVersion = (!vc.isEmpty() && vc.at(0).type() == mtpc_chat && vc.at(0).c_chat().vversion.v < peer->asChat()->version); + + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); + App::feedParticipants(f.vparticipants, false, false); + const QVector &v(f.vbot_info.c_vector().v); + for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) { + switch (i->type()) { + case mtpc_botInfo: { + const MTPDbotInfo &b(i->c_botInfo()); + UserData *user = App::userLoaded(b.vuser_id.v); + if (user) { + user->setBotInfo(*i); + App::clearPeerUpdated(user); + emit fullPeerUpdated(user); + } + } break; + } + } + PhotoData *photo = App::feedPhoto(f.vchat_photo); + ChatData *chat = peer->asChat(); + if (chat) { + if (photo) { + chat->photoId = photo->id; + photo->chat = chat; + } else { + chat->photoId = 0; + } + chat->invitationUrl = (f.vexported_invite.type() == mtpc_chatInviteExported) ? qs(f.vexported_invite.c_chatInviteExported().vlink) : QString(); + } + + App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), f.vnotify_settings); + + _fullPeerRequests.remove(peer); + if (badVersion) { + peer->asChat()->version = vc.at(0).c_chat().vversion.v; + requestPeer(peer); + } + App::clearPeerUpdated(peer); + emit fullPeerUpdated(peer); + App::emitPeerUpdated(); +} + +void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) { + const MTPDuserFull &d(result.c_userFull()); + App::feedUsers(MTP_vector(1, d.vuser), false); + App::feedPhoto(d.vprofile_photo); + App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link, false); + App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings); + + peer->asUser()->setBotInfo(d.vbot_info); + peer->asUser()->blocked = d.vblocked.v ? UserIsBlocked : UserIsNotBlocked; + + _fullPeerRequests.remove(peer); + App::clearPeerUpdated(peer); + emit fullPeerUpdated(peer); + App::emitPeerUpdated(); +} + +bool ApiWrap::gotPeerFullFailed(PeerData *peer, const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + _fullPeerRequests.remove(peer); + return true; +} + +void ApiWrap::requestPeer(PeerData *peer) { + if (!peer || _fullPeerRequests.contains(peer) || _peerRequests.contains(peer)) return; + + mtpRequestId req; + if (peer->chat) { + req = MTP::send(MTPmessages_GetChats(MTP_vector(1, MTP_int(App::chatFromPeer(peer->id)))), rpcDone(&ApiWrap::gotChat, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + } else { + req = MTP::send(MTPusers_GetUsers(MTP_vector(1, peer->asUser()->inputUser)), rpcDone(&ApiWrap::gotUser, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + } + _peerRequests.insert(peer, req); +} + +void ApiWrap::requestPeers(const QList &peers) { + QVector chats; + QVector users; + chats.reserve(peers.size()); + users.reserve(peers.size()); + for (QList::const_iterator i = peers.cbegin(), e = peers.cend(); i != e; ++i) { + if (!*i || _fullPeerRequests.contains(*i) || _peerRequests.contains(*i)) continue; + if ((*i)->chat) { + chats.push_back(MTP_int(App::chatFromPeer((*i)->id))); + } else { + users.push_back((*i)->asUser()->inputUser); + } + } + if (!chats.isEmpty()) MTP::send(MTPmessages_GetChats(MTP_vector(chats)), rpcDone(&ApiWrap::gotChats)); + if (!users.isEmpty()) MTP::send(MTPusers_GetUsers(MTP_vector(users)), rpcDone(&ApiWrap::gotUsers)); +} + +void ApiWrap::gotChat(PeerData *peer, const MTPmessages_Chats &result) { + _peerRequests.remove(peer); + + if (result.type() == mtpc_messages_chats) { + const QVector &v(result.c_messages_chats().vchats.c_vector().v); + bool badVersion = (!v.isEmpty() && v.at(0).type() == mtpc_chat && v.at(0).c_chat().vversion.v < peer->asChat()->version); + ChatData *chat = App::feedChats(result.c_messages_chats().vchats); + if (chat == peer) { + if (badVersion) { + peer->asChat()->version = v.at(0).c_chat().vversion.v; + requestPeer(peer); + } + } + } +} + +void ApiWrap::gotUser(PeerData *peer, const MTPVector &result) { + _peerRequests.remove(peer); + + UserData *user = App::feedUsers(result); + if (user == peer) { + } +} + +void ApiWrap::gotChats(const MTPmessages_Chats &result) { + App::feedChats(result.c_messages_chats().vchats); +} + +void ApiWrap::gotUsers(const MTPVector &result) { + App::feedUsers(result); +} + +bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + _peerRequests.remove(peer); + return true; +} + +void ApiWrap::scheduleStickerSetRequest(uint64 setId, uint64 access) { + if (!_stickerSetRequests.contains(setId)) { + _stickerSetRequests.insert(setId, qMakePair(access, 0)); + } +} + +void ApiWrap::requestStickerSets() { + for (QMap >::iterator i = _stickerSetRequests.begin(), j = i, e = _stickerSetRequests.end(); i != e; i = j) { + if (i.value().second) continue; + + ++j; + int32 wait = (j == e) ? 0 : 10; + i.value().second = MTP::send(MTPmessages_GetStickerSet(MTP_inputStickerSetID(MTP_long(i.key()), MTP_long(i.value().first))), rpcDone(&ApiWrap::gotStickerSet, i.key()), rpcFail(&ApiWrap::gotStickerSetFail, i.key()), 0, wait); + } +} + +void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) { + _stickerSetRequests.remove(setId); + + if (result.type() != mtpc_messages_stickerSet) return; + const MTPDmessages_stickerSet &d(result.c_messages_stickerSet()); + + if (d.vset.type() != mtpc_stickerSet) return; + const MTPDstickerSet &s(d.vset.c_stickerSet()); + + StickerSets &sets(cRefStickerSets()); + StickerSets::iterator it = sets.find(setId); + if (it == sets.cend()) return; + + it->access = s.vaccess_hash.v; + it->hash = s.vhash.v; + it->shortName = qs(s.vshort_name); + QString title = qs(s.vtitle); + if ((it->flags & MTPDstickerSet_flag_official) && !title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { + title = lang(lng_stickers_default_set); + } + it->title = title; + it->flags = s.vflags.v; + + const QVector &d_docs(d.vdocuments.c_vector().v); + StickerSets::iterator custom = sets.find(CustomStickerSetId); + + QSet found; + int32 wasCount = -1; + for (int32 i = 0, l = d_docs.size(); i != l; ++i) { + DocumentData *doc = App::feedDocument(d_docs.at(i)); + if (!doc || !doc->sticker()) continue; + + if (wasCount < 0) wasCount = it->stickers.size(); + if (it->stickers.indexOf(doc) < 0) { + it->stickers.push_back(doc); + } else { + found.insert(doc); + } + + if (custom != sets.cend()) { + int32 index = custom->stickers.indexOf(doc); + if (index >= 0) { + custom->stickers.removeAt(index); + } + } + } + if (custom != sets.cend() && custom->stickers.isEmpty()) { + sets.erase(custom); + custom = sets.end(); + } + + bool writeRecent = false; + RecentStickerPack &recent(cGetRecentStickers()); + + if (wasCount < 0) { // no stickers received + for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { + if (it->stickers.indexOf(i->first) >= 0) { + i = recent.erase(i); + writeRecent = true; + } else { + ++i; + } + } + cRefStickerSetsOrder().removeOne(setId); + sets.erase(it); + } else { + for (int32 j = 0, l = wasCount; j < l;) { + if (found.contains(it->stickers.at(j))) { + ++j; + } else { + for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { + if (it->stickers.at(j) == i->first) { + i = recent.erase(i); + writeRecent = true; + } else { + ++i; + } + } + it->stickers.removeAt(j); + --l; + } + } + if (it->stickers.isEmpty()) { + cRefStickerSetsOrder().removeOne(setId); + sets.erase(it); + } + } + + if (writeRecent) { + Local::writeUserSettings(); + } + + Local::writeStickers(); + + if (App::main()) emit App::main()->stickersUpdated(); +} + +bool ApiWrap::gotStickerSetFail(uint64 setId, const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + _stickerSetRequests.remove(setId); + return true; +} + +void ApiWrap::requestWebPageDelayed(WebPageData *page) { + if (page->pendingTill <= 0) return; + _webPagesPending.insert(page, 0); + int32 left = (page->pendingTill - unixtime()) * 1000; + if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) { + _webPagesTimer.start((left < 0 ? 0 : left) + 1); + } +} + +void ApiWrap::clearWebPageRequest(WebPageData *page) { + _webPagesPending.remove(page); + if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop(); +} + +void ApiWrap::clearWebPageRequests() { + _webPagesPending.clear(); + _webPagesTimer.stop(); +} + +void ApiWrap::resolveWebPages() { + QVector ids; + const WebPageItems &items(App::webPageItems()); + ids.reserve(_webPagesPending.size()); + int32 t = unixtime(), m = INT_MAX; + for (WebPagesPending::const_iterator i = _webPagesPending.cbegin(), e = _webPagesPending.cend(); i != e; ++i) { + if (i.value()) continue; + if (i.key()->pendingTill <= t) { + WebPageItems::const_iterator j = items.constFind(i.key()); + if (j != items.cend() && !j.value().isEmpty()) { + ids.push_back(MTP_int(j.value().begin().key()->id)); + } + } else { + m = qMin(m, i.key()->pendingTill - t); + } + } + if (!ids.isEmpty()) { + mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector(ids)), rpcDone(&ApiWrap::gotWebPages)); + for (WebPagesPending::iterator i = _webPagesPending.begin(); i != _webPagesPending.cend(); ++i) { + if (i.value()) continue; + if (i.key()->pendingTill <= t) { + i.value() = req; + } + } + } + if (m < INT_MAX) _webPagesTimer.start(m * 1000); +} + void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) { const QVector *v = 0; switch (msgs.type()) { diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 5b7daff30..a57eb6bd9 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -31,11 +31,16 @@ public: void requestReplyTo(HistoryReply *reply, MsgId to); void requestFullPeer(PeerData *peer); + void requestPeer(PeerData *peer); + void requestPeers(const QList &peers); void requestWebPageDelayed(WebPageData *page); void clearWebPageRequest(WebPageData *page); void clearWebPageRequests(); + void scheduleStickerSetRequest(uint64 setId, uint64 access); + void requestStickerSets(); + ~ApiWrap(); signals: @@ -62,13 +67,24 @@ private: void gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result); void gotUserFull(PeerData *peer, const MTPUserFull &result); + bool gotPeerFullFailed(PeerData *peer, const RPCError &err); + typedef QMap PeerRequests; + PeerRequests _fullPeerRequests; + + void gotChat(PeerData *peer, const MTPmessages_Chats &result); + void gotUser(PeerData *peer, const MTPVector &result); + void gotChats(const MTPmessages_Chats &result); + void gotUsers(const MTPVector &result); bool gotPeerFailed(PeerData *peer, const RPCError &err); - typedef QMap FullRequests; - FullRequests _fullRequests; + PeerRequests _peerRequests; void gotWebPages(const MTPmessages_Messages &result, mtpRequestId req); typedef QMap WebPagesPending; WebPagesPending _webPagesPending; SingleTimer _webPagesTimer; + QMap > _stickerSetRequests; + void gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result); + bool gotStickerSetFail(uint64 setId, const RPCError &error); + }; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 935ba401a..1a31593ba 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" +#include "numbers.h" + namespace { bool quiting = false; @@ -37,6 +39,9 @@ namespace { typedef QMap MutedPeers; MutedPeers mutedPeers; + typedef QMap UpdatedPeers; + UpdatedPeers updatedPeers; + typedef QHash PhotosData; PhotosData photosData; @@ -104,7 +109,27 @@ namespace { namespace App { QString formatPhone(QString phone) { - return '+' + phone.replace(QRegularExpression(qsl("[^\\d]")), QString()); + if (phone.isEmpty()) return QString(); + QString number = phone; + for (const QChar *ch = phone.constData(), *e = ch + phone.size(); ch != e; ++ch) { + if (ch->unicode() < '0' || ch->unicode() > '9') { + number = phone.replace(QRegularExpression(qsl("[^\\d]")), QString()); + } + } + QVector groups = phoneNumberParse(number); + if (groups.isEmpty()) return '+' + number; + + QString result; + result.reserve(number.size() + groups.size() + 1); + result.append('+'); + int32 sum = 0; + for (int32 i = 0, l = groups.size(); i < l; ++i) { + result.append(number.midRef(sum, groups.at(i))); + sum += groups.at(i); + if (sum < number.size()) result.append(' '); + } + if (sum < number.size()) result.append(number.midRef(sum)); + return result; } Application *app() { @@ -264,8 +289,10 @@ namespace App { } QString onlineText(UserData *user, int32 now, bool precise) { - if (isServiceUser(user->id)) { + if (isNotificationsUser(user->id)) { return lang(lng_status_service_notifications); + } else if (isServiceUser(user->id)) { + return lang(lng_status_support); } else if (user->botInfo) { return lang(lng_status_bot); } @@ -312,7 +339,11 @@ namespace App { return lng_status_lastseen_date(lt_date, dOnline.date().toString(qsl("dd.MM.yy"))); } - bool onlineColorUse(int32 online, int32 now) { + bool onlineColorUse(UserData *user, int32 now) { + if (isServiceUser(user->id) || user->botInfo) { + return false; + } + int32 online = user->onlineTill; if (online <= 0) { switch (online) { case 0: @@ -326,7 +357,7 @@ namespace App { return (online > now); } - UserData *feedUsers(const MTPVector &users) { + UserData *feedUsers(const MTPVector &users, bool emitPeerUpdated) { UserData *data = 0; const QVector &v(users.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { @@ -341,8 +372,8 @@ namespace App { PeerId peer(peerFromUser(d.vid.v)); data = App::user(peer); - data->input = MTP_inputPeerContact(d.vid); - data->inputUser = MTP_inputUserContact(d.vid); + data->input = MTP_inputPeerUser(d.vid, MTP_long(0)); + data->inputUser = MTP_inputUser(d.vid, MTP_long(0)); data->setName(lang(lng_deleted), QString(), QString(), QString()); data->setPhoto(MTP_userProfilePhotoEmpty()); data->access = UserNoAccess; @@ -360,12 +391,12 @@ namespace App { if (flags & MTPDuser_flag_self) { data->input = MTP_inputPeerSelf(); data->inputUser = MTP_inputUserSelf(); - } else if ((flags & (MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)) || !d.has_access_hash()) { - data->input = MTP_inputPeerContact(d.vid); - data->inputUser = MTP_inputUserContact(d.vid); + } else if (!d.has_access_hash()) { + data->input = MTP_inputPeerUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access)); + data->inputUser = MTP_inputUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access)); } else { - data->input = MTP_inputPeerForeign(d.vid, d.vaccess_hash); - data->inputUser = MTP_inputUserForeign(d.vid, d.vaccess_hash); + data->input = MTP_inputPeerUser(d.vid, d.vaccess_hash); + data->inputUser = MTP_inputUser(d.vid, d.vaccess_hash); } if (flags & MTPDuser_flag_deleted) { data->setPhone(QString()); @@ -374,13 +405,24 @@ namespace App { data->access = UserNoAccess; status = &emptyStatus; } else { - data->setPhone(d.has_phone() ? qs(d.vphone) : QString()); + QString phone = d.has_phone() ? qs(d.vphone) : QString(); QString fname = d.has_first_name() ? textOneLine(qs(d.vfirst_name)) : QString(); QString lname = d.has_last_name() ? textOneLine(qs(d.vlast_name)) : QString(); QString uname = d.has_username() ? textOneLine(qs(d.vusername)) : QString(); + + bool phoneChanged = (data->phone != phone); + if (phoneChanged) data->setPhone(phone); + + bool nameChanged = (data->firstName != fname) || (data->lastName != lname); + bool showPhone = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self | MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)); - QString pname = (showPhone && !data->phone.isEmpty()) ? formatPhone(data->phone) : QString(); - data->setName(fname, lname, QString(), uname); + bool showPhoneChanged = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self)) && ((showPhone && data->contact) || (!showPhone && !data->contact)); + + // see also Local::readPeer + + QString pname = (showPhoneChanged || phoneChanged || nameChanged) ? ((showPhone && !phone.isEmpty()) ? formatPhone(phone) : QString()) : data->nameOrPhone; + + data->setName(fname, lname, pname, uname); if (d.has_photo()) { data->setPhoto(d.vphoto); } else { @@ -424,19 +466,25 @@ namespace App { if (data->contact < 0 && !data->phone.isEmpty() && int32(data->id & 0xFFFFFFFF) != MTP::authedId()) { data->contact = 0; } - if (data->contact > 0 && !wasContact) { - App::main()->addNewContact(data->id & 0xFFFFFFFF, false); - } else if (wasContact && data->contact <= 0) { - App::main()->removeContact(data); - } + if (App::main()) { + if (data->contact > 0 && !wasContact) { + App::main()->addNewContact(data->id & 0xFFFFFFFF, false); + } else if (wasContact && data->contact <= 0) { + App::main()->removeContact(data); + } - if (App::main()) App::main()->peerUpdated(data); + if (emitPeerUpdated) { + App::main()->peerUpdated(data); + } else { + markPeerUpdated(data); + } + } } return data; } - ChatData *feedChats(const MTPVector &chats) { + ChatData *feedChats(const MTPVector &chats, bool emitPeerUpdated) { ChatData *data = 0; const QVector &v(chats.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { @@ -456,7 +504,6 @@ namespace App { data->count = d.vparticipants_count.v; data->left = d.vleft.v; data->forbidden = false; - data->access = 0; if (data->version < d.vversion.v) { data->version = d.vversion.v; data->participants = ChatData::Participants(); @@ -475,7 +522,6 @@ namespace App { data->count = -1; data->left = false; data->forbidden = true; - data->access = 0; } break; case mtpc_geoChat: { const MTPDgeoChat &d(chat.c_geoChat()); @@ -503,24 +549,31 @@ namespace App { data->loaded = true; data->updateName(title.trimmed(), QString(), QString()); - if (App::main()) App::main()->peerUpdated(data); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(data); + } else { + markPeerUpdated(data); + } + } } return data; } - void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos) { + void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated) { + ChatData *chat = 0; switch (p.type()) { case mtpc_chatParticipantsForbidden: { const MTPDchatParticipantsForbidden &d(p.c_chatParticipantsForbidden()); - ChatData *chat = App::chat(d.vchat_id.v); + chat = App::chat(d.vchat_id.v); chat->count = -1; - if (App::main()) App::main()->peerUpdated(chat); } break; + case mtpc_chatParticipants: { const MTPDchatParticipants &d(p.c_chatParticipants()); - ChatData *chat = App::chat(d.vchat_id.v); + chat = App::chat(d.vchat_id.v); chat->admin = d.vadmin_id.v; - if (chat->version <= d.vversion.v) { + if (!requestBotInfos || chat->version <= d.vversion.v) { // !requestBotInfos is true on getFullChat result chat->version = d.vversion.v; const QVector &v(d.vparticipants.c_vector().v); chat->count = v.size(); @@ -564,13 +617,19 @@ namespace App { if (App::main()) App::main()->updateBotKeyboard(); } } - if (App::main()) App::main()->peerUpdated(chat); } } break; } + if (chat && App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } - void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d) { + void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated) { ChatData *chat = App::chat(d.vchat_id.v); if (chat->version <= d.vversion.v && chat->count >= 0) { chat->version = d.vversion.v; @@ -597,11 +656,17 @@ namespace App { chat->botStatus = 0; chat->count++; } - if (App::main()) App::main()->peerUpdated(chat); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } } - void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d) { + void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated) { ChatData *chat = App::chat(d.vchat_id.v); if (chat->version <= d.vversion.v && chat->count > 0) { chat->version = d.vversion.v; @@ -641,7 +706,13 @@ namespace App { chat->botStatus = 0; chat->count--; } - if (App::main()) App::main()->peerUpdated(chat); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } } @@ -691,27 +762,23 @@ namespace App { return ImagePtr(); } + StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc) { + if (loc.type() == mtpc_fileLocation) { + const MTPDfileLocation &l(loc.c_fileLocation()); + return StorageImageLocation(w, h, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); + } + return StorageImageLocation(w, h, 0, 0, 0, 0); + } + StorageImageLocation imageLocation(const MTPPhotoSize &size) { switch (size.type()) { case mtpc_photoSize: { const MTPDphotoSize &d(size.c_photoSize()); - if (d.vlocation.type() == mtpc_fileLocation) { - const MTPDfileLocation &l(d.vlocation.c_fileLocation()); - return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); - } + return imageLocation(d.vw.v, d.vh.v, d.vlocation); } break; case mtpc_photoCachedSize: { const MTPDphotoCachedSize &d(size.c_photoCachedSize()); - if (d.vlocation.type() == mtpc_fileLocation) { - const MTPDfileLocation &l(d.vlocation.c_fileLocation()); - const string &s(d.vbytes.c_string().v); - QByteArray bytes(s.data(), s.size()); - return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); - } else if (d.vlocation.type() == mtpc_fileLocationUnavailable) { - const string &s(d.vbytes.c_string().v); - QByteArray bytes(s.data(), s.size()); - return StorageImageLocation(d.vw.v, d.vh.v, 0, 0, 0, 0); - } + return imageLocation(d.vw.v, d.vh.v, d.vlocation); } break; } return StorageImageLocation(); @@ -737,6 +804,9 @@ namespace App { History *h = App::historyLoaded(peer); if (h) { h->outboxRead(upTo); + if (!h->peer->chat) { + h->peer->asUser()->madeAction(); + } } } @@ -757,26 +827,34 @@ namespace App { } } - void feedUserLinks(const MTPVector &links) { + void feedUserLinks(const MTPVector &links, bool emitPeerUpdated) { const QVector &v(links.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { const MTPDcontacts_link &dv(i->c_contacts_link()); - feedUsers(MTP_vector(1, dv.vuser)); + UserData *user = feedUsers(MTP_vector(1, dv.vuser), false); MTPint userId(MTP_int(0)); switch (dv.vuser.type()) { case mtpc_userEmpty: userId = dv.vuser.c_userEmpty().vid; break; case mtpc_user: userId = dv.vuser.c_user().vid; break; } if (userId.v) { - feedUserLink(userId, dv.vmy_link, dv.vforeign_link); + feedUserLink(userId, dv.vmy_link, dv.vforeign_link, false); + } + if (user && App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(user); + } else { + markPeerUpdated(user); + } } } } - void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink) { + void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated) { UserData *user = userLoaded(userId.v); if (user) { bool wasContact = (user->contact > 0); + bool wasShowPhone = !user->contact; switch (myLink.type()) { case mtpc_contactLinkContact: user->contact = 1; @@ -792,14 +870,8 @@ namespace App { if (user->contact > 0) { if (!wasContact) { App::main()->addNewContact(App::userFromPeer(user->id), false); - if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerContact(userId); - if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserContact(userId); } } else { - if (user->access && user->access != UserNoAccess) { - if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); - if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); - } if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) { user->contact = 0; } @@ -807,8 +879,38 @@ namespace App { App::main()->removeContact(user); } } - user->setName(textOneLine(user->firstName), textOneLine(user->lastName), (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), textOneLine(user->username)); - if (App::main()) App::main()->peerUpdated(user); + + bool showPhone = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && !user->contact; + bool showPhoneChanged = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && ((showPhone && !wasShowPhone) || (!showPhone && wasShowPhone)); + if (showPhoneChanged) { + user->setName(textOneLine(user->firstName), textOneLine(user->lastName), showPhone ? App::formatPhone(user->phone) : QString(), textOneLine(user->username)); + } + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(user); + } else { + markPeerUpdated(user); + } + } + } + } + + void markPeerUpdated(PeerData *data) { + updatedPeers.insert(data, true); + } + + void clearPeerUpdated(PeerData *data) { + updatedPeers.remove(data); + } + + void emitPeerUpdated() { + if (!updatedPeers.isEmpty() && App::main()) { + UpdatedPeers upd = updatedPeers; + updatedPeers.clear(); + + for (UpdatedPeers::const_iterator i = upd.cbegin(), e = upd.cend(); i != e; ++i) { + App::main()->peerUpdated(i.key()); + } } } @@ -818,7 +920,7 @@ namespace App { return feedPhoto(photo.c_photo(), convert); } break; case mtpc_photoEmpty: { - return App::photo(photo.c_photoEmpty().vid.v, convert); + return App::photoSet(photo.c_photoEmpty().vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } break; } return App::photo(0); @@ -862,7 +964,7 @@ namespace App { switch (photo.type()) { case mtpc_photo: { const MTPDphoto &ph(photo.c_photo()); - return App::photo(ph.vid.v, 0, ph.vaccess_hash.v, ph.vuser_id.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); + return App::photoSet(ph.vid.v, 0, ph.vaccess_hash.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); } break; case mtpc_photoEmpty: return App::photo(photo.c_photoEmpty().vid.v); } @@ -917,13 +1019,13 @@ namespace App { } } if (thumb && medium && full) { - return App::photo(photo.vid.v, convert, photo.vaccess_hash.v, photo.vuser_id.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); + return App::photoSet(photo.vid.v, convert, photo.vaccess_hash.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); } - return App::photo(photo.vid.v, convert); + return App::photoSet(photo.vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } VideoData *feedVideo(const MTPDvideo &video, VideoData *convert) { - return App::video(video.vid.v, convert, video.vaccess_hash.v, video.vuser_id.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); + return App::videoSet(video.vid.v, convert, video.vaccess_hash.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); } AudioData *feedAudio(const MTPaudio &audio, AudioData *convert) { @@ -932,14 +1034,14 @@ namespace App { return feedAudio(audio.c_audio(), convert); } break; case mtpc_audioEmpty: { - return App::audio(audio.c_audioEmpty().vid.v, convert); + return App::audioSet(audio.c_audioEmpty().vid.v, convert, 0, 0, QString(), 0, 0, 0); } break; } return App::audio(0); } AudioData *feedAudio(const MTPDaudio &audio, AudioData *convert) { - return App::audio(audio.vid.v, convert, audio.vaccess_hash.v, audio.vuser_id.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); + return App::audioSet(audio.vid.v, convert, audio.vaccess_hash.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); } DocumentData *feedDocument(const MTPdocument &document, const QPixmap &thumb) { @@ -970,11 +1072,11 @@ namespace App { } WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) { - return App::webPage(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); + return App::webPageSet(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); } WebPageData *feedWebPage(const MTPDwebPagePending &webpage, WebPageData *convert) { - return App::webPage(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); + return App::webPageSet(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); } WebPageData *feedWebPage(const MTPWebPage &webpage) { @@ -1058,7 +1160,15 @@ namespace App { return App::peer(App::peerFromChat(chat))->asChat(); } - PhotoData *photo(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { + PhotoData *photo(const PhotoId &photo) { + PhotosData::const_iterator i = photosData.constFind(photo); + if (i == photosData.cend()) { + i = photosData.insert(photo, new PhotoData(photo)); + } + return i.value(); + } + + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { if (convert) { if (convert->id != photo) { PhotosData::iterator i = photosData.find(convert->id); @@ -1068,8 +1178,7 @@ namespace App { convert->id = photo; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->thumb = thumb; convert->medium = medium; @@ -1083,14 +1192,13 @@ namespace App { if (convert) { result = convert; } else { - result = new PhotoData(photo, access, user, date, thumb, medium, full); + result = new PhotoData(photo, access, date, thumb, medium, full); } photosData.insert(photo, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->thumb = thumb; result->medium = medium; @@ -1112,7 +1220,15 @@ namespace App { return result; } - VideoData *video(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { + VideoData *video(const VideoId &video) { + VideosData::const_iterator i = videosData.constFind(video); + if (i == videosData.cend()) { + i = videosData.insert(video, new VideoData(video)); + } + return i.value(); + } + + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { if (convert) { if (convert->id != video) { VideosData::iterator i = videosData.find(convert->id); @@ -1123,8 +1239,7 @@ namespace App { convert->status = FileReady; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->duration = duration; convert->w = w; @@ -1140,14 +1255,13 @@ namespace App { if (convert) { result = convert; } else { - result = new VideoData(video, access, user, date, duration, w, h, thumb, dc, size); + result = new VideoData(video, access, date, duration, w, h, thumb, dc, size); } videosData.insert(video, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->duration = duration; result->w = w; @@ -1160,7 +1274,15 @@ namespace App { return result; } - AudioData *audio(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { + AudioData *audio(const AudioId &audio) { + AudiosData::const_iterator i = audiosData.constFind(audio); + if (i == audiosData.cend()) { + i = audiosData.insert(audio, new AudioData(audio)); + } + return i.value(); + } + + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { if (convert) { if (convert->id != audio) { AudiosData::iterator i = audiosData.find(convert->id); @@ -1171,8 +1293,7 @@ namespace App { convert->status = FileReady; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->mime = mime; convert->duration = duration; @@ -1186,14 +1307,13 @@ namespace App { if (convert) { result = convert; } else { - result = new AudioData(audio, access, user, date, mime, duration, dc, size); + result = new AudioData(audio, access, date, mime, duration, dc, size); } audiosData.insert(audio, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->mime = mime; result->duration = duration; @@ -1222,7 +1342,7 @@ namespace App { } convert->id = document; convert->status = FileReady; - sentSticker = !!convert->sticker; + sentSticker = !!convert->sticker(); } convert->access = access; if (!convert->date && date) { @@ -1236,20 +1356,20 @@ namespace App { if (!thumb->isNull() && (convert->thumb->isNull() || convert->thumb->width() < thumb->width() || convert->thumb->height() < thumb->height())) { convert->thumb = thumb; } - if (convert->sticker && !attributes.isEmpty() && (convert->sticker->alt.isEmpty() || convert->sticker->set.type() == mtpc_inputStickerSetEmpty)) { + if (convert->sticker() && !attributes.isEmpty() && (convert->sticker()->alt.isEmpty() || convert->sticker()->set.type() == mtpc_inputStickerSetEmpty)) { for (QVector::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { if (i->type() == mtpc_documentAttributeSticker) { const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); if (d.valt.c_string().v.length() > 0) { - convert->sticker->alt = qs(d.valt); - convert->sticker->set = d.vstickerset; + convert->sticker()->alt = qs(d.valt); + convert->sticker()->set = d.vstickerset; } } } } } - if (convert->sticker && !convert->sticker->loc.dc && thumbLocation.dc) { - convert->sticker->loc = thumbLocation; + if (convert->sticker() && !convert->sticker()->loc.dc && thumbLocation.dc) { + convert->sticker()->loc = thumbLocation; } if (convert->location.check()) { @@ -1263,7 +1383,7 @@ namespace App { result = convert; } else { result = new DocumentData(document, access, date, attributes, mime, thumb, dc, size); - if (result->sticker) result->sticker->loc = thumbLocation; + if (result->sticker()) result->sticker()->loc = thumbLocation; } documentsData.insert(document, result); } else { @@ -1281,19 +1401,19 @@ namespace App { if (!thumb->isNull() && (result->thumb->isNull() || result->thumb->width() < thumb->width() || result->thumb->height() < thumb->height())) { result->thumb = thumb; } - if (result->sticker && !attributes.isEmpty() && (result->sticker->alt.isEmpty() || result->sticker->set.type() == mtpc_inputStickerSetEmpty)) { + if (result->sticker() && !attributes.isEmpty() && (result->sticker()->alt.isEmpty() || result->sticker()->set.type() == mtpc_inputStickerSetEmpty)) { for (QVector::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { if (i->type() == mtpc_documentAttributeSticker) { const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); if (d.valt.c_string().v.length() > 0) { - result->sticker->alt = qs(d.valt); - result->sticker->set = d.vstickerset; + result->sticker()->alt = qs(d.valt); + result->sticker()->set = d.vstickerset; } } } } - if (result->sticker && !result->sticker->loc.dc && thumbLocation.dc) { - result->sticker->loc = thumbLocation; + if (result->sticker() && !result->sticker()->loc.dc && thumbLocation.dc) { + result->sticker()->loc = thumbLocation; } } } @@ -1302,7 +1422,15 @@ namespace App { return result; } - WebPageData *webPage(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { + WebPageData *webPage(const WebPageId &webPage) { + WebPagesData::const_iterator i = webPagesData.constFind(webPage); + if (i == webPagesData.cend()) { + i = webPagesData.insert(webPage, new WebPageData(webPage)); + } + return i.value(); + } + + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { if (convert) { if (convert->id != webPage) { WebPagesData::iterator i = webPagesData.find(convert->id); @@ -1360,7 +1488,15 @@ namespace App { return result; } - ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type, const QString &url) { + ImageLinkData *imageLink(const QString &imageLink) { + ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink); + if (i == imageLinksData.cend()) { + i = imageLinksData.insert(imageLink, new ImageLinkData(imageLink)); + } + return i.value(); + } + + ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url) { ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink); ImageLinkData *result; if (i == imageLinksData.cend()) { @@ -1401,7 +1537,7 @@ namespace App { photoSizes.push_back(MTP_photoSize(MTP_string("a"), uphoto.vphoto_small, MTP_int(160), MTP_int(160), MTP_int(0))); photoSizes.push_back(MTP_photoSize(MTP_string("c"), uphoto.vphoto_big, MTP_int(640), MTP_int(640), MTP_int(0))); - return MTP_photo(uphoto.vphoto_id, MTP_long(0), userId, date, MTP_geoPointEmpty(), MTP_vector(photoSizes)); + return MTP_photo(uphoto.vphoto_id, MTP_long(0), date, MTP_vector(photoSizes)); } return MTP_photoEmpty(MTP_long(0)); } @@ -1546,6 +1682,9 @@ namespace App { historyClearMsgs(); randomData.clear(); mutedPeers.clear(); + updatedPeers.clear(); + cSetSavedPeers(SavedPeers()); + cSetSavedPeersByTime(SavedPeersByTime()); for (PeersData::const_iterator i = peersData.cbegin(), e = peersData.cend(); i != e; ++i) { delete *i; } @@ -1573,7 +1712,6 @@ namespace App { if (api()) api()->clearWebPageRequests(); cSetRecentStickers(RecentStickerPack()); cSetStickersHash(QByteArray()); - cSetEmojiStickers(EmojiStickersMap()); cSetStickerSets(StickerSets()); cSetStickerSetsOrder(StickerSetsOrder()); cSetLastStickersUpdate(0); @@ -1602,15 +1740,6 @@ namespace App { } } - /* // don't delete history without deleting its' peerdata - void deleteHistory(const PeerId &peer) { - Histories::iterator i = ::histories.find(peer); - if (i != ::histories.end()) { - ::histories.typing.remove(i.value()); - ::histories.erase(i); - } - } -/**/ void historyRegRandom(uint64 randomId, MsgId itemId) { randomData.insert(randomId, itemId); } @@ -1999,7 +2128,7 @@ namespace App { case mtpc_replyKeyboardMarkup: { const MTPDreplyKeyboardMarkup &d(markup.c_replyKeyboardMarkup()); data.flags = d.vflags.v; - + const QVector &v(d.vrows.c_vector().v); if (!v.isEmpty()) { commands.reserve(v.size()); @@ -2028,6 +2157,18 @@ namespace App { } } } break; + + case mtpc_replyKeyboardHide: { + const MTPDreplyKeyboardHide &d(markup.c_replyKeyboardHide()); + if (d.vflags.v) { + replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_ZERO)); + } + } break; + + case mtpc_replyKeyboardForceReply: { + const MTPDreplyKeyboardForceReply &d(markup.c_replyKeyboardForceReply()); + replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_FORCE_REPLY)); + } break; } } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index c76ac59ac..a68c390c3 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -105,23 +105,29 @@ namespace App { int32 onlineForSort(UserData *user, int32 now); int32 onlineWillChangeIn(UserData *user, int32 nowOnServer); QString onlineText(UserData *user, int32 nowOnServer, bool precise = false); - bool onlineColorUse(int32 online, int32 now); + bool onlineColorUse(UserData *user, int32 now); - UserData *feedUsers(const MTPVector &users); // returns last user - ChatData *feedChats(const MTPVector &chats); // returns last chat - void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos = false); - void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d); - void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d); + UserData *feedUsers(const MTPVector &users, bool emitPeerUpdated = true); // returns last user + ChatData *feedChats(const MTPVector &chats, bool emitPeerUpdated = true); // returns last chat + void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true); + void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true); + void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true); void feedMsgs(const MTPVector &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message void feedWereRead(const QVector &msgsIds); void feedInboxRead(const PeerId &peer, int32 upTo); void feedOutboxRead(const PeerId &peer, int32 upTo); void feedWereDeleted(const QVector &msgsIds); - void feedUserLinks(const MTPVector &links); - void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink); + void feedUserLinks(const MTPVector &links, bool emitPeerUpdated = true); + void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated = true); + + void markPeerUpdated(PeerData *data); + void clearPeerUpdated(PeerData *data); + void emitPeerUpdated(); + int32 maxMsgId(); ImagePtr image(const MTPPhotoSize &size); + StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc); StorageImageLocation imageLocation(const MTPPhotoSize &size); PhotoData *feedPhoto(const MTPPhoto &photo, const PreparedPhotoThumbs &thumbs); @@ -151,13 +157,18 @@ namespace App { ChatData *chat(const PeerId &peer); ChatData *chat(int32 chat); QString peerName(const PeerData *peer, bool forDialogs = false); - PhotoData *photo(const PhotoId &photo, PhotoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()); - VideoData *video(const VideoId &video, VideoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); - AudioData *audio(const AudioId &audio, AudioData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); + PhotoData *photo(const PhotoId &photo); + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full); + VideoData *video(const VideoId &video); + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size); + AudioData *audio(const AudioId &audio); + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size); DocumentData *document(const DocumentId &document); DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation); - WebPageData *webPage(const WebPageId &webPage, WebPageData *convert = 0, const QString &type = QString(), const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -2); - ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type = InvalidImageLink, const QString &url = QString()); + WebPageData *webPage(const WebPageId &webPage); + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill); + ImageLinkData *imageLink(const QString &imageLink); + ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url); void forgetMedia(); MTPPhoto photoFromUserPhoto(MTPint userId, MTPint date, const MTPUserProfilePhoto &photo); @@ -173,7 +184,6 @@ namespace App { void historyClearItems(); void historyRegReply(HistoryReply *reply, HistoryItem *to); void historyUnregReply(HistoryReply *reply, HistoryItem *to); -// void deleteHistory(const PeerId &peer); void historyRegRandom(uint64 randomId, MsgId itemId); void historyUnregRandom(uint64 randomId); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index d419a839e..85096cf9c 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -48,28 +48,43 @@ namespace { } } - class EventFilterForMac : public QObject { + class EventFilterForKeys : public QObject { public: - EventFilterForMac(QObject *parent) : QObject(parent) { + EventFilterForKeys(QObject *parent) : QObject(parent) { } bool eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::KeyPress) { QKeyEvent *ev = static_cast(e); - if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { - if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { - App::wnd()->minimizeToTray(); - return true; - } else { - App::wnd()->hide(); - App::wnd()->updateIsActive(cOfflineBlurTimeout()); - App::wnd()->updateGlobalMenu(); + if (cPlatform() == dbipMac) { + if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { + if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { + App::wnd()->minimizeToTray(); + return true; + } else { + App::wnd()->hide(); + App::wnd()->updateIsActive(cOfflineBlurTimeout()); + App::wnd()->updateGlobalMenu(); + return true; + } + } else if (ev->key() == Qt::Key_M && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { + App::wnd()->setWindowState(Qt::WindowMinimized); return true; } - } else if (ev->key() == Qt::Key_M && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { - App::wnd()->setWindowState(Qt::WindowMinimized); - return true; + } + if (ev->key() == Qt::Key_MediaPlay) { + if (App::main()) App::main()->player()->playPressed(); + } else if (ev->key() == Qt::Key_MediaPause) { + if (App::main()) App::main()->player()->pausePressed(); + } else if (ev->key() == Qt::Key_MediaTogglePlayPause) { + if (App::main()) App::main()->player()->playPausePressed(); + } else if (ev->key() == Qt::Key_MediaStop) { + if (App::main()) App::main()->player()->stopPressed(); + } else if (ev->key() == Qt::Key_MediaPrevious) { + if (App::main()) App::main()->player()->prevPressed(); + } else if (ev->key() == Qt::Key_MediaNext) { + if (App::main()) App::main()->player()->nextPressed(); } } return QObject::eventFilter(o, e); @@ -95,9 +110,7 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), } mainApp = this; - if (cPlatform() == dbipMac) { - installEventFilter(new EventFilterForMac(this)); - } + installEventFilter(new EventFilterForKeys(this)); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Regular.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Bold.ttf")); @@ -203,7 +216,7 @@ void Application::updateGotCurrent() { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { QFile(i->absoluteFilePath()).remove(); } } @@ -460,7 +473,7 @@ void Application::uploadProfilePhoto(const QImage &tosend, const PeerId &peerId) PhotoId id = MTP::nonce(); - MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(MTP::authedId()), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector(photoSizes))); + MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector(photoSizes))); QString file, filename; int32 filesize = 0; @@ -500,7 +513,7 @@ void Application::startUpdateCheck(bool forceWait) { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { sendRequest = true; } } @@ -510,7 +523,11 @@ void Application::startUpdateCheck(bool forceWait) { if (sendRequest) { QUrl url(cUpdateURL()); - if (DevChannel) url.setQuery("dev=1"); + if (cDevVersion()) { + url.setQuery(qsl("version=%1&dev=1").arg(AppVersion)); + } else { + url.setQuery(qsl("version=%1").arg(AppVersion)); + } QString u = url.toString(); QNetworkRequest checkVersion(url); if (updateReply) updateReply->deleteLater(); @@ -637,13 +654,12 @@ void Application::socketError(QLocalSocket::LocalSocketError e) { void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { - psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8028) { - versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 IPv6 connections support\n\xe2\x80\x94 Bug fixes and minor stuff");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8024) { - versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); + if (cDevVersion() && Local::oldMapVersion() < 8050) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); + } else if (!cDevVersion() && Local::oldMapVersion() < 8051) { + versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 329aeef7b1dc9d3975f357aae40aa65fb39ef5f9..648101a311ff6ef50e8f30d95a451a7b5e7aad05 100644 GIT binary patch delta 51008 zcma&NWmpy87dAWx4kaMnoq`;?1?dzJ0VO04jWkF}4Bd?)AuTA<-7Q@r(k%!`r}W{O z-~YMZ5AXZw{lc7UU&GAad)8j-UhBSBTm6Ib<_C#lXtRV>PkPbuMY;KfUJCF(5#oO$ zD3XE)7yti^Xv3ef3W)HD2nkyvxy8lA#khsc`K-Cctj*22%|(U8M8yS=g5pT)ni{ws z{QuXTDLgo0g#WMCa`6eKG-D0b$UM;8pchu)6O)q@Qj!%A=jT@xk`t2`lIK?vd@!6jM-?6;}`xRFG2;l2sB+SrcLYSV;oIX=o;bvA<`ww6YWsFc-Au z78c{Px9WVs^LN`--4ahOZ4xq^r z%CW%%7jmu{ZRu{~BAi&^a~6*z7Kys6-Vz7?sb^sb>{g=31IPhq2_UeN?){|j6F?a7 zoR6PR;!6#5jjiZFUFX1M-vfavtdE&giD~;`0D^p&$WU3@?HKH(xR?9N4MXdGPy;K) ztc1(Z0x|o1Pl!Ut#o2)*4K7aDkvrfEv=Xe&Mq(FSw)LqL55O~@q+&7>$Y2JN0?#tv zu~!@0VCGiQ?Te6=J(R%;WC!k&j;jBNS`lO-6qqNB#{?Nutw0CA44$exgOl?aQ+Y;w z=!IxhzyTWQ!WqaxBfA}5ayk1jWj_(th}L-pw8M`c2c{l>M*aXc0ex&UoD-IpZ)=J>W7fPUsB4 z3_;}74YI-(0WsB>LY*$y>g^T6@=3~0B{}p9qZja0MCWThwgA>lC99u z)mDxvB1r|c^O+wHmpN&>oKC`1OeGwd#=@TRcY>?D@%L`hfbrEodx=0j5&_kdX8gDR zz{!{n@!$K4DjOIuVt@c>qyj|I;<`;|bCTezIKU)K(tc8oIh;=yt#P@p8pq=3R&t>V zQ-&r`6Xpju(-R|6;v498+^QV9kb|beER0PDSL|(q~xXf+sDklB%-< zpzPj9zlcDv65~`?R}+$upeL!ovz|v}XVbrZ`!-g;zM?A&nPzOdK8a1Ke#ACv@sXi(SihYlu6l~eOJH2mNoc!OE%mGRKRilMi z5OJMtyr2&&DZZE0H+COK6A$<2B=20WyvB0I7OZwr#0mW9z+QsIe{!CprRe7;xjCMb z5F3j(U@7228}a?Sf;yP>giO$846cgVL8HKI5V{^nGxmL>0~6uD{{;*AolAaoMEC}=5#tm+ z&w3Ed=yI~5`qsW_RA!bpdg91o!PU=lbLK@ga0fvM3FpbfP^sJWm-t-8M&Unzt-S? zpP33#jjaHhB)W(P=5#k(6Fny(Th=YgnI95k4^2W_r33DRJnV10yVQXdG;a*uijvBZ zXNAFY4xTN#U9PklnVGVL@b}NG%$jQu zk3%-~Lrdnl$=bBno00d|L$W9+Yp3t!%dZI;2mbh5q)a2geFVjG9G8S?(1a>szu<}o?z*as= zBJ~-3wQT4!?e50G zQLtVBh1O|NP>5{B-X%Xv!#UC@M8AB{nbTAJ;$0iPb}=b)(!l;9KmT+QKXn{z7`2ls z@lg=3CZ_1G6*K{|d(@VxUDdW|(8J5@4V)ei%bq2)hL*6SwM0w{Yp)6OH*zvZgcZHg(Q(B{5=+`J&ZDDu~5>7x%!*64H!-mb}ta_?;6KlL@N_4 zD+!3SfN6~`HDnw<8G`V28JKF&_U@c0duw81f}fL}JzVLC{AXNc^ZX|4E3OFAD3oaL z0lm#Yh)2&#Q$5%Zr|n<+9!0`|Kq$Dm2|!yz*O5MI{qohTyoLs^ZV~ND>#Mw9qP1s zJA1{yV$x4lR8+)xV{ad^cQ*Z|j_@Q;-2prAg_7o6_2@6|E^>83xNXL!{3W-cgB8fF zAL@!8$Ss%SvXTvW&c2*D?5}2IPq7;?!Goc}W54wxwZCHb(3dfhYSB1YWy2YHDSz@3 z4|MbHVe)a222+KDIO&62@2fGe(_}cpJt}lL_LL-5lW7&TBxMQnUI>aA&c#H0wxv@- zD^vvj;rMqsZzD(lOb`xejN!arEVRYf^>+8NB#J%SM1!ltFZpoFB7_INi3}vLVPRq6 zUtL`p!g7m>Hs`;77_Uh7(~- z_bzW{<$)|lmEfs$4%SdvEmF;7OAee6j6|VD;aIRMBTu#S$VI9YM+c5g$j46@Lf9Ku z&HGM=lJp^&|`wm;kKVgGZw z%+SkWso5i=WhEkL#?06zd4XNg8Bfoya*4NL&{xBDZleD`&*n2VL-FDA2?b)#gc0YD zZ!#;@V**Z_NOXTW$-s+HCrY7P3f=oX{w|vwe=zla$!o=NxyjvT_+Y8!3JUYT{4bWg zGNo>hdfu-M*gHCo3Z<(jP{sA}j#|4HcbQ#|*a}JM8yHYAy_v9Iot*9N>Mdd966q$?htJGZG^0-&^#`pQEcoM#h{uUEX)3$f_?vH8 zfLFZqKGvth{n_?c%5%84YW>+|zQ+SKne;d2#?Sb2EQF}NzD@1q;%!6jlbvKR`=2L| zezm;#iypO49LcOc3u`e#O0>?8U+@-JAUz7m2qjx#_U{c7j{dL-)B2r`it6c*p7Ur- z3e2ofhW{1J9Ocq0H}V-U^?6<9*`&aH1xkAfa%OK~y?wIee|&uW<@OgJF>5L5 zGVZJif7%6wU%6T047|Yom^dM`YEMZc;-C_hkZ_N$ntX~AJn+Y-J$t=TzOAhd9Ir6# zXz$TIl-(5^XIOL*)`(gz{Qk?}uGif92C>=ofdGNJ%S)2#w-q{gufjU4&OXUg{PM{j zAzjz={0+5wcYohbJwTgiwp$byxYFQkN~WlF8;pTlw4g3OM!-C3UDMv!cqt7;o}8TQ zemAcw`ACWb_+A`5?d8LBUG~`mHJD1Xm|A0h^x+GqE2C- zs+0Pj+i3KdR$~(uR#cc;!7Im<$Sd*xb@=<=J$`yiaOn2k^UnF$;@~4K0PZ@Rs433} z+~00Ve`IB6&t_IV;Q=%d!|kx#DAvIiViFR~yVIO|BjOR%Ny8xnmm6D*>DXmmK}Y2G zm!I_6?^h2#RxoHiPg7yXmF5fVEC?aN>q!eZFEQPhfEIAEx72b`Im+xhjTe~Dk;wYj zi2)N9xY*`+!LxYmzhtAHIrJzAgQCpk;gYnZFMdpe7 zZ2y0AXJ+Rgw>kb490}y*adI%U}FW!z!3UT|cg;7{X z^_riY4D(6{9IbZMsPwe2?)T9u0=fV87rc&!xGE3@9MRV|EB8|Jti-BB-Y#+vWIlF; z9*dQ_Cc#57|AHbK7PT%`i4~{z$JzN`1Ie$9h2rc)1YhwD{H6?)e|{f8uo}DHkW%m7 z6Ev?l#{Xsg^ZqT>f=5sAv%+f@)#T=i_UoN%WqKdWffnhL0hT3G|MRJHR@I%CkEa+y zrVLcFPfHjGXF7@ID&34K9!>E)mDp#q8#^nJ7i|I^D$7 z80;`u@g4zNRUKcac8H5#Ue|Il;mzQIWP7o`K?C&GucpnsX)e5hy?n(Oa)*WbIHM-F zKUHeHZD+Ifjtc|H$;nNXWv>!halY8r!GUkJwP!yHKbpM51KMv-hSOsxcufLpW@K(L z&{t!nsryXBk%z>5c%uxR=y?GHAp}ykW|W(yM?)=Mhnrah03&wyR^aWf>HR$T{q)vg zu4e>t?Wf30jPnTDr#VNb%_&Isg?NSd^_@0jvzw>5)oYpzOBCkfRQ-dpH^ z_mDf7^sG=*jWyXyslathWw6`FjKI3@DQKCH`*;|MZ!bl=qDK!%I4`$eEz~<^$|tk( zG;Jia^vBb2VaPzBNo>E15d?lHC(v^nLyP4PW~_8vsGk$5Hsfz?WBgpU_ow{<1HtM{ zx4zVyOI)Q#xfmWb)~>|UGEOGOPHi%@8@ozs^>j}Z$T!k$408SmaN7ju5Drx5Sq`CvE>uYsv2Bm*IZhpD}fN+_-^`q zSCDk3!L&Vy)Gum3>4a6>^`;92%aV_wx9kQU92iwv5|AKD?XB{O23BEw?wcd&EzpiO z!DUzTV|X4fb%6K$Nh%7_3e0a-+Wq@^+An{D+Q8*bNyX+^mV{UP=qI6MJ`rZaIRn#B z*9!&OIv;?Rp_MiQ_8av=dNrD>{A;B?LR0{6efr@TpL))qW%HG2$5otZdKUzYcc9S3 zaYNljUgX0?M4f#viloc(Y^WG-(`V{wU5YNilSd zMxT!UE73#Eky3-2XYHu#T_2#aH-7MmHR3^7Bodpe{6FX+j?evrG8Cd*}4q2jw2jcO>Oe!-!TOd} z`aIxj5Z3DugZdSO{(Y2_jOc=SRqJ5d$dX7|)s#7Z$LEQ&5q+;QmVgV2;+M^SXvtwq zi1Vj_9pPr}$Vj^2mIL%z1FWstEvodr!;zOzravsY;wR|*Z*PuGmJxS$=(??J&t(6P zSDaTe0Ndu4d;*^1#Uc_u*;0!>kMBzsqSD?Vy;eumPj6SY%>{mKo-=UGcVGns-5=*9I#Jp`!18DfVyGhdI_(U!E#fI-e21#jV|?+8&`5ASEpy ziR+G57v~vx&m#ElYm}>pEMECdHU3H+Wnx~ga!HyfaM=q-eGS03mn^1fYZ`mfv={)a znn+uL6|ELMlSL$9sdV9?_{V-pFb)w zJC~%cD$;uSQs{KSx#I&M6A*xU&zOW^W~_7fL)W?@)OE6v1?S8)L31|fcTSoPBO5Ry-V}aZ{>hd;h9gNIahM!O`91!(!#hB zD3b2{2!(pAYQok2K%OL()Gq2X*QPJ-UCDF+3TKs8-`z4z`7%QiV3(E#zwO_Ld=NCk zv&X9g#d1EkjkvI6v+6(G=C9rstbP%#I`S-WwOd_W*K$xRd830$>p5(qc4{<;whh!v zs|;l_&Dlb zn-m)7bfZDrjE9%cfhI`Is-KsLK*{J`tj z4yHk4EDxJGmQitf+ZELMFvC-N)%}Yt-*PX*Wf{3R_>%!FiP$I#hhSkm6!-v`=PP!@ z2;8r)?qcZHCqBp;Kt*j+(L=sKKU+EPS?qB2pGFR@2Nc#rMBESKk5!xnEPQKVgAb1N zTX(L|kg?L(ue%1;Xy1IN;m5N{ywLOHd(Q+UbW{JmYUN{$v(-1YWeCI4l+vVD@=k`s zD5>b_-jQR5%fBWKqj|*T0&3}!@(d-jJg2_h@K_Okqm^gPC#?D)dtK?K&IZHH70R>5 z!*XM5tVi8qEvKfYn6zphJa|AmF6Mvzb|8m;dV?{sHxkF9$)B*H|BD;_k5TJW_V{({ zhtN#eBnB$-gM__??&pN?pUSD&|7i2WzO50e)`2}FGWFnNaRYeE((3=M> zuS--|uj5Xe%myD$l+3EG!vN6*>>kNyQyld~eH};*#XVuu7%t?jj#|99Dj)3+3$qDl zb0S_gSCb4<3QK+P>8I%5tOeTfC|Q#F2FgToZVYJ=d+kYN9p_H>z6Cc22X^$Q$uF7- zbArnOH~T*gotkZ#PyrdJsss<}DrecTQ6hXu35EIs23_8-7sydK z6`>Ihi&yO%1qI@5kxIyyrIE69w+X&)WR-X@{L_k1XJfV@?R5gfe4NTFg`oa4Vx{(@ zyHLy$y$bf$q;Nrl#kZ3hJ=sm(KM8Lq6!vzt$08nen^9tt$6(;~VA~t4qyIZ=PeI1{ zRf424^rhBssHX`TOL2o{af02Nm9TQDJDq@)wSJ*)SkDK(YUKiQ+hmztMs#tFRfgdd z7oX>(#FlUM>wf9sKdGe-q?(Xytja3w#a$WQPU(YS=m*wMHh0-VI9syI1{P)pv~;IZDmmli=bWx@po5$$kXAPfP?8T~fo5 z0_lk#KCt0cA*17HL`N}Qa03;AYBLR{39MY4&H%uO6W_G`n6%Harh1niG^7SvjdksUXlKKE5K;!i2xLv&kQ{auL(_$@I z=QUJ>n#QQY2C*-_xI8J7xpmPx+MzI(diuQvDgO8+k9&*s{&!#?x%ku;E1+%ry9qJD^W&+~Bk{fB$aRc?|ULJ#V!j%(H7zIwpAZ^Qg$KF}ar) z*1Gcz89P+UYAm}xc`e&&ocFM0OmDuZXZazC_QqM`W!i?Dxb=88ev%4nVi<#E737Y( z=M0B@ju#lJUFdJKgz@x7yDbI89~Mk(UoMcqyN@1hb@{3IfYJI0s-?xcw#x>TJ~Yf@le%4<&MvN2}5Xh zuIvf&G$?+6!&u)|BaaV?URZY6mTT!CVh@zCCl5*v-;LNCr2X@ZT4_Ducv&Tx^}9KL z-V2UMh%sW8kXV@eC6uTBJiwOHmB(Ld!p_>CPEm`KRFSQF{JTr}2}Cw!Y@aQ7m{*A@ zBFG;-E7UeUF$tX-xu1qU!QqL_ zLd?Y2*!YkyoiKFnuV@EI{F@JNJ<&!aGvUkU&%Y$@96WzsTbk6yGyy!AFR)e*knQtJ z^*6lrgYF9}Mo@~){9D%jT!GqTu$vAUn-Lee7D!3NCu|bFPe&VY^6F7Js+KkWaxGqH`Q0v9_EV-7Pw!`>g8JyV zdJTgGXHQ9QFzbpZbC{m7x{vaw`9F<0p~v-;cNNXGW$q{^=aaqpesHGDP@>d%)^i0k z-oXEBF-AhH`MRWLb0N+0GMAu@ISy!W{a`r(`>E9v;l9hJ+H zgdjH0e<^BGyE+z{#xdoBd22Rs6rPrrCYHT*Z+j0`>ECw7QVBlDLV=>CEqMlYulEHz zmj_cGt=ndx3Q|;egANXyA|%^PIx_1Zwqzz#^5(iP0%Y-1Y^ksLz7YC->epX&a(e6@ zIy-O3mK_K_ZB}ik(Gn!C@)@Xxgi)?sygoYr=Vauf9pY>K)x`>lkjv7@L{j=Kn9D>n zmyT!wKWJF%=pJciL#~W|XJ?1K)Ozh1HOhp>_VeqRJBp-cTmQB0zcUN>cmFyE6N)x% z@~exQKyJcnm(=4fQ7ltjr6!0@bb!(crC`SL0*+^Y&ve?=*-IXCa{45&4vu?gn<^8+ zF#sGK90o4Z=yNM8D+!}NA3l8OB_}0ys4es1$iilkW@5@4auDh0=NqvR(x|B64SmGU z9#A^~a`Mq-Le8 z!-BUGDKwC8lF@E%a26}uXejQ#z!-GTn7v^%<9#26scCnGSxlaVFNo6Aid5+%zLuAh z515m#I+0UGUH-SgPlNKDDGFBwZ2uXS&Je4XXSK@*GPuSmEThQTiwRc@|4cNA6}*DU z60-eshx8c(meq$)Hhht_dma`RMxeq4O`t^ zzN&g4`aA}=x$jtUoslESyOfv>jC+8@#(t{m%^a^1OK)f}xhNtmO|n8Sc9rD6YU*=P zn%RE6cIm5gDmW==N9|dy|KHH3!F(ID7yA{SzujY38|UD%v{iS;8@0}8h~d{N$wF?l z%CPN1j>nUp%j(IN;wL%_GfS4 znX_&%6lu$k@_fEa7*PLSI_KIN9K;^@{jvVk1X>uelE0XTemoYoepEh2>$Oe0?z5mq@wd`Pe@>waANe(y?JmpRa|E_)k7jnelTEX5_GZYS;4~ ztdK}OB7^g3XA`|~>@l=G#b${UGX2c|+LDNA7Tt`#bXlViWJz>SiD^yhrZDhcB06|8 zvqsc6_-?Q0n;aQ_x_YcME#BC2oMYUR$lm-)3tav6ad>_auFh@M_D9E@(vuvjvqWiw2@|GeYocG2DOet_LBvA5K;GAVxIM3suo@t`1g$gM(d< zW6hunATbG$Efg1hJ?#&?c%Rv>&xp$f5p#ykuIoh=$fec`FF=|mJguW=hwl6w3O{O& zA)?s9fW~C59kq7xN|ovz8*W8LcuPFWpH&DOR0a6Wi8bly(o?I-Od{UVMQ}Vun7T*s zffR%X8A@7C*XBWp#oto;qRY$wy&=%;#cX-Ul;^#_EXVL3FwmV+#J@m?+*2kL5DZ(y z>qJj~K;7~h|1uxh7{mzy)UP3Ok8zY~+@(v?tKrz#zCQ^Ey30~sF*`@=kI%;9Xh6|B z-}OEXRjEj3JLr0k>GEa2J=4)mDZ0h+b#R9zt8_fPd)1p! zO?JJ79Nklh;P>rF=X7d&DT6{nm;yEbrccY#T8)hJ4?#(F2Zf3<@PSMB&0$A}`r{9% zaK=b0QpIA*aPcwMMKCiXLu3iOzuR&7A+%>t4KUi0(+kHXK#=$?t+e%G%ebc*v|$HM zIEsC3iNt+|Kz3AUA0v*85{Wk|^odOOYE_vlVbxkv!va|dAVvM$IF>v-MPh-jwP}pL zgGrEMJnbBLng&W)h(X-$uDf}aH#bm;D6yv86w{cj0Y-)f2e0N@4%>atN1+;?B&`a| zVn24lMB}8b5bFQdq{hg~%F5EAa3Hy$!3x?W|V$0SdU8D_mAD6&}hUb+wT)Dx|T}$EO}LVQWI9hZcFLrZt%Pz3H7HKj< z4Z4p%6_ubBigS5{8>LW<*Ew0~12#)+Jt)&{F=9@-WdNd<@YJcc#zqG?&=P;ZMdo&6x|CcFkUYr!ygJf45bA#Oh z&k^L~!kMFmfDEBRtPv0RyJj4ef?z6F#V=oP5$W%rj@LW>h1AfM?wj`gt?bP3>ItB9 zjOhC7+&0N?d!x5?cK>9-yCyhZi9jM+;v6cjIxD9BuA|%Y zxzml|!P)&k`5k6?44J*Rkq#D(cZ^64Ew%ZFGkdXPO1ns^$~GcQ^i_PIBR=$@9C2V8 z`;oRmhi13fvQ#7s*k*0{{V^c5H=@Ohozo&i4uMmAh{`{Ho}^NXU}A#h_?--9>Org? zbxYCl;G-PBXOm}+a-$d@5e{PGyu+A^SzA$j4ual-fiUTqQFIwEFHve5nmpYS^k^wH zEz*~d$*OB=k|30}Axa={wKnkCf3b#18#`n@=#wo`yDj)*-7Erzt1W3`vG`grP&OW| zH)3hoX?i%8?X${zt=RxYYNz?-sOSLq+4`D_-alsC<_YY}(6O{Cw@gY&sYxmNYd{`j zMIlQl4w+{?6hD_{Onmn<0Z6#9uE35__u82G!?PSux?AOEFwAB zWSt%St&aNz4>RB@-OZ`TIciHJn8SRRrag?>`D|;H4>oZ09b+xz$bqBf=#5<8TkNA) zuN8lgA_MZ?1l6e zS<8`3GNWi6sPhVqj>}%&v+~bK(+a`{V33(c!nuLj1(`hFGb$WFfP6o4rH z7X}7V-@ZNO_%N-q+?D!Q6Yo<5b0LYVWa1anH7Jqv^XqG4Z!A%bNqIwF^}7=H-U5Uj zZB?=20{X{It4h)tmPBM^bt(BAALblPYTitJ({y)p6ImGet6p8<7iHp;#Bx~7Dq0cz(ey{klTPbD`oe{udBAKU@We_S! zhL2058?)4gJ)tz1ug?!I8z%XYQ(;^3dwL%a!N37_d;G;+_~RLvDe) zu-QTzj$Cg2H*YWMxYT?u?q#|5rreF`gRq*y<3hC-Tvn}7MG(499WqX zduMa=^43tLrKNrL6>a}qGbQ$4FDN~2uv`OG(TUy&)T*ed*~5>%xIEUex93u4CxMC& zkknA=?kcD})QBLLsX8MI3!lFJzWX_qT;$Uq&G>tS5Rx+AL(=Rqcr|E^TbIx8Ih4;s zfqWg!02^XSZJnL507%awmxqmT{ba<0B}>ScS>|*KmzCl9cysH>8ajc!+m43>-3?q^ z&`S+3;5ik8hLVx7L~oxdyTP zpSAzG17>`b<(|sq|8we~9zH8={^SEn773j3g2F-!+I}V}Df;8%phGHF?Cz>ax&dbv zHoVS^v{oFM<{$5SGC6v76!^YD$FR}P_sfeLB+&9Dn{_b4DITob}rPl9SY>fCSdx2p^oPOLNO2v5Q~>s6Y9~K zo8~wGA@P}w7U?-HfSnNr0Je5^kP%15$1AzHom5)JelMGjPueT_itbYQ<2`I$5_pqG z&CWAjYA^`^tg5K*0p)plNFRCmo|Dg?KhxR}a0VgZ+i#yh8f5g!a^XmYeB_|3XBL!t zt@5Pg=R61m-j$$tHo=u({7T~AbE+PLmw0gd=~BDdR-aRc56{kN zH750714zov#yJPn3T!K!1`Gs>L14e0;`HKzg8^I>+&A|XM8 zj*kBI>sO$M&q)~H6ygKO$UrhmN=g||&w9;tROc&px?rz+hQM?{3Z2g`xc(jq=)nk+ z)u8|Hd;}@M_^pOWA+4)ynJyNs{*P=r&4LNDq4%8e@4t1Wszz+zaRKTLcC<4ZmGvN9 zXIA$k!gTNZyNmsLj4t*+p^7sryqV%Pj6Bb%Q{*NTXk|~dqY1^q-uPA33|1XlL7i*{ zI6)lLWntm-e7JhMDlN`Ggu3kdyrYcFGwBJFv^2xBLgKi%INLXGsCAz^+f-wRsXqxl zbPk;owB-)mVwdryf!z{MzpqDwDw*(u zplLm~DGkBLkU@ll+C(AJ?YBgf*}I!!Bl;+4wa~5^vY!eWL79GWFA04Q^TKA) z>`^;6ESH9YfH!p~Nqq+fb|khDcwrIU8r*HbszDKh%`Cn+%vJPPHJAVIH&bJ9?!%tP zE9;N;FuBIAMXN+z1&JGPFVrOTj zH#i~^%cZ&4-c{S^t*KFMYcO(-HBd%Q4h<63tW)kq6#Q342@MV9ADmdiUxfiFNMpu$ zR(&(!sz2zL1v2Dl%+{6f_Wp)On0Q}A4^BoOe2i3}P(m{h3t`7e(pMnodVi8h@4p82 z_|7F-5cH&=qtFI6OGorwHLYl zYr629USg>_z33~CK6=j+m7e$l<%EX@F_aGt%woA(F?F5uIV;PZ--fx;h{7QCr;o^} zipxhbLZZg?B#l7==Xp2BXWIYTh@TmOav`6Y@3J_eRT34WD&B4M5*+#-{q<5aGk!*3 zSk_%`a4AoHFc6%tqVY;+CLBb09Xh7`BuUK7I4YVLAyldf8&K2qcGrG~hPs+-U-*{M zoL$86Gbzzg?DJY20*Gx^9isb&H0DD+EoBla$8vF{9HEb`+?+>YcSd+_k`rEmE^b-p zkr&IpiBUFT3o-Id8w=+L-2R4}h!QC^jQArxVY<}uONIg6rM~x(If4DWTdU0 zB}iY3(;@UQIWj6)jn{Xhmz(X4#yAC(wmcoRFrbIH9!PVAsX$$?1MZjaQjad(d1WHV z1*BPyZ&+WQiCTwirE!<~%gM9#_xb50CN+L3t~p%XJV2Rl7Cjv8+aj>LlqX+Pq8zh@ zS9W=RM&p3F@B~uTvv8}7+o8R{T!jZN0r9{#iBeWofAYfp3yzQd4lfjxjeY7>gNHB@ zam|uc5CLcTzM}2L;O@`cfR%{*nVp2asS-Vs_SyuMv*hbh9cNOd!2;eqRc24-e^iiz zBsNcR0=L7w68!Gv|2Eu6zjHDw<@fw&r)EjaFOd9l!6%RrN81ziX>c4}QYAU@xYO)i z@(xY9f}fL3hi5w%@{$=J9Ay54(?hji8BTMRqmzD$)F8+N3G6SEy!GWvhhYOp1sW+; zc03`KeV#kv9{ZoWl*om~k2<=6biyn)^VZ#3lSRBW#KF&(2e} zkI^@j;bC2tpeoup2{3M2-?)7NsAO*yuKIMFRkK1(Z%qn|yMGO`Ragiq7MViV_6`~P z%z&43@rR+~7JkTH-g{3r?hkjOt8;9Mg+I*ydT}}54_8+#U-qD)v`y`E-r2u-FLzC{ zB2o1ytzI@!;K?(;sUF@|)5etd79;yjUw7JoBULJYyY9fic-iF<#}6u6=UV0S68ZUieOLicc3sKU6 zzK0;E)%&;OKMk%l{&+ZkbHw7haFHCJAf1w*d`ZxMIx+(dyq~K3mO3`%tgWQ#|7Ny) zSqGKeYd{?iz$|c@)UWUqC!&)Eayhk_*)(rS0!?FQ-Zi809(_m=JkgzCO=3TzUddHq zRw639p1ZbLo@-z0%Avhuv@Uk?`G_;|8F`|OtliO`yHDaOU0374; z-yIA@p9{Omzu>(;{BS1rYEjcJ_&tuP-fE@G;_;&c!*iq^k;92?6+q?1?lE}v$Qo? zh2$D~pJV^4m1Vzc7Fuz0s;E-a+usyD8I;QyM!Q=cHbg@w;#V=L#X0I#02?GkEu{toLd#v6&LAKCk}Qk3qIvg;e7T-b$u5(uiVBZQjo%1;fH7PhHk- znMbmc(UWQC{|wn1{#dGbx_~E}xJ3}bx5v`}MSLCosd4o2)~7m;$xKy4azhU!yJZtT z;|6#w$Tu7eE!>;1HZL!uHg5dPR>%jtGjPsLfoyO8yKhL}h<8(bO3>? zShJ>V@%U$8hyTHnqFdFaIr1w(QIV`Ak7@JK7L|`?`{{%ZfqmcA?))PvX)Kpss5eKF zU^NVCJo$JuuPciWbQfjlMmR~Cr*gSNlc;Pr=NA7B&d6Wkqf8DtmX^$*d2O1ApRVUM2$iyky#&qehN$Mq838hn%Ual}3Fzc!Za zu#&j03$atX!TS@P2cEd_Z=96%Q3kdEBQKowMat~KKbktw8soc692JHQL&*5|CK`M)_ zMX5w3q)H*#YB&69&14M2^)+)M3o!8)FaavJpq(y{#O^+dK*-5Lt*-D05b-Od2st=^ zzH@kSWY$_eN|Uo6G}jFrImPFD2MoK2?8ga{8-pF{9}*j**~9$FEkvfslY0Mm4oF(5 zH_PF!Ibw9s&=*o0vS^a6Lw8lK5BrWyq-ciTUDV|(HftibyE_=qIay}Qm&)}-esyacxQ zU&lk7m&0r_RIkJDK9%g)UMJTVqbDD`lZrKSUi7`$Z}2g-T(bjvhj}|BLmdLHCv&b} z)vJ!vKj1WIOl@du%i`tby--0zB`T_qB;XG7oRGoi*UlZ)zw9b!`4&mBMWw^aAf@AyWKMPkSR_2`Li(};-n2fWaC4E zO4=_He%nV}E3J2Dt1j)QFU%=vE`pC|$pOs=d9q4Wp1h9?fAB7+;|1p$kS;<_ux?VR zty@MzXAX?wzg)-1eVQ!80a2w6_x&t6S@*+_%JURA3`yB^8)umH8#2QF4^Lkm7S;EC zJ#=?>ij>kwN~a(x(wzd*9hdIzMnVvg7Laa`25FF1LRuswlCsL5lq*3Qx8Lv<2q zu(amw?ID?3OYb=UsCR<-=No-scQWrN_W-lVMz~Y`Y9nN3;%$R=UcCr(k{!y>aNova z^(=SXKWSVYWrFID!;j78LCY&w-<_uS>T*i*>70kx$LWz06x6d5RutB`CeOIX{919x z4^K?)SC7>jbNTd;g}E6>=!l>TS*3DHC44Q*O>pcBh@SpzxgWklYRSO+;mb9J1d^uj zz$W?%e?s4epD`L%2%g4BdO?XSc2NW7z3Kd@XlS7w);td1oG)EnS>mS|u|zN1&oY12 znA{yH=X*LMkdK~oj#8WHzGzm>x3wa-?h3CHtC;yv9`JX|$?5W$xP4YK%DlwGu@A8v zv!tXhXwk0Gb-%wiBcQmBk9^G}Nl4CS=a0CN2d+c^3fR9_G`IqNN2!CRIDNQIvFj5} zy{1Xw=Nw_?XDf3}!ra^&^LNDPdfs|{&f!A>I8OHD)jv+l@vgS(s7P^QIT4NeoL}4Y z41yZo5tVJEjNRgeji?p6Y45cfo+%Sp#oLE!#-C=>Ij)RZY+8dfd?`Z!9Huf}?$+se$C z;@|na6t+i$MG3p@oC4x6yyX|9=dApKL(*TKw6~blrViTX6!qqF!syxAKN3qRid}BZ zJg^rl`Hq?UJ;~P6O)E^+EsaVUNJf^br5?iG!_HrpDk-b4t14@)?g-!?Nye{a$9a5dQzo~`8|5XSRv~&tlMs&@0#~(kmOv4 z!=gCV5PA`#Wd-X#tZ3P__Xu5{=nS4IrxK~ed;M(Ig){<3hoVev;w$Tz(zu#h+>^N1 z1IT$$ewm&5P3hQxQr)y(uEhFz!kQNH2z?04a2ndPPNUyrtp>P>uezuQeZwG$fGe!r zzr!^SnPw+C2P%|~j*k1VDG(pf{yN>6D4kxPOM9-Niu_B8=-=IDFvfW&!(%L1*Zn?{ z8(T^g#gSKRLPAPar{%OGj|T7iNqZ8F>FJmcDR-Y{Q?N*1@_Ag^zNySv9(ln*^-Be{ zVQJmwV;ZK9d?sXT-D%F9cCVl ziK&**&^SvL)}E}jCoK5dYqxnzL$|PUd%QwR>w!3LsceAAIH7nQ<%qS03={h^B@;9^ zFTWV*R+ETgMlfO>fq9Gl0xXHZkB3BRVcs7PfUC%1DUVH5&&u9v%t;DGXT%NM8hIYa zS^Y~I&_jB!%RH?7f^`J^6M^0mtklpP)(2P|22D)abtNz=B{M4L*gib4M$7&j?kDCf zWvTd`IhH5pI2p}XE?sSfFFR}H_0Q6H;GXVC+@4(xpNZ1#Zkjgl>n07X`I_O<5hmdw zynwTz2jjwf9Grr`p#lZL$m&mjN(mH8-A)vam0+09x^c-WC=9dMFeiHV6qMPq^XO#f zkXNdxf?e>#=6%Lu;`g{86qoCS7U>m5ELfs3<(89FRlda0{js4msH^dp8!yglQ&CQ~ zeQoMD%v7gauP-ht3#f7R(8Cz$KS|;D3m{9Wod3S%2P7+u9f(gxi4?}l^Te2&)I*Q= z5l3O!zRP}c`a5mQ;f|kYIQ1EI|8~%<(G02|&!mtc7f<-(Zrs89nFE;rwjWSa7&87=& zOwlc8d+#x^8wjVEo>oed6Jcd8JqUT9nr?y?xsUmfyRess5Pk%Q-QvsmEKdJ$A?T!I z17bORq4JWGVpN2h-{3R&`dnR4ZH#2bir#~hK$WxU^@ma{LAz`Fc1hC%@{kAydei>J zXtRHJe=%)BoZa4j&*8q)t3j`4OJ-(m_2yh}=_sjj1Sj8RrOrOLby?xuhgd3UDHSUQ z;gGI^GlaRv?K{2`TVl>f)fcsPI3;hrATo3dYWk@FQY=!=51uUOuq+9vb8D(dM&xxB z6ZM95@XC?2_m{1IkBuiwFkDrb3g$n1Hh&^7zc(qFs}S{_&6y6Yjv^&N3FSUyVS>gq zs{N{wd-1v1omp^TAc}O>|C7M_Es4FjJkf(f1pK=3h2)U4v`d)i%V(Z(N?&jx0wqi1 zhpE(&!~$RMMa!Qmus-K18V~eaZsf2hVm>lU|DIbi#oKK@(6VAjy3RJbrzbW)FP_7B z(@a;*N>jOO^Qe?erPN82J`Mx3&C_LXiea@#CenRkr-ECWL5$N`G+EwEXyKeD(LtHk z-Yty=ZNz?*JYsW5OX9h6{aXWisIDpmCpxV_toR=R^5mmnZsa&hJx<-)cfLI#D07>N zlwy<6;rI{G)CaocC2)6J6V#M*sGnNx?=Sqy5%pysd?E4NXkD{)*Y<+E3ojkZR91BF zWU+R@X$$>_KK$E=k%Bz#dp*W`$6FAJTIF#==w16N#3ZOI|2{Vy;U$C|%iBz5{{3ry zzcP43W1E7%dJl1xqsUR=1fdVc@FVwT>0b9{(;I@_b5)^k#Pra~nuA$6b=^2lW2EY6 zQE6q1`q_x?MCfkE#Q6Ttq{*@9B|;x^hJA^e_|)x0=IuI$bwWZiJ-af+X9xeyYDaWq zO(HC=?q6+3=r~(aSbrhHZVqXWcx*3;OIJb^Y09@hmpw|~T&XHym4D+G{}p(bgW$Lz z@qFo?%kNuB=#YJ-mU(*Hj>>pjcg=01$VHn8-CeVO$xP&n0L?U3tnM|_5%(o0o?`n@ zCH9aAo;p*6Q~scHgs}_fJg2rnM(qVfn}UzE?q*ev$9r#1j;}_c@YaqOMz0sXd-$t6 zk)Oe;7N~Ge97V4S>?7J8(O%N>WAp#e0#*~Nw>B}?`{*j(d<1f0rAnGUD~`=d2*}h0%v15+|BUI_ zwMdTkk%R?KLy@~pOjYLz2yz2n;@nLk*k@EooQgRi!m4zrTuzGS-q4&7(9k$i;vMlk z*)b%VJP&M))DgWT`WhUJP;<127kJf+rnI>%xQeuFY_gE|7JAF&MLYX&-$nQQcJAYO zI-5%!0@sgb&r5B;b5LnHsko9O7e`t~t@510Pq?7qv(g|8Vu^F}=2N;y>26h|$a7Gv zOaIH&>xX_quyu8M?~<%-_@z_*bxqUcfU= z^^F#7==2X4Gb6rtN0hO!&_E(o#X0ZCSdz|_B=q#m>TKr3o5u20Yu{)prHjkgwTRO6 zYRedD2z=*41O6Ef5tR<5m5=8KnB}h~z9q)?Q^RmLA;TvI$ z*nL3;wFyL@5@j1Z+$&U=`Jy5TJAq%ydo1U*&I;i?gQ{XmO1NIKF+BCNLD0te+1P*& zPt|J>Pj~gr=l}p%6qJ=T(%TW|C{9_U6v=F!{G(kDMTSsfxTG|NwS|)>Y1i`o(C+o@ z*EGx)!{g2gR8*XtU#*vy+%*%<_9vnUhlr;T2i*b>f*}V!{Oe!}&c)7L+Z8wSIwog% zJ1@tLiZt1&m%p{RVcMX!%CysSSiO~Y`24!c@}*SS5cj4kjksCic^ExG0#TSH478`< z1PS+i`MmsJ9n#uB>pX%6SoyG{OS=E&O)hqEUw*-Fu=yjm&Nsw0M^wNTR|!sypV z?WV8X-P4Ao8o9XwGRoISCiwG-eP^R;d&{Kmrtwt29yB7F0qK_D=^BB?n^qQMl2q3f zlHJvS1CkekKZhNDV8LUzwi=_r^?}%!T@iaudi1RulJlpE(XXxA+SGurVCtq0caEdj z39*Gih^OK~Kl?g#bpMb-^rna^1!2U+++5z&dB4qLXL&9zY*zma zwCt6<8Yf8B$=JMB#GF@xeZlKSfO%c}97(|{2etdAa&c_;?L+6GcSv$6QSq7#Oiyu$ zmE>j>Z1^bwStGcoM@pSIJS&SFl+lBj`*IU;teJ2ZXyoi6G{q1}Uqi~B-SLPlQU&e% zTosnI%*>L?N-Sh4dSPLTfq?=1=)t$E**|>*34c|WC{$69^V@=~!mOF2!=!4z8koMA zD1t2H*fTtH6$m|a*N56kBzimkCwEpPs(0M$esi;bVwR6B!vc=Z#1a9U36y+$Y^iT( z+0!wBRGF;4zP@fo2c#aK_@XOlnC+u`O*NeWjmH=3wVzSRatg9|^S1ogmn%+Yp2`QG zbSkG87oz}uPO^wR_g-79k0%O$?P%|pI8kaY&$I6%(A?CT7bXE>K_YAK2G1<>1)c%2dP#UoG!>u3%1_t-L+^_-6ksDjr`hZ5<~hFr3q z2Z&@mHHraku6U^|sv-JSgIDWNVp-WKwrNZG%?4ok&)-}Y3RCllKLB=-%-3GM1JS^{ zYl!^UT|0y3uiCPf$A_L8a3lQjg9HJOmJ@FBw>1TrA#7s-*18!G*?QiX-%ZZxOZQ1U zBkh8f1l6ax#tY;Fk3T7JR&p6JnEhp=}?SQLSM;#3;IT17Cw&$5^tP_U!1?H z2#Sl-=;`S#HrU|d(ujls_7hL;ek;-t!!=hdk5PTlWjc{D5ERIrRsM@92&jOFo)W z+j9;j-w=TfWj64~3fyJF*cbOagD>dTgK^-hovFz@1xx@(4M?>yu&|)Ul0jUaFHix! zij|Emc)+}8f2O?empFMsaC086^&m9?9ouNV@p_**MVp6WiJ3ZGf`<-Bzq&YO^?1Uf4K!2&JD}8l5Mj^PUAEQB6<|dct0qd8E%J{#e$?)yQ+G=>NwT zNkH|!m!yF!M4B>ur&H$-9`q)uSVdY>C1iVfn9WB>6GCh>!eLb|3|ahes+TD0wu7BO zCy@Zo0qF0dc5R`ip`n2j7C;?%Yby{twlFm{G$sa<|JgGpKo9`zHX!fh{7Yq9Qs38i zF|GUyz36R73rgm|$Fyj{R6M`diiVGELpf|8>nl3Mo-tYJ3qfff>P}N995q!5A5eGy zI>(i+plrCnYLE|>HKw^gE>CRSe!NeLwfbT?_*Y$#WKpjUt&r}X((fbQhD7A^zPdrW zj$OqNS!s7__dzM!_|4SL=IUx(fM^4Lst^EB88S!VLE+)|79xcN>YfD?D1Kywj!BpZ z86jO6rNbCX1Sj2$IA3z{YO?{Aw4KLrWE*tuNzU-6r&I5qatix@tdp;KhHIbky^?ls z?|9*}0jEqTF)msB(duKNSb=BqpOgvGvnlDQj*rH9@6VJ*KOo(YX#7Fq_iS&L z2V{|JL0KgGPbI3e5kcj@3u)?LvXS9Y+|HVgzfltstk(R7mzg8g`P~kBfDtBenWL8e~$O|y4O1V5MZ&SPXNS&_%cr@7;LKk zp`mSnfQRdH0wR@=|24O}NPZ|cz~>l9WBcAr8+5adi|DzBQs0JYpy)+c98V0%4ujf! z`bb$*fiX{;T`#u*=MG*I-Suk=`$;{Q55B$v%LT^qm#4!yIl^)+EtwE!L7g%q z>0g@Hm2EX$6-8B}Jl+EXU$<;?SP-JLQnmk9C^eiT_~XAVEjpNTPt+bvtqGt#6~|lm z8E~e%;(#UgP`W$kcP&JWG0zE1g`Thn!Y0pkc>*YSx4x;*8wQu)JjO4N8i?5+r6*A8 zcA=*9`?T+G#b_^-LF>pRBCra5jd~F(Ez*SKXktQ#ODzN|*mao@-lc!^2&G)DP#!4J z0SQ1-E@N!K0|eITEtU^cvTj%6zkh*$E-x9uZ-Fz3$dVO-(8NbQQbfz$da;qL-2c1y z`)9GW4D)kaE1ACTcRl4#IzJXUc8S(I4@}40+*Ga8-dw#~+h|7WhK82~6?$1hn1}zA zE>bVp@2Cw+Jj+|o{waJ;H7U-`m^$nH)jTT;$zFE3Yvn8BJA0X8v&AdTJyqX46ZfaT zQ|etlHe!O)NUzK|G(tfp^xX;)3V>a#s(w`+lQ&mER3Rnue0_vAQY~b&vaLr;rP98@Br{iDww(2PX6E(t zxuTq=A@8<7>rWl0A{h?_myho;?dsTcjXxt(Pj2R>woO&+_x>5HuxMQ|D4#I{8YSH1 z*udaRfj&71cys6LQ!~)*#i>`{Z|2F)#igLCiUahHxS@akr(%hKTvl9Oj+XjZjrM$X zjb$*d3%ccM?>xxwMim0rEGCFixi{L#aH@1-!tV+F`T8|s_Ci9K{dYJyJcD1uj1SCl}ybv-qyA4eIZ@R zd2#(AMTMi6YSb)V?Dnz5*WQChsmF00<#@#)@EAzlHIug{$niC(?eKrx{~0}Vq7{F5 zg!v$@{U5UOK?0MYa`+4DJiH3UkbDxq>F+Bs!^1v8Hoxz9sx|@bRtnJ8fFcVkE32d* zd0bwKd4Ao*V-$9N-C$(bhUBEzN_0c)QMLpP|LZ_cZozfd4PKHwlR*iMdf)1y~W#N zWdanS8KV8H>Ew##sW{J5o~hktFX+l|PT6-3iAGepl3KKl2td|8`_T>GjqJJk%znDs zntySA6lV$J>ZWv=H`pVi36h1Xac;;2o>*Y+{2U+rbZG95^Jn9rK7RwjP{@%@)4@_> zT0cItQQ=+M(8f1C4tf%$x(0K+k1Lb(d{1dc%kxEd5YW%h&v`%xuu3*B3KS3!01ryM z3%odekt7`*pNx!*;M35=zkiV_4QeX@iTO}dqoAyeNy@3aLH=WqkY7$lCAQm{b1V*& z*?d-|=xUS|c_I0OvK7yM$_EoKXRtFyKZ#U6RTwSJxn|8syuw;_LU>~1` zXDDom6a8L z`9cmJ$u;N?>8a-gmXNx1MbJWkpCA4tfC)%wjH|Ebjm$mT8i?%+;iNt(sjqfwtgJey z-6ehM{t!$QCevnrbVBaxBt*|MEz)vy+$8coEiKL4AFs`GVQx;~$J%sQGGBz8IzQ2< zAGIYU$CzyU##32IS@RPiObDy*m|grLd#E#w+#oAAn^@gSepKAAMq8li#Oq}We*-s% zy{7y(>RhkcC1eYXLLnp4f|I+wipV~f8Cn9&B8KUuMpT-n^rP-~N{Mb*WDH!xzYHfF(>g?&PTwFt-sR?w&9B`|K6KTHEIhiQIv4RC1hN*nY>U39Rb<5U` ziH)69(09P}E*Qcvupaxfm{#k9cl*vn!_0_E^~H-m@X#V{@h%0*N=um)WX)iT%8)YU z#c$e06P>=_cUeQ>Jh|<;F2z6Uug|St7QBeH#e^l~z4;*OQ|6Lr5T9NaJvzbGnfKY~ z08evk^3oGA=r~aIcAiGTbMZmqiSSF0wZq{|*;YM1oX|J^GY=v(y&|K`1ce zFoCU4&)RWKizF5z`d_>Ob-yVJ4OytdpL z#fHLeO2w%eS}K%J$@T%pRPH!3C3KQ9YJBxueB6Aa%ag6Bt!JwhCq2JES*Xd&*$Z^m zETgsPMx^s`Ia5VBa{_2;8tkdrS#4rceYCN)HDhWaXBag!WOlYSps1uI<>+{nEqI4*&*St=H2fGb``ojZOMS|3tRPDR8{@?^XK(uBpr2& zBGC7uu`HU|uXWpf8R^LbG%M=(3~DoY)-A2g^a>k(!)-96|L=)gTCSUCK+lwAG z(VH7kZkwwISj^kDySz#{!by#{a08sl^?c>MCrAsR*4xE4@eax-YWTA7lGv~JZckO? zv{Wz$+u~5k3;4utzfQg(__v6$A*O2~w=eJNI3mG zAQVK~FU#04o))-tT6lSVAwV5+`8rbn62hj4=$S5205J*N-&$H*7gtr`M1mY~bX?Fd znIbcRW5+P=Rh76(Fb zwf=uy57)cs072f?-d@Jgka}xttNUE+=H_N!5dps40*hk@5a)?DhfzjCK<6KaAL1-<@-!g81WPk43X`>Bn}}kqk!Gj zRq8EAEt`g(UR4gqLYSo(#RWngxTFuxsMH5JC?h{+6pq6gE-RLLpRFffR1Zx>5q zjt1ryv^NxWbn2w09`rTeilK*wB@Cr4(%h7p)_JEEp z%3pGQRW;b)(gQkI4is*w#Cl|5i(_hd*F{1?)i@$%vPwU)@=_vW=HDC& zT_ElJm z_d6qGy=0AHG%qR9%ot~DXMU<5cxoyq^Ipe(^~r=Dx##V_-%Klbd19@m%cXa5X^Uf} zVOeouS$mv0&sXf<06Wrr^?{>H)UahpIFwcmzyEiOR@r1>hF`R{0~W-%TjMj{8`q*V zVs4gb9=0hd9S!P^zi)0UYdSGuuTBZ)F00!SrmMLi|M09Dm?$Jmj zvs5fTnsIL|Hr@QP*zTBw6BH9y{`ucsK3?Aq#&4NZw&fv()Cv;6-E2?o32b=N^6;Xt zJo;J8TE%V7uEI%b0fKZPk6*-}^`Cebpedz%9UJQ}RZ69ol%%(PYrmM8%Tp1?D8Ifl zlqKxxy&j~PLP(a|=1|RPrTp^ueo47O!d#Q5C;2#b9}nm5p{D)1|86^m(}($|B$L@W z;&v~kcFbSJL5!<~C~uot*svz!tVDlPkE{orsUdB@H=#X@^~6UC{2nRQP5JG6AT0wE zcK5H3KErY6Or5+(RA+;H$DOCU+gsu~HO4gaKmD$vBX8*fH$z=x%53EIS4Vzo>gnj4 zyGT2zc%DdlYT3VrwEPmwDj`#KU{jxwtB_)ix{BE_LHH?*=sCq-Su14ol1pQ_#+35Y z2y606wPhcnrqD5c@BS^eurkyBSaZalPrQX8!nUS=L*txyCjh9s)3%DVUX{KtCr)h2 zFtg-jy5uaj%ZZCFd*zxfn_WOGI%io={)9Aky7$aCbokR8Rh)imwt!OqXI&NojvtyX zpA6YGl%PlEEv!LCo154P797U+GfsZJEpZcN%%VJS!lW$rgf4#h03Zv3QX)FJtY-h%ZJp!W8^L0=$mh2`s ze^+C#W~iy0tWMMys?AABq{hcL`l{<+b7KiqAU93J(|&gPrkOIdO=`^~<0h*_=JB+j49Lu@khFMwYad7me#WUeSd z_}m11j&8h>WJRxls*z??Q=k8>EAk83lEQc4n~O})!;CmhPlg|;nV)-RzM|q0BZWT1 zJ)<=~N+u6^eun?t2>$Vt_S0)vpYA2P0D+JtVX}kvaL6w9`h&CWkZxD=V{>!?CBS5m zlqBD%Xp~r`B4smV!q(tD`w$T(m@~F=3H>otOcg|VV~#1n;~k>VwxcwD<~yov=`U?aU7uM{LsVnb_Uz{BU+lS1AUsB~~k%+I+sScm3O$zgT7C zifY&?S!|-A#iPc1PJN)@&$$qIlCOF(ZnRqR z3b$mS{;FktRRak@M$&t)TY4N+gGRhhqnj~_mH(<*T=;9sYNhfKrNZdtX-VG4G`(Tu z!L<8q$m?FDNAX1MT%im&7Va!g8O;D(Y|2^Rk^vY@HDBBj265Z+=jt!}-u8xk7V7*P zef!p%2*G+L7k!(BAt@Awuo)Uz072o}%pwXOqU#X)+#>kKFCI=8hy|tx)p||2zXVuR z>BL@MdfM_+lE=#feKin*D8AQZO;;{0D?`oe6Cvi!*Dx_j92}I#M-DzbbolY(2fB%5 z()8S1_|6VkB}-nF0x^m{MH_tlQcX6VqUVYs^mKt{qwG9#q?jF!X~QAgPu{3r8T{A0 z5~8#D*o+(-733kPpjY>~(@SOLUI11wr20H-i;ynk@b&X^Ib58|V}ZAm85-t!UCfvV z8`nf??mvi_zJ5&x;v^7i0-unSkrAP7e+*>>%`Qx1b=3E}!Kc+N;!Far?_q^=q*O?i=8lsbvfCIUY+GrqH z_2AQ}PE{b)hT96l^MphZCMKkciVA>+Cpfstmk=Bs9f6ioDR3nq991_ogbsP0ShHG! ziXCVoH`SYeGV@GOu(+ZEgIJE?@#CSY%Wt!@Vc^+~W${=j=BRlAEDk6x*?JA*&8)BE zh0rIZY(2D^y?RA*b9>9iXvoI zN{IRa915r^;KH&5?4b-3tE{Mv7cZWGM$V-ak*jY4fGAD+hWQV7mdXRkS4J343F!0( zT2Ek33A|3i%1X|w`-MscUfoGZzy)gxB;DwFTx?(Nseg4ZI67YMT9=Z2o}FA)=Y6)- zPylUoBY*~25MHG6gUgy;UjB92ytt?fFoA2MGXY3Iz}D6lCa1y5&Mpl`ig*_&K#)Xh zTN?nGlXFGgLx#Dr0Ypbn8e62ze$NQh3t*s*9EO5LD#@PiJBQA}!BI4A`%ar3Xtm*! zkc9vEVF`BP=g*(P+l*XXlTIL*;s!1MvH=0&F#2cD$d;Ct-r4C-af@w4_|d*5hKNb- z^BBJhnSH>dQ6U{|R{Lk&h+j5f(mQo<0k}i-U>b?9uLw|6`_&A)rB~J<1~3q;#Sj+; zx-V@$H#cts@dKF&pn(ssQ||fzn5^5JB4^P1=Fh&39fIHGVequA``A12WO;B~09@Uw z8^a7o#3Fn8=avR2yf{NQf9!@HhK7bLOijBrti3!u;j?CdtR*uLxDU~+2vdG9t)hah znDR%N6o7A+A`K_Meo0$dJpxLBph_*U>=(VtG@& z%54le4Mjyo$v1C4zD_Cl8V1BsAC89?^ZqC`e`6-#z<%8WMJDr{1pZohc0?U(Qxi~` zhlt;}Kfe{M;ctx{)T7!=ipOEag#iNuP=IQIjZBMn33NzF!SH}1z1?ykG6xdcTF%&C zzvu)+AWPqn$JrC0CD|r<0C29<)zyP~d!<1E@buGC&4Ku()YQ@sZ5^G6f`W#=TX#=i zywDRUVYa=e(V?TGLk9h+@Lz`)vewo+Nj=Nvb??Bo6A%z!eez_W+NceV(ZUZs5b!}r zm9wy50x%sY5|yduMz~D~qn+&fEoI%j5?w*7Kq-|m+ zCSJlT#f^=xoPS;hc@=tpc~F6VRy^YrTW6bq+)!onTIoK@;`iecAz&LD>)|zGp2ZIbyZw;6t*$Vxr-Su9|}TTYzEBN;I6={YgK6? z0=mw-FV!7?M#q8XHhLqEEBA(O$J%LO`El3&6nSzuX15@0Azp*T5Y05ViaMA;ULjII z?4>zm&dB=4+s=zE#`Ti`eD|h~EidcC%XN*7jWWkxUTd$)L>D_e4jc4L8jQTa9+Lx- z8U}!!{p)v`R4KS4!*^b^4p%4ZiJi|U{nCJM?|AwYzMla{4iu$Z)tq>9%I+DlVDK#U z+sq7&qxEAt8$!}(*}c6z=Pc-~oj}UXt>JaOGYdOZlm7wqk~f?=Jp}$T;v3b*Y~=B; z6|4UqU=f19-J7sRDt0UkX z1r~I;=6r(JXnJKuG)z%ML?pr%0ccfxJpugMy^|9!gG;b+fvJa%IKKga7j5#KJ6q-L z$s=^c?Ck77I}HHf0?13w%If`O_)TZ$^FkKxw%7AuHiEjY?%s5^Bx5r6DAh37rNzbO z=xl00W|4w|0vr*b{VoYk=R}@xC@7;ehiy)L-o;p5T}3pzhMDNU@%g<_DZ#5hb{oD- z9%0>cb`RaJia+?CU3twW66mQQ)Oul$sjrP``8odljrBR8Y;W9tkfIuZaK_#YFd^$! z)X<)~(_id-0E$;tRRvlxzYp3QRJ^Qd77&iRgOPAkT$=Ze#y?qhodCN8EHSTt(oRlXW7d4WzP^$v%>Nsc zHSui^kpZSwJ&ic=Eln6^B5~bsaPf_Nf37G_T%h`E$R_)8LcqlmTz@{^LY5Q@;SMjT zl5H!z(JB2kk`NAi6igRek^N$7YL1Gi%?C5Ds#J zpYg>6NY?9eCSN^r52sW*-4ti)O1DAkU8UM>ad=#YZZdCpt?7(lqek4AEIWCV^*6;_vn z?IR;rZ3ujh|1pnCc!Rv$3_pun!J&5~fJ}r1X%lvKWDq2_ve#FAZz3WKZ-##S`ED;m z^HZ?55fjUz&Y`*b^>=O-E8Sb2zdvD3FlWeSp}R*!>dJr)B#rce*?O}>@VPQk&DrZ{I7q=P=?U2 z`Cl)2O_IIne-TFMlI?zGSlC*=+m}h## zoC9?LNlwxd08NsRkjU`YFE!YdfU!AIWmYCyztQxoNC77RuG7Trv?c~VT?9Pv{rx@g zU2^|JvLg?#@VR$bK02NJJy@@_upoq_HDr5bYlxtXU16-g!}ZfkzP9Ucnxo_?15aSa zk(py<&m|GRV03SR^H8(sZtwD;uWANnY;vp9Vl`7W@Ybzs3eb@N_y?>gxyA?7Tf_$C z_lU4&-kF&h7Z6iuzkUrakOs`plP{Ux)XdJ$KYCTRI%dU94%Ans*4A*}YeoZo*nVhW z07y%$Z_cFx)bGm|A#kv_;33U-!44m>Y?U$wd(!_1RkHNxh+uQEa&S-y+JW#2Of^GA zmNErlPQvesxiKc$nFo0ssmOtCU;}jz!8o)0AxE(xvN=n1{ zz0T=&k$gUjXnit~xNy)AfN5Y16&svi1rnG)7Z;nL7-sYL+D{))wz1Nc!}S`hh51YG z?)*V=y)al{B)sza@=PP^Ug zjMmIC(rSNcI}+-0zO4Ad`=d@OW52UAzm?u16>zBLk-kuNgAtLL7^ZGfv3D#%m5x6> zu|URl3g+L)fIrjM!LPn31L**ohsCAC!Hp`bW$Q$JJ{TScw3$y9TYyYl6uAGEM^auI z4o1V~KzHJ;s{19mIQCeHh5 zh6)4p0o+VWuZ2aU2vrs$@(6@JZr~*~E8G?DffYtVgK#Bl7H&z3bgFbp>g!#jGSel1 zKj{TqFj57R#n(0|d82d4L|LosqZYg2-mVc=Ffb($ z{}-(1^F#M|>~441D8hHtZjTMICJ?0yGqLuG!6rn%`@rxVS{uDnC9c}ybwFAX17wG9 z<2e0x#wb9Ja!XPrsLLB*hX(>p)XDP%?&a#xWDW#CZX|jPy?h50UAXF<6)3?BCr|sb z>4OVkw!(qA1vPJ=Cr>+zs|(V15ELecA?RLN1FD$}d%F2>N;l9cE*Ju(8+d81xVV^M zQ&%1d(F_^yzZ7HabKU^I9ElcvY4SBLX@ZlWJ}RF0Rd^-x~0w!Z?2B(R(`CGzYKjsRC`P$1elF_r66$r6{T|k5+^Xdf~rKRWEw;P z6hPY-Av@yDn>TO}0Q5h3WaL&1TlQ}DMVj$bCMP8YfqWJ@KqJ#i56o^OLqS2Ib#vjy z4h^`yWDpl$Ju)UUnc8<3a^8Re{WY+>LWl6290bd_MA^#kdjUS{KSG4gbWM*Q;(NLe zk;L?C@Uf+2Q6KB0jh-QqPPnQ7fxv&0Lv)AHe{M`}A)UW+wNE)Y{0Smv#N}YLkpj50 z9ALRSZNkEekerXeM()D+a3bqE*a3)g+S=OKJZdc~G}W3F>e|}G&az9%-L##C71{~j zeTC1mR9Kodyz{|*FeEERGmzM~?*x z=9Z3)buuCo0QtYUK68Pzmh8*xB;@k#AWGwMiGTfl%>r@FzRlSYoiOKMiLg!gbxl~; z5?CPtCi=J&nBk5CCY7L>5FRl=Hh`l9X*1AO;#ZYY;n)?)N`?#Nqtqe6l{&ZM6t21-!cQswB z3r}XfuS4+>J2CL->EB6N92-t|WUgCZ$QQjQj8-{T-^9Q)F9>G}##G1|CylQrgWafz z^tGvpedn5eCrOS7hHKKB=7j?KFQNr#bxK!8ge@;Ghk4Qt0eLqf6)%Q}no_f(h%Po( zX=QThXW*CprJ$1O)6F-+^ys}j(G+-l`8tc-Mf}*C=Y-(R;9VaEiaA!be+b;$cQke| zc{m6SK4odj0yBeMyHvKoz^#Ixz{%_I7w9rU|Gfb4?0+wM;j_-cPXKis{^EZhmkj#9 zOa1Q!1pmAwoS*;yzo-`#R89f*@lKt9h+3MH4ZP(oXJhji&J#-521pE#-=#y5rZgI& zt$kk@Z(XwaGRzrvE#2aC>hX3F7I+MDK&~!fh^8=e3 z286lU5pyCgHNcUJ7`xE}ZtM)FIy`6;ooPNVal{`Wv4x^4N*7pjfG zmV^a?=oWMp!H^j&gK?@7r0~HXM3S6sT!7>r-(SV%?V$y7$Y~P~9Js@V;(d_d0Cx}! z4PY#uN6RSrFVSEiI_U;%sIbOZ9vBH3$7}K5w{iUsfyu0G$EXoDq%_jhc`VS+ehjBvXPOKrJS=o=%en2w3g;*M9N*!ArUgO27JMZA zDcTbQ7Y*re<%RD*7OXNeY0bFj$@c|Yp}^nnUNjv}c?8%*uusOCV2B>7=tyV^Y?7We zCa&{u#%$?i*Vow2t4>zM_hJ$swtLP?ie3Ki9%LB_GM*TqhD#&B_V)LC0MC;K-rE)3 znw-b@N*v5+F71EtFHSLZ%}#zsKGtqL+1Gle_TPSp!vziu{#iKO1uE%%pqSWm-mWfe zhI;nL{MA;j)6b!fGwT@Jc?W{>xg77DHe?OfFHQ#?bhmera2W}$%+mg=kPzp{%<9Eaneyyby3YbPk=DozF zveH9$TbX)FCjR+k9z#Z&Q=hZxsDFe|Sj+x*q297!viOAfmEq8HY?e4r8m!ZIZ!N83 zEDF8Z*)~HH(^B4#lE196@hOq|@7KdzNBRI%K-siP`iPwJJKHzWKm7JzrBBjx1i~{=q z{yVgT44jPuq~mUrf)o$87)Y^lDkCMV_)McakNV1AV_^#SWu8uNl9tD zIv*nhe?$=1?73d`yjVwF-=B-u{IHz3gbey9tYxAQ?%6j2fSe7!T%I#_*9RLL+tkz) z23!$9n^Kr=vx4fJc0pE;+>sB|KLK;;hs)dqn9f0-K9s6Fy<|4q0sa2ny@7Ue;N#Ji zmZY$>z$Py)g+a3)st6!;7@PtNt^%;X`U(bs7AU~o;91PYMG?^I)hbgVP-MbhZUG)O zNWk}vrY0efeT`by1CcCfMgfQ>kQ$T(VA<3JVlSrHsB7!h`oU~xZAD>KWqL9uijpkK zf~p{-F6+R_)?s`?9}C#!#KgpLw)l0Gqae2fUKjFm2kn=+ok50`;3HRDF4`o!zN z;Ll0BBXVDqQg{gEi}=$1WCF7a)x*-IO$VF7`5C1Q_Vu z0!KSa0IY-7AqIvj)9$yEZ|&`|Mm^u!+4XdH2TgiD1xslsnwgn->#z%Eb|fX~aDxhv zyf?%c_ZBJfN%^?Y@_;Xm4?4^(h4m9VK9j~yN3{&YOwDj{^pK1nHunmn`vbFDSS8Ef zlh55}K?QXgx?tAOJ!?unw}Xf1kLESIaGa*-XGEo7?ua~+l42>cB5z)&9wm&(lQLr3 zRu-PwqN0jr=9MLb!qe>RY?7}LsGZnBGi7kF0AznQIJVe*l2tljd4O6jJr@_AW`(vo z&Yi<9h`m8gqvj~DpdbOH-bu}FE-pMEvX}z3l!pArsyW0wM}}*oTj{)f*iBNdKB)0- z-)#GpFl1xVZJ&sNMY(L^SzPMfP$Y|udCn9lAQQLc{bts(l|~d{4;m9I9*}4fS6$Zq zI_()er_cwBR2@>KhkchY2+7N;Z5T-nQ%P|C#@?&n_uU|6_){Sm>4shsoeQX zuo*e1?(ho=g3MB~Lfae!mLUoG%>*gm?JRnAW^7Y;7;&p z@ZJx@pvL0_{@+Eb$oA{T0cKV9kl!3B^`5CDVRr}LqpW-(_aMA*6*bDSToUWqH@YgC znqSrN72_G}=)WCHSqm=B)M z1Mh_52|W^$6mYSMDH% z?n{13n#(ap{`pir2E%qt!gJLfCEB1YN`stAw@`Sx&)h^bw4N4MKG&N0J;s;{R9oFJ zruYsFNDAfd{q>?Tw+IN@Gg{*#z*3ljzBu0x8szJ@yPyCWW&hv*w!2=HW88J!TiTOI zw>d|?pOylfY!)ZWV(Ns_Bcf5(DtXbEXNbgx-3KypNZZ|ek%e)-^BBdIXM8=4{Hxi& z_&H05Ci3x%cw6#Qu5s2$BuLbNyj|0}w+MG$iWFvQ=}moTdZyfxKIUzFEf^4pw5d%F zjvWk;!K1&#e9m0@hl}V>B+uOJCPX9;w#si~(r8}9W>lft6_*3;14a)YuGk2Kr_8*o zJ^hHyB++M?a=dw|$}-Y=jYw5Kd$ygG16>#a@ezF)GdjiR$V`3Eb{`+|YZ z{l5~0p}11m`~O$fdw^5<|8e8T$lhdSWj17o?7cFQ60%Mxqm0PrwkccLD+!Uz?Cc#O zlD$&)%*_11&-eE{*K_?{x+=~&_kDlXd%a$-_wwg?hMTrzW}*g6*PE^p`d^{+$6+S% zjGVrYO-<}Q@pM~*)|H-~MKXnd}-Bb*R03GzlpDJ56=175zXsJIB- zYM<%_ekXteJiHQ9anH$7KFO6r2A-sPbgG|TIy4>;6fKUyLB%~I9-6{qVNVrWy0#Pd zl(JIHu!Q~g?-7qDNOHrL6;5DfGwawp&X+Ae#EGsxr^@p*wCSb_;GbW!60C@?j za*TnobInAn^wiM;P)!*a7(k&gaBzAMAR@q(hvX_8T9{MZ+1FJUoi|_Y`<5$476_62q86eHT-;{catDq@_hb(mvAR)A-}f2e0a>JKz@LeKJ&k zTuH54c^m9zOW$ualv<1F+N#7&oD zi$G@q`3$lIs6sUB;NW0iS^RBIs?Loyz$d`|m)rn@Ep!J^fne%Tj@3fYcnP_8O&KN~ z#I`ZvXl^cdr}TWXh^2_XJTW;=t0bPan}Heowhh&D=HDh(u9w`mP;rxMzcxg-*if9} zrwiAHsCP-Chc7((a_@1#&)(LqzwYyI2&*(HIZWgO*ic61FLm*6Wteub*d(wKU~mrb zWlE<{7$9e4#0V*Ld4wW}L*tX*R*2Cj6^OA20vvH)?GE=XFE3-tj06F4@I$CHc0M~D zRdjS=P&{9}jABg4{O;&F=^8RNEz@ch72yk05SN`b?k%N(N2Vjgdn2_tcs&OEzt z$)wH%%wDzUi@39V*jU^eY2`jCo))q+QS^I@CLxCI9Vn#GA7_4k{!Z7e4ctK? z=z|!_@b=bmoAk6al4Q*g;PvnB?h;6IL`)cFe}^PJxn151NL~GY{;%48QCU1CW$d^5Li?BqOUCu~02(6L5=c%uZ!M|R0*{`%dl5~dWw_K=+`^5DiB$SE z8wj`?FbHCY@W@yB=|d^tay$=nL^CyY76w-Id0nf@t+n?wgQ%T;p zf^_3I${gw&_3JtZ&hB~Fw$>sx?-_2D=i?G#6H6=T`04OVWe=0l?KA)6aEh+j?51$F zi{5mtoRQ3Et)3K7j_4!@3{!Esf09CzQ|5lK$E1Svx%+++<+->SOV_gw!mVY&`Bw~D+^fG*l-L<6NsjAX4Y6Cu z_h%hA2>E3w$8RZX&(gJ1fh7tuxk1v)>uBM>*;U4xR%vclce8AbA9=;47=R1N9obor z)u?Bv>T5c`g==~J9B21l^jTNfhzI>(bt|CZSE9HyQj(e#4q36+y0qmf_b*Q7@>lsKW#RSV12GbYOoqPR0b1^0BoT zE;gyl|KUjC;?!K~G(vRUTXQzTQ7)y2Maj)>-y%j<9j;K+O+BF0NS-9D7R> z@H#m4rVwjzd@j#ai=(V|%WaEA>fpW;GeR@wn4OY{EO2@nnTe7!Vwkmlm0sWw>x{t_ z5KC^Ev`pT*tmV>zu@i7?)YjI9tY5X7xxh=I;$G#fs){cmDH*zcb$EJuBj#po%tbBs z>qZFEzR-mr{*K5!J{g(mEUQucGr57GAsnzNA3j{+VC)cAfV~I!BB-iCWca5lR{+WgwY3r-3)0_k zdS9j-=!2RSAb#ZT-Fq{W(lU$8vOy{qWv-w@q`hCJ`1hW-OGiK&J(aSItM&w4`OcfO ze&J{rL%nR*6^|=QO@l5Hv%z)=RYkH9w7%9A3#S={?;MX^N-0Jizfh@odw=1`xCiBT z@S(h^!tkmUFzOki69azlBiF8yy`jAFrve zpZeYh&KR_L%)Ij=M|9i0;0G>FtJko^+Lg_@t>3p~7rs}{ThkE}5#nt z1pTl74e{(96JCOb&YE{) z!O`}yCF--pGT>NI3BPdq$e23BN1&8HVAVwe;zZ9cqJR*9JE0!WV9tlzapT4OCbXto zPm+g=>+;Q;FIt9&@@4jU%fe`>4XiJHKBy`mxb-JbKtM`+uk1;3)S6JQ=pa(j4{XU*g{-m0%oM|pEyxJr6b)%P6w-$evpwf+81c{y6@Z`UBS zt!G76^7HofA3O-XAEfE|j^qkg_W)`wW{3O+PLA#sI&c-u{Q zyO~O?6Uc5v+;&zHAMTO(DaZ6)P%$7`TeA9CYuartGj-#y{v<4=gSKQqiIeAPg!D=c~PPu$-4EvjuvM@oq0( zkcKFlQRzDa8hUZo-|zW-XO^NH5nQmGwqvHgKPEf$N+!%P;a#iB>5?YDetXC!lXziY zXww$GwdBj8z30gtv1UE^5q~%WmnfP)<`*5(-r$zfvs}s*UM^C*>+%O$c)4vurrDte zbPw~c(Yz9z*<#0}z~-6qJjX8YpPa7q9!1KQDHO+cV&xg0WQgM3Ki$AzR?ZjMa8zW> zoY0i8rQX~(4M6erzIXb_N@dsi_FUP!tlFzv4Z;jg{?TFBc z%d1g~q8)>)lnE@l0G3fZ+iE2*J|1a2d(jSjy>ifLMq9O{lBVG8QHr`D}vW!Pse^JxoRtiRMe&qGs z(88v(9Gu1a^3Y0V^+1$4RGxTKc;=AaNBH;Nh?(qZ!N;PMqrW};te$hhbYvqVBL_Ox zq^%9#`KWeu37kG)J1na8s-pRwIV*N{-HC(}V`e3Yqa9KiyeE3olxd%*G$Fh0n~$?$ z^nTL3jHOn5bZUI{y~x(2?sY@UD{3c|O0QPA!yOMu2=y<9op2K`j-4qRiuj7@yfT#0 zG=M!i7ewgUQ8l$5s*ksMKUF$TCzAV%@Wx9ecH8ywig4GBNsm?OgGpgP3SG5rp;l2; z47A{;yIS4{5F&qplOUfbh%2y7+bW!Wd`@HB!f-!u;(~A148B=8_0=jng7$5i$6R*} zVie}wb~t_4Wewt>J?~BqMQqcMY9TCCM&W2-ThS|4NaJ{f#T2il2-ac=T5tZ!q>NU? z{R_|)l`>0CIjge?zzI)A3~y38NOr*&MrXsr;}-A`0q7z(G`HLf5>8Nz0MiB#VhU<%;X(QUq&EcK>`x!(uW+Db9^)Iosun)e` z%nwNrYacj6qjvjD?)@6ocTRqag>U2{l1k!~gU3n*91cRpN9?~{wO5Tyxxn@+$-xHB z8bdSh?e-ON*^?6FSMrmLF*75haZxk@PRYiPqK_Y2q3B&uP{3~cGc7TZr^G)K1Kk5l z3L)DaU0q7SKl<0=DXA&hR5agCG-XdTnIn>cQaQstHbzpxklow*b6)PYu&sOF?fiUF z(k?`E-{*1=r<{HZEfpIt;Y-2M5@RFDz0Wr{qYaaS3SVmqz4o3d9{Cbib1*5nm?7yreXusN%kYOP zkoW7uTWekSv#bAg=(#%BJrQ%+8ugUt55Gf4tJ5APsNE*lgpL2|=HViL!tHs3WLhuc zo8}C&2j3B@pgO`kKflgD4`g%;eRX6ySfL+U#pmLOKYI;5FxouB8BVCp`^A#|#2`np z+^Dgt`ek53pvjGbwldzjNA0gZaNSM_!Ze-Qt$a4Y2cCsNPQ%DToHC$~+1auE{rw%C zoJz;?wB=+4dfVGCzz@R0!b)Cp(X3wp1YTDcq87m_J8i$Q12_sw1_m3kgIhmxoK<`( zUbcp?-tQ_NnX4pZ|57)AwaMqwRLmU~^Psr3BlBK5tbH_J0E-p+=`5Kudi!Z%+YbY8 zw+{rj1C(?5s_5+S^rho-2Ihut9}PAI>a``I>665U9{P0`@j^r0vm)`A3`3kRNu|4x z7K0lv97ZFlf>T%X8(-cJ&YWBlJe&h)AU&l4)fISRl=#>f0l2QZN$n1p1XaJ zp%zUL$q0*Ot7PShJn>{ci=V=Z!rvgHM$oZipIM8jd>jhTcF`%bZNJ*Zua?nBc;A07 zubgU%U8O@a_2Y$WR3=4dPety2c#Dd?obcaqMl>3|F;V4UR_Xok?-q14KXW`e+>Xfq0K22BzG$9r#$yh{_Vtbk_50F-5)%(OQX5eHlf6roH&>Nsym;19OTOhHW~4p?paC+>;9VNF^Ro|s;Y*#?ciJ_~^3DE?eo zSrGaw4L*%tQK^RbC~e<@lfLWCqS7Y7;;QV&%KrSOGxLspsH-c8yx-ydZo(d>8xk1U zI?wU%pHzP%Yu&MgY@E~Kzv(95ixp2Whqv3Vx8e?(+bUK0Ab)EsmbfCDVU#rMz<3v;73L0%=ITAGCqIOWfcab>VPWqOwB&oI} zT;bPS8RkAdC>H%>RAGC*F;(XrYAX?)6_hK+L-1~<@L`qxS5W21*xlZyjK0V8*z5N8 zPh)bm3qE8E(>UhWP)|_DDEED~aCKA^V+)oX_3ks;npU4@m}a8w(K1I%0XMz|z!NDo zdYt`R+SV+;ru1gb35SEj#SCO3|4V_-ND5Z9h3ygc_{X1@TFlb z6~hSp7<=y5u1j8uR^OR<;4#oxupZKP4;s%;ZNNeJXg^i;TJ zK9DtEdaPk*7J5Qp9zS->iE>D;KM?F{sn#xGY%+nRfQw8yQQ^r`&~A0go;eKyok9PS z6{aEV$Tw3bj1VZN7i%- zA0_aAKMAAR^lbVI@Q|+1Kt%Q}g!EEnWDxIkDxye>EH&~*d_m1VEI)9-I>eIujLb=s z&+5i&R3vVQ69%#o5QEpRH40V#h_V4_eC#yQ5qT-J;<9_KVYkA!ZTAh!8`}3t-8G&w z`{6rfC%z$&s~$Uh0$ZeUISR8LmO^Gu7R3C8k|Wl&XrZy=$6$r5HnwnRdi3?W;&fQO}-Cm_&>)x83 zAB{i(=pHWx0WQGdGBjatwLCVcd2Uq(gQ=>d)CQ%h_E9SaM~-T8Bk zoHAs-A31Xlxq-M@zZa8_5Cn|DR&%oOlMFH@AB}&>^775E zzZ{U`hfz0wZ7mMHaOe3>UH*krjr0e3k*QlQnc#+}VMKWpZ-kWX^@Cp(Bc|6O3u)%z zMh8wt*s?#D;_r-pfshz#EmbTY4?91aPH$n6!L(J11R8>`*3k}QDqM0T2 z9U7#$xY{j1GesWsvx+7w>>gY|fz`?u7Zv^4ZA?2oJ^hG|jt(s^-yEZz$485VGgKIT zJNUc_f{6#)dwcQBGTzl?b^VXQ%l0@Tj5JM4PiH_uCH?KO)T`~C9pU>c0wg;INYpl* z0_VF!Iv>GP=V7RFV#=EWJm)cTx@yL6#7LL1I1@ePQ*SmSmhac>wIeOqs`qF-ch0>~ z`hI9HQO^UW(|^-)x%h_22`LKS=YbKH--B8W3$_+VN5^V)ai9Rc^8MS*Ll@ruXdC)e zzWCdW&w7G|B4d$Cs&$-eF$h7^M?v@SOQPO45_^N?DIuVcr~|8C)6S|lRjhxn{$RS!3S689s+UT*C;(_ZgErI?jn0dGcTq{VoO6ew zm?aZ%@$rwtmDv5~SpEVoU<6R7b#=gYQf*;FQ&yUQIWXexb?j_$w}I48ca_wWPbgL8)UbbQPLg@><6A)Z@hOF5QVI9qp){tlQd z_b9qyxp$SUJA?=XJ_0isTQ%*us##(5Nzfj~I0`kpx_VvG3HjB=FNL&bKd18^*uY}+KsLw@=i;dO4;|(207GqxpYIM#YblN!< zP8O6Q?&3ZkON$*oA?K_t*KEGPDye~_+Ju?cdPQKzGj^z-#KryE{uR!@!27UrjiS>@ zLh&jI@~_9N;cH)CgDpvFV&Vf@R@TP#zkhm0v=~I7HQe4_6IdTP;B}s6|-Ev#$TsnxXqW0Bqz&uwzvC?jgQ-EO!g%5o1H`YBazVxkQ7hmUZVx{ptS1gMfg5FOhS=jM7U;OdMHQSl|}pe}SCrS2a!@kJ}Yr zl$+UjM^~tkqphWN`V_9HypVYg=lI2XfP{rdKEqIFze;XY&)20(x^Zi!h}cM>AP*^8 zWKjAGn1(UMV^0>%>OJohqCm7!yJP)}M{F3zff3v_ZuG4mKSZE@YoMSI&~u||QivHP z9yR|Ho(gID{#|z#ZpN}VX$Com7M`<9OV-A1gm44b&*4FAHyh7=kpwHPe|vy`>jzx> z=NYF?=H`xP;0Dzp=f290jwR~2up`$2n{#l(tif9bwE&aB1-Bsyax`BqVEZq7dmU_i z6FWO!%8pi{KXzCzo=x-WqPjUzl;JhZmyl04nN8dLQ+i; z>cEZdPFC3qD5%_>JNe6S>e7iA7JJk}wKpJ2rR-XxwMKsi?3rd~Y2Lji^0(#V{j z9GiKuS!06)42AuUsTOcVpAn+m-QC4g;u(!1OibWln2MMH3{fZ0Nu@dBp@Y2>VgqBL zudgo($xjYpAbRfCt&S8I8-BLdE%Zo&z>d2Swgly3f2P^h*WK??P*X0d-E25+5GGf} zIlv6zAebbAfvP7b6I-%{T*N4#sH_4=DSu}lgr4m`e)w>QlatdM?d`xshgP~4uK|gS zOG@mqT|fk;MA0Bb%J?YbI@eFWz*j{10V93LPa^A%bsTZ40N4V@50D7i16w2DItR>J zmxm?h{_4C;olZd6cra{R;R?hR;M~I%X8DnSxBU!llc7FgTRfX zRpC2qRJwNFM>vpAhn2ynebM?Hs{#Qe(1BtIevejxclVpd%Z{aD8SZ??!D;x^OvlawbGfH zJ@!N3b9^d1Ct>6gR$)cC_;FJEKaX0nTC(e=_}|GtXxOg35xBO#M7Wj9)1sEAWY$Xk z$;2$wnC~Fx7%e#hr8w_(t}+wPp1XvBB}aP0)?tz+_$Hk(rlB`1+kU!>ZrEGgzD*1u zB#;#&0G-)L6`WW#-28h);CdYX`zOzrcwo>3MiEyKSzx&FOhX!Ykxu{qT0wX?^SL-X z8wVCCsJ|Oe7Fi+3$6%gCs0v^!-pA`JMh&Mp{M|M5h6MCP&@$%S3AL048;HS57FQw7=LjG z^~~0h5jvQi5Q9mNPn-arh3_X%fC&)v_U&5~@cyeE=dgi`P6Vy2s8o>AMx-%RllvjL zc@|plv6t8JkyTH^@ZA-I%h|YANo`>=pP~z@tE#FnosXsZIoQ}xl$4Y{8EU+=900w< z_D2D$AL;7rQvuCaOQBQT+Izkm{-6b=`qi=wJHaaRk)i0|mZt{y>x&?UD;{^Z%N1?t zs$`0bz72FQ#k`^B{{CXKG65b)bis)NtO%$AHEvJ5vs`D1Romt6DYKulRIz7|UDDFH z9KiN89yS+neBvF7IHXwx~Qq?pJMGBV82I6DgyW|PP9PO4J0S^KGyr|Uh-{Q6Y` z<(HU9*ZcUkDx@8OJFI)}hfP+4eH9pBz2o3*Z_Wr7b9xo?ZW)N1L2sax5;Z$NRO2x} zUSS7!0}7wZBd%s_CN1qt+TCQf4$%(vi*;lgX#!|$fSgm%(EKP~?*R+w|@_nV~k zWVI`n17A;1ulSPXHe0Izs}KnXnw}fa?|!h8_%S`Lb~4UOwMQdj7)edgTllGELPGdR zu>|eL*!!!t{C(RpuV*Yo1 zxc$S^!j5-a9t3|0N+we87#Y1vNnvbjZ-nfE9a`mp|fv@Fv-rfo-(%=(x;Bbie9RcWGCLZlxMF6-R?3eVaJ+G16}Xs zd}lO=hzJdsn{;0TTtQ>&&qkjM-dNi@guJVv-FvoI{bJ>veEJZ~K4T;vL_R|YN09PC zfHOisNa!COO%7FefCfQ`;`Hb1MIa^jrb||-z9gv;fX34&X6|#r7bM*_PCUR0@emUc zS;tHaus^2f4z2KyI`{Z<;Yx9_+}+>ahqdk#&jM&KUc^9j;oRQZ-F@#skG_BF!w=gZ z6+g2ZDk%R%Ui@H_AFSbQahXRI$)A5K3-;*Zw{PDt_(q^X+IY#yp@@ix9G3^VAfej? zcdU^!_~V&tOAujtpT!#UpOqC`X7uNZ3LBL9pRe(yU~HO;8_$lC!JhIy%)0aW`-s&R za1AYQZ`<6hoNYA3r@TZHS^aW|&3wHa$I#C1I;>?%7M3XRG!VuxRT6(DmpcXbt@SJ4 z<<{U0f4d3O9B?;#ZBKlT!leb^#>#LG0jpX;QBljpE-)Z~EwM*eU;i_FY$YJ72F;io!@bZllOdCpxz zH#axEt5yaq+2DhHaoe2sIZ$Qw`TP`oL1g~fq3`Xb>khZ}K9L^&T@w>Wv}DJU>oKw? za1?Ry^Y<4O2h#i6rd)DdSkbvsR4@9dOn{1oh0I^h502O0fBujzje^P>%oIc*E{s=Y zp8l~Nsmvi8htr39DuM; zMWzpt2d*C=4m78pc`1C-=iuSNhl3SZP~bx6zQp&ZT++Wz^%58ORqEB?%C-&-4r*_X zmGg|yj*Gb?8M4g+y>~Mf7qP{=oF<2Odsvn(3ww+^_8QNZwkE~i#BsEI_9d>qK;3^z z_Kc1Y?G#3o^r(sfqg0C#(g!7#px|KLC^dtKKs6$_8vK)VpSk7VSYoPlYD(;3K}S!k zKPkQ(|CzPU0Yimpr~siGh!$W2V{L1D+aJlyWMyJv(p*IYeh|j+Eo>Xx3XE}p=p{W@ zl$8=qPe?@c+~Z)%4cTkLAy={=Et$iJble30jXD2NfW(=q>28A62$pzKT-qa$~i=n{bqO8#Ab4z#8_rkl~`I@ zn&$P5_=JRa;9rbvNq?#q`=yf)!Pq=Gh-=QkhdE?I`?|2mw{U`w_wJnV^Y(Cq3P+>m z=)T9@yK&+AAE8y-ux%a}7gr6S0DQ<$0KDTb=3JoYL zEW6`MAY{y#hSCza60gw3s6~%69gYY5&_4#90QQWclpRDw_YDgK!4;Ciqc7D)!wM56%A8nbHx!lkH z<$kNhL5{0&!O(+HEhoBP(^rMWU(rv{g~XPW2pp_WRPjG-@b)-_oF#&xfR+qn!Mq_= z$obioWX;M*tFbzUkeB!rGt1#kPG*%=RkCQL`|c;0=ws;5^-FvaE6FZg$H2Mu7sZ_H zSP^mv*jBJ-Q`&th6#HNIXqiRRo~nEd+5EijQp3pK|3cyI$pVX+=)@4DgWy8{|C$gw z)$7q%nNDTjcp_y^@j=D2Ke_X5|dI@JTzAERs<{pCHG` zW@o#?1`S8gm7m3CnYRXC(?Fy_Oa0 z&k~l23mkdut0rA5oH5_=LN?6Hy-{9pM=9drK?lrB~enqtt=-BqBXC%4p;>k z$p(=NBJu_rNbbSn3v6$v$K)yZ_Y*6|e(;-o99{uJUwj>Cb-acMj_BwJ8RMSk6yj9o zWFPo8Q&ijv#vbD}Y;R|!Y8a4oZr`zyXbMm^d1z9MW)Ki}+;%K38`zehQYr5E;{o0z z&9m{(%lA}NR0Mr4JUg_R(36_kYSnn9T#o;8m4J_r%Z)S7V7)+F!tY zgxYhX1$lAB6A-GJiyrlFxb0PV*N(BQn&1E9j3|O_>Jst$i!QD_MZ)u(g3k{?N;G6h zE~qcSF-A>*$C6Cj)eFHT33HO?1zhdBsZrVkrRHn&@+q7Qxx-Vn#uCYz5jNeDdJR|yNI(sU$O z3Oc8$miYRKo%nT|OQ7UI3DNxS@=#7?$^He%7MW8Jb6KxiZ#tdtZV%0}#lEc@6ZLRR zTA~g!-$Yp>E=B|fSh%eM8>-xo28!ms7tLL!7Tk&}z4O_5Dr7Hid49+~NkZvyQiP*{ z3Qzo-HzG2pyF=%0oy=})GA>JZD7ypL2)rKK>=t`Y(k)zkb?f!xtm6D+h7f;)D~z;; zs3saQpMSH@17(g)7^a-(Yn?I$3%3nECJ2ZyMs7e-6**pBubPp0Xly(wXC@rLrh@Za z^{Rev1O8(1X~f?Sq7o7u{u(;=)7H7o4N|ho15K%Jt)QJ@MsL0MN`;98rKaps!mX67 zXM;cUIk)SQoWk}7i~nqE#SXd@-VeGAp(n)WnDf(T^;1<}hQy14Hw~t327bBJ3=gZj z{}?bK>DFS~_0soV4gF#6Djs@dmPO?ja*M55CjwViP$Ol}LN*}Ho`9hu6;T33ruE~Wp<;0gT+lw|?qw;cGKTd@QCx1#6}~a*qyF+^q(tGX*k<(>S1M&^ z{7`aVo6eeR70dJ-ihL2#vS)|vQ?!!7k9*%CyF4m4zh|(2q2TYVqZ@ZD(ugD;w#BU@ zp#1gjL36yyjaQc{2DbfP2el6kbzC0Tvy_IYS>7dhz8dTPnA2qBwB)^EvE4y;i&$Zq zFQXx>*N3mz4!rx2<(%5{)J)Jo4zl|w?=|ra7iL#)W}I)kq3TrkEp7@s z(jbBc!b6l2ELZG*{K{e7wa63eb5E69{a9Pr`?32*R2eWspZ&yn?UZ~{^W+>{W-mOwE^W`-W=-*jguB66A zYuoP-PG`)sF25ONt>1HxT-Z_GTOhuMra*AzBQivDurSz`d-sBdH;$Z!|NSc>ASDe} z<6IGy!qmhR%#&apjjL9u1nC zN#_-iIQe$R1wxD>(G60ux_9o#abYUE8(}UQYpAU+b2qsmQ_Q+01DD4|E%SHT35_50w%yd?1 z4oZ1R^5x_dm~e+PXZYXUD@kk5oKjvEBiJ}!dZHnFDe$V-#x38^rp9_!T&On5BWl+C}6B%qgq;9 z5ib(E$tNUsQm(xF?Cdr%B5I7Bk%FP&;l!x7&lhsl9I%KXI^AtiYO>Ru7NtyEadi*#GTl^y}dEv9K;+bKVv?z;6~5AYZwLN z#2!i}CaK(D`9Ze-?yxlq*dl=Eh8h`k7b6H(@DB+I(H@F8_*p4n0Jz~GP`9Ch5ExjV zknw@MZ@LmN?_(1a@q-o65*_!j8CK0|VNP%nKg9QQU<}@sQ#>wGjmBp6R{bFzU{U1U z&C1Eaa2Q~rV!EOHuzgY7Nr;R6vAuh0iW$n07$QDIqyXKX{rwvka#SceJw57_)KrKd zA&v(XxH%A)lE_d|z{%U$Xv|zu!jJVG&eS_1Kdjvq!{5cHlf9RR-e^c=rwcbwhWh^ld3Y?+vVELJu!^gvSvqpSoM1kx6S0U+Ko zp-#(5^56W*57H~FtgOUz5&*$S@UAi4dY~{P`Yco0OB53G0xwp6*drr* z-01&ioiwh4LU3S(6Y_UvW@gX=IMtJ#l!v4>sUREGG&aUSGPJ|X@&7J@$4Ny9v^)w1 zhL@NoXC}2YkVe7C^+EW1K}<|6RmYqPv)(XsW`G4g6{gz=ljI`9MCH9{ItP zqINI2v;wjOq!1v&1`Rx)5Lsx@1#DQ)tD_SehmpEBNS>IPQ6z8>ZdILyUKxf%tiub} z=v?t$_QCPu>fECV@_SOzAQEQW;LSivijba4G0wf6fX}*D%@0Xj=#R0v!vtJmUfPLak){7#6{zZb)qfHm z#$;w`xiMC53U~c-M!8`P>^+Y{un+4E zAD^9}EVuasdFfF)2JWPiC|=Q%Ozhbi6zzXds}M50CRbFW=yjWu<~4+V-v<;kSu!@T zW&_Zy78G*Gdo&;Mv?JN=mz#fm`^>3=|Ffou{o~j2xC;#DM6K6*o*ru`j%K*e6b7N+ zbXefTv~S|yxwaf7Y%-n6j`4j+m~~JFPxc!Knr@&{NQ%uEDj5tzr$0s- zy8Dby5&J)HLx;+5YCy~tM^4hu%0z=2qChK@&|8Ng3e>0-g?a}n2kUzGqpmE>P!X^( zHa$SKg&f!_+RS&FM*aKFMp`jfKk68@WE!(F=Y4ZC(WLYfMz@ThqJXb6M%5#O?LJ9&-2@5o;g}tEiLiH6Q=ENgr^TzP-!i ztCH*I=&l>QX-u&@e3uZVjdREx52Z*p-fX<1ns;A&E1zL+HKF>pQ4-Pne1X1axhYs( z?~0p!hHg|>E>{bZwT_19!T|_?p)?^>mAve$OCco397~;6yUKBw3!PNPpyAn9Jht#N zwfPnlk|W3*m>T#BvrE3?j1BZl*~#QSlJy&_XA-{DB(@~wI?vZygLf@F>rKf0|BYz1 zJf5GIQ}*1$$1y6_VrWIu;|_-D)wd4iOA=qb81ZEK-hC9wOYRGkjPV)o0K6cl`^D{CtiDVPWRe+689)Bpeg delta 50533 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 Nq@=D`C~p$*{{USAnMD8q delta 103620 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 diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 3449fbabc..cdfa4f716 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -63,9 +63,13 @@ namespace { ALuint notifySource = 0; ALuint notifyBuffer = 0; + uint64 notifyLengthMs = 0; + QMutex playerMutex; AudioPlayer *player = 0; + float64 suppressAllGain = 1., suppressSongGain = 1.; + AudioCapture *capture = 0; } @@ -96,7 +100,12 @@ bool _checkALError() { return true; } +Q_DECLARE_METATYPE(AudioMsgId); +Q_DECLARE_METATYPE(SongMsgId); void audioInit() { + av_register_all(); + avcodec_register_all(); + if (!capture) { capture = new AudioCapture(); cSetHasAudioCapture(capture->check()); @@ -195,16 +204,22 @@ void audioInit() { } if (!format) return audioFinish(); - alBufferData(notifyBuffer, format, data, subchunk2Size, sampleRate); + int32 addBytes = (sampleRate * 15 / 100) * bytesPerSample * numChannels; // add 150ms of silence + QByteArray fullData(addBytes + subchunk2Size, (bytesPerSample == 1) ? 128 : 0); + memcpy(fullData.data() + addBytes, data, subchunk2Size); + alBufferData(notifyBuffer, format, fullData.constData(), fullData.size(), sampleRate); alSourcei(notifySource, AL_BUFFER, notifyBuffer); + + notifyLengthMs = (numSamples * 1000ULL / sampleRate); + if (!_checkALError()) return audioFinish(); + qRegisterMetaType(); + qRegisterMetaType(); + player = new AudioPlayer(); alcDevicePauseSOFT(audioDevice); - av_register_all(); - avcodec_register_all(); - LOG(("Audio init time: %1").arg(getms() - ms)); cSetHasAudioPlayer(true); } @@ -214,6 +229,7 @@ void audioPlayNotify() { audioPlayer()->resumeDevice(); alSourcePlay(notifySource); + emit audioPlayer()->suppressAll(); emit audioPlayer()->faderOnTimer(); } @@ -250,22 +266,35 @@ void audioFinish() { cSetHasAudioPlayer(false); } -AudioPlayer::AudioPlayer() : _current(0), +AudioPlayer::AudioPlayer() : _audioCurrent(0), _songCurrent(0), _fader(new AudioPlayerFader(&_faderThread)), _loader(new AudioPlayerLoaders(&_loaderThread)) { connect(this, SIGNAL(faderOnTimer()), _fader, SLOT(onTimer())); - connect(this, SIGNAL(loaderOnStart(AudioData*)), _loader, SLOT(onStart(AudioData*))); - connect(this, SIGNAL(loaderOnCancel(AudioData*)), _loader, SLOT(onCancel(AudioData*))); + connect(this, SIGNAL(suppressSong()), _fader, SLOT(onSuppressSong())); + connect(this, SIGNAL(unsuppressSong()), _fader, SLOT(onUnsuppressSong())); + connect(this, SIGNAL(suppressAll()), _fader, SLOT(onSuppressAll())); + connect(this, SIGNAL(songVolumeChanged()), _fader, SLOT(onSongVolumeChanged())); + connect(this, SIGNAL(loaderOnStart(const AudioMsgId&,qint64)), _loader, SLOT(onStart(const AudioMsgId&,qint64))); + connect(this, SIGNAL(loaderOnStart(const SongMsgId&,qint64)), _loader, SLOT(onStart(const SongMsgId&,qint64))); + connect(this, SIGNAL(loaderOnCancel(const AudioMsgId&)), _loader, SLOT(onCancel(const AudioMsgId&))); + connect(this, SIGNAL(loaderOnCancel(const SongMsgId&)), _loader, SLOT(onCancel(const SongMsgId&))); connect(&_faderThread, SIGNAL(started()), _fader, SLOT(onInit())); connect(&_loaderThread, SIGNAL(started()), _loader, SLOT(onInit())); connect(&_faderThread, SIGNAL(finished()), _fader, SLOT(deleteLater())); connect(&_loaderThread, SIGNAL(finished()), _loader, SLOT(deleteLater())); connect(_loader, SIGNAL(needToCheck()), _fader, SLOT(onTimer())); - connect(_loader, SIGNAL(error(AudioData*)), this, SLOT(onError(AudioData*))); - connect(_fader, SIGNAL(needToPreload(AudioData*)), _loader, SLOT(onLoad(AudioData*))); - connect(_fader, SIGNAL(playPositionUpdated(AudioData*)), this, SIGNAL(updated(AudioData*))); - connect(_fader, SIGNAL(audioStopped(AudioData*)), this, SIGNAL(stopped(AudioData*))); - connect(_fader, SIGNAL(error(AudioData*)), this, SLOT(onError(AudioData*))); + connect(_loader, SIGNAL(error(const AudioMsgId&)), this, SLOT(onError(const AudioMsgId&))); + connect(_loader, SIGNAL(error(const SongMsgId&)), this, SLOT(onError(const SongMsgId&))); + connect(_fader, SIGNAL(needToPreload(const AudioMsgId&)), _loader, SLOT(onLoad(const AudioMsgId&))); + connect(_fader, SIGNAL(needToPreload(const SongMsgId&)), _loader, SLOT(onLoad(const SongMsgId&))); + connect(_fader, SIGNAL(playPositionUpdated(const AudioMsgId&)), this, SIGNAL(updated(const AudioMsgId&))); + connect(_fader, SIGNAL(playPositionUpdated(const SongMsgId&)), this, SIGNAL(updated(const SongMsgId&))); + connect(_fader, SIGNAL(audioStopped(const AudioMsgId&)), this, SLOT(onStopped(const AudioMsgId&))); + connect(_fader, SIGNAL(audioStopped(const SongMsgId&)), this, SLOT(onStopped(const SongMsgId&))); + connect(_fader, SIGNAL(error(const AudioMsgId&)), this, SLOT(onError(const AudioMsgId&))); + connect(_fader, SIGNAL(error(const SongMsgId&)), this, SLOT(onError(const SongMsgId&))); + connect(this, SIGNAL(stoppedOnError(const AudioMsgId&)), this, SIGNAL(stopped(const AudioMsgId&)), Qt::QueuedConnection); + connect(this, SIGNAL(stoppedOnError(const SongMsgId&)), this, SIGNAL(stopped(const SongMsgId&)), Qt::QueuedConnection); _loaderThread.start(); _faderThread.start(); } @@ -277,16 +306,29 @@ AudioPlayer::~AudioPlayer() { } for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - alSourceStop(_data[i].source); - if (alIsBuffer(_data[i].buffers[0])) { - alDeleteBuffers(3, _data[i].buffers); + alSourceStop(_audioData[i].source); + if (alIsBuffer(_audioData[i].buffers[0])) { + alDeleteBuffers(3, _audioData[i].buffers); for (int32 j = 0; j < 3; ++j) { - _data[i].buffers[j] = _data[i].samplesCount[j] = 0; + _audioData[i].buffers[j] = _audioData[i].samplesCount[j] = 0; } } - if (alIsSource(_data[i].source)) { - alDeleteSources(1, &_data[i].source); - _data[i].source = 0; + if (alIsSource(_audioData[i].source)) { + alDeleteSources(1, &_audioData[i].source); + _audioData[i].source = 0; + } + } + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + alSourceStop(_songData[i].source); + if (alIsBuffer(_songData[i].buffers[0])) { + alDeleteBuffers(3, _songData[i].buffers); + for (int32 j = 0; j < 3; ++j) { + _songData[i].buffers[j] = _songData[i].samplesCount[j] = 0; + } + } + if (alIsSource(_songData[i].source)) { + alDeleteSources(1, &_songData[i].source); + _songData[i].source = 0; } } _faderThread.quit(); @@ -295,114 +337,351 @@ AudioPlayer::~AudioPlayer() { _loaderThread.wait(); } -void AudioPlayer::onError(AudioData *audio) { - emit stopped(audio); +void AudioPlayer::onError(const AudioMsgId &audio) { + emit stoppedOnError(audio); + emit unsuppressSong(); } -bool AudioPlayer::updateCurrentStarted(int32 pos) { +void AudioPlayer::onError(const SongMsgId &song) { + emit stoppedOnError(song); +} + +void AudioPlayer::onStopped(const AudioMsgId &audio) { + emit stopped(audio); + emit unsuppressSong(); +} + +void AudioPlayer::onStopped(const SongMsgId &song) { + emit stopped(song); +} + +bool AudioPlayer::updateCurrentStarted(MediaOverviewType type, int32 pos) { + Msg *data = 0; + switch (type) { + case OverviewAudios: data = &_audioData[_audioCurrent]; break; + case OverviewDocuments: data = &_songData[_songCurrent]; break; + } + if (!data) return false; + if (pos < 0) { - if (alIsSource(_data[_current].source)) { - alGetSourcei(_data[_current].source, AL_SAMPLE_OFFSET, &pos); + if (alIsSource(data->source)) { + alGetSourcei(data->source, AL_SAMPLE_OFFSET, &pos); } else { pos = 0; } + if (!_checkALError()) { + setStoppedState(data, AudioPlayerStoppedAtError); + switch (type) { + case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: onError(_songData[_songCurrent].song); break; + } + return false; + } } - if (!_checkALError()) { - _data[_current].state = AudioPlayerStopped; - onError(_data[_current].audio); - return false; - } - _data[_current].started = _data[_current].position = pos + _data[_current].skipStart; + data->started = data->position = pos + data->skipStart; return true; } -void AudioPlayer::play(AudioData *audio) { - AudioData *stopped = 0; +bool AudioPlayer::fadedStop(MediaOverviewType type, bool *fadedStart) { + Msg *current = 0; + switch (type) { + case OverviewAudios: current = &_audioData[_audioCurrent]; break; + case OverviewDocuments: current = &_songData[_songCurrent]; break; + } + if (!current) return false; + switch (current->state) { + case AudioPlayerStarting: + case AudioPlayerResuming: + case AudioPlayerPlaying: + current->state = AudioPlayerFinishing; + updateCurrentStarted(type); + if (fadedStart) *fadedStart = true; + break; + case AudioPlayerPausing: + current->state = AudioPlayerFinishing; + if (fadedStart) *fadedStart = true; + break; + case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: + setStoppedState(current); + return true; + } + return false; +} + +void AudioPlayer::play(const AudioMsgId &audio, int64 position) { + AudioMsgId stopped; { QMutexLocker lock(&playerMutex); - bool startNow = true; - if (_data[_current].audio != audio) { - switch (_data[_current].state) { - case AudioPlayerStarting: - case AudioPlayerResuming: - case AudioPlayerPlaying: - _data[_current].state = AudioPlayerFinishing; - updateCurrentStarted(); - startNow = false; - break; - case AudioPlayerPausing: _data[_current].state = AudioPlayerFinishing; startNow = false; break; - case AudioPlayerPaused: _data[_current].state = AudioPlayerStopped; stopped = _data[_current].audio; break; + bool fadedStart = false; + AudioMsg *current = &_audioData[_audioCurrent]; + if (current->audio != audio) { + if (fadedStop(OverviewAudios, &fadedStart)) { + stopped = current->audio; } - if (_data[_current].audio) { - emit loaderOnCancel(_data[_current].audio); + if (current->audio) { + emit loaderOnCancel(current->audio); emit faderOnTimer(); } - } - int32 index = 0; - for (; index < AudioVoiceMsgSimultaneously; ++index) { - if (_data[index].audio == audio) { - _current = index; - break; + int32 index = 0; + for (; index < AudioVoiceMsgSimultaneously; ++index) { + if (_audioData[index].audio == audio) { + _audioCurrent = index; + break; + } } + if (index == AudioVoiceMsgSimultaneously && ++_audioCurrent >= AudioVoiceMsgSimultaneously) { + _audioCurrent -= AudioVoiceMsgSimultaneously; + } + current = &_audioData[_audioCurrent]; } - if (index == AudioVoiceMsgSimultaneously && ++_current >= AudioVoiceMsgSimultaneously) { - _current -= AudioVoiceMsgSimultaneously; - } - _data[_current].audio = audio; - _data[_current].fname = audio->already(true); - _data[_current].data = audio->data; - if (_data[_current].fname.isEmpty() && _data[_current].data.isEmpty()) { - _data[_current].state = AudioPlayerStopped; + current->audio = audio; + current->fname = audio.audio->already(true); + current->data = audio.audio->data; + if (current->fname.isEmpty() && current->data.isEmpty()) { + setStoppedState(current, AudioPlayerStoppedAtError); onError(audio); - } else if (updateCurrentStarted(0)) { - _data[_current].state = startNow ? AudioPlayerPlaying : AudioPlayerStarting; - _data[_current].loading = true; - emit loaderOnStart(audio); + } else { + current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; + current->loading = true; + emit loaderOnStart(audio, position); + emit suppressSong(); } } if (stopped) emit updated(stopped); } -void AudioPlayer::pauseresume() { +void AudioPlayer::play(const SongMsgId &song, int64 position) { + SongMsgId stopped; + { + QMutexLocker lock(&playerMutex); + + bool fadedStart = false; + SongMsg *current = &_songData[_songCurrent]; + if (current->song != song) { + if (fadedStop(OverviewDocuments, &fadedStart)) { + stopped = current->song; + } + if (current->song) { + emit loaderOnCancel(current->song); + emit faderOnTimer(); + } + + int32 index = 0; + for (; index < AudioSongSimultaneously; ++index) { + if (_songData[index].song == song) { + _songCurrent = index; + break; + } + } + if (index == AudioSongSimultaneously && ++_songCurrent >= AudioSongSimultaneously) { + _songCurrent -= AudioSongSimultaneously; + } + current = &_songData[_songCurrent]; + } + current->song = song; + current->fname = song.song->already(true); + current->data = song.song->data; + if (current->fname.isEmpty() && current->data.isEmpty()) { + setStoppedState(current); + if (!song.song->loader) { + DocumentOpenLink::doOpen(song.song); + song.song->openOnSave = song.song->openOnSaveMsgId = 0; + if (song.song->loader) song.song->loader->start(true, true); + } + } else { + current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; + current->loading = true; + emit loaderOnStart(song, position); + } + } + if (stopped) emit updated(stopped); +} + +bool AudioPlayer::checkCurrentALError(MediaOverviewType type) { + if (_checkALError()) return true; + + switch (type) { + case OverviewAudios: + setStoppedState(&_audioData[_audioCurrent], AudioPlayerStoppedAtError); + onError(_audioData[_audioCurrent].audio); + break; + case OverviewDocuments: + setStoppedState(&_songData[_songCurrent], AudioPlayerStoppedAtError); + onError(_songData[_songCurrent].song); + break; + } + return false; +} + +void AudioPlayer::pauseresume(MediaOverviewType type, bool fast) { QMutexLocker lock(&playerMutex); - switch (_data[_current].state) { + Msg *current = 0; + float64 suppressGain = 1.; + switch (type) { + case OverviewAudios: + current = &_audioData[_audioCurrent]; + suppressGain = suppressAllGain; + break; + case OverviewDocuments: + current = &_songData[_songCurrent]; + suppressGain = suppressSongGain * cSongVolume(); + break; + } + switch (current->state) { case AudioPlayerPausing: case AudioPlayerPaused: - if (_data[_current].state == AudioPlayerPaused) { - updateCurrentStarted(); + case AudioPlayerPausedAtEnd: { + if (current->state == AudioPlayerPaused) { + updateCurrentStarted(type); + } else if (current->state == AudioPlayerPausedAtEnd) { + if (alIsSource(current->source)) { + alSourcei(current->source, AL_SAMPLE_OFFSET, qMax(current->position - current->skipStart, 0LL)); + if (!checkCurrentALError(type)) return; + } } - _data[_current].state = AudioPlayerResuming; - resumeDevice(); - alSourcePlay(_data[_current].source); - break; + current->state = fast ? AudioPlayerPlaying : AudioPlayerResuming; + + ALint state = AL_INITIAL; + alGetSourcei(current->source, AL_SOURCE_STATE, &state); + if (!checkCurrentALError(type)) return; + + if (state != AL_PLAYING) { + audioPlayer()->resumeDevice(); + + alSourcef(current->source, AL_GAIN, suppressGain); + if (!checkCurrentALError(type)) return; + + alSourcePlay(current->source); + if (!checkCurrentALError(type)) return; + } + if (type == OverviewAudios) emit suppressSong(); + } break; case AudioPlayerStarting: case AudioPlayerResuming: case AudioPlayerPlaying: - _data[_current].state = AudioPlayerPausing; - updateCurrentStarted(); + current->state = AudioPlayerPausing; + updateCurrentStarted(type); + if (type == OverviewAudios) emit unsuppressSong(); break; - case AudioPlayerFinishing: _data[_current].state = AudioPlayerPausing; break; + case AudioPlayerFinishing: current->state = AudioPlayerPausing; break; } emit faderOnTimer(); } -void AudioPlayer::currentState(AudioData **audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { +void AudioPlayer::seek(int64 position) { QMutexLocker lock(&playerMutex); - if (audio) *audio = _data[_current].audio; - if (state) *state = _data[_current].state; - if (position) *position = _data[_current].position; - if (duration) *duration = _data[_current].duration; - if (frequency) *frequency = _data[_current].frequency; + + MediaOverviewType type = OverviewDocuments; + Msg *current = 0; + float64 suppressGain = 1.; + AudioMsgId audio; + SongMsgId song; + switch (type) { + case OverviewAudios: + current = &_audioData[_audioCurrent]; + audio = _audioData[_audioCurrent].audio; + suppressGain = suppressAllGain; + break; + case OverviewDocuments: + current = &_songData[_songCurrent]; + song = _songData[_songCurrent].song; + suppressGain = suppressSongGain * cSongVolume(); + break; + } + + bool isSource = alIsSource(current->source); + bool fastSeek = (position >= current->skipStart && position < current->duration - current->skipEnd - (current->skipEnd ? AudioVoiceMsgFrequency : 0)); + if (fastSeek && isSource) { + alSourcei(current->source, AL_SAMPLE_OFFSET, position - current->skipStart); + if (!checkCurrentALError(type)) return; + alSourcef(current->source, AL_GAIN, 1. * suppressGain); + if (!checkCurrentALError(type)) return; + updateCurrentStarted(type, position - current->skipStart); + } else { + setStoppedState(current); + if (isSource) alSourceStop(current->source); + } + switch (current->state) { + case AudioPlayerPausing: + case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: { + if (current->state == AudioPlayerPausedAtEnd) { + current->state = AudioPlayerPaused; + } + lock.unlock(); + return pauseresume(type, true); + } break; + case AudioPlayerStarting: + case AudioPlayerResuming: + case AudioPlayerPlaying: + current->state = AudioPlayerPausing; + updateCurrentStarted(type); + if (type == OverviewAudios) emit unsuppressSong(); + break; + case AudioPlayerFinishing: + case AudioPlayerStopped: + case AudioPlayerStoppedAtEnd: + case AudioPlayerStoppedAtError: + case AudioPlayerStoppedAtStart: + lock.unlock(); + switch (type) { + case OverviewAudios: if (audio) return play(audio, position); + case OverviewDocuments: if (song) return play(song, position); + } + } + emit faderOnTimer(); } -void AudioPlayer::clearStoppedAtStart(AudioData *audio) { +void AudioPlayer::stop(MediaOverviewType type) { + fadedStop(type); + switch (type) { + case OverviewAudios: if (_audioData[_audioCurrent].audio) emit updated(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: if (_songData[_songCurrent].song) emit updated(_songData[_songCurrent].song); break; + } +} + +void AudioPlayer::currentState(AudioMsgId *audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { QMutexLocker lock(&playerMutex); - if (_data[_current].audio == audio && _data[_current].state == AudioPlayerStoppedAtStart) { - _data[_current].state = AudioPlayerStopped; + AudioMsg *current = &_audioData[_audioCurrent]; + if (audio) *audio = current->audio; + return currentState(current, state, position, duration, frequency); +} + +void AudioPlayer::currentState(SongMsgId *song, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { + QMutexLocker lock(&playerMutex); + SongMsg *current = &_songData[_songCurrent]; + if (song) *song = current->song; + return currentState(current, state, position, duration, frequency); +} + +void AudioPlayer::currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { + if (state) *state = current->state; + if (position) *position = current->position; + if (duration) *duration = current->duration; + if (frequency) *frequency = current->frequency; +} + +void AudioPlayer::setStoppedState(Msg *current, AudioPlayerState state) { + current->state = state; + current->position = 0; +} + +void AudioPlayer::clearStoppedAtStart(const AudioMsgId &audio) { + QMutexLocker lock(&playerMutex); + if (_audioData[_audioCurrent].audio == audio && _audioData[_audioCurrent].state == AudioPlayerStoppedAtStart) { + setStoppedState(&_audioData[_audioCurrent]); + } +} + +void AudioPlayer::clearStoppedAtStart(const SongMsgId &song) { + QMutexLocker lock(&playerMutex); + if (_songData[_songCurrent].song == song && _songData[_songCurrent].state == AudioPlayerStoppedAtStart) { + setStoppedState(&_songData[_songCurrent]); } } @@ -453,7 +732,10 @@ AudioCapture *audioCapture() { return capture; } -AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _pauseFlag(false), _paused(true) { +AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _pauseFlag(false), _paused(true), +_suppressAll(false), _suppressAllAnim(false), _suppressSong(false), _suppressSongAnim(false), +_suppressAllGain(1., 1.), _suppressSongGain(1., 1.), +_suppressAllStart(0), _suppressSongStart(0) { moveToThread(thread); _timer.moveToThread(thread); _pauseTimer.moveToThread(thread); @@ -470,91 +752,76 @@ void AudioPlayerFader::onInit() { } void AudioPlayerFader::onTimer() { - bool hasFading = false, hasPlaying = false; QMutexLocker lock(&playerMutex); AudioPlayer *voice = audioPlayer(); if (!voice) return; - for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); - if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; - - bool playing = false, fading = false; - ALint pos = 0; - ALint state = AL_INITIAL; - alGetSourcei(m.source, AL_SAMPLE_OFFSET, &pos); - alGetSourcei(m.source, AL_SOURCE_STATE, &state); - if (!_checkALError()) { - m.state = AudioPlayerStopped; - emit error(m.audio); - } else { - switch (m.state) { - case AudioPlayerFinishing: - case AudioPlayerPausing: - case AudioPlayerStarting: - case AudioPlayerResuming: - fading = true; - break; - case AudioPlayerPlaying: - playing = true; - break; - } - if (fading && (state == AL_PLAYING || !m.loading)) { - if (state != AL_PLAYING) { - fading = false; - if (m.source) { - alSourcef(m.source, AL_GAIN, 1); - alSourceStop(m.source); - } - m.state = AudioPlayerStopped; - emit audioStopped(m.audio); - } else if (1000 * (pos + m.skipStart - m.started) >= AudioFadeDuration * m.frequency) { - fading = false; - alSourcef(m.source, AL_GAIN, 1); - switch (m.state) { - case AudioPlayerFinishing: alSourceStop(m.source); m.state = AudioPlayerStopped; break; - case AudioPlayerPausing: alSourcePause(m.source); m.state = AudioPlayerPaused; break; - case AudioPlayerStarting: - case AudioPlayerResuming: - m.state = AudioPlayerPlaying; - playing = true; - break; - } - } else { - float64 newGain = 1000. * (pos + m.skipStart - m.started) / (AudioFadeDuration * m.frequency); - if (m.state == AudioPlayerPausing || m.state == AudioPlayerFinishing) { - newGain = 1. - newGain; - } - alSourcef(m.source, AL_GAIN, newGain); - } - } else if (playing && (state == AL_PLAYING || !m.loading)) { - if (state != AL_PLAYING) { - playing = false; - if (m.source) { - alSourceStop(m.source); - alSourcef(m.source, AL_GAIN, 1); - } - m.state = AudioPlayerStopped; - emit audioStopped(m.audio); + bool suppressAudioChanged = false, suppressSongChanged = false; + if (_suppressAll || _suppressSongAnim) { + uint64 ms = getms(); + float64 wasSong = suppressSongGain; + if (_suppressAll) { + float64 wasAudio = suppressAllGain; + if (ms >= _suppressAllStart + notifyLengthMs || ms < _suppressAllStart) { + _suppressAll = _suppressAllAnim = false; + _suppressAllGain = anim::fvalue(1., 1.); + } else if (ms > _suppressAllStart + notifyLengthMs - AudioFadeDuration) { + if (_suppressAllGain.to() != 1.) _suppressAllGain.start(1.); + _suppressAllGain.update(1. - ((_suppressAllStart + notifyLengthMs - ms) / float64(AudioFadeDuration)), anim::linear); + } else if (ms >= _suppressAllStart + st::notifyFastAnim) { + if (_suppressAllAnim) { + _suppressAllGain.finish(); + _suppressAllAnim = false; } + } else if (ms > _suppressAllStart) { + _suppressAllGain.update((ms - _suppressAllStart) / st::notifyFastAnim, anim::linear); } - if (state == AL_PLAYING && pos + m.skipStart - m.position >= AudioCheckPositionDelta) { - m.position = pos + m.skipStart; - emit playPositionUpdated(m.audio); - } - if (!m.loading && m.skipEnd > 0 && m.position + AudioPreloadSamples + m.skipEnd > m.duration) { - m.loading = true; - emit needToPreload(m.audio); - } - if (playing) hasPlaying = true; - if (fading) hasFading = true; + suppressAllGain = _suppressAllGain.current(); + suppressAudioChanged = (suppressAllGain != wasAudio); } + if (_suppressSongAnim) { + if (ms >= _suppressSongStart + AudioFadeDuration) { + _suppressSongGain.finish(); + _suppressSongAnim = false; + } else { + _suppressSongGain.update((ms - _suppressSongStart) / float64(AudioFadeDuration), anim::linear); + } + } + suppressSongGain = qMin(suppressAllGain, _suppressSongGain.current()); + suppressSongChanged = (suppressSongGain != wasSong); } - if (!hasPlaying) { - ALint state = AL_INITIAL; - alGetSourcei(notifySource, AL_SOURCE_STATE, &state); - if (_checkALError() && state == AL_PLAYING) { - hasPlaying = true; + bool hasFading = (_suppressAll || _suppressSongAnim), hasPlaying = false; + + for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { + AudioPlayer::AudioMsg &m(voice->_audioData[i]); + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; + + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressAllGain, suppressAudioChanged); + if (emitSignals & EmitError) emit error(m.audio); + if (emitSignals & EmitStopped) emit audioStopped(m.audio); + if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.audio); + if (emitSignals & EmitNeedToPreload) emit needToPreload(m.audio); + } + + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + AudioPlayer::SongMsg &m(voice->_songData[i]); + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; + + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain * cSongVolume(), suppressSongChanged || _songVolumeChanged); + if (emitSignals & EmitError) emit error(m.song); + if (emitSignals & EmitStopped) emit audioStopped(m.song); + if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.song); + if (emitSignals & EmitNeedToPreload) emit needToPreload(m.song); + } + _songVolumeChanged = false; + + if (!hasFading) { + if (!hasPlaying) { + ALint state = AL_INITIAL; + alGetSourcei(notifySource, AL_SOURCE_STATE, &state); + if (_checkALError() && state == AL_PLAYING) { + hasPlaying = true; + } } } if (hasFading) { @@ -570,6 +837,110 @@ void AudioPlayerFader::onTimer() { } } +int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged) { + bool playing = false, fading = false; + + ALint pos = 0; + ALint state = AL_INITIAL; + alGetSourcei(m->source, AL_SAMPLE_OFFSET, &pos); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + alGetSourcei(m->source, AL_SOURCE_STATE, &state); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + + int32 emitSignals = 0; + switch (m->state) { + case AudioPlayerFinishing: + case AudioPlayerPausing: + case AudioPlayerStarting: + case AudioPlayerResuming: + fading = true; + break; + case AudioPlayerPlaying: + playing = true; + break; + } + if (fading && (state == AL_PLAYING || !m->loading)) { + if (state != AL_PLAYING) { + fading = false; + if (m->source) { + alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + if (m->state == AudioPlayerPausing) { + m->state = AudioPlayerPausedAtEnd; + } else { + setStoppedState(m, AudioPlayerStoppedAtEnd); + } + emitSignals |= EmitStopped; + } else if (1000 * (pos + m->skipStart - m->started) >= AudioFadeDuration * m->frequency) { + fading = false; + alSourcef(m->source, AL_GAIN, 1. * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + switch (m->state) { + case AudioPlayerFinishing: + alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + setStoppedState(m); + state = AL_STOPPED; + break; + case AudioPlayerPausing: + alSourcePause(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + m->state = AudioPlayerPaused; + break; + case AudioPlayerStarting: + case AudioPlayerResuming: + m->state = AudioPlayerPlaying; + playing = true; + break; + } + } else { + float64 newGain = 1000. * (pos + m->skipStart - m->started) / (AudioFadeDuration * m->frequency); + if (m->state == AudioPlayerPausing || m->state == AudioPlayerFinishing) { + newGain = 1. - newGain; + } + alSourcef(m->source, AL_GAIN, newGain * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + } else if (playing && (state == AL_PLAYING || !m->loading)) { + if (state != AL_PLAYING) { + playing = false; + if (m->source) { + alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + setStoppedState(m, AudioPlayerStoppedAtEnd); + emitSignals |= EmitStopped; + } else if (suppressGainChanged) { + alSourcef(m->source, AL_GAIN, suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + } + if (state == AL_PLAYING && pos + m->skipStart - m->position >= AudioCheckPositionDelta) { + m->position = pos + m->skipStart; + emitSignals |= EmitPositionUpdated; + } + if (playing || m->state == AudioPlayerStarting || m->state == AudioPlayerResuming) { + if (!m->loading && m->skipEnd > 0 && m->position + AudioPreloadSamples + m->skipEnd > m->duration) { + m->loading = true; + emitSignals |= EmitNeedToPreload; + } + } + if (playing) hasPlaying = true; + if (fading) hasFading = true; + + return emitSignals; +} + +void AudioPlayerFader::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + void AudioPlayerFader::onPauseTimer() { QMutexLocker lock(&_pauseMutex); if (_pauseFlag) { @@ -582,6 +953,38 @@ void AudioPlayerFader::onPauseTimerStop() { if (_pauseTimer.isActive()) _pauseTimer.stop(); } +void AudioPlayerFader::onSuppressSong() { + if (!_suppressSong) { + _suppressSong = true; + _suppressSongAnim = true; + _suppressSongStart = getms(); + _suppressSongGain.start(st::suppressSong); + onTimer(); + } +} + +void AudioPlayerFader::onUnsuppressSong() { + if (_suppressSong) { + _suppressSong = false; + _suppressSongAnim = true; + _suppressSongStart = getms(); + _suppressSongGain.start(1.); + onTimer(); + } +} + +void AudioPlayerFader::onSuppressAll() { + _suppressAll = true; + _suppressAllStart = getms(); + _suppressAllGain.start(st::suppressAll); + onTimer(); +} + +void AudioPlayerFader::onSongVolumeChanged() { + _songVolumeChanged = true; + onTimer(); +} + void AudioPlayerFader::resumeDevice() { QMutexLocker lock(&_pauseMutex); _pauseFlag = false; @@ -603,12 +1006,11 @@ public: return this->fname == fname && this->data.size() == data.size(); } - virtual bool open() = 0; + virtual bool open(qint64 position = 0) = 0; virtual int64 duration() = 0; virtual int32 frequency() = 0; virtual int32 format() = 0; - virtual void started() = 0; - virtual bool readMore(QByteArray &result, int64 &samplesAdded) = 0; + virtual int readMore(QByteArray &result, int64 &samplesAdded) = 0; // < 0 - error, 0 - nothing read, > 0 - read something protected: @@ -649,7 +1051,7 @@ public: frame = av_frame_alloc(); } - bool open() { + bool open(qint64 position = 0) { if (!AudioPlayerLoader::openFile()) { return false; } @@ -670,6 +1072,8 @@ public: int res = 0; char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; if ((res = avformat_open_input(&fmtContext, 0, 0, 0)) < 0) { + ioBuffer = 0; + LOG(("Audio Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); return false; } @@ -695,7 +1099,11 @@ public: } freq = fmtContext->streams[streamId]->codec->sample_rate; - len = (fmtContext->streams[streamId]->duration * freq) / fmtContext->streams[streamId]->time_base.den; + if (fmtContext->streams[streamId]->duration == AV_NOPTS_VALUE) { + len = (fmtContext->duration * freq) / AV_TIME_BASE; + } else { + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; + } uint64_t layout = fmtContext->streams[streamId]->codec->channel_layout; inputFormat = fmtContext->streams[streamId]->codec->sample_fmt; switch (layout) { @@ -761,6 +1169,16 @@ public: return false; } } + if (position) { + int64 ts = (position * fmtContext->streams[streamId]->time_base.den) / (freq * fmtContext->streams[streamId]->time_base.num); + if (av_seek_frame(fmtContext, streamId, ts, AVSEEK_FLAG_ANY) < 0) { + if (av_seek_frame(fmtContext, streamId, ts, 0) < 0) { + } + } + //if (dstSamplesData) { + // position = qRound(srcRate * (position / float64(dstRate))); + //} + } return true; } @@ -777,17 +1195,14 @@ public: return fmt; } - void started() { - } - - bool readMore(QByteArray &result, int64 &samplesAdded) { + int readMore(QByteArray &result, int64 &samplesAdded) { int res; if ((res = av_read_frame(fmtContext, &avpkt)) < 0) { if (res != AVERROR_EOF) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to av_read_frame() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); } - return false; + return -1; } if (avpkt.stream_index == streamId) { av_frame_unref(frame); @@ -795,7 +1210,10 @@ public: if ((res = avcodec_decode_audio4(codecContext, frame, &got_frame, &avpkt)) < 0) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to avcodec_decode_audio4() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + if (res == AVERROR_INVALIDDATA) return 0; // try to skip bad packet + return -1; } if (got_frame) { @@ -809,13 +1227,17 @@ public: dstSamplesData[0] = 0; char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to av_samples_alloc for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + return -1; } } if ((res = swr_convert(swrContext, dstSamplesData, dstSamples, (const uint8_t**)frame->extended_data, frame->nb_samples)) < 0) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to swr_convert for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + return -1; } int32 resultLen = av_samples_get_buffer_size(0, _toChannels, res, _toFormat, 1); result.append((const char*)dstSamplesData[0], resultLen); @@ -827,7 +1249,7 @@ public: } } av_free_packet(&avpkt); - return true; + return 1; } ~FFMpegLoader() { @@ -916,217 +1338,360 @@ private: } }; -AudioPlayerLoaders::AudioPlayerLoaders(QThread *thread) { +AudioPlayerLoaders::AudioPlayerLoaders(QThread *thread) : _audioLoader(0), _songLoader(0) { moveToThread(thread); } AudioPlayerLoaders::~AudioPlayerLoaders() { - for (Loaders::iterator i = _loaders.begin(), e = _loaders.end(); i != e; ++i) { - delete i.value(); - } - _loaders.clear(); + delete _audioLoader; + delete _songLoader; } void AudioPlayerLoaders::onInit() { } -void AudioPlayerLoaders::onStart(AudioData *audio) { - Loaders::iterator i = _loaders.find(audio); - if (i != _loaders.end()) { - delete (*i); - _loaders.erase(i); - } - onLoad(audio); -} +void AudioPlayerLoaders::onStart(const AudioMsgId &audio, qint64 position) { + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; -void AudioPlayerLoaders::loadError(Loaders::iterator i) { - emit error(i.key()); - delete (*i); - _loaders.erase(i); -} - -void AudioPlayerLoaders::onLoad(AudioData *audio) { - bool started = false; - int32 audioindex = -1; - AudioPlayerLoader *l = 0; - Loaders::iterator j = _loaders.end(); { QMutexLocker lock(&playerMutex); AudioPlayer *voice = audioPlayer(); if (!voice) return; - for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); - if (m.audio != audio || !m.loading) continue; - - audioindex = i; - j = _loaders.find(audio); - if (j != _loaders.end() && !j.value()->check(m.fname, m.data)) { - delete j.value(); - _loaders.erase(j); - j = _loaders.end(); - } - if (j == _loaders.end()) { - QByteArray header = m.data.mid(0, 8); - if (header.isEmpty()) { - QFile f(m.fname); - if (!f.open(QIODevice::ReadOnly)) { - LOG(("Audio Error: could not open file '%1'").arg(m.fname)); - m.state = AudioPlayerStoppedAtStart; - emit error(audio); - return; - } - header = f.read(8); - } - if (header.size() < 8) { - LOG(("Audio Error: could not read header from file '%1', data size %2").arg(m.fname).arg(m.data.isEmpty() ? QFileInfo(m.fname).size() : m.data.size())); - m.state = AudioPlayerStoppedAtStart; - emit error(audio); - return; - } - - l = (j = _loaders.insert(audio, new FFMpegLoader(m.fname, m.data))).value(); - - int ret; - if (!l->open()) { - m.state = AudioPlayerStoppedAtStart; - return loadError(j); - } - int64 duration = l->duration(); - if (duration <= 0) { - m.state = AudioPlayerStoppedAtStart; - return loadError(j); - } - m.duration = duration; - m.frequency = l->frequency(); - if (!m.frequency) m.frequency = AudioVoiceMsgFrequency; - m.skipStart = 0; - m.skipEnd = duration; - m.position = 0; - m.started = 0; - started = true; - } else { - if (!m.skipEnd) continue; - l = j.value(); - } - break; - } + voice->_audioData[voice->_audioCurrent].loading = true; } - if (j == _loaders.end()) { - LOG(("Audio Error: trying to load part of audio, that is not playing at the moment")); - emit error(audio); + loadData(OverviewAudios, static_cast(&audio), position); +} + +void AudioPlayerLoaders::onStart(const SongMsgId &song, qint64 position) { + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + + { + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return; + + voice->_songData[voice->_songCurrent].loading = true; + } + + loadData(OverviewDocuments, static_cast(&song), position); +} + +void AudioPlayerLoaders::clear(MediaOverviewType type) { + switch (type) { + case OverviewAudios: clearAudio(); break; + case OverviewDocuments: clearSong(); break; + } +} + +void AudioPlayerLoaders::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + +void AudioPlayerLoaders::emitError(MediaOverviewType type) { + switch (type) { + case OverviewAudios: emit error(clearAudio()); break; + case OverviewDocuments: emit error(clearSong()); break; + } +} + +AudioMsgId AudioPlayerLoaders::clearAudio() { + AudioMsgId current = _audio; + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; + return current; +} + +SongMsgId AudioPlayerLoaders::clearSong() { + SongMsgId current = _song; + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + return current; +} + +void AudioPlayerLoaders::onLoad(const AudioMsgId &audio) { + loadData(OverviewAudios, static_cast(&audio), 0); +} + +void AudioPlayerLoaders::onLoad(const SongMsgId &song) { + loadData(OverviewDocuments, static_cast(&song), 0); +} + +void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qint64 position) { + SetupError err = SetupNoErrorStarted; + AudioPlayerLoader *l = setupLoader(type, objId, err, position); + if (!l) { + if (err == SetupErrorAtStart) { + emitError(type); + } return; } - if (started) { - l->started(); - } - bool finished = false; + bool started = (err == SetupNoErrorStarted), finished = false, errAtStart = started; QByteArray result; int64 samplesAdded = 0, frequency = l->frequency(), format = l->format(); while (result.size() < AudioVoiceMsgBufferSize) { - if (!l->readMore(result, samplesAdded)) { + int res = l->readMore(result, samplesAdded); + if (res < 0) { + if (errAtStart) { + { + QMutexLocker lock(&playerMutex); + AudioPlayer::Msg *m = checkLoader(type); + if (m) m->state = AudioPlayerStoppedAtStart; + } + emitError(type); + return; + } finished = true; break; } - { - QMutexLocker lock(&playerMutex); - AudioPlayer *voice = audioPlayer(); - if (!voice) return; + if (res > 0) errAtStart = false; - AudioPlayer::Msg &m(voice->_data[audioindex]); - if (m.audio != audio || !m.loading || !l->check(m.fname, m.data)) { - LOG(("Audio Error: playing changed while loading")); - m.state = AudioPlayerStopped; - return loadError(j); - } + QMutexLocker lock(&playerMutex); + if (!checkLoader(type)) { + clear(type); + return; } } QMutexLocker lock(&playerMutex); - AudioPlayer *voice = audioPlayer(); - if (!voice) return; - - AudioPlayer::Msg &m(voice->_data[audioindex]); - if (m.audio != audio || !m.loading || !l->check(m.fname, m.data)) { - LOG(("Audio Error: playing changed while loading")); - m.state = AudioPlayerStopped; - return loadError(j); + AudioPlayer::Msg *m = checkLoader(type); + if (!m) { + clear(type); + return; } if (started) { - if (m.source) { - alSourceStop(m.source); + if (m->source) { + alSourceStop(m->source); for (int32 i = 0; i < 3; ++i) { - if (m.samplesCount[i]) { - alSourceUnqueueBuffers(m.source, 1, m.buffers + i); - m.samplesCount[i] = 0; + if (m->samplesCount[i]) { + alSourceUnqueueBuffers(m->source, 1, m->buffers + i); + m->samplesCount[i] = 0; } } - m.nextBuffer = 0; + m->nextBuffer = 0; } + m->skipStart = position; + m->skipEnd = m->duration - position; + m->position = 0; + m->started = 0; } if (samplesAdded) { - if (!m.source) { - alGenSources(1, &m.source); - alSourcef(m.source, AL_PITCH, 1.f); - alSourcef(m.source, AL_GAIN, 1.f); - alSource3f(m.source, AL_POSITION, 0, 0, 0); - alSource3f(m.source, AL_VELOCITY, 0, 0, 0); - alSourcei(m.source, AL_LOOPING, 0); + if (!m->source) { + alGenSources(1, &m->source); + alSourcef(m->source, AL_PITCH, 1.f); + alSource3f(m->source, AL_POSITION, 0, 0, 0); + alSource3f(m->source, AL_VELOCITY, 0, 0, 0); + alSourcei(m->source, AL_LOOPING, 0); } - if (!m.buffers[m.nextBuffer]) alGenBuffers(3, m.buffers); + if (!m->buffers[m->nextBuffer]) alGenBuffers(3, m->buffers); if (!_checkALError()) { - m.state = AudioPlayerStopped; - return loadError(j); + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; } - if (m.samplesCount[m.nextBuffer]) { - alSourceUnqueueBuffers(m.source, 1, m.buffers + m.nextBuffer); - m.skipStart += m.samplesCount[m.nextBuffer]; + if (m->samplesCount[m->nextBuffer]) { + alSourceUnqueueBuffers(m->source, 1, m->buffers + m->nextBuffer); + m->skipStart += m->samplesCount[m->nextBuffer]; } - m.samplesCount[m.nextBuffer] = samplesAdded; - alBufferData(m.buffers[m.nextBuffer], format, result.constData(), result.size(), frequency); - alSourceQueueBuffers(m.source, 1, m.buffers + m.nextBuffer); - m.skipEnd -= samplesAdded; + m->samplesCount[m->nextBuffer] = samplesAdded; + alBufferData(m->buffers[m->nextBuffer], format, result.constData(), result.size(), frequency); + alSourceQueueBuffers(m->source, 1, m->buffers + m->nextBuffer); + m->skipEnd -= samplesAdded; - m.nextBuffer = (m.nextBuffer + 1) % 3; + m->nextBuffer = (m->nextBuffer + 1) % 3; if (!_checkALError()) { - m.state = AudioPlayerStopped; - return loadError(j); + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; } } else { finished = true; } if (finished) { - m.skipEnd = 0; - m.duration = m.skipStart + m.samplesCount[0] + m.samplesCount[1] + m.samplesCount[2]; - delete j.value(); - _loaders.erase(j); + m->skipEnd = 0; + m->duration = m->skipStart + m->samplesCount[0] + m->samplesCount[1] + m->samplesCount[2]; + clear(type); } - m.loading = false; - if (m.state == AudioPlayerResuming || m.state == AudioPlayerPlaying || m.state == AudioPlayerStarting) { + m->loading = false; + if (m->state == AudioPlayerResuming || m->state == AudioPlayerPlaying || m->state == AudioPlayerStarting) { ALint state = AL_INITIAL; - alGetSourcei(m.source, AL_SOURCE_STATE, &state); + alGetSourcei(m->source, AL_SOURCE_STATE, &state); if (_checkALError()) { if (state != AL_PLAYING) { - voice->resumeDevice(); - alSourcePlay(m.source); + audioPlayer()->resumeDevice(); + + switch (type) { + case OverviewAudios: alSourcef(m->source, AL_GAIN, suppressAllGain); break; + case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain * cSongVolume()); break; + } + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + + alSourcePlay(m->source); + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + emit needToCheck(); } + } else { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); } } } -void AudioPlayerLoaders::onCancel(AudioData *audio) { - Loaders::iterator i = _loaders.find(audio); - if (i != _loaders.end()) { - delete (*i); - _loaders.erase(i); +AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position) { + err = SetupErrorAtStart; + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return 0; + + bool isGoodId = false; + AudioPlayer::Msg *m = 0; + AudioPlayerLoader **l = 0; + switch (type) { + case OverviewAudios: { + AudioPlayer::AudioMsg &msg(voice->_audioData[voice->_audioCurrent]); + const AudioMsgId &audio(*static_cast(objId)); + if (msg.audio != audio || !msg.loading) { + emit error(audio); + break; + } + m = &msg; + l = &_audioLoader; + isGoodId = (_audio == audio); + } break; + case OverviewDocuments: { + AudioPlayer::SongMsg &msg(voice->_songData[voice->_songCurrent]); + const SongMsgId &song(*static_cast(objId)); + if (msg.song != song || !msg.loading) { + emit error(song); + break; + } + m = &msg; + l = &_songLoader; + isGoodId = (_song == song); + } break; + } + if (!l || !m) { + LOG(("Audio Error: trying to load part of audio, that is not current at the moment")); + err = SetupErrorNotPlaying; + return 0; + } + + if (*l && (!isGoodId || !(*l)->check(m->fname, m->data))) { + delete *l; + *l = 0; + switch (type) { + case OverviewAudios: _audio = AudioMsgId(); break; + case OverviewDocuments: _song = SongMsgId(); break; + } + } + + if (!*l) { + switch (type) { + case OverviewAudios: _audio = *static_cast(objId); break; + case OverviewDocuments: _song = *static_cast(objId); break; + } + + QByteArray header = m->data.mid(0, 8); + if (header.isEmpty()) { + QFile f(m->fname); + if (!f.open(QIODevice::ReadOnly)) { + LOG(("Audio Error: could not open file '%1'").arg(m->fname)); + m->state = AudioPlayerStoppedAtStart; + return 0; + } + header = f.read(8); + } + if (header.size() < 8) { + LOG(("Audio Error: could not read header from file '%1', data size %2").arg(m->fname).arg(m->data.isEmpty() ? QFileInfo(m->fname).size() : m->data.size())); + m->state = AudioPlayerStoppedAtStart; + return 0; + } + + *l = new FFMpegLoader(m->fname, m->data); + + int ret; + if (!(*l)->open(position)) { + m->state = AudioPlayerStoppedAtStart; + return 0; + } + int64 duration = (*l)->duration(); + if (duration <= 0) { + m->state = AudioPlayerStoppedAtStart; + return 0; + } + m->duration = duration; + m->frequency = (*l)->frequency(); + if (!m->frequency) m->frequency = AudioVoiceMsgFrequency; + err = SetupNoErrorStarted; + } else { + if (!m->skipEnd) { + err = SetupErrorLoadedFull; + LOG(("Audio Error: trying to load part of audio, that is already loaded to the end")); + return 0; + } + } + return *l; +} + +AudioPlayer::Msg *AudioPlayerLoaders::checkLoader(MediaOverviewType type) { + AudioPlayer *voice = audioPlayer(); + if (!voice) return 0; + + bool isGoodId = false; + AudioPlayer::Msg *m = 0; + AudioPlayerLoader **l = 0; + switch (type) { + case OverviewAudios: { + AudioPlayer::AudioMsg &msg(voice->_audioData[voice->_audioCurrent]); + isGoodId = (msg.audio == _audio); + l = &_audioLoader; + m = &msg; + } break; + case OverviewDocuments: { + AudioPlayer::SongMsg &msg(voice->_songData[voice->_songCurrent]); + isGoodId = (msg.song == _song); + l = &_songLoader; + m = &msg; + } break; + } + if (!l || !m) return 0; + + if (!isGoodId || !m->loading || !(*l)->check(m->fname, m->data)) { + LOG(("Audio Error: playing changed while loading")); + return 0; + } + + return m; +} + +void AudioPlayerLoaders::onCancel(const AudioMsgId &audio) { + if (_audio == audio) { + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; } QMutexLocker lock(&playerMutex); @@ -1134,13 +1699,32 @@ void AudioPlayerLoaders::onCancel(AudioData *audio) { if (!voice) return; for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); + AudioPlayer::AudioMsg &m(voice->_audioData[i]); if (m.audio == audio) { m.loading = false; } } } +void AudioPlayerLoaders::onCancel(const SongMsgId &song) { + if (_song == song) { + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + } + + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return; + + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + AudioPlayer::SongMsg &m(voice->_songData[i]); + if (m.song == song) { + m.loading = false; + } + } +} + struct AudioCapturePrivate { AudioCapturePrivate() : device(0), fmt(0), ioBuffer(0), ioContext(0), fmtContext(0), stream(0), codec(0), codecContext(0), opened(false), @@ -1249,7 +1833,7 @@ void AudioCaptureInner::onStart() { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; AVOutputFormat *fmt = 0; while ((fmt = av_oformat_next(fmt))) { - if (fmt->name == QLatin1String("opus")) { + if (fmt->name == qstr("opus")) { break; } } @@ -1611,3 +2195,229 @@ void AudioCaptureInner::writeFrame(int32 offset, int32 framesize) { av_frame_free(&frame); } + +class FFMpegAttributesReader : public AudioPlayerLoader { +public: + + FFMpegAttributesReader(const QString &fname, const QByteArray &data) : AudioPlayerLoader(fname, data), + ioBuffer(0), ioContext(0), fmtContext(0), codec(0), streamId(0), + _opened(false) { + } + + bool open(qint64 position = 0) { + if (!AudioPlayerLoader::openFile()) { + return false; + } + + ioBuffer = (uchar*)av_malloc(AVBlockSize); + if (data.isEmpty()) { + ioContext = avio_alloc_context(ioBuffer, AVBlockSize, 0, static_cast(this), &FFMpegAttributesReader::_read_file, 0, &FFMpegAttributesReader::_seek_file); + } else { + ioContext = avio_alloc_context(ioBuffer, AVBlockSize, 0, static_cast(this), &FFMpegAttributesReader::_read_data, 0, &FFMpegAttributesReader::_seek_data); + } + fmtContext = avformat_alloc_context(); + if (!fmtContext) { + DEBUG_LOG(("Audio Read Error: Unable to avformat_alloc_context for file '%1', data size '%2'").arg(fname).arg(data.size())); + return false; + } + fmtContext->pb = ioContext; + + int res = 0; + char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; + if ((res = avformat_open_input(&fmtContext, 0, 0, 0)) < 0) { + ioBuffer = 0; + + DEBUG_LOG(("Audio Read Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); + return false; + } + _opened = true; + + if ((res = avformat_find_stream_info(fmtContext, 0)) < 0) { + DEBUG_LOG(("Audio Read Error: Unable to avformat_find_stream_info for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); + return false; + } + + streamId = av_find_best_stream(fmtContext, AVMEDIA_TYPE_VIDEO, -1, -1, &codec, 0); + if (streamId >= 0) { + DEBUG_LOG(("Audio Read Error: Found video stream in file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(streamId).arg(av_make_error_string(err, sizeof(err), streamId))); + return false; + } + + streamId = av_find_best_stream(fmtContext, AVMEDIA_TYPE_AUDIO, -1, -1, &codec, 0); + if (streamId < 0) { + DEBUG_LOG(("Audio Read Error: Unable to av_find_best_stream for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(streamId).arg(av_make_error_string(err, sizeof(err), streamId))); + return false; + } + + freq = fmtContext->streams[streamId]->codec->sample_rate; + if (fmtContext->streams[streamId]->duration == AV_NOPTS_VALUE) { + len = (fmtContext->duration * freq) / AV_TIME_BASE; + } else { + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; + } + + for (int32 i = 0, l = fmtContext->nb_streams; i < l; ++i) { + AVStream *stream = fmtContext->streams[i]; + if (stream->disposition & AV_DISPOSITION_ATTACHED_PIC) { + const AVPacket &packet(stream->attached_pic); + if (packet.size) { + bool animated = false; + QByteArray cover((const char*)packet.data, packet.size), format; + _cover = App::readImage(cover, &format, true, &animated); + if (!_cover.isNull()) { + _coverBytes = cover; + _coverFormat = format; + break; + } + } + } + } + + extractMetaData(fmtContext->streams[streamId]->metadata); + extractMetaData(fmtContext->metadata); + + return true; + } + + void trySet(QString &to, AVDictionary *dict, const char *key) { + if (!to.isEmpty()) return; + if (AVDictionaryEntry* tag = av_dict_get(dict, key, 0, 0)) { + to = QString::fromUtf8(tag->value); + } + } + void extractMetaData(AVDictionary *dict) { + trySet(_title, dict, "title"); + trySet(_performer, dict, "artist"); + trySet(_performer, dict, "performer"); + trySet(_performer, dict, "album_artist"); + for (AVDictionaryEntry *tag = av_dict_get(dict, "", 0, AV_DICT_IGNORE_SUFFIX); tag; tag = av_dict_get(dict, "", tag, AV_DICT_IGNORE_SUFFIX)) { + const char *key = tag->key; + const char *value = tag->value; + QString tmp = QString::fromUtf8(value); + } + } + + int64 duration() { + return len; + } + + int32 frequency() { + return freq; + } + + int32 format() { + return 0; + } + + QString title() { + return _title; + } + + QString performer() { + return _performer; + } + + QImage cover() { + return _cover; + } + + QByteArray coverBytes() { + return _coverBytes; + } + + QByteArray coverFormat() { + return _coverFormat; + } + + int readMore(QByteArray &result, int64 &samplesAdded) { + DEBUG_LOG(("Audio Read Error: should not call this")); + return -1; + } + + ~FFMpegAttributesReader() { + if (ioContext) av_free(ioContext); + if (_opened) { + avformat_close_input(&fmtContext); + } else if (ioBuffer) { + av_free(ioBuffer); + } + if (fmtContext) avformat_free_context(fmtContext); + } + +private: + + QString fname, data; + + int32 freq; + int64 len; + QString _title, _performer; + QImage _cover; + QByteArray _coverBytes, _coverFormat; + + uchar *ioBuffer; + AVIOContext *ioContext; + AVFormatContext *fmtContext; + AVCodec *codec; + int32 streamId; + + bool _opened; + + static int _read_data(void *opaque, uint8_t *buf, int buf_size) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + int32 nbytes = qMin(l->data.size() - l->dataPos, int32(buf_size)); + if (nbytes <= 0) { + return 0; + } + + memcpy(buf, l->data.constData() + l->dataPos, nbytes); + l->dataPos += nbytes; + return nbytes; + } + + static int64_t _seek_data(void *opaque, int64_t offset, int whence) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + int32 newPos = -1; + switch (whence) { + case SEEK_SET: newPos = offset; break; + case SEEK_CUR: newPos = l->dataPos + offset; break; + case SEEK_END: newPos = l->data.size() + offset; break; + } + if (newPos < 0 || newPos > l->data.size()) { + return -1; + } + l->dataPos = newPos; + return l->dataPos; + } + + static int _read_file(void *opaque, uint8_t *buf, int buf_size) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + return int(l->f.read((char*)(buf), buf_size)); + } + + static int64_t _seek_file(void *opaque, int64_t offset, int whence) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + switch (whence) { + case SEEK_SET: return l->f.seek(offset) ? l->f.pos() : -1; + case SEEK_CUR: return l->f.seek(l->f.pos() + offset) ? l->f.pos() : -1; + case SEEK_END: return l->f.seek(l->f.size() + offset) ? l->f.pos() : -1; + } + return -1; + } +}; + +MTPDocumentAttribute audioReadSongAttributes(const QString &fname, const QByteArray &data, QImage &cover, QByteArray &coverBytes, QByteArray &coverFormat) { + FFMpegAttributesReader reader(fname, data); + if (reader.open()) { + int32 duration = reader.duration() / reader.frequency(); + if (reader.duration() > 0) { + cover = reader.cover(); + coverBytes = reader.coverBytes(); + coverFormat = reader.coverFormat(); + return MTP_documentAttributeAudio(MTP_int(duration), MTP_string(reader.title()), MTP_string(reader.performer())); + } + } + return MTP_documentAttributeFilename(MTP_string(fname)); +} diff --git a/Telegram/SourceFiles/audio.h b/Telegram/SourceFiles/audio.h index 8aa33952b..323613c72 100644 --- a/Telegram/SourceFiles/audio.h +++ b/Telegram/SourceFiles/audio.h @@ -25,14 +25,19 @@ void audioPlayNotify(); void audioFinish(); enum AudioPlayerState { - AudioPlayerStopped, - AudioPlayerStoppedAtStart, - AudioPlayerStarting, - AudioPlayerPlaying, - AudioPlayerFinishing, - AudioPlayerPausing, - AudioPlayerPaused, - AudioPlayerResuming, + AudioPlayerStopped = 0x01, + AudioPlayerStoppedAtEnd = 0x02, + AudioPlayerStoppedAtError = 0x03, + AudioPlayerStoppedAtStart = 0x04, + AudioPlayerStoppedMask = 0x07, + + AudioPlayerStarting = 0x08, + AudioPlayerPlaying = 0x10, + AudioPlayerFinishing = 0x18, + AudioPlayerPausing = 0x20, + AudioPlayerPaused = 0x28, + AudioPlayerPausedAtEnd = 0x30, + AudioPlayerResuming = 0x38, }; class AudioPlayerFader; @@ -45,39 +50,68 @@ public: AudioPlayer(); - void play(AudioData *audio); - void pauseresume(); + void play(const AudioMsgId &audio, int64 position = 0); + void play(const SongMsgId &song, int64 position = 0); + void pauseresume(MediaOverviewType type, bool fast = false); + void seek(int64 position); // type == OverviewDocuments + void stop(MediaOverviewType type); + + void currentState(AudioMsgId *audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); + void currentState(SongMsgId *song, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); + + void clearStoppedAtStart(const AudioMsgId &audio); + void clearStoppedAtStart(const SongMsgId &song); - void currentState(AudioData **audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); - void clearStoppedAtStart(AudioData *audio); void resumeDevice(); ~AudioPlayer(); public slots: - void onError(AudioData *audio); + void onError(const AudioMsgId &audio); + void onError(const SongMsgId &song); + + void onStopped(const AudioMsgId &audio); + void onStopped(const SongMsgId &song); signals: - void updated(AudioData *audio); - void stopped(AudioData *audio); + void updated(const AudioMsgId &audio); + void updated(const SongMsgId &song); + + void stopped(const AudioMsgId &audio); + void stopped(const SongMsgId &song); + + void stoppedOnError(const AudioMsgId &audio); + void stoppedOnError(const SongMsgId &song); + + void loaderOnStart(const AudioMsgId &audio, qint64 position); + void loaderOnStart(const SongMsgId &song, qint64 position); + + void loaderOnCancel(const AudioMsgId &audio); + void loaderOnCancel(const SongMsgId &song); void faderOnTimer(); - void loaderOnStart(AudioData *audio); - void loaderOnCancel(AudioData *audio); + + void suppressSong(); + void unsuppressSong(); + void suppressAll(); + + void songVolumeChanged(); private: - bool updateCurrentStarted(int32 pos = -1); + bool fadedStop(MediaOverviewType type, bool *fadedStart = 0); + bool updateCurrentStarted(MediaOverviewType type, int32 pos = -1); + bool checkCurrentALError(MediaOverviewType type); struct Msg { - Msg() : audio(0), position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), + Msg() : position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), state(AudioPlayerStopped), source(0), nextBuffer(0) { memset(buffers, 0, sizeof(buffers)); memset(samplesCount, 0, sizeof(samplesCount)); } - AudioData *audio; + QString fname; QByteArray data; int64 position, duration; @@ -92,9 +126,25 @@ private: uint32 buffers[3]; int64 samplesCount[3]; }; + struct AudioMsg : public Msg { + AudioMsg() { + } + AudioMsgId audio; + }; + struct SongMsg : public Msg { + SongMsg() { + } + SongMsgId song; + }; - int32 _current; - Msg _data[AudioVoiceMsgSimultaneously]; + void currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency); + void setStoppedState(Msg *current, AudioPlayerState state = AudioPlayerStopped); + + int32 _audioCurrent; + AudioMsg _audioData[AudioVoiceMsgSimultaneously]; + + int32 _songCurrent; + SongMsg _songData[AudioSongSimultaneously]; QMutex _mutex; @@ -154,10 +204,14 @@ public: signals: - void error(AudioData *audio); - void playPositionUpdated(AudioData *audio); - void audioStopped(AudioData *audio); - void needToPreload(AudioData *audio); + void error(const AudioMsgId &audio); + void error(const SongMsgId &audio); + void playPositionUpdated(const AudioMsgId &audio); + void playPositionUpdated(const SongMsgId &audio); + void audioStopped(const AudioMsgId &audio); + void audioStopped(const SongMsgId &audio); + void needToPreload(const AudioMsgId &audio); + void needToPreload(const SongMsgId &audio); void stopPauseDevice(); @@ -168,12 +222,30 @@ public slots: void onPauseTimer(); void onPauseTimerStop(); + void onSuppressSong(); + void onUnsuppressSong(); + void onSuppressAll(); + void onSongVolumeChanged(); + private: + enum { + EmitError = 0x01, + EmitStopped = 0x02, + EmitPositionUpdated = 0x04, + EmitNeedToPreload = 0x08, + }; + int32 updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); + QTimer _timer, _pauseTimer; QMutex _pauseMutex; bool _pauseFlag, _paused; + bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim, _songVolumeChanged; + anim::fvalue _suppressAllGain, _suppressSongGain; + uint64 _suppressAllStart, _suppressSongStart; + }; class AudioPlayerLoader; @@ -187,22 +259,46 @@ public: signals: - void error(AudioData *audio); + void error(const AudioMsgId &audio); + void error(const SongMsgId &song); void needToCheck(); public slots: void onInit(); - void onStart(AudioData *audio); - void onLoad(AudioData *audio); - void onCancel(AudioData *audio); - + + void onStart(const AudioMsgId &audio, qint64 position); + void onStart(const SongMsgId &audio, qint64 position); + + void onLoad(const AudioMsgId &audio); + void onLoad(const SongMsgId &audio); + + void onCancel(const AudioMsgId &audio); + void onCancel(const SongMsgId &audio); + private: - typedef QMap Loaders; - Loaders _loaders; + AudioMsgId _audio; + AudioPlayerLoader *_audioLoader; - void loadError(Loaders::iterator i); + SongMsgId _song; + AudioPlayerLoader *_songLoader; + + void emitError(MediaOverviewType type); + void clear(MediaOverviewType type); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); + AudioMsgId clearAudio(); + SongMsgId clearSong(); + + enum SetupError { + SetupErrorAtStart = 0, + SetupErrorNotPlaying = 1, + SetupErrorLoadedFull = 2, + SetupNoErrorStarted = 3, + }; + void loadData(MediaOverviewType type, const void *objId, qint64 position); + AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position); + AudioPlayer::Msg *checkLoader(MediaOverviewType type); }; @@ -239,3 +335,5 @@ private: QByteArray _captured; }; + +MTPDocumentAttribute audioReadSongAttributes(const QString &fname, const QByteArray &data, QImage &cover, QByteArray &coverBytes, QByteArray &coverFormat); diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index ec8f7fcf6..2d4771ce2 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -256,15 +256,28 @@ void UpdateDownloader::unpackUpdate() { return fatalFail(); } - RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevChannel ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0); + RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0); if (!pbKey) { LOG(("Update Error: cant read public rsa key!")); return fatalFail(); } if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature RSA_free(pbKey); - LOG(("Update Error: bad RSA signature of update file!")); - return fatalFail(); + if (cDevVersion()) { // try other public key, if we are in dev version + pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicKey : UpdatesPublicDevKey), -1), 0, 0, 0); + if (!pbKey) { + LOG(("Update Error: cant read public rsa key!")); + return fatalFail(); + } + if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature + RSA_free(pbKey); + LOG(("Update Error: bad RSA signature of update file!")); + return fatalFail(); + } + } else { + LOG(("Update Error: bad RSA signature of update file!")); + return fatalFail(); + } } RSA_free(pbKey); diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 267f414cf..685131f9e 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org AboutBox::AboutBox() : _done(this, lang(lng_about_done), st::aboutCloseButton), -_version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (DevChannel ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle), +_version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle), _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) { resizeMaxHeight(st::aboutWidth, st::aboutHeight); diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 7f65d428b..75353e55e 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -285,7 +285,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { } if (uid) { App::main()->addNewContact(uid); - App::main()->showPeer(App::peerFromUser(uid)); + App::main()->choosePeer(App::peerFromUser(uid), ShowAtUnreadMsgId); App::wnd()->hideLayer(); } else { _addButton.hide(); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 8231651ea..bd4ed0d01 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -56,19 +56,24 @@ void ConfirmBox::init(const QString &text) { _confirm.hide(); _cancel.hide(); - connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); + connect(&_close, SIGNAL(clicked()), this, SLOT(onCancel())); setMouseTracking(_text.hasLinks()); } else { _close.hide(); connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); - connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); } prepare(); } +void ConfirmBox::onCancel() { + emit cancelPressed(); + onClose(); +} + void ConfirmBox::mouseMoveEvent(QMouseEvent *e) { _lastMousePos = e->globalPos(); updateHover(); diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index 2cbf4de9f..1a54c33ac 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -35,10 +35,15 @@ public: void leaveEvent(QEvent *e); void updateLink(); +public slots: + + void onCancel(); + signals: void confirmed(); void cancelled(); + void cancelPressed(); protected: diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 76a9c130b..fca3a99e3 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -33,7 +33,8 @@ ConnectionBox::ConnectionBox() : _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)), _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)), - _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)) { + _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)), + _tryIPv6(this, lang(lng_connection_try_ipv6), cTryIPv6()) { connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -51,6 +52,7 @@ void ConnectionBox::hideAll() { _autoRadio.hide(); _httpProxyRadio.hide(); _tcpProxyRadio.hide(); + _tryIPv6.hide(); _hostInput.hide(); _portInput.hide(); @@ -65,8 +67,9 @@ void ConnectionBox::showAll() { _autoRadio.show(); _httpProxyRadio.show(); _tcpProxyRadio.show(); + _tryIPv6.show(); - int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip; + int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) { h += 2 * st::boxPadding.top() + 2 * _hostInput.height(); _hostInput.show(); @@ -99,6 +102,9 @@ void ConnectionBox::paintEvent(QPaintEvent *e) { paintTitle(p, lang(lng_connection_header), true); + // paint separator + p.fillRect(st::boxPadding.left(), _tryIPv6.y() - st::connectionSkip - st::lineWidth, width() - st::boxPadding.left() - st::boxPadding.right(), st::lineWidth, st::scrollDef.shColor->b); + // paint shadow p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); @@ -128,10 +134,11 @@ void ConnectionBox::resizeEvent(QResizeEvent *e) { _passwordInput.move(width() - st::boxPadding.right() - _passwordInput.width(), _userInput.y()); } - int32 buttony = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip; + int32 tryipv6y = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip + st::lineWidth + st::connectionSkip; + _tryIPv6.move(st::boxPadding.left(), tryipv6y); - _saveButton.move(width() - _saveButton.width(), buttony); - _cancelButton.move(0, buttony); + _saveButton.move(width() - _saveButton.width(), _tryIPv6.y() + _tryIPv6.height() + st::connectionSkip); + _cancelButton.move(0, _saveButton.y()); } void ConnectionBox::onChange() { @@ -172,8 +179,17 @@ void ConnectionBox::onSave() { QNetworkProxyFactory::setUseSystemConfiguration(false); QNetworkProxyFactory::setUseSystemConfiguration(true); } - Local::writeSettings(); - MTP::restart(); - reinitImageLinkManager(); - emit closed(); + if (cPlatform() == dbipWindows && cTryIPv6() != _tryIPv6.checked()) { + cSetTryIPv6(_tryIPv6.checked()); + Local::writeSettings(); + cSetRestarting(true); + cSetRestartingToSettings(true); + App::quit(); + } else { + cSetTryIPv6(_tryIPv6.checked()); + Local::writeSettings(); + MTP::restart(); + reinitImageLinkManager(); + emit closed(); + } } diff --git a/Telegram/SourceFiles/boxes/connectionbox.h b/Telegram/SourceFiles/boxes/connectionbox.h index 1550ace95..0f5168620 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.h +++ b/Telegram/SourceFiles/boxes/connectionbox.h @@ -47,4 +47,5 @@ private: PortInput _portInput; FlatInput _userInput, _passwordInput; FlatRadiobutton _autoRadio, _httpProxyRadio, _tcpProxyRadio; + FlatCheckbox _tryIPv6; }; diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 4b6a1403d..c5cec8baa 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -60,7 +60,7 @@ _byUsernameSel(-1), _addContactLnk(this, lang(lng_add_contact_button)) { DialogsIndexed &v(App::main()->dialogsList()); for (DialogRow *r = v.list.begin; r != v.list.end; r = r->next) { - if (r->history->peer->chat && !r->history->peer->asChat()->forbidden) { + if (r->history->peer->chat && !r->history->peer->asChat()->forbidden && !r->history->peer->asChat()->left) { _contacts->addToEnd(r->history); } } @@ -96,7 +96,7 @@ void ContactsInner::onAddBot() { MTP::send(MTPmessages_StartBot(_bot->inputUser, MTP_int(App::chatFromPeer(_addToChat->id)), MTP_long(randomId), MTP_string(_bot->botInfo->startGroupToken)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _bot)); App::wnd()->hideLayer(); - App::main()->showPeer(_addToChat->id, 0, false); + App::main()->showPeerHistory(_addToChat->id, ShowAtUnreadMsgId); } else { App::main()->addParticipants(_addToChat, QVector(1, _bot)); } @@ -104,7 +104,7 @@ void ContactsInner::onAddBot() { void ContactsInner::peerUpdated(PeerData *peer) { if (_chat && (!peer || peer == _chat)) { - if (_chat->forbidden) { + if (_chat->forbidden || _chat->left) { App::wnd()->hideLayer(); } else if (!_chat->participants.isEmpty() || _chat->count <= 0) { for (ContactsData::iterator i = _contactsData.begin(), e = _contactsData.end(); i != e; ++i) { @@ -180,11 +180,11 @@ ContactsInner::ContactData *ContactsInner::contactData(DialogRow *row) { if (i == _contactsData.cend()) { _contactsData.insert(peer, data = new ContactData()); data->inchat = (_chat && !peer->chat) ? _chat->participants.contains(peer->asUser()) : false; - data->check = false; + data->check = _checkedContacts.contains(peer); data->name.setText(st::profileListNameFont, peer->name, _textNameOptions); if (peer->chat) { ChatData *chat = peer->asChat(); - if (chat->forbidden) { + if (chat->forbidden || chat->left) { data->online = lang(lng_chat_status_unaccessible); } else { data->online = lng_chat_status_members(lt_count, chat->count); @@ -249,7 +249,7 @@ void ContactsInner::paintDialog(QPainter &p, PeerData *peer, ContactData *data, } else { if (data->inchat || data->check) { p.setPen(st::white->p); - } else if (user && (uname || App::onlineColorUse(user->onlineTill, _time))) { + } else if (user && (uname || App::onlineColorUse(user, _time))) { p.setPen(st::profileOnlineColor->p); } else { p.setPen(st::profileOfflineColor->p); @@ -401,7 +401,7 @@ void ContactsInner::chooseParticipant() { if (_filter.isEmpty()) { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsername.size()) { if (d_byUsername[_byUsernameSel]->inchat) return; - changeCheckState(d_byUsername[_byUsernameSel]); + changeCheckState(d_byUsername[_byUsernameSel], _byUsername[_byUsernameSel]); } else { if (!_sel || contactData(_sel)->inchat) return; changeCheckState(_sel); @@ -409,7 +409,7 @@ void ContactsInner::chooseParticipant() { } else { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsernameFiltered.size()) { if (d_byUsernameFiltered[_byUsernameSel]->inchat) return; - changeCheckState(d_byUsernameFiltered[_byUsernameSel]); + changeCheckState(d_byUsernameFiltered[_byUsernameSel], _byUsernameFiltered[_byUsernameSel]); ContactData *moving = d_byUsernameFiltered[_byUsernameSel]; int32 i = 0, l = d_byUsername.size(); @@ -461,7 +461,7 @@ void ContactsInner::chooseParticipant() { App::wnd()->replaceLayer(box); } else { App::wnd()->hideSettings(true); - App::main()->showPeer(peer->id, 0, false, true); + App::main()->choosePeer(peer->id, ShowAtUnreadMsgId); App::wnd()->hideLayer(); } } @@ -470,15 +470,17 @@ void ContactsInner::chooseParticipant() { } void ContactsInner::changeCheckState(DialogRow *row) { - changeCheckState(contactData(row)); + changeCheckState(contactData(row), row->history->peer); } -void ContactsInner::changeCheckState(ContactData *data) { +void ContactsInner::changeCheckState(ContactData *data, PeerData *peer) { if (data->check) { data->check = false; + _checkedContacts.remove(peer); --_selCount; } else if (_selCount + (_chat ? _chat->count : 0) < cMaxGroupCount()) { data->check = true; + _checkedContacts.insert(peer, true); ++_selCount; } } @@ -693,7 +695,7 @@ void ContactsInner::peopleReceived(const QString &query, const QVectorinchat = _chat ? _chat->participants.contains(u) : false; - d->check = false; + d->check = _checkedContacts.contains(u); d->name.setText(st::profileListNameFont, u->name, _textNameOptions); d->online = '@' + u->username; @@ -880,6 +882,11 @@ void ContactsInner::selectSkipPage(int32 h, int32 dir) { QVector ContactsInner::selected() { QVector result; + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } result.reserve(_contactsData.size()); for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check && !i.key()->chat) { @@ -896,10 +903,15 @@ QVector ContactsInner::selected() { QVector ContactsInner::selectedInputs() { QVector result; + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } result.reserve(_contactsData.size()); for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check && !i.key()->chat) { - result.push_back(i.key()->inputUser); + result.push_back(i.key()->asUser()->inputUser); } } for (int32 i = 0, l = _byUsername.size(); i < l; ++i) { @@ -911,6 +923,11 @@ QVector ContactsInner::selectedInputs() { } PeerData *ContactsInner::selectedUser() { + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check) { return i.key(); @@ -1149,7 +1166,7 @@ void ContactsBox::onNext() { _filter.setFocus(); _filter.notaBene(); } else if (v.size() == 1) { - App::main()->showPeer(_inner.selectedUser()->id); + App::main()->showPeerHistory(_inner.selectedUser()->id, ShowAtUnreadMsgId); } else { App::wnd()->replaceLayer(new CreateGroupBox(users)); } @@ -1258,7 +1275,7 @@ void CreateGroupBox::created(const MTPUpdates &updates) { } break; } if (v && !v->isEmpty() && v->front().type() == mtpc_chat) { - App::main()->showPeer(App::peerFromChat(v->front().c_chat().vid.v)); + App::main()->choosePeer(App::peerFromChat(v->front().c_chat().vid.v), ShowAtUnreadMsgId); } } diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index 7fd8fc834..5b59f8a63 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -53,7 +53,7 @@ public: void loadProfilePhotos(int32 yFrom); void chooseParticipant(); void changeCheckState(DialogRow *row); - void changeCheckState(ContactData *data); + void changeCheckState(ContactData *data, PeerData *peer); void peopleReceived(const QString &query, const QVector &people); @@ -109,6 +109,8 @@ private: }; typedef QMap ContactsData; ContactsData _contactsData; + typedef QMap CheckedContacts; + CheckedContacts _checkedContacts; ContactData *contactData(DialogRow *row); diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 7f3a408da..6cff7cff7 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -61,7 +61,8 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi } resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); - _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw, _thumbh, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); + _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); + _thumb.setDevicePixelRatio(cRetinaFactor()); } else { _compressed.hide(); if (!_img->photoThumbs.isEmpty()) { @@ -189,7 +190,11 @@ void PhotoSendBox::hideAll() { void PhotoSendBox::showAll() { _sendButton.show(); _cancelButton.show(); - _compressed.show(); + if (_img && _img->type == ToPreparePhoto) { + _compressed.show(); + } else { + _compressed.hide(); + } } void PhotoSendBox::onSend(bool ctrlShiftEnter) { diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index f85fe974b..c5250bdf2 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -264,12 +264,12 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { QString appName, appVer = qs(d.vapp_version), systemVer = qs(d.vsystem_version), deviceModel = qs(d.vdevice_model); if (d.vapi_id.v == 2040 || d.vapi_id.v == 17349) { - appName = (d.vapi_id.v == 2040) ? qsl("Telegram Desktop") : qsl("Telegram Desktop (GitHub)"); - // if (systemVer == QLatin1String("windows")) { + appName = (d.vapi_id.v == 2040) ? qstr("Telegram Desktop") : qstr("Telegram Desktop (GitHub)"); + // if (systemVer == qstr("windows")) { // deviceModel = qsl("Windows"); - // } else if (systemVer == QLatin1String("os x")) { + // } else if (systemVer == qstr("os x")) { // deviceModel = qsl("OS X"); - // } else if (systemVer == QLatin1String("linux")) { + // } else if (systemVer == qstr("linux")) { // deviceModel = qsl("Linux"); // } if (appVer == QString::number(appVer.toInt())) { @@ -293,7 +293,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { MTPint active = d.vdate_active.v ? d.vdate_active : d.vdate_created; data.activeTime = active.v; - data.info = qs(d.vdevice_model) + QLatin1String(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version); + data.info = qs(d.vdevice_model) + qstr(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version); data.ip = qs(d.vip) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country); if (!data.hash || (d.vflags.v & 1)) { data.active = QString(); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index f2b14fd16..5a8af1db0 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" StickerSetInner::StickerSetInner(const MTPInputStickerSet &set) : -_loaded(false), _setId(0), _setAccess(0), _bottom(0), +_loaded(false), _setId(0), _setAccess(0), _setCount(0), _setHash(0), _setFlags(0), _bottom(0), _input(set), _installRequest(0) { switch (set.type()) { case mtpc_inputStickerSetID: _setId = set.c_inputStickerSetID().vid.v; _setAccess = set.c_inputStickerSetID().vaccess_hash.v; break; @@ -46,7 +46,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { _pack.reserve(v.size()); for (int32 i = 0, l = v.size(); i < l; ++i) { DocumentData *doc = App::feedDocument(v.at(i)); - if (!doc || !doc->sticker) continue; + if (!doc || !doc->sticker()) continue; _pack.push_back(doc); } @@ -57,10 +57,13 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { _setShortName = qs(s.vshort_name); _setId = s.vid.v; _setAccess = s.vaccess_hash.v; + _setCount = s.vcount.v; + _setHash = s.vhash.v; + _setFlags = s.vflags.v; } } - if (_pack.isEmpty() || _setShortName.isEmpty()) { + if (_pack.isEmpty()) { App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); } else { int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0); @@ -84,13 +87,25 @@ bool StickerSetInner::failedSet(const RPCError &error) { void StickerSetInner::installDone(const MTPBool &result) { StickerSets &sets(cRefStickerSets()); - sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName)).value().stickers = _pack; - int32 index = cStickerSetsOrder().indexOf(_setId); - if (index > 0) { - cRefStickerSetsOrder().removeAt(index); - cRefStickerSetsOrder().push_front(_setId); - } else if (index < 0) { - cRefStickerSetsOrder().push_front(_setId); + sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName, _setCount, _setHash, _setFlags)).value().stickers = _pack; + + int32 insertAtIndex = 0; + StickerSetsOrder &order(cRefStickerSetsOrder()); + for (int32 s = order.size(); insertAtIndex < s; ++insertAtIndex) { + StickerSets::const_iterator i = sets.constFind(order.at(insertAtIndex)); + if (i == sets.cend() || !(i->flags & MTPDstickerSet_flag_official)) { + break; + } + } + int32 currentIndex = cStickerSetsOrder().indexOf(_setId); + if (currentIndex != insertAtIndex) { + if (currentIndex > 0) { + order.removeAt(currentIndex); + if (currentIndex < insertAtIndex) { + --insertAtIndex; + } + } + order.insert(insertAtIndex, _setId); } StickerSets::iterator custom = sets.find(CustomStickerSetId); @@ -141,11 +156,11 @@ void StickerSetInner::paintEvent(QPaintEvent *e) { if (!doc->loader && doc->status != FileFailed && !already && !hasdata) { doc->save(QString()); } - if (doc->sticker->img->isNull() && (already || hasdata)) { + if (doc->sticker()->img->isNull() && (already || hasdata)) { if (already) { - doc->sticker->img = ImagePtr(doc->already()); + doc->sticker()->img = ImagePtr(doc->already()); } else { - doc->sticker->img = ImagePtr(doc->data); + doc->sticker()->img = ImagePtr(doc->data); } } } @@ -158,8 +173,8 @@ void StickerSetInner::paintEvent(QPaintEvent *e) { QPoint ppos = pos + QPoint((st::stickersSize.width() - w) / 2, (st::stickersSize.height() - h) / 2); if (goodThumb) { p.drawPixmapLeft(ppos, width(), doc->thumb->pix(w, h)); - } else if (!doc->sticker->img->isNull()) { - p.drawPixmapLeft(ppos, width(), doc->sticker->img->pix(w, h)); + } else if (!doc->sticker()->img->isNull()) { + p.drawPixmapLeft(ppos, width(), doc->sticker()->img->pix(w, h)); } } } @@ -183,6 +198,10 @@ int32 StickerSetInner::notInstalled() const { return (_loaded && (cStickerSets().constFind(_setId) == cStickerSets().cend())) ? _pack.size() : 0; } +bool StickerSetInner::official() const { + return _loaded && _setShortName.isEmpty(); +} + QString StickerSetInner::title() const { return _loaded ? (_pack.isEmpty() ? lang(lng_attach_failed) : _title) : lang(lng_contacts_loading); } @@ -193,7 +212,7 @@ QString StickerSetInner::shortName() const { void StickerSetInner::install() { if (_installRequest) return; - _installRequest = MTP::send(MTPmessages_InstallStickerSet(_input), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed)); + _installRequest = MTP::send(MTPmessages_InstallStickerSet(_input, MTP_bool(false)), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed)); } StickerSetInner::~StickerSetInner() { @@ -202,7 +221,8 @@ StickerSetInner::~StickerSetInner() { StickerSetBox::StickerSetBox(const MTPInputStickerSet &set) : ScrollableBox(st::stickersScroll), _inner(set), _close(this, st::btnStickersClose), _addStickers(this, lng_stickers_add_pack(lt_count, 0), st::btnStickersAdd), -_shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) { +_shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd), +_closeStickers(this, lang(lng_close), st::btnStickersAdd) { resize(st::stickersWidth, height()); setMaxHeight(st::stickersMaxHeight); connect(App::main(), SIGNAL(stickersUpdated()), this, SLOT(onStickersUpdated())); @@ -212,6 +232,7 @@ _shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) { connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_addStickers, SIGNAL(clicked()), this, SLOT(onAddStickers())); connect(&_shareStickers, SIGNAL(clicked()), this, SLOT(onShareStickers())); + connect(&_closeStickers, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_inner, SIGNAL(updateButtons()), this, SLOT(onUpdateButtons())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); @@ -235,7 +256,6 @@ void StickerSetBox::onAddStickers() { void StickerSetBox::onShareStickers() { QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName(); - DEBUG_LOG(("Setting text to clipboard from stickerset box: %1").arg(url)); QApplication::clipboard()->setText(url); App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true); } @@ -260,19 +280,26 @@ void StickerSetBox::showAll() { _close.show(); int32 cnt = _inner.notInstalled(); if (_inner.loaded()) { - if (_inner.notInstalled()) { + if (_inner.official()) { + _addStickers.hide(); + _shareStickers.hide(); + _closeStickers.show(); + } else if (_inner.notInstalled()) { _addStickers.setText(lng_stickers_add_pack(lt_count, cnt)); _addStickers.show(); _addStickers.raise(); _shareStickers.hide(); + _closeStickers.hide(); } else { _shareStickers.show(); _shareStickers.raise(); _addStickers.hide(); + _closeStickers.hide(); } } else { _addStickers.hide(); _shareStickers.hide(); + _closeStickers.hide(); } update(); } @@ -290,4 +317,5 @@ void StickerSetBox::resizeEvent(QResizeEvent *e) { _close.moveToRight(0, 0, width()); _addStickers.move((width() - _addStickers.width()) / 2, height() - (st::stickersAddOrShare + _addStickers.height()) / 2); _shareStickers.move((width() - _shareStickers.width()) / 2, height() - (st::stickersAddOrShare + _shareStickers.height()) / 2); + _closeStickers.move((width() - _closeStickers.width()) / 2, height() - (st::stickersAddOrShare + _closeStickers.height()) / 2); } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index c5c3661f8..8ac876990 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -32,6 +32,7 @@ public: bool loaded() const; int32 notInstalled() const; + bool official() const; QString title() const; QString shortName() const; @@ -57,6 +58,7 @@ private: bool _loaded; uint64 _setId, _setAccess; QString _title, _setTitle, _setShortName; + int32 _setCount, _setHash, _setFlags; int32 _bottom; MTPInputStickerSet _input; @@ -96,5 +98,5 @@ private: StickerSetInner _inner; IconedButton _close; - FlatButton _addStickers, _shareStickers; + FlatButton _addStickers, _shareStickers, _closeStickers; }; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 970c2ac11..3490453cd 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8028; -static const wchar_t *AppVersionStr = L"0.8.28"; -static const bool DevChannel = true; +static const int32 AppVersion = 8051; +static const wchar_t *AppVersionStr = L"0.8.51"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; @@ -85,9 +85,10 @@ enum { MediaOverviewPreloadCount = 4, AudioVoiceMsgSimultaneously = 4, + AudioSongSimultaneously = 4, AudioCheckPositionTimeout = 100, // 100ms per check audio pos - AudioCheckPositionDelta = 4800, // update position called each 4800 samples - AudioFadeTimeout = 10, // 10ms + AudioCheckPositionDelta = 2400, // update position called each 2400 samples + AudioFadeTimeout = 7, // 7ms AudioFadeDuration = 500, AudioVoiceMsgSkip = 400, // 200ms AudioVoiceMsgFade = 300, // 300ms @@ -100,7 +101,7 @@ enum { AudioVoiceMsgInMemory = 1024 * 1024, // 1 Mb audio is hold in memory and auto loaded AudioPauseDeviceTimeout = 3000, // pause in 3 secs after playing is over - StickerInMemory = 256 * 1024, // 128 Kb stickers hold in memory, auto loaded and displayed inline + StickerInMemory = 1024 * 1024, // 1024 Kb stickers hold in memory, auto loaded and displayed inline StickerMaxSize = 2048, // 2048x2048 is a max image size for sticker MediaViewImageSizeLimit = 100 * 1024 * 1024, // show up to 100mb jpg/png/gif docs in app @@ -139,12 +140,18 @@ enum { WrongPasscodeTimeout = 1500, SessionsShortPollTimeout = 60000, + + ChoosePeerByDragTimeout = 1000, // 1 second mouse not moved to choose dialog when dragging a file }; -inline bool isServiceUser(uint64 id) { +inline bool isNotificationsUser(uint64 id) { return (id == 333000) || (id == ServiceUserId); } +inline bool isServiceUser(uint64 id) { + return !(id % 1000);// (id == 333000) || (id == ServiceUserId); +} + #ifdef Q_OS_WIN inline const GUID &cGUID() { static const GUID gGuid = { 0x87a94ab0, 0xe370, 0x4cde, { 0x98, 0xd3, 0xac, 0xc1, 0x10, 0xc5, 0x96, 0x7d } }; @@ -288,7 +295,7 @@ enum { DefaultChatBackground = 21, DialogsFirstLoad = 20, // first dialogs part size requested - DialogsPerPage = 40, // next dialogs part size + DialogsPerPage = 200, // next dialogs part size MessagesFirstLoad = 30, // first history part size requested MessagesPerPage = 50, // next history part size @@ -318,6 +325,7 @@ enum { MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory NotifyWindowsCount = 3, // 3 desktop notifies at the same time NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server + NotifyDeletePhotoAfter = 60000, // delete notify photo after 1 minute UpdateChunk = 100 * 1024, // 100kb parts when downloading the update IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle @@ -325,7 +333,7 @@ enum { }; inline const QRegularExpression &cWordSplit() { - static QRegularExpression regexp(qsl("[\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]")); + static QRegularExpression regexp(qsl("[\\@\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]")); return regexp; } diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index ce1fc89b7..d7e7fc8f9 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -42,12 +42,16 @@ peopleSel(-1), _lastSearchId(0), _state(DefaultState), _addContactLnk(this, lang(lng_add_contact_button)), -_overDelete(false) { +_cancelSearchInPeer(this, st::btnCancelSearch), +_overDelete(false), +_searchInPeer(0) { connect(main, SIGNAL(dialogToTop(const History::DialogLinks&)), this, SLOT(onDialogToTop(const History::DialogLinks&))); connect(main, SIGNAL(peerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&)), this, SLOT(onPeerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&))); connect(main, SIGNAL(peerPhotoChanged(PeerData*)), this, SLOT(onPeerPhotoChanged(PeerData*))); connect(main, SIGNAL(dialogRowReplaced(DialogRow*,DialogRow*)), this, SLOT(onDialogRowReplaced(DialogRow*,DialogRow*))); connect(&_addContactLnk, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact())); + connect(&_cancelSearchInPeer, SIGNAL(clicked()), this, SIGNAL(cancelSearchInPeer())); + _cancelSearchInPeer.hide(); refresh(false); } @@ -60,7 +64,9 @@ int32 DialogsListWidget::peopleOffset() const { } int32 DialogsListWidget::searchedOffset() const { - return peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); + int32 result = peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); + if (_searchInPeer) result += st::dlgHeight; + return result; } void DialogsListWidget::paintEvent(QPaintEvent *e) { @@ -80,12 +86,12 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { if (otherStart) { dialogs.list.paint(p, width(), r.top(), r.bottom(), active, selected); } - if (contactsNoDialogs.list.count) { + if (contactsNoDialogs.list.count && false) { contactsNoDialogs.list.paint(p, width(), r.top() - otherStart, r.bottom() - otherStart, active, selected); } else if (!otherStart) { p.setFont(st::noContactsFont->f); p.setPen(st::noContactsColor->p); - p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_contacts : lng_contacts_loading), style::al_center); + p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_chats : lng_contacts_loading), style::al_center); } } else if (_state == FilteredState || _state == SearchedState) { if (!hashtagResults.isEmpty()) { @@ -181,6 +187,18 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { } } + if (_searchInPeer) { + searchInPeerPaint(p, width()); + p.translate(0, st::dlgHeight); + if (_state == FilteredState && searchResults.isEmpty()) { + p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b); + p.setFont(st::searchedBarFont->f); + p.setPen(st::searchedBarColor->p); + p.drawText(QRect(0, 0, width(), st::searchedBarHeight), lang(lng_dlg_search_for_messages), style::al_center); + p.translate(0, st::searchedBarHeight); + } + } + if (_state == SearchedState || !searchResults.isEmpty()) { QString text = lng_search_found_results(lt_count, searchResults.isEmpty() ? 0 : searchedCount); p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b); @@ -252,6 +270,31 @@ void DialogsListWidget::peopleResultPaint(UserData *user, QPainter &p, int32 w, history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } +void DialogsListWidget::searchInPeerPaint(QPainter &p, int32 w) const { + QRect fullRect(0, 0, w, st::dlgHeight); + p.fillRect(fullRect, st::dlgBG->b); + + p.drawPixmap(st::dlgPaddingHor, st::dlgPaddingVer, _searchInPeer->photo->pix(st::dlgPhotoSize)); + + int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; + int32 namewidth = w - nameleft - st::dlgPaddingHor * 2 - st::btnCancelSearch.width; + QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + + // draw chat icon + if (_searchInPeer->chat) { + p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); + } + + QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height); + p.setFont(st::dlgHistFont->f); + p.setPen(st::dlgTextColor->p); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(lang(lng_dlg_search_chat), Qt::ElideRight, tr.width())); + + p.setPen(st::dlgNameColor->p); + App::history(_searchInPeer->id)->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); +} + void DialogsListWidget::activate() { } @@ -274,7 +317,7 @@ void DialogsListWidget::onUpdateSelected(bool force) { if (newSel) { contactSel = false; } else { - newSel = contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); + newSel = 0;// contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); contactSel = true; } if (newSel != sel) { @@ -347,6 +390,7 @@ void DialogsListWidget::mousePressEvent(QMouseEvent *e) { void DialogsListWidget::resizeEvent(QResizeEvent *e) { _addContactLnk.move((width() - _addContactLnk.width()) / 2, (st::noContactsHeight + st::noContactsFont->height) / 2); + _cancelSearchInPeer.move(width() - st::dlgPaddingHor - st::btnCancelSearch.width, (st::dlgHeight - st::btnCancelSearch.height) / 2); } void DialogsListWidget::onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow) { @@ -397,9 +441,8 @@ void DialogsListWidget::removePeer(PeerData *peer) { contactsNoDialogs.addByName(App::history(peer->id)); } } -// contactsNoDialogs.del(peer); -// contacts.del(peer); -// App::deleteHistory(peer->id); + + Local::removeSavedPeer(peer); emit App::main()->dialogsUpdated(); @@ -440,7 +483,7 @@ void DialogsListWidget::dlgUpdated(History *history) { if (i != dialogs.list.rowByPeer.cend()) { update(0, i.value()->pos * st::dlgHeight, width(), st::dlgHeight); } else { - i = contactsNoDialogs.list.rowByPeer.find(history->peer->id); + i = contactsNoDialogs.list.rowByPeer.end();// find(history->peer->id); if (i != contactsNoDialogs.list.rowByPeer.cend()) { update(0, (dialogs.list.count + i.value()->pos) * st::dlgHeight, width(), st::dlgHeight); } @@ -489,6 +532,7 @@ void DialogsListWidget::leaveEvent(QEvent *e) { if (sel || filteredSel >= 0 || hashtagSel >= 0 || searchedSel >= 0 || peopleSel >= 0) { sel = 0; filteredSel = searchedSel = peopleSel = hashtagSel = -1; + setCursor(style::cur_default); parentWidget()->update(); } } @@ -538,7 +582,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { } if (newFilter != filter || force) { filter = newFilter; - if (filter.isEmpty()) { + if (!_searchInPeer && filter.isEmpty()) { _state = DefaultState; hashtagResults.clear(); filterResults.clear(); @@ -550,7 +594,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { _state = FilteredState; filterResults.clear(); - if (!f.isEmpty()) { + if (!_searchInPeer && !f.isEmpty()) { DialogsList *dialogsToFilter = 0, *contactsNoDialogsToFilter = 0; if (dialogs.list.count) { for (fi = fb; fi != fe; ++fi) { @@ -629,7 +673,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { } void DialogsListWidget::onHashtagFilterUpdate(QStringRef newFilter) { - if (newFilter.isEmpty() || newFilter.at(0) != '#') { + if (newFilter.isEmpty() || newFilter.at(0) != '#' || _searchInPeer) { _hashtagFilter = QString(); if (!hashtagResults.isEmpty()) { hashtagResults.clear(); @@ -680,6 +724,26 @@ void DialogsListWidget::itemReplaced(HistoryItem *oldItem, HistoryItem *newItem) } } +PeerData *DialogsListWidget::updateFromParentDrag(QPoint globalPos) { + lastMousePos = globalPos; + selByMouse = true; + onUpdateSelected(true); + update(); + + if (_state == DefaultState) { + if (sel) return sel->history->peer; + } else if (_state == FilteredState || _state == SearchedState) { + if (filteredSel >= 0 && filteredSel < filterResults.size()) { + return filterResults[filteredSel]->history->peer; + } else if (peopleSel >= 0 && peopleSel < peopleResults.size()) { + return peopleResults[peopleSel]; + } else if (searchedSel >= 0 && searchedSel < searchResults.size()) { + return searchResults[searchedSel]->_item->history()->peer; + } + } + return 0; +} + void DialogsListWidget::itemRemoved(HistoryItem *item) { int wasCount = searchResults.size(); for (int i = 0; i < searchResults.size();) { @@ -709,6 +773,16 @@ void DialogsListWidget::dialogsReceived(const QVector &added) { refresh(); } +void DialogsListWidget::addAllSavedPeers() { + SavedPeersByTime &saved(cRefSavedPeersByTime()); + while (!saved.isEmpty()) { + History *history = App::history(saved.last()->id); + history->dialogs = dialogs.addToEnd(history); + contactsNoDialogs.del(history->peer); + saved.remove(saved.lastKey(), saved.last()); + } +} + void DialogsListWidget::searchReceived(const QVector &messages, bool fromStart, int32 fullCount) { if (fromStart) { clearSearchResults(false); @@ -748,7 +822,7 @@ void DialogsListWidget::contactsReceived(const QVector &contacts) { App::self()->contact = 1; } } - if (!sel && contactsNoDialogs.list.count) { + if (!sel && contactsNoDialogs.list.count && false) { sel = contactsNoDialogs.list.begin; contactSel = true; } @@ -765,11 +839,11 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) { if (i == dialogs.list.rowByPeer.cend()) { DialogRow *added = contactsNoDialogs.addByName(history); if (!added) return -1; - if (select) { + if (select && false) { sel = added; contactSel = true; } - if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); +// if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); return added ? ((dialogs.list.count + added->pos) * st::dlgHeight) : -1; } if (select) { @@ -782,7 +856,7 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) { void DialogsListWidget::refresh(bool toTop) { int32 h = 0; if (_state == DefaultState) { - h = (dialogs.list.count + contactsNoDialogs.list.count) * st::dlgHeight; + h = (dialogs.list.count/* + contactsNoDialogs.list.count*/) * st::dlgHeight; if (h) { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); } else { @@ -796,7 +870,7 @@ void DialogsListWidget::refresh(bool toTop) { } else { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); if (_state == FilteredState) { - h = searchedOffset() + (searchResults.count() * st::dlgHeight) + (searchResults.isEmpty() ? 0 : st::searchedBarHeight); + h = searchedOffset() + (searchResults.count() * st::dlgHeight) + ((searchResults.isEmpty() && !_searchInPeer) ? 0 : st::searchedBarHeight); } else if (_state == SearchedState) { h = searchedOffset() + (searchResults.count() * st::dlgHeight) + st::searchedBarHeight; } @@ -817,6 +891,7 @@ void DialogsListWidget::setMouseSel(bool msel, bool toTop) { contactSel = !dialogs.list.count && contactsNoDialogs.list.count; } else if (_state == FilteredState || _state == SearchedState) { // don't select first elem in search filteredSel = peopleSel = searchedSel = hashtagSel = -1; + setCursor(style::cur_default); } } } @@ -844,9 +919,23 @@ bool DialogsListWidget::hasFilteredResults() const { return !filterResults.isEmpty() && hashtagResults.isEmpty(); } +void DialogsListWidget::searchInPeer(PeerData *peer) { + _searchInPeer = peer; + if (_searchInPeer) { + onHashtagFilterUpdate(QStringRef()); + _cancelSearchInPeer.show(); + } else { + _cancelSearchInPeer.hide(); + } +} + void DialogsListWidget::clearFilter() { if (_state == FilteredState || _state == SearchedState) { - _state = DefaultState; + if (_searchInPeer) { + _state = FilteredState; + } else { + _state = DefaultState; + } hashtagResults.clear(); filterResults.clear(); peopleResults.clear(); @@ -859,6 +948,15 @@ void DialogsListWidget::clearFilter() { void DialogsListWidget::addDialog(const MTPDdialog &dialog) { History *history = App::history(App::peerFromMTP(dialog.vpeer), dialog.vunread_count.v, dialog.vread_inbox_max_id.v); + if (history->lastMsg) { + SavedPeersByTime &saved(cRefSavedPeersByTime()); + while (!saved.isEmpty() && history->lastMsg->date < saved.lastKey()) { + History *history = App::history(saved.last()->id); + history->dialogs = dialogs.addToEnd(history); + contactsNoDialogs.del(history->peer); + saved.remove(saved.lastKey(), saved.last()); + } + } History::DialogLinks links = dialogs.addToEnd(history); history->dialogs = links; contactsNoDialogs.del(history->peer); @@ -871,7 +969,7 @@ void DialogsListWidget::selectSkip(int32 direction) { if (!sel) { if (dialogs.list.count && direction > 0) { sel = dialogs.list.begin; - } else if (contactsNoDialogs.list.count && direction > 0) { + } else if (false && contactsNoDialogs.list.count && direction > 0) { sel = contactsNoDialogs.list.begin; } else { return; @@ -879,14 +977,14 @@ void DialogsListWidget::selectSkip(int32 direction) { } else if (direction > 0) { if (sel->next->next) { sel = sel->next; - } else if (sel->next == dialogs.list.end && contactsNoDialogs.list.count) { + } else if (false && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; contactSel = true; } } else { if (sel->prev) { sel = sel->prev; - } else if (sel == contactsNoDialogs.list.begin && dialogs.list.count) { + } else if (false && sel == contactsNoDialogs.list.begin && dialogs.list.count) { sel = dialogs.list.end->prev; contactSel = false; } @@ -944,7 +1042,7 @@ void DialogsListWidget::scrollToPeer(const PeerId &peer, MsgId msgId) { DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer); if (i != dialogs.list.rowByPeer.cend()) { fromY = i.value()->pos * st::dlgHeight; - } else { + } else if (false) { i = contactsNoDialogs.list.rowByPeer.constFind(peer); if (i != contactsNoDialogs.list.rowByPeer.cend()) { fromY = (i.value()->pos + dialogs.list.count) * st::dlgHeight; @@ -979,7 +1077,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { if (!sel) { if (direction > 0 && dialogs.list.count) { sel = dialogs.list.begin; - } else if (direction > 0 && contactsNoDialogs.list.count) { + } else if (false && direction > 0 && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; } else { return; @@ -989,7 +1087,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { while (toSkip-- && sel->next->next) { sel = sel->next; } - if (toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { + if (false && toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; while (toSkip-- && sel->next->next) { sel = sel->next; @@ -1074,7 +1172,7 @@ void DialogsListWidget::loadPeerPhotos(int32 yFrom) { bool DialogsListWidget::choosePeer() { History *history = 0; - MsgId msgId = 0; + MsgId msgId = ShowAtUnreadMsgId; if (_state == DefaultState) { if (sel) history = sel->history; } else if (_state == FilteredState || _state == SearchedState) { @@ -1113,11 +1211,11 @@ bool DialogsListWidget::choosePeer() { } } if (history) { - if (msgId) { + if (msgId > 0) { saveRecentHashtags(filter); } bool chosen = (!App::main()->selectingPeer(true) && (_state == FilteredState || _state == SearchedState) && filteredSel >= 0 && filteredSel < filterResults.size()); - App::main()->showPeer(history->peer->id, msgId); + App::main()->choosePeer(history->peer->id, msgId); if (chosen) { emit searchResultChosen(); } @@ -1184,11 +1282,11 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (i.value()->prev) { outPeer = i.value()->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } else if (dialogs.list.count) { outPeer = dialogs.list.end->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } outPeer = 0; @@ -1197,7 +1295,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (i.value()->prev) { outPeer = i.value()->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } else if (_state == FilteredState || _state == SearchedState) { @@ -1211,7 +1309,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } } if (searchResults.at(0)->_item->history()->peer == inPeer && searchResults.at(0)->_item->id == inMsg) { - outMsg = 0; + outMsg = ShowAtUnreadMsgId; if (peopleResults.isEmpty()) { if (filterResults.isEmpty()) { outPeer = 0; @@ -1226,14 +1324,14 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (!peopleResults.isEmpty() && peopleResults.at(0) == inPeer) { outPeer = filterResults.isEmpty() ? 0 : filterResults.back()->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } if (!peopleResults.isEmpty()) { for (PeopleResults::const_iterator b = peopleResults.cbegin(), i = b + 1, e = peopleResults.cend(); i != e; ++i) { if ((*i) == inPeer) { outPeer = (*(i - 1)); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } @@ -1247,7 +1345,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData for (FilteredDialogs::const_iterator b = filterResults.cbegin(), i = b + 1, e = filterResults.cend(); i != e; ++i) { if ((*i)->history->peer == inPeer) { outPeer = (*(i - 1))->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } @@ -1260,17 +1358,17 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData if (_state == DefaultState) { DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(inPeer->id); if (i == dialogs.list.rowByPeer.constEnd()) { - i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id); - if (i == contactsNoDialogs.list.rowByPeer.cend()) { - outPeer = 0; - outMsg = 0; - return; - } - if (i.value()->next != contactsNoDialogs.list.end) { - outPeer = i.value()->next->history->peer; - outMsg = 0; - return; - } + //i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id); + //if (i == contactsNoDialogs.list.rowByPeer.cend()) { + // outPeer = 0; + // outMsg = 0; + // return; + //} + //if (i.value()->next != contactsNoDialogs.list.end) { + // outPeer = i.value()->next->history->peer; + // outMsg = ShowAtUnreadMsgId; + // return; + //} outPeer = 0; outMsg = 0; return; @@ -1278,11 +1376,11 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData if (i.value()->next != dialogs.list.end) { outPeer = i.value()->next->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; - } else if (contactsNoDialogs.list.count) { + } else if (false && contactsNoDialogs.list.count) { outPeer = contactsNoDialogs.list.begin->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } else if (_state == FilteredState || _state == SearchedState) { @@ -1304,7 +1402,7 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData outMsg = searchResults.front()->_item->id; } else { outPeer = (i == e) ? 0 : (*i); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } return; } @@ -1314,13 +1412,13 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData ++i; if (i == e && !peopleResults.isEmpty()) { outPeer = peopleResults.front(); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } else if (i == e && !searchResults.isEmpty()) { outPeer = searchResults.front()->_item->history()->peer; outMsg = searchResults.front()->_item->id; } else { outPeer = (i == e) ? 0 : (*i)->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } return; } @@ -1356,16 +1454,19 @@ MsgId DialogsListWidget::lastSearchId() const { DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) , _drawShadow(true) +, _dragInScroll(false) +, _dragForward(false) , dlgOffset(0) , dlgCount(-1) , dlgPreloading(0) , contactsRequest(0) -, _filter(this, st::dlgFilter, lang(lng_dlg_filter)) +, _filter(this, st::dialogsSearchField, lang(lng_dlg_filter)) , _newGroup(this, st::btnNewGroup) , _addContact(this, st::btnAddContact) , _cancelSearch(this, st::btnCancelSearch) , scroll(this, st::dlgScroll) , list(&scroll, parent) +, _searchInPeer(0) , _searchFull(false) , _peopleFull(false) { @@ -1377,6 +1478,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(&list, SIGNAL(searchResultChosen()), this, SLOT(onCancel())); connect(&list, SIGNAL(completeHashtag(QString)), this, SLOT(onCompleteHashtag(QString))); connect(&list, SIGNAL(refreshHashtags()), this, SLOT(onFilterCursorMoved())); + connect(&list, SIGNAL(cancelSearchInPeer()), this, SLOT(onCancelSearchInPeer())); connect(&scroll, SIGNAL(geometryChanged()), &list, SLOT(onParentGeometryChanged())); connect(&scroll, SIGNAL(scrolled()), &list, SLOT(onUpdateSelected())); connect(&scroll, SIGNAL(scrolled()), this, SLOT(onListScroll())); @@ -1388,6 +1490,11 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + _chooseByDragTimer.setSingleShot(true); + connect(&_chooseByDragTimer, SIGNAL(timeout()), this, SLOT(onChooseByDrag())); + + setAcceptDrops(true); + _searchTimer.setSingleShot(true); connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); @@ -1422,15 +1529,11 @@ void DialogsWidget::dlgUpdated(History *row) { } void DialogsWidget::dialogsToUp() { - if (_filter.text().trimmed().isEmpty()) { + if (_filter.getLastText().trimmed().isEmpty()) { scroll.scrollToY(0); } } -void DialogsWidget::setInnerFocus() { - _filter.setFocus(); -} - void DialogsWidget::animShow(const QPixmap &bgAnimCache) { _bgAnimCache = bgAnimCache; _animCache = myGrab(this, rect()); @@ -1471,7 +1574,7 @@ bool DialogsWidget::animStep(float64 ms) { } void DialogsWidget::onCancel() { - if (!onCancelSearch() || !App::main()->selectingPeer()) { + if (!onCancelSearch() || (!_searchInPeer && !App::main()->selectingPeer())) { emit cancelled(); } } @@ -1553,7 +1656,7 @@ bool DialogsWidget::dialogsFailed(const RPCError &error) { } bool DialogsWidget::onSearchMessages(bool searchCache) { - QString q = _filter.text().trimmed(); + QString q = _filter.getLastText().trimmed(); if (q.isEmpty()) { if (_searchRequest) { _searchRequest = 0; @@ -1575,10 +1678,10 @@ bool DialogsWidget::onSearchMessages(bool searchCache) { } else if (_searchQuery != q) { _searchQuery = q; _searchFull = false; - _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); + _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); _searchQueries.insert(_searchRequest, _searchQuery); } - if (q.size() >= MinUsernameLength) { + if (!_searchInPeer && q.size() >= MinUsernameLength) { if (searchCache) { PeopleCache::const_iterator i = _peopleCache.constFind(q); if (i != _peopleCache.cend()) { @@ -1604,8 +1707,12 @@ void DialogsWidget::onNeedSearchMessages() { } } +void DialogsWidget::onChooseByDrag() { + list.choosePeer(); +} + void DialogsWidget::searchMessages(const QString &query) { - if (_filter.text() != query) { + if (_filter.getLastText() != query) { _filter.setText(query); _filter.updatePlaceholder(); onFilterUpdate(); @@ -1618,7 +1725,7 @@ void DialogsWidget::searchMessages(const QString &query) { void DialogsWidget::onSearchMore(MsgId minMsgId) { if (!_searchRequest && !_searchFull) { - _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); + _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); if (!minMsgId) { _searchQueries.insert(_searchRequest, _searchQuery); } @@ -1628,6 +1735,7 @@ void DialogsWidget::onSearchMore(MsgId minMsgId) { void DialogsWidget::loadDialogs() { if (dlgPreloading) return; if (dlgCount >= 0 && dlgOffset >= dlgCount) { + list.addAllSavedPeers(); cSetDialogsReceived(true); return; } @@ -1741,6 +1849,78 @@ bool DialogsWidget::addNewContact(int32 uid, bool show) { return true; } +void DialogsWidget::dragEnterEvent(QDragEnterEvent *e) { + if (App::main()->selectingPeer()) return; + + _dragInScroll = false; + _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-selected")); + if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed-link")); + if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed")); + if (_dragForward && !cWideMode()) _dragForward = false; + if (_dragForward) { + e->setDropAction(Qt::CopyAction); + e->accept(); + updateDragInScroll(scroll.geometry().contains(e->pos())); + } else if (App::main() && App::main()->getDragState(e->mimeData()) != DragStateNone) { + e->setDropAction(Qt::CopyAction); + e->accept(); + } + _chooseByDragTimer.stop(); +} + +void DialogsWidget::dragMoveEvent(QDragMoveEvent *e) { + if (scroll.geometry().contains(e->pos())) { + if (_dragForward) { + updateDragInScroll(true); + } else { + _chooseByDragTimer.start(ChoosePeerByDragTimeout); + } + PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); + if (p) { + e->setDropAction(Qt::CopyAction); + } else { + e->setDropAction(Qt::IgnoreAction); + } + } else { + if (_dragForward) updateDragInScroll(false); + list.leaveEvent(0); + e->setDropAction(Qt::IgnoreAction); + } + e->accept(); +} + +void DialogsWidget::dragLeaveEvent(QDragLeaveEvent *e) { + if (_dragForward) { + updateDragInScroll(false); + } else { + _chooseByDragTimer.stop(); + } + list.leaveEvent(0); + e->accept(); +} + +void DialogsWidget::updateDragInScroll(bool inScroll) { + if (_dragInScroll != inScroll) { + _dragInScroll = inScroll; + if (_dragInScroll) { + App::main()->forwardLayer(1); + } else { + App::main()->dialogsCancelled(); + } + } +} + +void DialogsWidget::dropEvent(QDropEvent *e) { + _chooseByDragTimer.stop(); + if (scroll.geometry().contains(e->pos())) { + PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); + if (p) { + e->acceptProposedAction(); + App::main()->onFilesOrForwardDrop(p->id, e->mimeData()); + } + } +} + void DialogsWidget::onListScroll() { // if (!App::self()) return; @@ -1757,7 +1937,7 @@ void DialogsWidget::onListScroll() { void DialogsWidget::onFilterUpdate(bool force) { if (animating() && !force) return; - QString filterText = _filter.text(); + QString filterText = _filter.getLastText(); list.onFilterUpdate(filterText); if (filterText.isEmpty()) { _searchCache.clear(); @@ -1776,9 +1956,17 @@ void DialogsWidget::onFilterUpdate(bool force) { } } +void DialogsWidget::searchInPeer(PeerData *peer) { + onCancelSearch(); + _searchInPeer = peer; + list.searchInPeer(peer); + onFilterUpdate(true); + list.onFilterUpdate(_filter.getLastText(), true); +} + void DialogsWidget::onFilterCursorMoved(int from, int to) { - if (to < 0) to = _filter.cursorPosition(); - QString t = _filter.text(); + if (to < 0) to = _filter.textCursor().position(); + QString t = _filter.getLastText(); QStringRef r; for (int start = to; start > 0;) { --start; @@ -1793,8 +1981,8 @@ void DialogsWidget::onFilterCursorMoved(int from, int to) { } void DialogsWidget::onCompleteHashtag(QString tag) { - QString t = _filter.text(), r; - int cur = _filter.cursorPosition(); + QString t = _filter.getLastText(), r; + int cur = _filter.textCursor().position(); for (int start = cur; start > 0;) { --start; if (t.size() <= start) break; @@ -1806,7 +1994,9 @@ void DialogsWidget::onCompleteHashtag(QString tag) { if (cur - start - 1 == tag.size() && cur < t.size() && t.at(cur) == ' ') ++cur; r = t.mid(0, start + 1) + tag + ' ' + t.mid(cur); _filter.setText(r); - _filter.setCursorPosition(start + 1 + tag.size() + 1); + QTextCursor cursor(_filter.textCursor()); + cursor.setPosition(start + 1 + tag.size() + 1); + _filter.setTextCursor(cursor); onFilterUpdate(true); return; } @@ -1815,7 +2005,9 @@ void DialogsWidget::onCompleteHashtag(QString tag) { if (!t.at(start).isLetterOrNumber() && t.at(start) != '_') break; } _filter.setText(t.mid(0, cur) + '#' + tag + ' ' + t.mid(cur)); - _filter.setCursorPosition(cur + 1 + tag.size() + 1); + QTextCursor cursor(_filter.textCursor()); + cursor.setPosition(cur + 1 + tag.size() + 1); + _filter.setTextCursor(cursor); onFilterUpdate(true); } @@ -1826,9 +2018,16 @@ void DialogsWidget::resizeEvent(QResizeEvent *e) { _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = scroll.scrollTop() + addToY; scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); list.resize(w, list.height()); - onListScroll(); + if (addToY) { + scroll.scrollToY(newScrollY); + } else { + onListScroll(); + } } void DialogsWidget::keyPressEvent(QKeyEvent *e) { @@ -1926,7 +2125,15 @@ void DialogsWidget::onNewGroup() { } bool DialogsWidget::onCancelSearch() { - bool clearing = !_filter.text().isEmpty(); + bool clearing = !_filter.getLastText().isEmpty(); + if (_searchInPeer && !clearing) { + if (!cWideMode()) { + App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId); + } + _searchInPeer = 0; + list.searchInPeer(0); + clearing = true; + } list.clearFilter(); _filter.clear(); _filter.updatePlaceholder(); @@ -1934,6 +2141,23 @@ bool DialogsWidget::onCancelSearch() { return clearing; } +void DialogsWidget::onCancelSearchInPeer() { + if (_searchInPeer) { + if (!cWideMode()) { + App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId); + } + _searchInPeer = 0; + list.searchInPeer(0); + } + list.clearFilter(); + _filter.clear(); + _filter.updatePlaceholder(); + onFilterUpdate(); + if (cWideMode()) { + emit cancelled(); + } +} + void DialogsWidget::onDialogToTopFrom(int movedFrom) { if (scroll.scrollTop() > 0) { if (movedFrom > scroll.scrollTop()) { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 7d6fb8372..7efb555ec 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -27,6 +27,7 @@ public: DialogsListWidget(QWidget *parent, MainWidget *main); void dialogsReceived(const QVector &dialogs); + void addAllSavedPeers(); void searchReceived(const QVector &messages, bool fromStart, int32 fullCount); void peopleReceived(const QString &query, const QVector &people); void showMore(int32 pixels); @@ -48,6 +49,7 @@ public: void leaveEvent(QEvent *e); void peopleResultPaint(UserData *user, QPainter &p, int32 w, bool act, bool sel) const; + void searchInPeerPaint(QPainter &p, int32 w) const; void selectSkip(int32 direction); void selectSkipPage(int32 pixels, int32 direction); @@ -93,11 +95,15 @@ public: State state() const; bool hasFilteredResults() const; + void searchInPeer(PeerData *peer); + void onFilterUpdate(QString newFilter, bool force = false); void onHashtagFilterUpdate(QStringRef newFilter); void itemRemoved(HistoryItem *item); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); + PeerData *updateFromParentDrag(QPoint globalPos); + ~DialogsListWidget(); public slots: @@ -115,6 +121,7 @@ signals: void dialogToTopFrom(int movedFrom); void searchMessages(); void searchResultChosen(); + void cancelSearchInPeer(); void completeHashtag(QString tag); void refreshHashtags(); @@ -154,9 +161,12 @@ private: void paintDialog(QPainter &p, DialogRow *dialog); LinkButton _addContactLnk; + IconedButton _cancelSearchInPeer; bool _overDelete; + PeerData *_searchInPeer; + }; class DialogsWidget : public QWidget, public Animated, public RPCSender { @@ -171,10 +181,18 @@ public: void peopleReceived(const MTPcontacts_Found &result, mtpRequestId req); bool addNewContact(int32 uid, bool show = true); + void dragEnterEvent(QDragEnterEvent *e); + void dragMoveEvent(QDragMoveEvent *e); + void dragLeaveEvent(QDragLeaveEvent *e); + void dropEvent(QDropEvent *e); + void updateDragInScroll(bool inScroll); + void resizeEvent(QResizeEvent *e); void keyPressEvent(QKeyEvent *e); void paintEvent(QPaintEvent *e); + void searchInPeer(PeerData *peer); + void loadDialogs(); void createDialogAtTop(History *history, int32 unreadCount); void dlgUpdated(DialogRow *row); @@ -185,8 +203,6 @@ public: void animShow(const QPixmap &bgAnimCache); bool animStep(float64 ms); - void setInnerFocus(); - void destroyData(); void peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg) const; @@ -220,6 +236,7 @@ public slots: void onAddContact(); void onNewGroup(); bool onCancelSearch(); + void onCancelSearchInPeer(); void onFilterCursorMoved(int from = -1, int to = -1); void onCompleteHashtag(QString tag); @@ -228,10 +245,15 @@ public slots: bool onSearchMessages(bool searchCache = false); void onNeedSearchMessages(); + void onChooseByDrag(); + private: bool _drawShadow; + bool _dragInScroll, _dragForward; + QTimer _chooseByDragTimer; + void unreadCountsReceived(const QVector &dialogs); bool dialogsFailed(const RPCError &error); bool contactsFailed(const RPCError &error); @@ -242,7 +264,7 @@ private: mtpRequestId dlgPreloading; mtpRequestId contactsRequest; - FlatInput _filter; + InputField _filter; IconedButton _newGroup, _addContact, _cancelSearch; ScrollArea scroll; DialogsListWidget list; @@ -251,6 +273,8 @@ private: anim::ivalue a_coord, a_bgCoord; anim::fvalue a_alpha, a_bgAlpha; + PeerData *_searchInPeer; + QTimer _searchTimer; QString _searchQuery, _peopleQuery; bool _searchFull, _peopleFull; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index eb83e4957..f00f47fcb 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -384,7 +384,7 @@ void DragArea::dragLeaveEvent(QDragLeaveEvent *e) { void DragArea::dropEvent(QDropEvent *e) { static_cast(parentWidget())->dropEvent(e); if (e->isAccepted()) { - emit dropped(e); + emit dropped(e->mimeData()); } } @@ -684,10 +684,11 @@ void EmojiColorPicker::drawVariant(Painter &p, int variant) { p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojisLarge(), QRect(_variants[variant]->x * esize, _variants[variant]->y * esize, esize, esize)); } -EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), +EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), _maxHeight(int(st::emojiPanMaxHeight)), _top(0), _selected(-1), _pressedSel(-1), _pickerSel(-1), _picker(this), _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_stickers))) { - resize(st::emojiPanFullSize.width(), countHeight()); + resize(st::emojiPanWidth, countHeight()); + setMouseTracking(true); setFocusPolicy(Qt::NoFocus); @@ -709,6 +710,11 @@ _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switc connect(&_picker, SIGNAL(hidden()), this, SLOT(onPickerHidden())); } +void EmojiPanInner::setMaxHeight(int32 h) { + _maxHeight = h; + resize(st::emojiPanWidth, countHeight()); +} + void EmojiPanInner::setScrollTop(int top) { if (top == _top) return; @@ -1131,10 +1137,11 @@ void EmojiPanInner::showEmojiPack(DBIEmojiTab packIndex) { update(); } -StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), +StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight), _top(0), _selected(-1), _pressedSel(-1), _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_emoji))) { - resize(st::emojiPanFullSize.width(), countHeight()); + resize(st::emojiPanWidth, countHeight()); + setMouseTracking(true); setFocusPolicy(Qt::NoFocus); @@ -1143,6 +1150,11 @@ _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_e refreshStickers(); } +void StickerPanInner::setMaxHeight(int32 h) { + _maxHeight = h; + resize(st::emojiPanWidth, countHeight()); +} + void StickerPanInner::setScrollTop(int top) { if (top == _top) return; @@ -1154,9 +1166,9 @@ void StickerPanInner::setScrollTop(int top) { } int StickerPanInner::countHeight() { - int result = 0, minLastH = st::emojiPanFullSize.height() - st::rbEmoji.height - st::stickerPanPadding; + int result = 0, minLastH = _maxHeight - st::rbEmoji.height - st::stickerPanPadding; for (int i = 0; i < _sets.size(); ++i) { - int cnt = _sets.at(i).size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); + int cnt = _sets.at(i).pack.size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); int h = st::emojiPanHeader + rows * st::stickerPanSize.height(); if (i == _sets.size() - 1 && h < minLastH) h = minLastH; result += h; @@ -1174,21 +1186,21 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { int32 y, tilly = 0; for (int c = 0, l = _sets.size(); c < l; ++c) { y = tilly; - int32 size = _sets.at(c).size(); + int32 size = _sets.at(c).pack.size(); int32 rows = (size / StickerPanPerRow) + ((size % StickerPanPerRow) ? 1 : 0); tilly = y + st::emojiPanHeader + (rows * st::stickerPanSize.height()); if (r.top() >= tilly) continue; - bool special = (_setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId); + bool special = (_sets[c].flags & MTPDstickerSet_flag_official); y += st::emojiPanHeader; - QString title = _titles[c]; + QString title = _sets[c].title; if (r.bottom() <= y) { p.setFont(st::emojiPanHeaderFont->f); p.setPen(st::emojiPanHeaderColor->p); p.drawTextLeft(st::emojiPanHeaderLeft, qMax(y - int(st::emojiPanHeader), _top) + st::emojiPanHeaderTop, width(), title); if (!special && y >= _top + 2 * st::emojiPanHeader) { - p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); + p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.setOpacity(1); } @@ -1201,10 +1213,10 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { int32 index = i * StickerPanPerRow + j; if (index >= size) break; - float64 hover = _hovers[c][index]; + float64 hover = _sets[c].hovers[index]; - DocumentData *sticker = _sets[c][index]; - if (!sticker->sticker) continue; + DocumentData *sticker = _sets[c].pack[index]; + if (!sticker->sticker()) continue; QPoint pos(st::stickerPanPadding + j * st::stickerPanSize.width(), y + i * st::stickerPanSize.height()); if (hover > 0) { @@ -1223,11 +1235,11 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { if (!sticker->loader && sticker->status != FileFailed && !already && !hasdata) { sticker->save(QString()); } - if (sticker->sticker->img->isNull() && (already || hasdata)) { + if (sticker->sticker()->img->isNull() && (already || hasdata)) { if (already) { - sticker->sticker->img = ImagePtr(sticker->already()); + sticker->sticker()->img = ImagePtr(sticker->already()); } else { - sticker->sticker->img = ImagePtr(sticker->data); + sticker->sticker()->img = ImagePtr(sticker->data); } } } @@ -1240,12 +1252,12 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { QPoint ppos = pos + QPoint((st::stickerPanSize.width() - w) / 2, (st::stickerPanSize.height() - h) / 2); if (goodThumb) { p.drawPixmapLeft(ppos, width(), sticker->thumb->pix(w, h)); - } else if (!sticker->sticker->img->isNull()) { - p.drawPixmapLeft(ppos, width(), sticker->sticker->img->pix(w, h)); + } else if (!sticker->sticker()->img->isNull()) { + p.drawPixmapLeft(ppos, width(), sticker->sticker()->img->pix(w, h)); } - if (hover > 0 && _setIds[c] == RecentStickerSetId && _custom.at(index)) { - float64 xHover = _hovers[c][_sets[c].size() + index]; + if (hover > 0 && _sets[c].id == RecentStickerSetId && _custom.at(index)) { + float64 xHover = _sets[c].hovers[_sets[c].pack.size() + index]; QPoint xPos = pos + QPoint(st::stickerPanSize.width() - st::stickerPanDelete.pxWidth(), 0); p.setOpacity(hover * (xHover + (1 - xHover) * st::stickerPanDeleteOpacity)); @@ -1258,7 +1270,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { if (y - st::emojiPanHeader < _top) { p.fillRect(QRect(0, qMin(_top, tilly - int(st::emojiPanHeader)), width(), st::emojiPanHeader), st::emojiPanHeaderBg->b); } else if (!special && y >= _top + 2 * st::emojiPanHeader) { - p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); + p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.setOpacity(1); } @@ -1293,15 +1305,15 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { emit switchToEmoji(); return; } - if (_selected >= MatrixRowShift * _setIds.size()) { + if (_selected >= MatrixRowShift * _sets.size()) { return; } int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift; - if (_setIds[tab] == RecentStickerSetId && sel >= _sets[tab].size() && sel < _sets[tab].size() * 2 && _custom.at(sel - _sets[tab].size())) { + if (_sets[tab].id == RecentStickerSetId && sel >= _sets[tab].pack.size() && sel < _sets[tab].pack.size() * 2 && _custom.at(sel - _sets[tab].pack.size())) { clearSelection(true); bool refresh = false; - DocumentData *sticker = _sets[tab].at(sel - _sets[tab].size()); + DocumentData *sticker = _sets[tab].pack.at(sel - _sets[tab].pack.size()); RecentStickerPack &recent(cGetRecentStickers()); for (int32 i = 0, l = recent.size(); i < l; ++i) { if (recent.at(i).first == sticker) { @@ -1333,10 +1345,10 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { } return; } - if (sel < _sets[tab].size()) { - emit selected(_sets[tab][sel]); - } else if (sel == _sets[tab].size()) { - emit removing(_setIds[tab]); + if (sel < _sets[tab].pack.size()) { + emit selected(_sets[tab].pack[sel]); + } else if (sel == _sets[tab].pack.size()) { + emit removing(_sets[tab].id); } } @@ -1363,7 +1375,7 @@ void StickerPanInner::clearSelection(bool fast) { if (fast) { for (Animations::const_iterator i = _animations.cbegin(); i != _animations.cend(); ++i) { int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = 0; + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = 0; } _animations.clear(); _selected = _pressedSel = -1; @@ -1377,14 +1389,9 @@ void StickerPanInner::refreshStickers() { clearSelection(true); const StickerSets &sets(cStickerSets()); - _setIds.clear(); _setIds.reserve(sets.size() + 1); _sets.clear(); _sets.reserve(sets.size() + 1); - _hovers.clear(); _hovers.reserve(sets.size() + 1); - _titles.clear(); _titles.reserve(sets.size() + 1); refreshRecent(false); - - appendSet(DefaultStickerSetId); for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { appendSet(*i); } @@ -1400,11 +1407,11 @@ void StickerPanInner::refreshStickers() { void StickerPanInner::preloadImages() { uint64 ms = getms(); for (int32 i = 0, l = _sets.size(), k = 0; i < l; ++i) { - for (int32 j = 0, n = _sets.at(i).size(); j < n; ++j) { + for (int32 j = 0, n = _sets.at(i).pack.size(); j < n; ++j) { if (++k > StickerPanPerRow * (StickerPanPerRow + 1)) break; - DocumentData *sticker = _sets.at(i).at(j); - if (!sticker || !sticker->sticker) continue; + DocumentData *sticker = _sets.at(i).pack.at(j); + if (!sticker || !sticker->sticker()) continue; bool goodThumb = !sticker->thumb->isNull() && ((sticker->thumb->width() >= 128) || (sticker->thumb->height() >= 128)); if (goodThumb) { @@ -1430,14 +1437,14 @@ void StickerPanInner::preloadImages() { uint64 StickerPanInner::currentSet(int yOffset) const { int y, ytill = 0; for (int i = 0, l = _sets.size(); i < l; ++i) { - int cnt = _sets.at(i).size(); + int cnt = _sets.at(i).pack.size(); y = ytill; ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); if (yOffset < ytill) { - return _setIds.at(i); + return _sets.at(i).id; } } - return _setIds.isEmpty() ? RecentStickerSetId : _setIds.back(); + return _sets.isEmpty() ? RecentStickerSetId : _sets.back().id; } void StickerPanInner::appendSet(uint64 setId) { @@ -1450,11 +1457,9 @@ void StickerPanInner::appendSet(uint64 setId) { for (int32 i = 0, l = it->stickers.size(); i < l; ++i) { pack.push_back(it->stickers.at(i)); } - _setIds.push_back(it->id); - _sets.push_back(pack); - _hovers.push_back(QVector(it->stickers.size() + 1, 0)); int32 availw = width() - st::emojiPanHeaderLeft - st::emojiSwitchSkip - _emojiWidth - (st::emojiSwitchSkip - st::emojiSwitchImgSkip); - _titles.push_back(st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw)); + QString title = st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw); + _sets.push_back(DisplayedSet(it->id, it->flags, title, pack.size() + 1, pack)); } void StickerPanInner::refreshRecent(bool performResize) { @@ -1462,11 +1467,8 @@ void StickerPanInner::refreshRecent(bool performResize) { clearSelection(true); StickerSets::const_iterator customIt = cStickerSets().constFind(CustomStickerSetId); if (cGetRecentStickers().isEmpty() && (customIt == cStickerSets().cend() || customIt->stickers.isEmpty())) { - if (!_setIds.isEmpty() && _setIds.at(0) == RecentStickerSetId) { - _setIds.pop_front(); + if (!_sets.isEmpty() && _sets.at(0).id == RecentStickerSetId) { _sets.pop_front(); - _hovers.pop_front(); - _titles.pop_front(); } } else { StickerPack recent; @@ -1489,14 +1491,11 @@ void StickerPanInner::refreshRecent(bool performResize) { _custom.push_back(true); } } - if (_setIds.isEmpty() || _setIds.at(0) != RecentStickerSetId) { - _setIds.push_front(RecentStickerSetId); - _hovers.push_back(QVector(recent.size() * 2, 0)); - _sets.push_back(recent); - _titles.push_back(lang(lng_emoji_category0)); + if (_sets.isEmpty() || _sets.at(0).id != RecentStickerSetId) { + _sets.push_back(DisplayedSet(RecentStickerSetId, MTPDstickerSet_flag_official, lang(lng_emoji_category0), recent.size() * 2, recent)); } else { - _sets[0] = recent; - _hovers[0].resize(recent.size() * 2); + _sets[0].pack = recent; + _sets[0].hovers.resize(recent.size() * 2); } } @@ -1510,14 +1509,14 @@ void StickerPanInner::refreshRecent(bool performResize) { void StickerPanInner::fillIcons(QVector &icons) { icons.clear(); - if (_setIds.isEmpty()) return; + if (_sets.isEmpty()) return; icons.reserve(_sets.size()); int32 i = 0; - if (_setIds.at(0) == RecentStickerSetId) ++i; + if (_sets.at(0).id == RecentStickerSetId) ++i; if (i > 0) icons.push_back(StickerIcon()); for (int32 l = _sets.size(); i < l; ++i) { - DocumentData *s = _sets.at(i).at(0); + DocumentData *s = _sets.at(i).pack.at(0); int32 availw = st::rbEmoji.width - 2 * st::stickerIconPadding, availh = st::rbEmoji.height - 2 * st::stickerIconPadding; int32 thumbw = s->thumb->width(), thumbh = s->thumb->height(), pixw = 1, pixh = 1; if (availw * thumbh > availh * thumbw) { @@ -1529,7 +1528,7 @@ void StickerPanInner::fillIcons(QVector &icons) { } if (pixw < 1) pixw = 1; if (pixh < 1) pixh = 1; - icons.push_back(StickerIcon(_setIds.at(i), s, pixw, pixh)); + icons.push_back(StickerIcon(_sets.at(i).id, s, pixw, pixh)); } } @@ -1547,25 +1546,27 @@ void StickerPanInner::updateSelected() { } } else { int y, ytill = 0, sx = (rtl() ? width() - p.x() : p.x()) - st::stickerPanPadding; - for (int c = 0, l = _setIds.size(); c < l; ++c) { - int cnt = _sets[c].size(); - bool special = _setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId; + for (int c = 0, l = _sets.size(); c < l; ++c) { + const DisplayedSet &set(_sets.at(c)); + int cnt = set.pack.size(); + bool special = (set.flags & MTPDstickerSet_flag_official); + y = ytill; ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); if (p.y() >= y && p.y() < ytill) { if (!special && p.y() >= y && p.y() < y + st::emojiPanHeader && sx + st::stickerPanPadding >= width() - st::emojiPanHeaderLeft - st::notifyClose.icon.pxWidth() && sx + st::stickerPanPadding < width() - st::emojiPanHeaderLeft) { - selIndex = c * MatrixRowShift + _sets[c].size(); + selIndex = c * MatrixRowShift + set.pack.size(); } else { y += st::emojiPanHeader; if (p.y() >= y && sx >= 0 && sx < StickerPanPerRow * st::stickerPanSize.width()) { selIndex = qFloor((p.y() - y) / st::stickerPanSize.height()) * StickerPanPerRow + qFloor(sx / st::stickerPanSize.width()); - if (selIndex >= _sets[c].size()) { + if (selIndex >= set.pack.size()) { selIndex = -1; } else { - if (_setIds[c] == RecentStickerSetId && _custom[selIndex]) { + if (set.id == RecentStickerSetId && _custom[selIndex]) { int32 inx = sx - (selIndex % StickerPanPerRow) * st::stickerPanSize.width(), iny = p.y() - y - ((selIndex / StickerPanPerRow) * st::stickerPanSize.height()); if (inx >= st::stickerPanSize.width() - st::stickerPanDelete.pxWidth() && iny < st::stickerPanDelete.pxHeight()) { - selIndex += _sets[c].size(); + selIndex += set.pack.size(); } } selIndex += c * MatrixRowShift; @@ -1579,13 +1580,13 @@ void StickerPanInner::updateSelected() { bool startanim = false; int oldSel = _selected, oldSelTab = oldSel / MatrixRowShift, xOldSel = -1, newSel = selIndex, newSelTab = newSel / MatrixRowShift, xNewSel = -1; - if (oldSel >= 0 && oldSelTab < _setIds.size() && _setIds[oldSelTab] == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].size()) { + if (oldSel >= 0 && oldSelTab < _sets.size() && _sets[oldSelTab].id == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].pack.size()) { xOldSel = oldSel; - oldSel -= _sets[oldSelTab].size(); + oldSel -= _sets[oldSelTab].pack.size(); } - if (newSel >= 0 && newSelTab < _setIds.size() && _setIds[newSelTab] == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].size()) { + if (newSel >= 0 && newSelTab < _sets.size() && _sets[newSelTab].id == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].pack.size()) { xNewSel = newSel; - newSel -= _sets[newSelTab].size(); + newSel -= _sets[newSelTab].pack.size(); } if (newSel != oldSel) { if (oldSel >= 0) { @@ -1630,10 +1631,10 @@ bool StickerPanInner::animStep(float64 ms) { int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; float64 dt = float64(now - i.value()) / st::emojiPanDuration; if (dt >= 1) { - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? 1 : 0; + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? 1 : 0; i = _animations.erase(i); } else { - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? dt : (1 - dt); + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? dt : (1 - dt); ++i; } } @@ -1645,9 +1646,9 @@ void StickerPanInner::showStickerSet(uint64 setId) { clearSelection(true); int32 y = 0; - for (int c = 0; c < _setIds.size(); ++c) { - if (_setIds.at(c) == setId) break; - int rows = (_sets[c].size() / StickerPanPerRow) + ((_sets[c].size() % StickerPanPerRow) ? 1 : 0); + for (int c = 0; c < _sets.size(); ++c) { + if (_sets.at(c).id == setId) break; + int rows = (_sets[c].pack.size() / StickerPanPerRow) + ((_sets[c].pack.size() % StickerPanPerRow) ? 1 : 0); y += st::emojiPanHeader + rows * st::stickerPanSize.height(); } @@ -1658,7 +1659,7 @@ void StickerPanInner::showStickerSet(uint64 setId) { update(); } -EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), +EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight), _horizontal(false), _noTabUpdate(false), _hiding(false), a_opacity(0), _shadow(st::dropdownDef.shadow), _recent(this , qsl("emoji_group"), dbietRecent , QString(), true , st::rbEmojiRecent), _people(this , qsl("emoji_group"), dbietPeople , QString(), false, st::rbEmojiPeople), @@ -1679,12 +1680,12 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i s_scroll.setFocusPolicy(Qt::NoFocus); s_scroll.viewport()->setFocusPolicy(Qt::NoFocus); - _width = st::dropdownDef.padding.left() + st::emojiPanFullSize.width() + st::dropdownDef.padding.right(); - _height = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() + st::dropdownDef.padding.bottom(); + _width = st::dropdownDef.padding.left() + st::emojiPanWidth + st::dropdownDef.padding.right(); + _height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom(); resize(_width, _height); - e_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); - s_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); e_scroll.move(st::dropdownDef.padding.left(), st::dropdownDef.padding.top()); e_scroll.setWidget(&e_inner); @@ -1696,8 +1697,8 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i s_inner.setAttribute(Qt::WA_OpaquePaintEvent); s_scroll.setAutoFillBackground(true); - int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanFullSize.width() - 8 * st::rbEmoji.width) / 2; - int32 top = _iconsTop = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() - st::rbEmoji.height; + int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanWidth - 8 * st::rbEmoji.width) / 2; + int32 top = _iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height; prepareTab(left, top, _width, _recent); prepareTab(left, top, _width, _people); prepareTab(left, top, _width, _nature); @@ -1735,6 +1736,41 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i // setAttribute(Qt::WA_AcceptTouchEvents); } +void EmojiPan::setMaxHeight(int32 h) { + h = qMin(int(st::emojiPanMaxHeight), h); + if (h == _maxHeight) return; + + int32 was = _maxHeight; + _maxHeight = h; + + _height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom(); + resize(_width, _height); + + if (was > _maxHeight) { + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_inner.setMaxHeight(_maxHeight); + e_inner.setMaxHeight(_maxHeight); + } else { + s_inner.setMaxHeight(_maxHeight); + e_inner.setMaxHeight(_maxHeight); + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + } + + _iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height; + _recent.move(_recent.x(), _iconsTop); + _people.move(_people.x(), _iconsTop); + _nature.move(_nature.x(), _iconsTop); + _food.move(_food.x(), _iconsTop); + _celebration.move(_celebration.x(), _iconsTop); + _activity.move(_activity.x(), _iconsTop); + _travel.move(_travel.x(), _iconsTop); + _objects.move(_objects.x(), _iconsTop); + + update(); +} + void EmojiPan::prepareTab(int32 &left, int32 top, int32 _width, FlatRadiobutton &tab) { tab.moveToLeft(left, top, _width); left += tab.width(); @@ -1794,11 +1830,11 @@ void EmojiPan::paintEvent(QPaintEvent *e) { const StickerIcon &s(_icons.at(i)); s.sticker->thumb->load(); QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh)); - if (_iconSel == i) { - p.setOpacity(1); - } else { - p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i))); - } + //if (_iconSel == i) { + // p.setOpacity(1); + //} else { + // p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i))); + //} p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix); x += st::rbEmoji.width; p.setOpacity(1); @@ -1939,6 +1975,7 @@ void EmojiPan::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (wasDown == _iconOver && _iconOver >= 0) { + _iconSelX = anim::ivalue(_iconOver * st::rbEmoji.width, _iconOver * st::rbEmoji.width); s_inner.showStickerSet(_icons.at(_iconOver).setId); } } @@ -2361,9 +2398,9 @@ void EmojiPan::onSwitch() { hideAll(); _moveStart = getms(); - a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanFullSize.width(), 0) : anim::ivalue(-st::emojiPanFullSize.width(), 0); + a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanWidth, 0) : anim::ivalue(-st::emojiPanWidth, 0); a_toAlpha = anim::fvalue(0, 1); - a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanFullSize.width()) : anim::ivalue(0, st::emojiPanFullSize.width()); + a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanWidth) : anim::ivalue(0, st::emojiPanWidth); a_fromAlpha = anim::fvalue(1, 0); if (!animating()) anim::start(this); @@ -2372,7 +2409,7 @@ void EmojiPan::onSwitch() { void EmojiPan::onRemoveSet(uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); - if (it != cStickerSets().cend() && setId != DefaultStickerSetId && setId != RecentStickerSetId) { + if (it != cStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { _removingSetId = it->id; ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); @@ -2384,7 +2421,7 @@ void EmojiPan::onRemoveSet(uint64 setId) { void EmojiPan::onRemoveSetSure() { App::wnd()->hideLayer(); StickerSets::iterator it = cRefStickerSets().find(_removingSetId); - if (it != cRefStickerSets().cend() && _removingSetId != DefaultStickerSetId && _removingSetId != RecentStickerSetId) { + if (it != cRefStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { if (it->id && it->access) { MTP::send(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)))); } else if (!it->shortName.isEmpty()) { @@ -2424,7 +2461,8 @@ void MentionsInner::paintEvent(QPaintEvent *e) { QPainter p(this); int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#'); - int32 availwidth = width() - 2 * st::mentionPadding.left() - st::mentionPhotoSize - 2 * st::mentionPadding.right(); + int32 mentionleft = 2 * st::mentionPadding.left() + st::mentionPhotoSize; + int32 mentionwidth = width() - mentionleft - 2 * st::mentionPadding.right(); int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width; int32 from = qFloor(e->rect().top() / st::mentionHeight), to = qFloor(e->rect().bottom() / st::mentionHeight) + 1; @@ -2444,9 +2482,9 @@ void MentionsInner::paintEvent(QPaintEvent *e) { UserData *user = _rows->at(i); QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); - if (availwidth < unamewidth + namewidth) { - namewidth = (availwidth * namewidth) / (namewidth + unamewidth); - unamewidth = availwidth - namewidth; + if (mentionwidth < unamewidth + namewidth) { + namewidth = (mentionwidth * namewidth) / (namewidth + unamewidth); + unamewidth = mentionwidth - namewidth; if (firstwidth < unamewidth + st::mentionFont->elidew) { if (firstwidth < unamewidth) { first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth); @@ -2464,10 +2502,10 @@ void MentionsInner::paintEvent(QPaintEvent *e) { p.setFont(st::mentionFont->f); p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); - p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); + p.drawText(mentionleft + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); if (!second.isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); + p.drawText(mentionleft + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); } } else if (!_hrows->isEmpty()) { QString hrow = _hrows->at(i); @@ -2494,63 +2532,42 @@ void MentionsInner::paintEvent(QPaintEvent *e) { } else { UserData *user = _crows->at(i).first; - const BotCommand &command = _crows->at(i).second; - QString toHighlight = command.command; + const BotCommand *command = _crows->at(i).second; + QString toHighlight = command->command; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; if (hasUsername || botStatus == 0 || botStatus == 2) { toHighlight += '@' + user->username; } - if (_parent->chat() || botStatus == 0 || botStatus == 2) { + if (true || _parent->chat() || botStatus == 0 || botStatus == 2) { user->photo->load(); p.drawPixmap(st::mentionPadding.left(), i * st::mentionHeight + st::mentionPadding.top(), user->photo->pixRounded(st::mentionPhotoSize)); } - int32 addleft = 0, widthleft = htagwidth; + int32 addleft = 0, widthleft = mentionwidth; QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); - int32 firstwidth = st::botCommandFont->m.width(first), secondwidth = st::botCommandFont->m.width(second); - if (htagwidth < firstwidth + secondwidth) { - if (htagwidth < firstwidth + st::botCommandFont->elidew) { - first = st::botCommandFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + if (widthleft < firstwidth + secondwidth) { + if (widthleft < firstwidth + st::mentionFont->elidew) { + first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, widthleft); second = QString(); } else { - second = st::botCommandFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->m.elidedText(second, Qt::ElideRight, widthleft - firstwidth); } } - p.setFont(st::botCommandFont->f); + p.setFont(st::mentionFont->f); if (!first.isEmpty()) { p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); - p.drawText(htagleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); + p.drawText(mentionleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); } if (!second.isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); + p.drawText(mentionleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); } addleft += firstwidth + secondwidth + st::mentionPadding.left(); widthleft -= firstwidth + secondwidth + st::mentionPadding.left(); - - QString params = command.params; - if (widthleft > st::mentionFont->elidew && !params.isEmpty()) { - p.setFont(st::mentionFont->f); - int32 paramswidth = st::mentionFont->m.width(params); - if (widthleft < paramswidth) { - params = st::mentionFont->m.elidedText(params, Qt::ElideRight, widthleft); - } + if (widthleft > st::mentionFont->elidew && !command->descriptionText().isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + addleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, params); - - addleft += paramswidth + st::mentionPadding.left(); - widthleft -= paramswidth + st::mentionPadding.left(); - } - QString description = command.description; - if (widthleft > st::botDescFont->elidew && !description.isEmpty()) { - p.setFont(st::botDescFont->f); - int32 descwidth = st::botDescFont->m.width(description); - if (widthleft < descwidth) { - description = st::botDescFont->m.elidedText(description, Qt::ElideRight, widthleft); - descwidth = st::botDescFont->m.width(description); - } - p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description); + command->descriptionText().drawElided(p, mentionleft + addleft, i * st::mentionHeight + st::mentionTop, widthleft, 1, style::al_right); } } } @@ -2586,6 +2603,15 @@ bool MentionsInner::moveSel(int direction) { } bool MentionsInner::select() { + QString sel = getSelected(); + if (!sel.isEmpty()) { + emit chosen(sel); + return true; + } + return false; +} + +QString MentionsInner::getSelected() const { int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size()); if (_sel >= 0 && _sel < maxSel) { QString result; @@ -2595,18 +2621,17 @@ bool MentionsInner::select() { result = '#' + _hrows->at(_sel); } else { UserData *user = _crows->at(_sel).first; - const BotCommand &command(_crows->at(_sel).second); + const BotCommand *command(_crows->at(_sel).second); int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) { - result = '/' + command.command + '@' + user->username; + result = '/' + command->command + '@' + user->username; } else { - result = '/' + command.command; + result = '/' + command->command; } } - emit chosen(result); - return true; + return result; } - return false; + return QString(); } void MentionsInner::mousePressEvent(QMouseEvent *e) { @@ -2732,6 +2757,12 @@ void MentionsDropdown::showFiltered(PeerData *peer, QString start) { updateFiltered(toDown); } +bool MentionsDropdown::clearFilteredCommands() { + if (_crows.isEmpty()) return false; + _crows.clear(); + return true; +} + void MentionsDropdown::updateFiltered(bool toDown) { int32 now = unixtime(); MentionRows rows; @@ -2795,6 +2826,7 @@ void MentionsDropdown::updateFiltered(bool toDown) { } } } else if (_user->botInfo) { + if (!_user->botInfo->inited) App::api()->requestFullPeer(_user); cnt = _user->botInfo->commands.size(); bots.insert(_user, true); } @@ -2805,17 +2837,16 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (MentionRows::const_iterator i = _chat->lastAuthors.cbegin(), e = _chat->lastAuthors.cend(); i != e; ++i) { UserData *user = *i; if (!user->botInfo) continue; + if (!bots.contains(user)) continue; if (!user->botInfo->inited) App::api()->requestFullPeer(user); if (user->botInfo->commands.isEmpty()) continue; + bots.remove(user); for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { if (_filter.size() > 1) { QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; - if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; + if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue; } - crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); - } - if (!bots.isEmpty()) { - bots.remove(user); + crows.push_back(qMakePair(user, &user->botInfo->commands.at(j))); } } } @@ -2825,9 +2856,9 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { if (_filter.size() > 1) { QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; - if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; + if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue; } - crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); + crows.push_back(qMakePair(user, &user->botInfo->commands.at(j))); } } } @@ -2836,10 +2867,10 @@ void MentionsDropdown::updateFiltered(bool toDown) { if (rows.isEmpty() && hrows.isEmpty() && crows.isEmpty()) { if (!isHidden()) { hideStart(); - _rows.clear(); - _hrows.clear(); - _crows.clear(); } + _rows.clear(); + _hrows.clear(); + _crows.clear(); } else { _rows = rows; _hrows = hrows; @@ -2869,13 +2900,13 @@ void MentionsDropdown::recount(bool toDown) { int32 h = (_rows.isEmpty() ? (_hrows.isEmpty() ? _crows.size() : _hrows.size()) : _rows.size()) * st::mentionHeight, oldst = _scroll.scrollTop(), st = oldst; if (_inner.height() != h) { - st += h - _inner.height(); +// st += h - _inner.height(); _inner.resize(width(), h); } if (h > _boundings.height()) h = _boundings.height(); if (h > 4.5 * st::mentionHeight) h = 4.5 * st::mentionHeight; if (height() != h) { - st += _scroll.height() - h; +// st += _scroll.height() - h; setGeometry(0, _boundings.height() - h, width(), h); _scroll.resize(width(), h); } else if (y() != _boundings.height() - h) { @@ -2966,6 +2997,10 @@ int32 MentionsDropdown::innerBottom() { return _scroll.scrollTop() + _scroll.height(); } +QString MentionsDropdown::getSelected() const { + return _inner.getSelected(); +} + bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) { if (isHidden()) return QWidget::eventFilter(obj, e); if (e->type() == QEvent::KeyPress) { diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index dff92377a..a237d82db 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -110,7 +110,7 @@ public: signals: - void dropped(QDropEvent *e); + void dropped(const QMimeData *data); public slots: @@ -202,6 +202,7 @@ public: EmojiPanInner(QWidget *parent = 0); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *e); @@ -244,6 +245,8 @@ signals: private: + int32 _maxHeight; + int32 countHeight(); void selectEmoji(EmojiPtr emoji); @@ -286,6 +289,7 @@ public: StickerPanInner(QWidget *parent = 0); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *e); @@ -329,6 +333,8 @@ signals: private: + int32 _maxHeight; + void appendSet(uint64 setId); int32 countHeight(); @@ -339,10 +345,16 @@ private: int32 _top; - QList _titles; - QList _setIds; - QList _sets; - QList > _hovers; + struct DisplayedSet { + DisplayedSet(uint64 id, int32 flags, const QString &title, int32 hoversSize, const StickerPack &pack = StickerPack()) : id(id), flags(flags), title(title), hovers(hoversSize, 0), pack(pack) { + } + uint64 id; + int32 flags; + QString title; + QVector hovers; + StickerPack pack; + }; + QList _sets; QList _custom; int32 _selected, _pressedSel; @@ -359,6 +371,7 @@ public: EmojiPan(QWidget *parent); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void enterEvent(QEvent *e); @@ -412,6 +425,7 @@ signals: private: + int32 _maxHeight; bool _horizontal; void leaveToChildEvent(QEvent *e); @@ -467,7 +481,7 @@ private: typedef QList MentionRows; typedef QList HashtagRows; -typedef QList > BotCommandRows; +typedef QList > BotCommandRows; class MentionsDropdown; class MentionsInner : public QWidget { @@ -489,6 +503,8 @@ public: bool moveSel(int direction); bool select(); + QString getSelected() const; + signals: void chosen(QString mentionOrHashtag); @@ -525,6 +541,7 @@ public: void fastHide(); + bool clearFilteredCommands(); void showFiltered(PeerData *peer, QString start); void updateFiltered(bool toDown = false); void setBoundings(QRect boundings); @@ -538,6 +555,7 @@ public: int32 innerBottom(); bool eventFilter(QObject *obj, QEvent *e); + QString getSelected() const; ~MentionsDropdown(); diff --git a/Telegram/SourceFiles/fileuploader.cpp b/Telegram/SourceFiles/fileuploader.cpp index 82813f5ab..45d198085 100644 --- a/Telegram/SourceFiles/fileuploader.cpp +++ b/Telegram/SourceFiles/fileuploader.cpp @@ -273,6 +273,7 @@ void FileUploader::partLoaded(const MTPBool &result, mtpRequestId requestId) { audio->uploadOffset = audio->size; } } + emit audioProgress(k.key()); } } } diff --git a/Telegram/SourceFiles/gui/filedialog.cpp b/Telegram/SourceFiles/gui/filedialog.cpp index 70fae16a0..8dd748747 100644 --- a/Telegram/SourceFiles/gui/filedialog.cpp +++ b/Telegram/SourceFiles/gui/filedialog.cpp @@ -25,9 +25,9 @@ void filedialogInit() { if (cDialogLastPath().isEmpty()) { #ifdef Q_OS_WIN // hack to restore previous dir without hurting performance - QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - settings.beginGroup(QLatin1String("Qt")); - QByteArray sd = settings.value(QLatin1String("filedialog")).toByteArray(); + QSettings settings(QSettings::UserScope, qstr("QtProject")); + settings.beginGroup(qstr("Qt")); + QByteArray sd = settings.value(qstr("filedialog")).toByteArray(); QDataStream stream(&sd, QIODevice::ReadOnly); if (!stream.atEnd()) { int version = 3, _QFileDialogMagic = 190; diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index 5eafb922d..79bb320ef 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -45,7 +45,8 @@ namespace { InputStyle _inputFieldStyle; } -FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _fullph(pholder), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), +FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), +_fullph(pholder), _oldtext(v), _fastph(false), _kev(0), _customUpDown(false), _phVisible(!v.length()), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { resize(_st.width, _st.height); @@ -133,7 +134,7 @@ QRect FlatInput::getTextRect() const { } void FlatInput::paintEvent(QPaintEvent *e) { - QPainter p(this); + Painter p(this); p.fillRect(rect(), a_bgColor.current()); if (_st.borderWidth) { QBrush b(a_borderColor.current()); @@ -154,9 +155,9 @@ void FlatInput::paintEvent(QPaintEvent *e) { if (phDraw) { p.save(); p.setClipRect(rect()); - QRect phRect(_st.textMrg.left() + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); - p.setFont(_st.font->f); - p.setPen(a_phColor.current()); + QRect phRect(placeholderRect()); + phRect.moveLeft(phRect.left() + a_phLeft.current()); + phPrepare(p); p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.restore(); } @@ -231,20 +232,53 @@ bool FlatInput::animStep(float64 ms) { return res; } +void FlatInput::setPlaceholder(const QString &ph) { + _fullph = ph; + resizeEvent(0); + update(); +} + +void FlatInput::setPlaceholderFast(bool fast) { + _fastph = fast; + if (_fastph) { + a_phLeft = anim::ivalue(_phVisible ? 0 : _st.phShift, _phVisible ? 0 : _st.phShift); + a_phAlpha = anim::fvalue(_phVisible ? 1 : 0, _phVisible ? 1 : 0); + update(); + } +} + void FlatInput::updatePlaceholder() { bool vis = !text().length(); if (vis == _phVisible) return; - a_phLeft.start(vis ? 0 : _st.phShift); - a_phAlpha.start(vis ? 1 : 0); - anim::start(this); - + if (_fastph) { + a_phLeft = anim::ivalue(vis ? 0 : _st.phShift, vis ? 0 : _st.phShift); + a_phAlpha = anim::fvalue(vis ? 1 : 0, vis ? 1 : 0); + update(); + } else { + a_phLeft.start(vis ? 0 : _st.phShift); + a_phAlpha.start(vis ? 1 : 0); + anim::start(this); + } _phVisible = vis; } +const QString &FlatInput::placeholder() const { + return _fullph; +} + +QRect FlatInput::placeholderRect() const { + return QRect(_st.textMrg.left() + _st.phPos.x(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); +} + void FlatInput::correctValue(QKeyEvent *e, const QString &was) { } +void FlatInput::phPrepare(Painter &p) { + p.setFont(_st.font->f); + p.setPen(a_phColor.current()); +} + void FlatInput::keyPressEvent(QKeyEvent *e) { QString was(text()); _kev = e; @@ -350,13 +384,18 @@ void CountryCodeInput::correctValue(QKeyEvent *e, const QString &was) { } } -InputField::InputField(QWidget *parent, const style::InputField &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), -_lastText(v), +InputField::InputField(QWidget *parent, const style::InputField &st, const QString &ph, const QString &val) : QTextEdit(val, parent), +_oldtext(val), _keyEvent(0), + +_undoAvailable(false), +_redoAvailable(false), + +_fakeMargin(0), _customUpDown(false), -_placeholderFull(pholder), -_placeholderVisible(!v.length()), +_placeholderFull(ph), +_placeholderVisible(val.isEmpty()), a_placeholderLeft(_placeholderVisible ? 0 : st.placeholderShift), a_placeholderOpacity(_placeholderVisible ? 1 : 0), a_placeholderFg(st.placeholderFg->c), @@ -367,47 +406,67 @@ a_borderFg(st.borderFg->c), a_borderOpacityActive(0), _borderAnim(animFunc(this, &InputField::borderStep)), -_focused(false), _error(false), _st(&st) { +_st(&st), + +_touchPress(false), +_touchRightButton(false), +_touchMove(false), +_replacingEmojis(false) { + setAcceptRichText(false); resize(_st->width, _st->height); + setWordWrapMode(QTextOption::NoWrap); + setLineWrapMode(QTextEdit::NoWrap); + setFont(_st->font->f); - setAlignment(_st->textAlign); - setLayoutDirection(cLangDir()); + setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft); + + _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); QPalette p(palette()); p.setColor(QPalette::Text, _st->textFg->c); setPalette(p); - connect(this, SIGNAL(textChanged(const QString &)), this, SLOT(onTextChange(const QString &))); - connect(this, SIGNAL(textEdited(const QString &)), this, SLOT(onTextEdited())); - if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu())); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setFrameStyle(QFrame::NoFrame | QFrame::Plain); + viewport()->setAutoFillBackground(false); - setStyle(&_inputFieldStyle); - setTextMargins(0, 0, 0, 0); setContentsMargins(0, 0, 0, 0); - setAttribute(Qt::WA_AcceptTouchEvents); + //switch (cScale()) { + //case dbisOneAndQuarter: _fakeMargin = 1; break; + //case dbisOneAndHalf: _fakeMargin = 2; break; + //case dbisTwo: _fakeMargin = 4; break; + //} + //setStyleSheet(qsl("QTextEdit { margin: %1px; }").arg(_fakeMargin)); + setStyleSheet(qsl("QTextEdit { padding: 2px 74px; }")); + + viewport()->setAttribute(Qt::WA_AcceptTouchEvents); _touchTimer.setSingleShot(true); connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); -} -void InputField::setCustomUpDown(bool customUpDown) { - _customUpDown = customUpDown; + connect(document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(onDocumentContentsChange(int, int, int))); + connect(document(), SIGNAL(contentsChanged()), this, SLOT(onDocumentContentsChanged())); + connect(this, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool))); + connect(this, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool))); + if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu())); } void InputField::onTouchTimer() { _touchRightButton = true; } -bool InputField::event(QEvent *e) { +bool InputField::viewportEvent(QEvent *e) { if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate || e->type() == QEvent::TouchEnd || e->type() == QEvent::TouchCancel) { QTouchEvent *ev = static_cast(e); if (ev->device()->type() == QTouchDevice::TouchScreen) { touchEvent(ev); - return QLineEdit::event(e); + return QTextEdit::viewportEvent(e); } } - return QLineEdit::event(e); + return QTextEdit::viewportEvent(e); } void InputField::touchEvent(QTouchEvent *e) { @@ -450,18 +509,18 @@ void InputField::touchEvent(QTouchEvent *e) { } QRect InputField::getTextRect() const { - QMargins m = _st->textMargins + QMargins(-2, -1, -2, -1); - if (rtl()) { - int l = m.left(); - m.setLeft(m.right()); - m.setRight(l); - } - return rect().marginsRemoved(m); + return rect().marginsRemoved(_st->textMargins + st::textRectMargins); +} + +int32 InputField::fakeMargin() const { + return _fakeMargin; } void InputField::paintEvent(QPaintEvent *e) { - Painter p(this); + Painter p(viewport()); + QRect r(rect().intersected(e->rect())); + p.fillRect(r, st::white->b); if (_st->border) { p.fillRect(0, height() - _st->border, width(), _st->border, _st->borderFg->b); } @@ -473,7 +532,7 @@ void InputField::paintEvent(QPaintEvent *e) { if (_st->iconSprite.pxWidth()) { p.drawSpriteLeft(_st->iconPosition, width(), _st->iconSprite); } - + bool drawPlaceholder = _placeholderVisible; if (_placeholderShiftAnim.animating()) { p.setOpacity(a_placeholderOpacity.current()); @@ -481,57 +540,51 @@ void InputField::paintEvent(QPaintEvent *e) { } if (drawPlaceholder) { p.save(); - p.setClipRect(rect()); + p.setClipRect(r); QRect r(rect().marginsRemoved(_st->textMargins + _st->placeholderMargins)); r.moveLeft(r.left() + a_placeholderLeft.current()); if (rtl()) r.moveLeft(width() - r.left() - r.width()); - + p.setFont(_st->font->f); p.setPen(a_placeholderFg.current()); p.drawText(r, _placeholder, _st->placeholderAlign); - + p.restore(); } - QLineEdit::paintEvent(e); + QTextEdit::paintEvent(e); } void InputField::focusInEvent(QFocusEvent *e) { if (!_focused) { _focused = true; - + a_placeholderFg.start(_st->placeholderFgActive->c); _placeholderFgAnim.start(); - + a_borderFg.start((_error ? _st->borderFgError : _st->borderFgActive)->c); a_borderOpacityActive.start(1); _borderAnim.start(); } - QLineEdit::focusInEvent(e); + QTextEdit::focusInEvent(e); emit focused(); } void InputField::focusOutEvent(QFocusEvent *e) { if (_focused) { _focused = false; - + a_placeholderFg.start(_st->placeholderFg->c); _placeholderFgAnim.start(); - + a_borderFg.start((_error ? _st->borderFgError : _st->borderFg)->c); a_borderOpacityActive.start(_error ? 1 : 0); _borderAnim.start(); } - QLineEdit::focusOutEvent(e); + QTextEdit::focusOutEvent(e); emit blurred(); } -void InputField::resizeEvent(QResizeEvent *e) { - int32 availw = width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 2; - _placeholder = (_st->font->m.width(_placeholderFull) > availw) ? _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, availw) : _placeholderFull; - update(); -} - QSize InputField::sizeHint() const { return geometry().size(); } @@ -540,6 +593,264 @@ QSize InputField::minimumSizeHint() const { return geometry().size(); } +QString InputField::getText(int32 start, int32 end) const { + if (end >= 0 && end <= start) return QString(); + + if (start < 0) start = 0; + bool full = (start == 0) && (end < 0); + + QTextDocument *doc(document()); + QTextBlock from = full ? doc->begin() : doc->findBlock(start), till = (end < 0) ? doc->end() : doc->findBlock(end); + if (till.isValid()) till = till.next(); + + int32 possibleLen = 0; + for (QTextBlock b = from; b != till; b = b.next()) { + possibleLen += b.length(); + } + QString result; + result.reserve(possibleLen + 1); + if (!full && end < 0) { + end = possibleLen; + } + + for (QTextBlock b = from; b != till; b = b.next()) { + for (QTextBlock::Iterator iter = b.begin(); !iter.atEnd(); ++iter) { + QTextFragment fragment(iter.fragment()); + if (!fragment.isValid()) continue; + + int32 p = full ? 0 : fragment.position(), e = full ? 0 : (p + fragment.length()); + if (!full) { + if (p >= end || e <= start) { + continue; + } + } + + QTextCharFormat f = fragment.charFormat(); + QString emojiText; + QString t(fragment.text()); + if (!full) { + if (p < start) { + t = t.mid(start - p, end - start); + } else if (e > end) { + t = t.mid(0, end - p); + } + } + QChar *ub = t.data(), *uc = ub, *ue = uc + t.size(); + for (; uc != ue; ++uc) { + switch (uc->unicode()) { + case 0xfdd0: // QTextBeginningOfFrame + case 0xfdd1: // QTextEndOfFrame + case QChar::ParagraphSeparator: + case QChar::LineSeparator: + *uc = QLatin1Char('\n'); + break; + case QChar::Nbsp: + *uc = QLatin1Char(' '); + break; + case QChar::ObjectReplacementCharacter: + if (emojiText.isEmpty() && f.isImageFormat()) { + QString imageName = static_cast(&f)->name(); + if (imageName.startsWith(qstr("emoji://e."))) { + if (EmojiPtr emoji = emojiFromUrl(imageName)) { + emojiText = emojiString(emoji); + } + } + } + if (uc > ub) result.append(ub, uc - ub); + if (!emojiText.isEmpty()) result.append(emojiText); + ub = uc + 1; + break; + } + } + if (uc > ub) result.append(ub, uc - ub); + } + result.append('\n'); + } + result.chop(1); + return result; +} + +bool InputField::hasText() const { + QTextDocument *doc(document()); + QTextBlock from = doc->begin(), till = doc->end(); + + if (from == till) return false; + + for (QTextBlock::Iterator iter = from.begin(); !iter.atEnd(); ++iter) { + QTextFragment fragment(iter.fragment()); + if (!fragment.isValid()) continue; + if (!fragment.text().isEmpty()) return true; + } + return (from.next() != till); +} + +bool InputField::isUndoAvailable() const { + return _undoAvailable; +} + +bool InputField::isRedoAvailable() const { + return _redoAvailable; +} + +void InputField::insertEmoji(EmojiPtr emoji, QTextCursor c) { + QTextImageFormat imageFormat; + int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st->font->height * cIntRetinaFactor(); + imageFormat.setWidth(ew / cIntRetinaFactor()); + imageFormat.setHeight(eh / cIntRetinaFactor()); + imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16)); + imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); + + static QString objectReplacement(QChar::ObjectReplacementCharacter); + c.insertText(objectReplacement, imageFormat); +} + +QVariant InputField::loadResource(int type, const QUrl &name) { + QString imageName = name.toDisplayString(); + if (imageName.startsWith(qstr("emoji://e."))) { + if (EmojiPtr emoji = emojiFromUrl(imageName)) { + return QVariant(App::emojiSingle(emoji, _st->font->height)); + } + } + return QVariant(); +} + +void InputField::processDocumentContentsChange(int position, int charsAdded) { + int32 emojiPosition = 0, emojiLen = 0; + const EmojiData *emoji = 0; + + QTextDocument *doc(document()); + + while (true) { + int32 start = position, end = position + charsAdded; + QTextBlock from = doc->findBlock(start), till = doc->findBlock(end); + if (till.isValid()) till = till.next(); + + for (QTextBlock b = from; b != till; b = b.next()) { + for (QTextBlock::Iterator iter = b.begin(); !iter.atEnd(); ++iter) { + QTextFragment fragment(iter.fragment()); + if (!fragment.isValid()) continue; + + int32 fp = fragment.position(), fe = fp + fragment.length(); + if (fp >= end || fe <= start) { + continue; + } + + QString t(fragment.text()); + const QChar *ch = t.constData(), *e = ch + t.size(); + for (; ch != e; ++ch) { + emoji = emojiFromText(ch, e, emojiLen); + if (emoji) { + emojiPosition = fp + (ch - t.constData()); + break; + } + if (ch + 1 < e && ch->isHighSurrogate() && (ch + 1)->isLowSurrogate()) ++ch; + } + if (emoji) break; + } + if (emoji) break; + } + if (emoji) { + if (!document()->pageSize().isNull()) { + document()->setPageSize(QSizeF(0, 0)); + } + + QTextCursor c(doc->docHandle(), emojiPosition); + c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor); + int32 removedUpto = c.position(); + + insertEmoji(emoji, c); + + for (Insertions::iterator i = _insertions.begin(), e = _insertions.end(); i != e; ++i) { + if (i->first >= removedUpto) { + i->first -= removedUpto - emojiPosition - 1; + } else if (i->first >= emojiPosition) { + i->second -= removedUpto - emojiPosition; + i->first = emojiPosition + 1; + } else if (i->first + i->second > emojiPosition + 1) { + i->second -= qMin(removedUpto, i->first + i->second) - emojiPosition; + } + } + + charsAdded -= removedUpto - position; + position = emojiPosition + 1; + + emoji = 0; + emojiPosition = 0; + } else { + break; + } + } +} + +void InputField::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { + if (_replacingEmojis) return; + + if (document()->availableRedoSteps() > 0) return; + + const int takeBack = 3; + + position -= takeBack; + charsAdded += takeBack; + if (position < 0) { + charsAdded += position; + position = 0; + } + if (charsAdded <= 0) return; + + // _insertions.push_back(Insertion(position, charsAdded)); + _replacingEmojis = true; + QSizeF s = document()->pageSize(); + processDocumentContentsChange(position, charsAdded); + if (document()->pageSize() != s) { + document()->setPageSize(s); + } + _replacingEmojis = false; +} + +void InputField::onDocumentContentsChanged() { + if (_replacingEmojis) return; + + if (!_insertions.isEmpty()) { + if (document()->availableRedoSteps() > 0) { + _insertions.clear(); + } else { + _replacingEmojis = true; + QSizeF s = document()->pageSize(); + + do { + Insertion i = _insertions.front(); + _insertions.pop_front(); + if (i.second > 0) { + processDocumentContentsChange(i.first, i.second); + } + } while (!_insertions.isEmpty()); + + if (document()->pageSize() != s) { + document()->setPageSize(s); + } + _replacingEmojis = false; + } + } + + QString curText(getText()); + if (_oldtext != curText) { + _oldtext = curText; + emit changed(); + } + updatePlaceholder(); + if (App::wnd()) App::wnd()->updateGlobalMenu(); +} + +void InputField::onUndoAvailable(bool avail) { + _undoAvailable = avail; + if (App::wnd()) App::wnd()->updateGlobalMenu(); +} + +void InputField::onRedoAvailable(bool avail) { + _redoAvailable = avail; + if (App::wnd()) App::wnd()->updateGlobalMenu(); +} + bool InputField::placeholderFgStep(float64 ms) { float dt = ms / _st->duration; bool res = true; @@ -582,9 +893,12 @@ bool InputField::borderStep(float64 ms) { update(); return res; } +const QString &InputField::getLastText() const { + return _oldtext; +} void InputField::updatePlaceholder() { - bool placeholderVisible = !_lastText.isEmpty(); + bool placeholderVisible = _oldtext.isEmpty(); if (placeholderVisible != _placeholderVisible) { _placeholderVisible = placeholderVisible; @@ -597,50 +911,71 @@ void InputField::updatePlaceholder() { void InputField::correctValue(QKeyEvent *e, const QString &was) { } -void InputField::keyPressEvent(QKeyEvent *e) { - QString was(_lastText); +QMimeData *InputField::createMimeDataFromSelection() const { + QMimeData *result = new QMimeData(); + QTextCursor c(textCursor()); + int32 start = c.selectionStart(), end = c.selectionEnd(); + if (end > start) { + result->setText(getText(start, end)); + } + return result; +} - _keyEvent = e; - if (_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) { +void InputField::customUpDown(bool custom) { + _customUpDown = custom; +} + +void InputField::keyPressEvent(QKeyEvent *e) { + bool shift = e->modifiers().testFlag(Qt::ShiftModifier); + bool macmeta = (cPlatform() == dbipMac) && e->modifiers().testFlag(Qt::ControlModifier) && !e->modifiers().testFlag(Qt::MetaModifier) && !e->modifiers().testFlag(Qt::AltModifier); + bool ctrl = e->modifiers().testFlag(Qt::ControlModifier) || e->modifiers().testFlag(Qt::MetaModifier), ctrlGood = (ctrl && cCtrlEnter()) || (!ctrl && !shift && !cCtrlEnter()) || (ctrl && shift); + bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return); + + if (macmeta && e->key() == Qt::Key_Backspace) { + QTextCursor tc(textCursor()), start(tc); + start.movePosition(QTextCursor::StartOfLine); + tc.setPosition(start.position(), QTextCursor::KeepAnchor); + tc.removeSelectedText(); + } else if (enter && ctrlGood) { + emit submitted(ctrl && shift); + } else if (e->key() == Qt::Key_Escape) { + emit cancelled(); + } else if (e->key() == Qt::Key_Tab || (ctrl && e->key() == Qt::Key_Backtab)) { + if (ctrl) { + e->ignore(); + } else { + emit tabbed(); + } + } else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) { e->ignore(); } else { - QLineEdit::keyPressEvent(e); - } - - if (was == _lastText) { // call correct manually - correctValue(_keyEvent, was); - _lastText = text(); - if (was != _lastText) emit changed(); - updatePlaceholder(); - } - if (e->key() == Qt::Key_Escape) { - emit cancelled(); - } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { - emit accepted(); - } - _keyEvent = 0; -} - -void InputField::onTextEdited() { - QString was(_lastText); - correctValue(_keyEvent, was); - _lastText = text(); - if (was != _lastText) emit changed(); - updatePlaceholder(); - if (App::wnd()) App::wnd()->updateGlobalMenu(); -} - -void InputField::onTextChange(const QString &text) { - _lastText = text; - if (App::wnd()) App::wnd()->updateGlobalMenu(); -} - -void InputField::setError(bool error) { - if (error != _error) { - _error = error; - - a_borderFg.start((_error ? _st->borderFgError : (_focused ? _st->borderFgActive : _st->borderFg))->c); - a_borderOpacityActive.start((_error || _focused) ? 1 : 0); - _borderAnim.start(); + QTextCursor tc(textCursor()); + if (enter && ctrl) { + e->setModifiers(e->modifiers() & ~Qt::ControlModifier); + } + QTextEdit::keyPressEvent(e); + if (tc == textCursor()) { + bool check = false; + if (e->key() == Qt::Key_PageUp || e->key() == Qt::Key_Up) { + tc.movePosition(QTextCursor::Start, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); + check = true; + } else if (e->key() == Qt::Key_PageDown || e->key() == Qt::Key_Down) { + tc.movePosition(QTextCursor::End, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); + check = true; + } + if (check) { + if (tc == textCursor()) { + e->ignore(); + } else { + setTextCursor(tc); + } + } + } } } + +void InputField::resizeEvent(QResizeEvent *e) { + _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); + viewport()->setGeometry(rect().marginsRemoved(_st->textMargins)); + QTextEdit::resizeEvent(e); +} diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index 2c5c6c66e..871e45af5 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -38,7 +38,11 @@ public: void notaBene(); + void setPlaceholder(const QString &ph); + void setPlaceholderFast(bool fast); void updatePlaceholder(); + const QString &placeholder() const; + QRect placeholderRect() const; QRect getTextRect() const; @@ -68,9 +72,16 @@ protected: virtual void correctValue(QKeyEvent *e, const QString &was); + style::font phFont() { + return _st.font; + } + + void phPrepare(Painter &p); + private: QString _ph, _fullph, _oldtext; + bool _fastph; QKeyEvent *_kev; bool _customUpDown; @@ -116,15 +127,118 @@ private: bool _nosignal; }; +// +//class InputField : public QTextEdit { +// Q_OBJECT +// +//public: +// +// InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); +// +// bool event(QEvent *e); +// void touchEvent(QTouchEvent *e); +// void paintEvent(QPaintEvent *e); +// void focusInEvent(QFocusEvent *e); +// void focusOutEvent(QFocusEvent *e); +// void keyPressEvent(QKeyEvent *e); +// void resizeEvent(QResizeEvent *e); +// +// void setError(bool error); +// +// void updatePlaceholder(); +// +// QRect getTextRect() const; +// +// bool placeholderFgStep(float64 ms); +// bool placeholderShiftStep(float64 ms); +// bool borderStep(float64 ms); +// +// QSize sizeHint() const; +// QSize minimumSizeHint() const; +// +// void setCustomUpDown(bool customUpDown); +// +//public slots: +// +// void onTextChange(const QString &text); +// void onTextEdited(); +// +// void onTouchTimer(); +// +// void onDocumentContentsChange(int position, int charsRemoved, int charsAdded); +// void onDocumentContentsChanged(); +// +// void onUndoAvailable(bool avail); +// void onRedoAvailable(bool avail); +// +//signals: +// +// void changed(); +// void cancelled(); +// void accepted(); +// void focused(); +// void blurred(); +// +//protected: +// +// virtual void correctValue(QKeyEvent *e, const QString &was); +// +// void insertEmoji(EmojiPtr emoji, QTextCursor c); +// TWidget *tparent() { +// return qobject_cast(parentWidget()); +// } +// const TWidget *tparent() const { +// return qobject_cast(parentWidget()); +// } +// void enterEvent(QEvent *e) { +// TWidget *p(tparent()); +// if (p) p->leaveToChildEvent(e); +// return QTextEdit::enterEvent(e); +// } +// void leaveEvent(QEvent *e) { +// TWidget *p(tparent()); +// if (p) p->enterFromChildEvent(e); +// return QTextEdit::leaveEvent(e); +// } +// +// QVariant loadResource(int type, const QUrl &name); +// +//private: +// +// QString _lastText; +// QKeyEvent *_keyEvent; +// +// bool _customUpDown; +// +// QString _placeholder, _placeholderFull; +// bool _placeholderVisible; +// anim::ivalue a_placeholderLeft; +// anim::fvalue a_placeholderOpacity; +// anim::cvalue a_placeholderFg; +// Animation _placeholderFgAnim, _placeholderShiftAnim; +// +// anim::fvalue a_borderOpacityActive; +// anim::cvalue a_borderFg; +// Animation _borderAnim; +// +// bool _focused, _error; +// +// const style::InputField *_st; +// +// QTimer _touchTimer; +// bool _touchPress, _touchRightButton, _touchMove; +// QPoint _touchStart; +//}; -class InputField : public QLineEdit { + +class InputField : public QTextEdit { Q_OBJECT public: InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); - bool event(QEvent *e); + bool viewportEvent(QEvent *e); void touchEvent(QTouchEvent *e); void paintEvent(QPaintEvent *e); void focusInEvent(QFocusEvent *e); @@ -132,11 +246,11 @@ public: void keyPressEvent(QKeyEvent *e); void resizeEvent(QResizeEvent *e); - void setError(bool error); - + const QString &getLastText() const; void updatePlaceholder(); QRect getTextRect() const; + int32 fakeMargin() const; bool placeholderFgStep(float64 ms); bool placeholderShiftStep(float64 ms); @@ -145,50 +259,95 @@ public: QSize sizeHint() const; QSize minimumSizeHint() const; - void setCustomUpDown(bool customUpDown); + QString getText(int32 start = 0, int32 end = -1) const; + bool hasText() const; + + bool isUndoAvailable() const; + bool isRedoAvailable() const; + + QMimeData *createMimeDataFromSelection() const; + + void customUpDown(bool isCustom); public slots: - void onTextChange(const QString &text); - void onTextEdited(); - void onTouchTimer(); + void onDocumentContentsChange(int position, int charsRemoved, int charsAdded); + void onDocumentContentsChanged(); + + void onUndoAvailable(bool avail); + void onRedoAvailable(bool avail); + signals: void changed(); + void submitted(bool ctrlShiftEnter); void cancelled(); - void accepted(); + void tabbed(); + void focused(); void blurred(); protected: virtual void correctValue(QKeyEvent *e, const QString &was); + + void insertEmoji(EmojiPtr emoji, QTextCursor c); + TWidget *tparent() { + return qobject_cast(parentWidget()); + } + const TWidget *tparent() const { + return qobject_cast(parentWidget()); + } + void enterEvent(QEvent *e) { + TWidget *p(tparent()); + if (p) p->leaveToChildEvent(e); + return QTextEdit::enterEvent(e); + } + void leaveEvent(QEvent *e) { + TWidget *p(tparent()); + if (p) p->enterFromChildEvent(e); + return QTextEdit::leaveEvent(e); + } + + QVariant loadResource(int type, const QUrl &name); private: - QString _lastText; + void processDocumentContentsChange(int position, int charsAdded); + + QString _oldtext; + QKeyEvent *_keyEvent; - bool _customUpDown; + bool _undoAvailable, _redoAvailable; + int32 _fakeMargin; + + bool _customUpDown; + QString _placeholder, _placeholderFull; bool _placeholderVisible; anim::ivalue a_placeholderLeft; anim::fvalue a_placeholderOpacity; anim::cvalue a_placeholderFg; Animation _placeholderFgAnim, _placeholderShiftAnim; - + anim::fvalue a_borderOpacityActive; anim::cvalue a_borderFg; Animation _borderAnim; - + bool _focused, _error; - + const style::InputField *_st; QTimer _touchTimer; bool _touchPress, _touchRightButton, _touchMove; QPoint _touchStart; + + bool _replacingEmojis; + typedef QPair Insertion; + typedef QList Insertions; + Insertions _insertions; }; diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 3b5a18e3a..d2ff0020e 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -128,7 +128,8 @@ int32 FlatTextarea::fakeMargin() const { void FlatTextarea::paintEvent(QPaintEvent *e) { QPainter p(viewport()); - p.fillRect(rect(), _st.bgColor->b); + QRect r(rect().intersected(e->rect())); + p.fillRect(r, _st.bgColor->b); bool phDraw = _phVisible; if (animating()) { p.setOpacity(a_phAlpha.current()); @@ -136,7 +137,7 @@ void FlatTextarea::paintEvent(QPaintEvent *e) { } if (phDraw) { p.save(); - p.setClipRect(rect()); + p.setClipRect(r); QRect phRect(_st.textMrg.left() - _fakeMargin + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() - _fakeMargin + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); p.setFont(_st.font->f); p.setPen(a_phColor.current()); @@ -174,7 +175,10 @@ EmojiPtr FlatTextarea::getSingleEmoji() const { if (!text.isEmpty()) { QTextCharFormat format = fragment.charFormat(); - return emojiFromUrl(static_cast(&format)->name()); + QString imageName = static_cast(&format)->name(); + if (imageName.startsWith(qstr("emoji://e."))) { + return emojiFromUrl(imageName); + } } return 0; } @@ -303,7 +307,7 @@ void FlatTextarea::getSingleEmojiFragment(QString &text, QTextFragment &fragment } if (f.isImageFormat() && !t.isEmpty() && t.at(0).unicode() == QChar::ObjectReplacementCharacter) { QString imageName = static_cast(&f)->name(); - if (imageName.startsWith(QLatin1String("emoji://e."))) { + if (imageName.startsWith(qstr("emoji://e."))) { fragment = fr; text = t; return; @@ -387,7 +391,7 @@ QString FlatTextarea::getText(int32 start, int32 end) const { case QChar::ObjectReplacementCharacter: if (emojiText.isEmpty() && f.isImageFormat()) { QString imageName = static_cast(&f)->name(); - if (imageName.startsWith(QLatin1String("emoji://e."))) { + if (imageName.startsWith(qstr("emoji://e."))) { if (EmojiPtr emoji = emojiFromUrl(imageName)) { emojiText = emojiString(emoji); } @@ -530,17 +534,25 @@ void FlatTextarea::insertFromMimeData(const QMimeData *source) { } void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { - c.removeSelectedText(); - - QPixmap img(App::emojiSingle(emoji, _st.font->height)); - QString url = qsl("emoji://e.") + QString::number(emojiKey(emoji), 16); - document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img)); QTextImageFormat imageFormat; - imageFormat.setWidth(img.width() / cIntRetinaFactor()); - imageFormat.setHeight(img.height() / cIntRetinaFactor()); - imageFormat.setName(url); + int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor(); + imageFormat.setWidth(ew / cIntRetinaFactor()); + imageFormat.setHeight(eh / cIntRetinaFactor()); + imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16)); imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); - c.insertImage(imageFormat); + + static QString objectReplacement(QChar::ObjectReplacementCharacter); + c.insertText(objectReplacement, imageFormat); +} + +QVariant FlatTextarea::loadResource(int type, const QUrl &name) { + QString imageName = name.toDisplayString(); + if (imageName.startsWith(qstr("emoji://e."))) { + if (EmojiPtr emoji = emojiFromUrl(imageName)) { + return QVariant(App::emojiSingle(emoji, _st.font->height)); + } + } + return QVariant(); } void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { @@ -579,6 +591,10 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { if (emoji) break; } if (emoji) { + if (!document()->pageSize().isNull()) { + document()->setPageSize(QSizeF(0, 0)); + } + QTextCursor c(doc->docHandle(), emojiPosition); c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor); int32 removedUpto = c.position(); @@ -608,6 +624,8 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { } void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { + if (_replacingEmojis) return; + if (!_links.isEmpty()) { bool changed = false; for (LinkRanges::iterator i = _links.begin(); i != _links.end();) { @@ -624,7 +642,7 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int if (changed) emit linksChanged(); } - if (_replacingEmojis || document()->availableRedoSteps() > 0) return; + if (document()->availableRedoSteps() > 0) return; const int takeBack = 3; @@ -636,7 +654,14 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int } if (charsAdded <= 0) return; - _insertions.push_back(Insertion(position, charsAdded)); + // _insertions.push_back(Insertion(position, charsAdded)); + _replacingEmojis = true; + QSizeF s = document()->pageSize(); + processDocumentContentsChange(position, charsAdded); + if (document()->pageSize() != s) { + document()->setPageSize(s); + } + _replacingEmojis = false; } void FlatTextarea::onDocumentContentsChanged() { @@ -647,6 +672,8 @@ void FlatTextarea::onDocumentContentsChanged() { _insertions.clear(); } else { _replacingEmojis = true; + QSizeF s = document()->pageSize(); + do { Insertion i = _insertions.front(); _insertions.pop_front(); @@ -654,6 +681,10 @@ void FlatTextarea::onDocumentContentsChanged() { processDocumentContentsChange(i.first, i.second); } } while (!_insertions.isEmpty()); + + if (document()->pageSize() != s) { + document()->setPageSize(s); + } _replacingEmojis = false; } } @@ -743,6 +774,8 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) { } else { emit tabbed(); } + } else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) { + e->ignore(); } else { QTextCursor tc(textCursor()); if (enter && ctrl) { @@ -781,7 +814,3 @@ void FlatTextarea::resizeEvent(QResizeEvent *e) { _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); QTextEdit::resizeEvent(e); } - -void FlatTextarea::mousePressEvent(QMouseEvent *e) { - QTextEdit::mousePressEvent(e); -} diff --git a/Telegram/SourceFiles/gui/flattextarea.h b/Telegram/SourceFiles/gui/flattextarea.h index fc69f0e9f..732a6008d 100644 --- a/Telegram/SourceFiles/gui/flattextarea.h +++ b/Telegram/SourceFiles/gui/flattextarea.h @@ -35,7 +35,6 @@ public: void focusOutEvent(QFocusEvent *e); void keyPressEvent(QKeyEvent *e); void resizeEvent(QResizeEvent *e); - void mousePressEvent(QMouseEvent *e); const QString &getLastText() const; void updatePlaceholder(); @@ -62,6 +61,8 @@ public: void insertFromMimeData(const QMimeData *source); + QMimeData *createMimeDataFromSelection() const; + public slots: void onTouchTimer(); @@ -103,13 +104,13 @@ protected: return QTextEdit::leaveEvent(e); } + QVariant loadResource(int type, const QUrl &name); + private: void getSingleEmojiFragment(QString &text, QTextFragment &fragment) const; void processDocumentContentsChange(int position, int charsAdded); - QMimeData *createMimeDataFromSelection() const; - QString _ph, _phelided, _oldtext; bool _phVisible; anim::ivalue a_phLeft; diff --git a/Telegram/SourceFiles/gui/images.h b/Telegram/SourceFiles/gui/images.h index c0d9ecd88..2d1e4a139 100644 --- a/Telegram/SourceFiles/gui/images.h +++ b/Telegram/SourceFiles/gui/images.h @@ -29,6 +29,9 @@ struct StorageImageLocation { } StorageImageLocation(int32 width, int32 height, const MTPDfileLocation &location) : width(width), height(height), dc(location.vdc_id.v), volume(location.vvolume_id.v), local(location.vlocal_id.v), secret(location.vsecret.v) { } + bool isNull() const { + return !dc; + } int32 width, height; int32 dc; uint64 volume; @@ -36,6 +39,13 @@ struct StorageImageLocation { uint64 secret; }; +inline bool operator==(const StorageImageLocation &a, const StorageImageLocation &b) { + return !memcmp(&a, &b, sizeof(StorageImageLocation)); +} +inline bool operator!=(const StorageImageLocation &a, const StorageImageLocation &b) { + return !(a == b); +} + class Image { public: @@ -144,6 +154,10 @@ inline StorageKey storageKey(int32 dc, const uint64 &volume, int32 local) { inline StorageKey storageKey(const MTPDfileLocation &location) { return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v); } +inline StorageKey storageKey(const StorageImageLocation &location) { + return storageKey(location.dc, location.volume, location.local); +} + enum StorageFileType { StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown StorageFileJpeg = 0x7efe0e, // mtpc_storage_fileJpeg diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index 48f2d720c..f49a5d26e 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -19,8 +19,30 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "style.h" #include "gui/phoneinput.h" +#include "numbers.h" +#include "lang.h" -PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph) : FlatInput(parent, st, ph) { +PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st) : FlatInput(parent, st, lang(lng_phone_ph)) { +} + +void PhoneInput::paintEvent(QPaintEvent *e) { + FlatInput::paintEvent(e); + + Painter p(this); + QString t(text()); + if (!pattern.isEmpty() && !t.isEmpty()) { + QString ph = placeholder().mid(t.size()); + if (!ph.isEmpty()) { + p.setClipRect(rect()); + QRect phRect(placeholderRect()); + int tw = phFont()->m.width(t); + if (tw < phRect.width()) { + phRect.setLeft(phRect.left() + tw); + phPrepare(p); + p.drawText(phRect, ph, style::al_left); + } + } + } } void PhoneInput::correctValue(QKeyEvent *e, const QString &was) { @@ -36,34 +58,58 @@ void PhoneInput::correctValue(QKeyEvent *e, const QString &was) { } } if (digitCount > MaxPhoneTailLength) digitCount = MaxPhoneTailLength; - bool strict = (digitCount == MaxPhoneTailLength); + bool inPart = !pattern.isEmpty(); + int curPart = -1, leftInPart = 0; newText.reserve(oldLen); for (int i = 0; i < oldLen; ++i) { + if (i == oldPos && newPos < 0) { + newPos = newText.length(); + } + QChar ch(oldText[i]); if (ch.isDigit()) { if (!digitCount--) { break; } - newText += ch; - if (strict && !digitCount) { - break; + if (inPart) { + if (leftInPart) { + --leftInPart; + } else { + newText += ' '; + ++curPart; + inPart = curPart < pattern.size(); + leftInPart = inPart ? (pattern.at(curPart) - 1) : 0; + + ++oldPos; + } } - } else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') { newText += ch; - } - if (i == oldPos) { - newPos = newText.length(); + } else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') { + if (inPart) { + if (leftInPart) { + } else { + newText += ch; + ++curPart; + inPart = curPart < pattern.size(); + leftInPart = inPart ? pattern.at(curPart) : 0; + } + } else { + newText += ch; + } } } + int32 newlen = newText.size(); + while (newlen > 0 && newText.at(newlen - 1).isSpace()) { + --newlen; + } + if (newlen < newText.size()) newText = newText.mid(0, newlen); if (newPos < 0) { newPos = newText.length(); } if (newText != oldText) { setText(newText); - if (newPos != oldPos) { - setCursorPosition(newPos); - } + setCursorPosition(newPos); } } @@ -76,6 +122,29 @@ void PhoneInput::addedToNumber(const QString &added) { updatePlaceholder(); } +void PhoneInput::onChooseCode(const QString &code) { + pattern = phoneNumberParse(code); + if (!pattern.isEmpty() && pattern.at(0) == code.size()) { + pattern.pop_front(); + } else { + pattern.clear(); + } + if (pattern.isEmpty()) { + setPlaceholder(lang(lng_phone_ph)); + } else { + QString ph; + ph.reserve(20); + for (int i = 0, l = pattern.size(); i < l; ++i) { + ph.append(' '); + ph.append(QString(QChar(0x2212)).repeated(pattern.at(i))); + } + setPlaceholder(ph); + } + correctValue(0, text()); + setPlaceholderFast(!pattern.isEmpty()); + updatePlaceholder(); +} + PortInput::PortInput(QWidget *parent, const style::flatInput &st, const QString &ph, const QString &val) : FlatInput(parent, st, ph, val) { correctValue(0, QString()); } diff --git a/Telegram/SourceFiles/gui/phoneinput.h b/Telegram/SourceFiles/gui/phoneinput.h index 28b3affe6..55adba6ea 100644 --- a/Telegram/SourceFiles/gui/phoneinput.h +++ b/Telegram/SourceFiles/gui/phoneinput.h @@ -24,11 +24,14 @@ class PhoneInput : public FlatInput { public: - PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph); + PhoneInput(QWidget *parent, const style::flatInput &st); + + void paintEvent(QPaintEvent *e); public slots: void addedToNumber(const QString &added); + void onChooseCode(const QString &code); signals: @@ -38,6 +41,10 @@ protected: void correctValue(QKeyEvent *e, const QString &was); +private: + + QVector pattern; + }; class PortInput : public FlatInput { diff --git a/Telegram/SourceFiles/gui/scrollarea.cpp b/Telegram/SourceFiles/gui/scrollarea.cpp index d7ecbceec..dbca10ff9 100644 --- a/Telegram/SourceFiles/gui/scrollarea.cpp +++ b/Telegram/SourceFiles/gui/scrollarea.cpp @@ -47,7 +47,7 @@ ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st) _hideTimer.setSingleShot(true); connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(onHideTimer())); - connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(updateBar())); + connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged())); connect(_connected, SIGNAL(rangeChanged(int, int)), this, SLOT(updateBar())); updateBar(); @@ -57,6 +57,11 @@ void ScrollBar::recountSize() { setGeometry(_vertical ? QRect(rtl() ? 0 : (_area->width() - _st->width), _st->deltat, _st->width, _area->height() - _st->deltat - _st->deltab) : QRect(_st->deltat, _area->height() - _st->width, _area->width() - _st->deltat - _st->deltab, _st->width)); } +void ScrollBar::onValueChanged() { + _area->onScrolled(); + updateBar(); +} + void ScrollBar::updateBar(bool force) { QRect newBar; if (_connected->maximum() != _scrollMax) { @@ -266,8 +271,6 @@ _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAc _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) { setLayoutDirection(cLangDir()); - connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled())); - connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled())); connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool))); connect(&vert, SIGNAL(bottomShadowVisibility(bool)), &bottomSh, SLOT(changeVisibility(bool))); vert.updateBar(true); @@ -297,6 +300,8 @@ void ScrollArea::touchDeaccelerate(int32 elapsed) { } void ScrollArea::onScrolled() { + myEnsureResized(widget()); + bool em = false; int32 horValue = horizontalScrollBar()->value(), vertValue = verticalScrollBar()->value(); if (_horValue != horValue) { @@ -325,27 +330,29 @@ void ScrollArea::onScrolled() { } int ScrollArea::scrollWidth() const { - return scrollLeftMax() + width(); + QWidget *w(widget()); + return w ? qMax(w->width(), width()) : width(); } int ScrollArea::scrollHeight() const { - return scrollTopMax() + height(); + QWidget *w(widget()); + return w ? qMax(w->height(), height()) : height(); } int ScrollArea::scrollLeftMax() const { - return horizontalScrollBar()->maximum(); + return scrollWidth() - width(); } int ScrollArea::scrollTopMax() const { - return verticalScrollBar()->maximum(); + return scrollHeight() - height(); } int ScrollArea::scrollLeft() const { - return horizontalScrollBar()->value(); + return _horValue; } int ScrollArea::scrollTop() const { - return verticalScrollBar()->value(); + return _vertValue; } void ScrollArea::onTouchTimer() { @@ -612,6 +619,8 @@ void ScrollArea::leaveEvent(QEvent *e) { } void ScrollArea::scrollToY(int toTop, int toBottom) { + myEnsureResized(widget()); + int toMin = 0, toMax = scrollTopMax(); if (toTop < toMin) { toTop = toMin; diff --git a/Telegram/SourceFiles/gui/scrollarea.h b/Telegram/SourceFiles/gui/scrollarea.h index 5408d52a5..e88f5e9b1 100644 --- a/Telegram/SourceFiles/gui/scrollarea.h +++ b/Telegram/SourceFiles/gui/scrollarea.h @@ -70,6 +70,7 @@ public: public slots: + void onValueChanged(); void updateBar(bool force = false); void onHideTimer(); diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 06157981a..4421091f7 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -26,8 +26,17 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +inline QPoint rtlpoint(int x, int y, int outerw) { + return QPoint(rtl() ? (outerw - x) : x, y); +} +inline QPoint rtlpoint(const QPoint &p, int outerw) { + return rtl() ? QPoint(outerw - p.x(), p.y()) : p; +} inline QRect rtlrect(int x, int y, int w, int h, int outerw) { - return rtl() ? QRect(outerw - x - w, y, w, h) : QRect(x, y, w, h); + return QRect(rtl() ? (outerw - x - w) : x, y, w, h); +} +inline QRect rtlrect(const QRect &r, int outerw) { + return rtl() ? QRect(outerw - r.x() - r.width(), r.y(), r.width(), r.height()) : r; } inline QRect centerrect(const QRect &inRect, const QRect &rect) { return QRect(inRect.x() + (inRect.width() - rect.width()) / 2, inRect.y() + (inRect.height() - rect.height()) / 2, rect.width(), rect.height()); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 3ff93f7e5..5e7d50bdc 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { - const QRegularExpression _reDomain(QString::fromUtf8("(?_blocks.isEmpty()) return; + if (_t->isEmpty()) return; _blocksSize = _t->_blocks.size(); if (!_textStyle) _initDefault(); @@ -1043,7 +1043,7 @@ public: } void drawElided(int32 left, int32 top, int32 w, style::align align, int32 lines, int32 yFrom, int32 yTo, int32 removeFromEnd) { - if (lines <= 0) return; + if (lines <= 0 || _t->isNull()) return; if (yTo < 0 || (lines - 1) * _t->_font->height < yTo) { yTo = lines * _t->_font->height; @@ -1057,7 +1057,7 @@ public: _lnkX = x; _lnkY = y; _lnkResult = &_zeroLnk; - if (_lnkX >= 0 && _lnkX < w && _lnkY >= 0) { + if (!_t->isNull() && _lnkX >= 0 && _lnkX < w && _lnkY >= 0) { draw(0, 0, w, align, _lnkY, _lnkY + 1); } return *_lnkResult; @@ -1067,7 +1067,7 @@ public: lnk = TextLinkPtr(); inText = false; - if (x >= 0 && x < w && y >= 0) { + if (!_t->isNull() && x >= 0 && x < w && y >= 0) { _lnkX = x; _lnkY = y; _lnkResult = &lnk; @@ -1081,8 +1081,7 @@ public: symbol = 0; after = false; upon = false; - - if (y >= 0) { + if (!_t->isNull() && y >= 0) { _lnkX = x; _lnkY = y; _getSymbol = &symbol; @@ -1615,25 +1614,36 @@ public: } } + style::font applyFlags(int32 flags, const style::font &f) { + style::font result = f; + if (flags & TextBlockBold) result = result->bold(); + if (flags & TextBlockItalic) result = result->italic(); + if (flags & TextBlockUnderline) result = result->underline(); + return result; + } + void eSetFont(ITextBlock *block) { style::font newFont = _t->_font; int flags = block->flags(); - if (!flags && block->lnkIndex()) { + if (flags) { + newFont = applyFlags(flags, _t->_font); + } + if (block->lnkIndex()) { const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1)); if (l == _overLnk) { if (l == _downLnk || !_downLnk) { - flags = _textStyle->lnkOverFlags->flags(); + if (_t->_font != _textStyle->lnkOverFlags) newFont = _textStyle->lnkOverFlags; } else { - flags = _textStyle->lnkFlags->flags(); + if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags; } } else { - flags = _textStyle->lnkFlags->flags(); + if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags; } } - if (flags & TextBlockBold) newFont = newFont->bold(); - if (flags & TextBlockItalic) newFont = newFont->italic(); - if (flags & TextBlockUnderline) newFont = newFont->underline(); if (newFont != _f) { + if (newFont->family() == _t->_font->family()) { + newFont = applyFlags(flags | newFont->flags(), _t->_font); + } _f = newFont; _e->fnt = _f->f; _e->resetFontEngineCache(); diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 55d11368a..84d7da3aa 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -259,13 +259,23 @@ public: virtual QString encoded() const { return QString(); } + virtual const QLatin1String &type() const = 0; virtual ~ITextLink() { } }; + +#define TEXT_LINK_CLASS(ClassName) public: \ +const QLatin1String &type() const { \ + static const QLatin1String _type(qstr(#ClassName)); \ + return _type; \ +} + typedef QSharedPointer TextLinkPtr; class TextLink : public ITextLink { + TEXT_LINK_CLASS(TextLink) + public: TextLink(const QString &url, bool fullDisplayed = true) : _url(url), _fullDisplayed(fullDisplayed) { @@ -289,7 +299,7 @@ public: QString encoded() const { QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString()); - QString result(good.isValid() ? good.toEncoded() : _url); + QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _url); if (!QRegularExpression(qsl("^[a-zA-Z]+://")).match(result).hasMatch()) { // no protocol return qsl("http://") + result; @@ -305,6 +315,8 @@ private: }; class EmailLink : public ITextLink { + TEXT_LINK_CLASS(EmailLink) + public: EmailLink(const QString &email) : _email(email) { @@ -335,6 +347,8 @@ private: }; class MentionLink : public ITextLink { + TEXT_LINK_CLASS(MentionLink) + public: MentionLink(const QString &tag) : _tag(tag) { @@ -361,6 +375,8 @@ private: }; class HashtagLink : public ITextLink { + TEXT_LINK_CLASS(HashtagLink) + public: HashtagLink(const QString &tag) : _tag(tag) { @@ -387,6 +403,8 @@ private: }; class BotCommandLink : public ITextLink { + TEXT_LINK_CLASS(BotCommandLink) + public: BotCommandLink(const QString &cmd) : _cmd(cmd) { @@ -485,6 +503,9 @@ public: bool isEmpty() const { return _text.isEmpty(); } + bool isNull() const { + return !_font; + } QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const; bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation diff --git a/Telegram/SourceFiles/gui/twidget.cpp b/Telegram/SourceFiles/gui/twidget.cpp index 7cbcf90d1..8583ccba6 100644 --- a/Telegram/SourceFiles/gui/twidget.cpp +++ b/Telegram/SourceFiles/gui/twidget.cpp @@ -34,12 +34,16 @@ namespace { } } +void myEnsureResized(QWidget *target) { + if (target && (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created))) { + _sendResizeEvents(target); + } +} + QPixmap myGrab(QWidget *target, const QRect &rect) { if (!cRetina()) return target->grab(rect); - - if (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created)) { - _sendResizeEvents(target); - } + + myEnsureResized(target); qreal dpr = App::app()->devicePixelRatio(); QPixmap result(rect.size() * dpr); diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index c1359f7f5..b79f824e4 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -17,20 +17,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -class Widget : public QWidget { -public: - - Widget(QWidget *parent = 0) : QWidget(parent) { - } - void moveToLeft(int x, int y, int outerw) { - move(rtl() ? (outerw - x - width()) : x, y); - } - void moveToRight(int x, int y, int outerw) { - move(rtl() ? x : (outerw - x - width()), y); - } - -}; - namespace App { const QPixmap &sprite(); } @@ -119,14 +105,20 @@ public: void drawSpriteCenter(const QRect &in, const style::sprite &sprite) { return drawPixmap(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), App::sprite(), sprite); } + void drawSpriteCenterLeft(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapLeft(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } + void drawSpriteCenterRight(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapRight(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } }; -class TWidget : public Widget { +class TWidget : public QWidget { Q_OBJECT public: - TWidget(QWidget *parent = 0) : Widget(parent) { + TWidget(QWidget *parent = 0) : QWidget(parent) { } TWidget *tparent() { return qobject_cast(parentWidget()); @@ -140,6 +132,27 @@ public: virtual void enterFromChildEvent(QEvent *e) { // e -- from leaveEvent() of child TWidget } + void moveToLeft(int x, int y, int outerw) { + move(rtl() ? (outerw - x - width()) : x, y); + } + void moveToRight(int x, int y, int outerw) { + move(rtl() ? x : (outerw - x - width()), y); + } + QPoint myrtlpoint(int x, int y) const { + return rtlpoint(x, y, width()); + } + QPoint myrtlpoint(const QPoint p) const { + return rtlpoint(p, width()); + } + QRect myrtlrect(int x, int y, int w, int h) const { + return rtlrect(x, y, w, h, width()); + } + QRect myrtlrect(const QRect &r) { + return rtlrect(r, width()); + } + void rtlupdate(const QRect &r) { + update(myrtlrect(r)); + } bool event(QEvent *e) { return QWidget::event(e); } @@ -149,16 +162,17 @@ protected: void enterEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->leaveToChildEvent(e); - return Widget::enterEvent(e); + return QWidget::enterEvent(e); } void leaveEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->enterFromChildEvent(e); - return Widget::leaveEvent(e); + return QWidget::leaveEvent(e); } private: }; +void myEnsureResized(QWidget *target); QPixmap myGrab(QWidget *target, const QRect &rect); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 7210d0664..a486510a7 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -167,7 +167,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { if (!last) { p.setFont(st::dlgHistFont->f); p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); - if (history->typing.isEmpty()) { + if (history->typing.isEmpty() && history->sendActions.isEmpty()) { p.drawText(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgFont->ascent + st::dlgSep, lang(lng_empty_history)); } else { history->typingText.drawElided(p, nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth); @@ -223,7 +223,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { p.setPen((act ? st::dlgActiveUnreadColor : st::dlgUnreadColor)->p); p.drawText(unreadRectLeft + st::dlgUnreadPaddingHor, unreadRectTop + st::dlgUnreadPaddingVer + st::dlgUnreadFont->ascent, unreadStr); } - if (history->typing.isEmpty()) { + if (history->typing.isEmpty() && history->sendActions.isEmpty()) { last->drawInDialog(p, QRect(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, lastWidth, st::dlgFont->height), act, history->textCachedFor, history->lastItemTextCache); } else { p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); @@ -305,10 +305,10 @@ History::History(const PeerId &peerId) : width(0), height(0) , oldLoaded(false) , newLoaded(true) , lastMsg(0) -, activeMsgId(0) , draftToId(0) , lastWidth(0) , lastScrollTop(History::ScrollMax) +, lastShowAtMsgId(ShowAtUnreadMsgId) , mute(isNotifyMuted(peer->notify)) , lastKeyboardInited(false) , lastKeyboardUsed(false) @@ -319,13 +319,18 @@ History::History(const PeerId &peerId) : width(0), height(0) , lastItemTextCache(st::dlgRichMinWidth) , posInDialogs(0) , typingText(st::dlgRichMinWidth) -, myTyping(0) { for (int32 i = 0; i < OverviewCount; ++i) { _overviewCount[i] = -1; // not loaded yet } } +void History::clearLastKeyboard() { + lastKeyboardInited = true; + lastKeyboardId = 0; + lastKeyboardFrom = 0; +} + void History::updateNameText() { nameText.setText(st::msgNameFont, peer->nameOrPhone.isEmpty() ? peer->name : peer->nameOrPhone, _textNameOptions); } @@ -341,6 +346,14 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { ++i; } } + for (SendActionUsers::iterator i = sendActions.begin(), e = sendActions.end(); i != e;) { + if (ms >= i.value().until) { + i = sendActions.erase(i); + changed = true; + } else { + ++i; + } + } if (changed) { QString newTypingStr; int32 cnt = typing.size(); @@ -350,6 +363,17 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { newTypingStr = lng_users_typing(lt_user, typing.begin().key()->firstName, lt_second_user, (typing.end() - 1).key()->firstName); } else if (cnt) { newTypingStr = peer->chat ? lng_user_typing(lt_user, typing.begin().key()->firstName) : lang(lng_typing); + } else if (!sendActions.isEmpty()) { + switch (sendActions.begin().value().type) { + case SendActionRecordVideo: newTypingStr = peer->chat ? lng_user_action_record_video(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_record_video); break; + case SendActionUploadVideo: newTypingStr = peer->chat ? lng_user_action_upload_video(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_video); break; + case SendActionRecordAudio: newTypingStr = peer->chat ? lng_user_action_record_audio(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_record_audio); break; + case SendActionUploadAudio: newTypingStr = peer->chat ? lng_user_action_upload_audio(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_audio); break; + case SendActionUploadPhoto: newTypingStr = peer->chat ? lng_user_action_upload_photo(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_photo); break; + case SendActionUploadFile: newTypingStr = peer->chat ? lng_user_action_upload_file(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_file); break; + case SendActionChooseLocation: newTypingStr = peer->chat ? lng_user_action_geo_location(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_geo_location); break; + case SendActionChooseContact: newTypingStr = peer->chat ? lng_user_action_choose_contact(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_choose_contact); break; + } } if (!newTypingStr.isEmpty()) { newTypingStr += qsl("..."); @@ -366,6 +390,28 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { return changed; } +void History::eraseFromOverview(MediaOverviewType type, MsgId msgId) { + if (_overviewIds[type].isEmpty()) return; + + History::MediaOverviewIds::iterator i = _overviewIds[type].find(msgId); + if (i == _overviewIds[type].cend()) return; + + _overviewIds[type].erase(i); + for (History::MediaOverview::iterator i = _overview[type].begin(), e = _overview[type].end(); i != e; ++i) { + if ((*i) == msgId) { + _overview[type].erase(i); + if (_overviewCount[type] > 0) { + --_overviewCount[type]; + if (!_overviewCount[type]) { + _overviewCount[type] = -1; + } + } + break; + } + } + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, type); +} + bool DialogsList::del(const PeerId &peerId, DialogRow *replacedBy) { RowByPeer::iterator i = rowByPeer.find(peerId); if (i == rowByPeer.cend()) return false; @@ -478,9 +524,25 @@ void Histories::clear() { Parent::clear(); } -void Histories::regTyping(History *history, UserData *user) { +void Histories::regSendAction(History *history, UserData *user, const MTPSendMessageAction &action) { + if (action.type() == mtpc_sendMessageCancelAction) { + history->unregTyping(user); + return; + } + uint64 ms = getms(true); - history->typing[user] = ms + 6000; + switch (action.type()) { + case mtpc_sendMessageTypingAction: history->typing[user] = ms + 6000; break; + case mtpc_sendMessageRecordVideoAction: history->sendActions.insert(user, SendAction(SendActionRecordVideo, ms + 6000)); break; + case mtpc_sendMessageUploadVideoAction: history->sendActions.insert(user, SendAction(SendActionUploadVideo, ms + 6000, action.c_sendMessageUploadVideoAction().vprogress.v)); break; + case mtpc_sendMessageRecordAudioAction: history->sendActions.insert(user, SendAction(SendActionRecordAudio, ms + 6000)); break; + case mtpc_sendMessageUploadAudioAction: history->sendActions.insert(user, SendAction(SendActionUploadAudio, ms + 6000, action.c_sendMessageUploadAudioAction().vprogress.v)); break; + case mtpc_sendMessageUploadPhotoAction: history->sendActions.insert(user, SendAction(SendActionUploadPhoto, ms + 6000, action.c_sendMessageUploadPhotoAction().vprogress.v)); break; + case mtpc_sendMessageUploadDocumentAction: history->sendActions.insert(user, SendAction(SendActionUploadFile, ms + 6000, action.c_sendMessageUploadDocumentAction().vprogress.v)); break; + case mtpc_sendMessageGeoLocationAction: history->sendActions.insert(user, SendAction(SendActionChooseLocation, ms + 6000)); break; + case mtpc_sendMessageChooseContactAction: history->sendActions.insert(user, SendAction(SendActionChooseContact, ms + 6000)); break; + default: return; + } user->madeAction(); @@ -502,7 +564,7 @@ bool Histories::animStep(float64) { App::main()->dlgUpdated(i.key()); App::main()->topBar()->update(); } - if (i.key()->typing.isEmpty()) { + if (i.key()->typing.isEmpty() && i.key()->sendActions.isEmpty()) { i = typing.erase(i); } else { ++i; @@ -551,7 +613,7 @@ HistoryItem *Histories::addToBack(const MTPmessage &msg, int msgState) { if (!h.value()->loadedAtBottom()) { HistoryItem *item = h.value()->addToHistory(msg); if (item) { - h.value()->lastMsg = item; + h.value()->setLastMessage(item); if (msgState > 0) { h.value()->newItemAdded(item); } @@ -594,18 +656,80 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo result = new HistoryServiceMsg(this, block, msg.c_messageEmpty().vid.v, date(), lang(lng_message_empty)); break; - case mtpc_message: - if ((msg.c_message().has_fwd_date() && msg.c_message().vfwd_date.v > 0) || (msg.c_message().has_fwd_from_id() && msg.c_message().vfwd_from_id.v != 0)) { - result = new HistoryForwarded(this, block, msg.c_message()); - } else if (msg.c_message().has_reply_to_msg_id() && msg.c_message().vreply_to_msg_id.v > 0) { - result = new HistoryReply(this, block, msg.c_message()); + case mtpc_message: { + const MTPDmessage m(msg.c_message()); + int badMedia = 0; // 1 - unsupported, 2 - empty + switch (m.vmedia.type()) { + case mtpc_messageMediaEmpty: + case mtpc_messageMediaContact: break; + case mtpc_messageMediaGeo: + switch (m.vmedia.c_messageMediaGeo().vgeo.type()) { + case mtpc_geoPoint: break; + case mtpc_geoPointEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaVenue: + switch (m.vmedia.c_messageMediaVenue().vgeo.type()) { + case mtpc_geoPoint: break; + case mtpc_geoPointEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaPhoto: + switch (m.vmedia.c_messageMediaPhoto().vphoto.type()) { + case mtpc_photo: break; + case mtpc_photoEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaVideo: + switch (m.vmedia.c_messageMediaVideo().vvideo.type()) { + case mtpc_video: break; + case mtpc_videoEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaAudio: + switch (m.vmedia.c_messageMediaAudio().vaudio.type()) { + case mtpc_audio: break; + case mtpc_audioEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaDocument: + switch (m.vmedia.c_messageMediaDocument().vdocument.type()) { + case mtpc_document: break; + case mtpc_documentEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaWebPage: + switch (m.vmedia.c_messageMediaWebPage().vwebpage.type()) { + case mtpc_webPage: + case mtpc_webPageEmpty: + case mtpc_webPagePending: break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaUnsupported: + default: badMedia = 1; break; + } + if (badMedia) { + result = new HistoryServiceMsg(this, block, m.vid.v, date(m.vdate), lang((badMedia == 2) ? lng_message_empty : lng_media_unsupported), m.vflags.v, 0, m.vfrom_id.v); } else { - result = new HistoryMessage(this, block, msg.c_message()); + if ((m.has_fwd_date() && m.vfwd_date.v > 0) || (m.has_fwd_from_id() && m.vfwd_from_id.v != 0)) { + result = new HistoryForwarded(this, block, m); + } else if (m.has_reply_to_msg_id() && m.vreply_to_msg_id.v > 0) { + result = new HistoryReply(this, block, m); + } else { + result = new HistoryMessage(this, block, m); + } + if (m.has_reply_markup()) { + App::feedReplyMarkup(msgId, m.vreply_markup); + } } - if (msg.c_message().has_reply_markup()) { - App::feedReplyMarkup(msgId, msg.c_message().vreply_markup); - } - break; + } break; case mtpc_messageService: { const MTPDmessageService &d(msg.c_messageService()); @@ -632,9 +756,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo case mtpc_messageActionChatDeleteUser: { const MTPDmessageActionChatDeleteUser &d(action.c_messageActionChatDeleteUser()); if (lastKeyboardFrom == App::peerFromUser(d.vuser_id)) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } // App::peer(App::peerFromUser(d.vuser_id)); left } break; @@ -786,7 +908,8 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } } to->push_back(adding); - lastMsg = adding; + setLastMessage(adding); + adding->y = to->height; if (width) { int32 dh = adding->resize(width); @@ -797,15 +920,26 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * if (newMsg) { newItemAdded(adding); } + HistoryMedia *media = adding->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { _overview[t].push_back(adding->id); _overviewIds[t].insert(adding->id, NullType()); if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { + _overview[t].push_back(adding->id); + _overviewIds[t].insert(adding->id, NullType()); + if (_overviewCount[t] > 0) ++_overviewCount[t]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } } } } @@ -821,24 +955,23 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } } if (adding->hasReplyMarkup()) { - if (peer->chat) { - peer->asChat()->markupSenders.insert(adding->from(), true); - } - if (App::replyMarkup(adding->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO) { // zero markup means replyKeyboardHide - if (lastKeyboardFrom == adding->from()->id || (!lastKeyboardInited && !peer->chat && !adding->out())) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; + int32 markupFlags = App::replyMarkup(adding->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || adding->notifyByFrom()) { + if (peer->chat) { + peer->asChat()->markupSenders.insert(adding->from(), true); + } + if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { // zero markup means replyKeyboardHide + if (lastKeyboardFrom == adding->from()->id || (!lastKeyboardInited && !peer->chat && !adding->out())) { + clearLastKeyboard(); + } + } else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) { + clearLastKeyboard(); + } else { + lastKeyboardInited = true; + lastKeyboardId = adding->id; + lastKeyboardFrom = adding->from()->id; + lastKeyboardUsed = false; } - } else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { - lastKeyboardInited = true; - lastKeyboardId = adding->id; - lastKeyboardFrom = adding->from()->id; - lastKeyboardUsed = false; } } } @@ -846,11 +979,22 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } void History::unregTyping(UserData *from) { + bool update = false; + uint64 updateAtMs = 0; TypingUsers::iterator i = typing.find(from); if (i != typing.end()) { - uint64 ms = getms(true); - i.value() = ms; - updateTyping(ms, 0, true); + updateAtMs = getms(true); + i.value() = updateAtMs; + update = true; + } + SendActionUsers::iterator j = sendActions.find(from); + if (j != sendActions.end()) { + if (!updateAtMs) updateAtMs = getms(true); + j.value().until = updateAtMs; + update = true; + } + if (updateAtMs) { + updateTyping(updateAtMs, 0, true); App::main()->topBar()->update(); } } @@ -914,7 +1058,7 @@ void History::addToFront(const QVector &slice) { block->height += dayItem->resize(width); } if (block->size()) { - if (wasMsgCount < unreadCount && msgCount >= unreadCount && !activeMsgId) { + if (loadedAtBottom() && wasMsgCount < unreadCount && msgCount >= unreadCount) { for (int32 i = block->size(); i > 0; --i) { if ((*block)[i - 1]->itemType() == HistoryItem::MsgType) { ++wasMsgCount; @@ -930,16 +1074,27 @@ void History::addToFront(const QVector &slice) { ++skip; if (loadedAtBottom()) { // add photos to overview and authors to lastAuthors + int32 mask = 0; QList *lastAuthors = peer->chat ? &(peer->asChat()->lastAuthors) : 0; for (int32 i = block->size(); i > 0; --i) { HistoryItem *item = (*block)[i - 1]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { _overview[t].push_front(item->id); _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { + _overview[t].push_front(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } } } } @@ -949,39 +1104,44 @@ void History::addToFront(const QVector &slice) { lastAuthors->push_back(item->from()); } if (!lastKeyboardInited && item->hasReplyMarkup() && !item->out()) { // chats with bots - bool wasKeyboardHide = peer->asChat()->markupSenders.contains(item->from()); - if (!wasKeyboardHide) { - peer->asChat()->markupSenders.insert(item->from(), true); - } - if (!(App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO)) { - if (!lastKeyboardInited) { - lastKeyboardInited = true; - if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { - lastKeyboardId = item->id; - lastKeyboardFrom = item->from()->id; - lastKeyboardUsed = false; + int32 markupFlags = App::replyMarkup(item->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || item->notifyByFrom()) { + bool wasKeyboardHide = peer->asChat()->markupSenders.contains(item->from()); + if (!wasKeyboardHide) { + peer->asChat()->markupSenders.insert(item->from(), true); + } + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO)) { + if (!lastKeyboardInited) { + if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) { + clearLastKeyboard(); + } else { + lastKeyboardInited = true; + lastKeyboardId = item->id; + lastKeyboardFrom = item->from()->id; + lastKeyboardUsed = false; + } } } } } } else if (!lastKeyboardInited && item->hasReplyMarkup() && !item->out()) { // conversations with bots - lastKeyboardInited = true; - if (App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { - lastKeyboardInited = true; - lastKeyboardId = item->id; - lastKeyboardFrom = item->from()->id; - lastKeyboardUsed = false; + int32 markupFlags = App::replyMarkup(item->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || item->notifyByFrom()) { + if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { + clearLastKeyboard(); + } else { + lastKeyboardInited = true; + lastKeyboardId = item->id; + lastKeyboardFrom = item->from()->id; + lastKeyboardUsed = false; + } } } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } } else { delete block; @@ -1056,10 +1216,14 @@ void History::addToBack(const QVector &slice) { delete block; } if (!wasLoadedAtBottom && loadedAtBottom()) { // add all loaded photos to overview + int32 mask = 0; for (int32 i = 0; i < OverviewCount; ++i) { if (_overviewCount[i] == 0) continue; // all loaded - _overview[i].clear(); - _overviewIds[i].clear(); + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + _overview[i].clear(); + _overviewIds[i].clear(); + mask |= (1 << i); + } } for (int32 i = 0; i < size(); ++i) { HistoryBlock *b = (*this)[i]; @@ -1067,15 +1231,29 @@ void History::addToBack(const QVector &slice) { HistoryItem *item = (*b)[j]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); - if (t != OverviewCount && _overviewCount[t] != 0) { - _overview[t].push_back(item->id); - _overviewIds[t].insert(item->id, NullType()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); + if (t != OverviewCount) { + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + } } } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } if (wasEmpty && !isEmpty()) { HistoryBlock *dateBlock = new HistoryBlock(this); @@ -1103,6 +1281,7 @@ void History::inboxRead(int32 upTo) { if (!dialogs.isEmpty()) { if (App::main()) App::main()->dlgUpdated(dialogs[0]); } + showFrom = 0; App::wnd()->notifyClear(this); clearNotifications(); } @@ -1124,7 +1303,7 @@ void History::outboxRead(HistoryItem *wasRead) { void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { if (unreadCount != newUnreadCount) { - if (!unreadCount && newUnreadCount == 1 && loadedAtBottom()) { + if (newUnreadCount == 1 && loadedAtBottom()) { showFrom = isEmpty() ? 0 : back()->back(); } else if (!newUnreadCount) { showFrom = 0; @@ -1153,10 +1332,6 @@ void History::setMsgCount(int32 newMsgCount) { } void History::getNextShowFrom(HistoryBlock *block, int32 i) { - if (!loadedAtBottom()) { - showFrom = 0; - return; - } if (i >= 0) { int32 l = block->size(); for (++i; i < l; ++i) { @@ -1183,7 +1358,7 @@ void History::getNextShowFrom(HistoryBlock *block, int32 i) { } void History::addUnreadBar() { - if (unreadBar || !showFrom || !unreadCount || !loadedAtBottom()) return; + if (unreadBar || !showFrom || showFrom->detached() || !unreadCount) return; HistoryBlock *block = showFrom->block(); int32 i = block->indexOf(showFrom); @@ -1211,10 +1386,6 @@ void History::clearNotifications() { notifies.clear(); } -bool History::readyForWork() const { - return activeMsgId ? !isEmpty() : (unreadCount <= msgCount); -} - bool History::loadedAtBottom() const { return newLoaded; } @@ -1223,51 +1394,52 @@ bool History::loadedAtTop() const { return oldLoaded; } +bool History::isReadyFor(MsgId msgId, bool check) const { + if (msgId == ShowAtTheEndMsgId) { + return loadedAtBottom(); + } else if (msgId == ShowAtUnreadMsgId) { + return check ? (loadedAtBottom() && (msgCount >= unreadCount)) : !isEmpty(); + } else if (check) { + HistoryItem *item = App::histItemById(msgId); + return item && item->history() == this && !item->detached(); + } + return !isEmpty(); +} + +void History::getReadyFor(MsgId msgId) { + if (!isReadyFor(msgId, true)) { + clear(true); + newLoaded = (msgId == ShowAtTheEndMsgId) || (lastMsg && !lastMsg->detached()); + oldLoaded = false; + lastWidth = 0; + lastShowAtMsgId = msgId; + } +} + +void History::setLastMessage(HistoryItem *msg) { + if (msg) { + if (!lastMsg) Local::removeSavedPeer(peer); + lastMsg = msg; + lastMsgDate = msg->date; + } else { + lastMsg = 0; + } +} + void History::fixLastMessage(bool wasAtBottom) { if (wasAtBottom && isEmpty()) { wasAtBottom = false; } if (wasAtBottom) { - lastMsg = back()->back(); + setLastMessage(back()->back()); } else { - lastMsg = 0; + setLastMessage(0); if (App::main()) { App::main()->checkPeerHistory(peer); } } } -void History::loadAround(MsgId msgId) { - if (activeMsgId != msgId) { - activeMsgId = msgId; - lastWidth = 0; - if (activeMsgId) { - HistoryItem *item = App::histItemById(activeMsgId); - if (!item || !item->block()) { - clear(true); - } - newLoaded = lastMsg && !lastMsg->detached(); - } else { - if (!loadedAtBottom()) { - clear(true); - } - newLoaded = isEmpty() || (lastMsg && !lastMsg->detached()); - } - } -} - -bool History::canShowAround(MsgId msgId) const { - if (activeMsgId != msgId) { - if (msgId) { - HistoryItem *item = App::histItemById(msgId); - return item && item->block(); - } else { - return loadedAtBottom(); - } - } - return true; -} - MsgId History::minMsgId() const { for (const_iterator i = cbegin(), e = cend(); i != e; ++i) { for (HistoryBlock::const_iterator j = (*i)->cbegin(), en = (*i)->cend(); j != en; ++j) { @@ -1321,12 +1493,21 @@ void History::clear(bool leaveItems) { if (showFrom) { showFrom = 0; } - for (int32 i = 0; i < OverviewCount; ++i) { - if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); - _overview[i].clear(); - _overviewIds[i].clear(); + if (!leaveItems) { + setLastMessage(0); + } + for (int32 i = 0; i < OverviewCount; ++i) { + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + if (leaveItems) { + if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); + } else { + _overviewCount[i] = -1; // not loaded yet + } + _overview[i].clear(); + _overviewIds[i].clear(); + if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(i)); + } } - if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer); for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { if (leaveItems) { (*i)->clear(true); @@ -1339,7 +1520,6 @@ void History::clear(bool leaveItems) { lastKeyboardInited = false; } else { setUnreadCount(0); - lastMsg = 0; } height = 0; oldLoaded = false; @@ -1574,23 +1754,10 @@ void HistoryItem::destroy() { } HistoryMedia *m = getMedia(true); MediaOverviewType t = m ? mediaToOverviewType(m->type()) : OverviewCount; - if (t != OverviewCount && !history()->_overviewIds[t].isEmpty()) { - History::MediaOverviewIds::iterator i = history()->_overviewIds[t].find(id); - if (i != history()->_overviewIds[t].cend()) { - history()->_overviewIds[t].erase(i); - for (History::MediaOverview::iterator i = history()->_overview[t].begin(), e = history()->_overview[t].end(); i != e; ++i) { - if ((*i) == id) { - history()->_overview[t].erase(i); - if (history()->_overviewCount[t] > 0) { - --history()->_overviewCount[t]; - if (!history()->_overviewCount[t]) { - history()->_overviewCount[t] = -1; - } - } - break; - } - } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(history()->peer); + if (t != OverviewCount) { + history()->eraseFromOverview(t, id); + if (m->type() == MediaTypeDocument && static_cast(m)->document()->song()) { + history()->eraseFromOverview(OverviewAudioDocuments, id); } } delete this; @@ -1771,7 +1938,7 @@ bool HistoryPhoto::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 w return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryPhoto::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -1806,7 +1973,7 @@ void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < fwdFrom + st::msgServiceNameFont->height) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } height -= st::mediaPadding.bottom(); @@ -1814,7 +1981,9 @@ void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co if (!_caption.isEmpty()) { height -= _caption.countHeight(width) + st::webPagePhotoSkip; if (x >= skipx && y >= height + st::webPagePhotoSkip && x < skipx + width && y < _height) { - return _caption.getState(lnk, inText, x - skipx, y - height - st::webPagePhotoSkip, width); + bool inText = false; + _caption.getState(lnk, inText, x - skipx, y - height - st::webPagePhotoSkip, width); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; } } } @@ -2002,10 +2171,10 @@ ImagePtr HistoryPhoto::replyPreview() { QString formatSizeText(qint64 size) { if (size >= 1024 * 1024) { // more than 1 mb qint64 sizeTenthMb = (size * 10 / (1024 * 1024)); - return QString::number(sizeTenthMb / 10) + '.' + QString::number(sizeTenthMb % 10) + qsl("MB"); + return QString::number(sizeTenthMb / 10) + '.' + QString::number(sizeTenthMb % 10) + qsl(" MB"); } qint64 sizeTenthKb = (size * 10 / 1024); - return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl("KB"); + return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl(" KB"); } QString formatDownloadText(qint64 ready, qint64 total) { @@ -2115,15 +2284,55 @@ const QString HistoryVideo::inHistoryText() const { } bool HistoryVideo::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const { + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } + if (width >= _maxw) { + width = _maxw; + } + return (x >= 0 && y >= 0 && x < width && y < height); +} + +int32 HistoryVideo::countHeight(const HistoryItem *parent, int32 width) const { + if (_caption.isEmpty()) return _height; + if (width < 0) width = w; if (width >= _maxw) { width = _maxw; } - return (x >= 0 && y >= 0 && x < width && y < _height); + + int32 h = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); + if (!parent->out() && parent->history()->peer->chat) { + h += st::msgPadding.top() + st::msgNameFont->height; + } + if (const HistoryReply *reply = toHistoryReply(parent)) { + h += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); + } else if (const HistoryForwarded *fwd = toHistoryForwarded(parent)) { + if (parent->out() || !parent->history()->peer->chat) { + h += st::msgPadding.top(); + } + h += st::msgServiceNameFont->height; + } + if (!_caption.isEmpty()) { + int32 textw = width - st::mediaPadding.left() - st::mediaPadding.right(); + if (!parent->out()) { // substract Download / Save As button + textw -= st::mediaSaveDelta + _buttonWidth; + } + h += st::webPagePhotoSkip + _caption.countHeight(textw); + } + return h; } -void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { - if (width < 0) width = w; +void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } if (width < 1) return; const HistoryReply *reply = toHistoryReply(parent); @@ -2149,7 +2358,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } if (!out) { // draw Download / Save As button - int32 h = _height; + int32 h = height; if (!_caption.isEmpty()) { h -= st::webPagePhotoSkip + _caption.countHeight(width - _buttonWidth - st::mediaSaveDelta - st::mediaPadding.left() - st::mediaPadding.right()); } @@ -2174,7 +2383,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -2184,7 +2393,9 @@ void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co return; } if (!_caption.isEmpty() && x >= st::mediaPadding.left() && x < st::mediaPadding.left() + tw && y >= skipy + st::mediaPadding.top() + st::mediaThumbSize + st::webPagePhotoSkip) { - return _caption.getState(lnk, inText, x - st::mediaPadding.left(), y - skipy - st::mediaPadding.top() - st::mediaThumbSize - st::webPagePhotoSkip, tw); + bool inText = false; + _caption.getState(lnk, inText, x - st::mediaPadding.left(), y - skipy - st::mediaPadding.top() - st::mediaThumbSize - st::webPagePhotoSkip, tw); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; } } @@ -2193,7 +2404,12 @@ HistoryMedia *HistoryVideo::clone() const { } void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width) const { - if (width < 0) width = w; + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } if (width < 1) return; const HistoryReply *reply = toHistoryReply(parent); @@ -2225,7 +2441,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i pressed = hovered && ((data->loader ? _cancell : _savel) == textlnkDown()); if (hovered && !pressed && textlnkDown()) hovered = false; - int32 h = _height; + int32 h = height; if (!_caption.isEmpty()) { h -= st::webPagePhotoSkip + _caption.countHeight(width - _buttonWidth - st::mediaSaveDelta - st::mediaPadding.left() - st::mediaPadding.right()); } @@ -2247,7 +2463,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i style::color bg(selected ? (out ? st::msgOutSelectBg : st::msgInSelectBg) : (out ? st::msgOutBg : st::msgInBg)); style::color sh(selected ? (out ? st::msgOutSelectShadow : st::msgInSelectShadow) : (out ? st::msgOutShadow : st::msgInShadow)); RoundCorners cors(selected ? (out ? MessageOutSelectedCorners : MessageInSelectedCorners) : (out ? MessageOutCorners : MessageInCorners)); - App::roundRect(p, 0, 0, width, _height, bg, cors, &sh); + App::roundRect(p, 0, 0, width, height, bg, cors, &sh); if (!parent->out() && parent->history()->peer->chat) { p.setFont(st::msgNameFont->f); @@ -2284,8 +2500,9 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i p.setPen(status->p); if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2324,9 +2541,9 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i style::color date(selected ? (out ? st::msgOutSelectDateColor : st::msgInSelectDateColor) : (out ? st::msgOutDateColor : st::msgInDateColor)); p.setPen(date->p); - p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, parent->time()); + p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, parent->time()); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -2486,7 +2703,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i fwd->drawForwardedFrom(p, st::mediaPadding.left(), fwdFrom, width - st::mediaPadding.left() - st::mediaPadding.right(), selected); } - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; int64 playingPosition = 0, playingDuration = 0; int32 playingFrequency = 0; @@ -2508,7 +2725,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing == data && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { @@ -2517,8 +2734,9 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); } else { if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2611,7 +2829,7 @@ bool HistoryAudio::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 w return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryAudio::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryAudio::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -2659,7 +2877,7 @@ void HistoryAudio::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -2673,18 +2891,26 @@ HistoryMedia *HistoryAudio::clone() const { return new HistoryAudio(*this); } +namespace { + QString documentName(DocumentData *document) { + SongData *song = document->song(); + if (!song || (song->title.isEmpty() && song->performer.isEmpty())) return document->name; + if (song->performer.isEmpty()) return song->title; + return song->performer + QString::fromUtf8(" \xe2\x80\x93 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); + } +} + HistoryDocument::HistoryDocument(DocumentData *document) : HistoryMedia() , data(document) , _openl(new DocumentOpenLink(data)) , _savel(new DocumentSaveLink(data)) , _cancell(new DocumentCancelLink(data)) -, _name(data->name) +, _name(documentName(data)) , _dldDone(0) , _uplDone(0) { _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); - - _size = formatSizeText(data->size); + _size = document->song() ? formatDurationAndSizeText(document->song()->duration, data->size) : formatSizeText(data->size); _height = _minh = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); @@ -2732,10 +2958,12 @@ void HistoryDocument::initDimensions(const HistoryItem *parent) { if (const HistoryReply *reply = toHistoryReply(parent)) { _minh += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); } else if (const HistoryForwarded *fwd = toHistoryForwarded(parent)) { - if (parent->out() || !parent->history()->peer->chat) { - _minh += st::msgPadding.top(); + if (!data->song()) { + if (parent->out() || !parent->history()->peer->chat) { + _minh += st::msgPadding.top(); + } + _minh += st::msgServiceNameFont->height; } - _minh += st::msgServiceNameFont->height; } } _height = _minh; @@ -2745,7 +2973,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected if (width < 0) width = w; if (width < 1) return; - bool out = parent->out(), hovered, pressed; + bool out = parent->out(), hovered, pressed, already = !data->already().isEmpty(), hasdata = !data->data.isEmpty(); if (parent == animated.msg) { int32 pw = animated.w / cIntRetinaFactor(), ph = animated.h / cIntRetinaFactor(); if (width < pw) { @@ -2764,7 +2992,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } const HistoryReply *reply = toHistoryReply(parent); - const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent); + const HistoryForwarded *fwd = (reply || data->song()) ? 0 : toHistoryForwarded(parent); int skipy = 0, replyFrom = 0, fwdFrom = 0; if (reply) { skipy = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); @@ -2780,8 +3008,6 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected skipy += fwdFrom; } - data->thumb->checkload(); - if (width >= _maxw) { width = _maxw; } @@ -2799,8 +3025,8 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected p.setPen((hovered ? st::mediaSaveButton.overColor : st::mediaSaveButton.color)->p); p.setFont(st::mediaSaveButton.font->f); - QString btnText(lang(data->loader ? lng_media_cancel : (data->already().isEmpty() ? lng_media_download : lng_media_open_with))); - int32 btnTextWidth = data->loader ? _cancelWidth : (data->already().isEmpty() ? _downloadWidth : _openWithWidth); + QString btnText(lang(data->loader ? lng_media_cancel : (already ? lng_media_open_with : lng_media_download))); + int32 btnTextWidth = data->loader ? _cancelWidth : (already ? _openWithWidth : _downloadWidth); p.drawText(btnx + (btnw - btnTextWidth) / 2, btny + (pressed ? st::mediaSaveButton.downTextTop : st::mediaSaveButton.textTop) + st::mediaSaveButton.font->ascent, btnText); width -= btnw + st::mediaSaveDelta; } @@ -2820,10 +3046,79 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } else if (fwd) { fwd->drawForwardedFrom(p, st::mediaPadding.left(), fwdFrom, width - st::mediaPadding.left() - st::mediaPadding.right(), selected); } - if (_thumbw) { - p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + + QString statusText; + if (data->song()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + if (audioPlayer()) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + QRect img; + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; + } else if (already || hasdata) { + bool showPause = false; + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } else { + statusText = formatDurationText(data->song()->duration); + } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; + img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); + } else { + if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; + } + + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), img); } else { - p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + } else if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + + if (_thumbw) { + data->thumb->checkload(); + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + } else { + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); + } } if (selected) { App::roundRect(p, st::mediaPadding.left(), skipy + st::mediaPadding.top(), st::mediaThumbSize, st::mediaThumbSize, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); @@ -2842,28 +3137,9 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } - QString statusText; - style::color status(selected ? (out ? st::mediaOutSelectColor : st::mediaInSelectColor) : (out ? st::mediaOutColor : st::mediaInColor)); p.setPen(status->p); - if (data->status == FileFailed) { - statusText = lang(lng_attach_failed); - } else if (data->status == FileUploading) { - if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { - _uplDone = data->uploadOffset; - _uplTextCache = formatDownloadText(_uplDone, data->size); - } - statusText = _uplTextCache; - } else if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); - _dldTextCache = formatDownloadText(_dldDone, data->size); - } - statusText = _dldTextCache; - } else { - statusText = _size; - } p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->descent, statusText); p.setFont(st::msgDateFont->f); @@ -2888,6 +3164,116 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } } +void HistoryDocument::drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const { + bool out = parent->out(), already = !data->already().isEmpty(), hasdata = !data->data.isEmpty(); + int32 height = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); + + style::color bg(selected ? st::msgInSelectBg : (over ? st::playlistHoverBg : st::msgInBg)); + p.fillRect(0, 0, width, height, bg->b); + + QString statusText; + if (data->song()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + if (audioPlayer()) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + QRect img; + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + img = st::mediaMusicInImg; + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + img = st::mediaMusicInImg; + } else if (already || hasdata) { + bool isPlaying = (playing.msgId == parent->id); + bool showPause = false; + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } else { + statusText = formatDurationText(data->song()->duration); + } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; + img = isPlaying ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); + } else { + if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + img = st::mediaMusicInImg; + } + + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), img); + } else { + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + } else if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + + if (_thumbw) { + data->thumb->checkload(); + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + } else { + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), st::mediaDocInImg); + } + } + if (selected) { + App::roundRect(p, st::mediaPadding.left(), st::mediaPadding.top(), st::mediaThumbSize, st::mediaThumbSize, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); + } + + int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); + int32 twidth = width - tleft - st::mediaPadding.right(); + int32 fullTimeWidth = parent->timeWidth(true) + st::msgPadding.right(); + int32 secondwidth = width - tleft - fullTimeWidth; + + p.setFont(st::mediaFont->f); + p.setPen(st::black->c); + if (twidth < _namew) { + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + } else { + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); + } + + style::color status(selected ? st::mediaInSelectColor : st::mediaInColor); + p.setPen(status->p); + p.drawText(tleft, st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->descent, statusText); +} + +TextLinkPtr HistoryDocument::linkInPlaylist() { + if (!data->loader && data->access) { + return _openl; + } + return TextLinkPtr(); +} + void HistoryDocument::regItem(HistoryItem *item) { App::regDocumentItem(data, item); } @@ -2920,11 +3306,11 @@ int32 HistoryDocument::resize(int32 width, bool dontRecountText, const HistoryIt } const QString HistoryDocument::inDialogsText() const { - return data->name.isEmpty() ? lang(lng_in_dlg_file) : data->name; + return _name.isEmpty() ? lang(lng_in_dlg_file) : _name; } const QString HistoryDocument::inHistoryText() const { - return qsl("[ ") + lang(lng_in_dlg_file) + (data->name.isEmpty() ? QString() : (qsl(" : ") + data->name)) + qsl(" ]"); + return qsl("[ ") + lang(lng_in_dlg_file) + (_name.isEmpty() ? QString() : (qsl(" : ") + _name)) + qsl(" ]"); } bool HistoryDocument::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const { @@ -2953,7 +3339,7 @@ int32 HistoryDocument::countHeight(const HistoryItem *parent, int32 width) const return _height; } -void HistoryDocument::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryDocument::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -2969,7 +3355,7 @@ void HistoryDocument::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } const HistoryReply *reply = toHistoryReply(parent); - const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent); + const HistoryForwarded *fwd = (reply || data->song()) ? 0 : toHistoryForwarded(parent); int skipy = 0, replyFrom = 0, fwdFrom = 0; if (reply) { skipy = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); @@ -3007,7 +3393,7 @@ void HistoryDocument::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -3039,22 +3425,9 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() , pixw(1), pixh(1), data(document), lastw(0) { data->thumb->load(); - updateStickerEmoji(); -} - -bool HistorySticker::updateStickerEmoji() { - if (!data->sticker->alt.isEmpty()) { - _emoji = data->sticker->alt; - return true; + if (!data->sticker()->alt.isEmpty()) { + _emoji = data->sticker()->alt; } - const EmojiStickersMap &stickers(cEmojiStickers()); - EmojiStickersMap::const_iterator i = stickers.constFind(data); - QString emoji = (i == stickers.cend()) ? QString() : emojiString(i.value()); - if (emoji != _emoji) { - _emoji = emoji; - return true; - } - return false; } void HistorySticker::initDimensions(const HistoryItem *parent) { @@ -3097,24 +3470,24 @@ void HistorySticker::draw(QPainter &p, const HistoryItem *parent, bool selected, if (!data->loader && data->status != FileFailed && !already && !hasdata) { data->save(QString()); } - if (data->sticker->img->isNull() && (already || hasdata)) { + if (data->sticker()->img->isNull() && (already || hasdata)) { if (already) { - data->sticker->img = ImagePtr(data->already()); + data->sticker()->img = ImagePtr(data->already()); } else { - data->sticker->img = ImagePtr(data->data); + data->sticker()->img = ImagePtr(data->data); } } if (selected) { - if (data->sticker->img->isNull()) { + if (data->sticker()->img->isNull()) { p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->thumb->pixBlurredColored(st::msgStickerOverlay, pixw, pixh)); } else { - p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker->img->pixColored(st::msgStickerOverlay, pixw, pixh)); + p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker()->img->pixColored(st::msgStickerOverlay, pixw, pixh)); } } else { - if (data->sticker->img->isNull()) { + if (data->sticker()->img->isNull()) { p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->thumb->pixBlurred(pixw, pixh)); } else { - p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker->img->pix(pixw, pixh)); + p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker()->img->pix(pixw, pixh)); } } @@ -3198,7 +3571,7 @@ int32 HistorySticker::countHeight(const HistoryItem *parent, int32 width) const return _minh; } -void HistorySticker::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistorySticker::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -3279,7 +3652,7 @@ bool HistoryContact::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 return (x >= 0 && y <= 0 && x < w && y < _height); } -void HistoryContact::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryContact::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; const HistoryReply *reply = toHistoryReply(parent); @@ -3312,7 +3685,7 @@ void HistoryContact::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -3462,7 +3835,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { if (data->photo && data->type != WebPagePhoto && data->type != WebPageVideo) { if (data->type == WebPageProfile) { _asArticle = true; - } else if (data->siteName == QLatin1String("Twitter") || data->siteName == QLatin1String("Facebook")) { + } else if (data->siteName == qstr("Twitter") || data->siteName == qstr("Facebook")) { _asArticle = false; } else { _asArticle = true; @@ -3526,9 +3899,9 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { QString text = textClean(data->description); if (!_asArticle && !data->photo) text += textcmdSkipBlock(parent->timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()); const TextParseOptions *opts = &_webpageDescriptionOptions; - if (data->siteName == QLatin1String("Twitter")) { + if (data->siteName == qstr("Twitter")) { opts = &_twitterDescriptionOptions; - } else if (data->siteName == QLatin1String("Instagram")) { + } else if (data->siteName == qstr("Instagram")) { opts = &_instagramDescriptionOptions; } _description.setText(st::webPageDescriptionFont, text, *opts); @@ -3683,7 +4056,7 @@ void HistoryWebPage::draw(QPainter &p, const HistoryItem *parent, bool selected, } if (data->type == WebPageVideo) { - if (data->siteName == QLatin1String("YouTube")) { + if (data->siteName == qstr("YouTube")) { p.drawPixmap(QPoint((pixwidth - st::youtubeIcon.pxWidth()) / 2, (pixheight - st::youtubeIcon.pxHeight()) / 2), App::sprite(), st::youtubeIcon); } else { p.drawPixmap(QPoint((pixwidth - st::videoIcon.pxWidth()) / 2, (pixheight - st::videoIcon.pxHeight()) / 2), App::sprite(), st::videoIcon); @@ -3808,7 +4181,7 @@ bool HistoryWebPage::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryWebPage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryWebPage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -3849,11 +4222,14 @@ void HistoryWebPage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } else if (!data->photo) { articleLines = 3; } - if (y >= 0 && y < st::webPageDescriptionFont->height * articleLines) { + int32 desch = qMin(_description.countHeight(width), st::webPageDescriptionFont->height * articleLines); + if (y >= 0 && y < desch) { + bool inText = false; _description.getState(lnk, inText, x, y, availw); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; return; } - y -= qMin(_description.countHeight(width), st::webPageDescriptionFont->height * articleLines); + y -= desch; } if (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty()) { y -= st::webPagePhotoSkip; @@ -4240,7 +4616,7 @@ _description(st::msgMinWidth) { QString lnk = qsl("https://maps.google.com/maps?q=") + url.mid(9) + qsl("&ll=") + url.mid(9) + qsl("&z=17"); link.reset(new TextLink(lnk)); - data = App::imageLink(url, GoogleMapsLink, lnk); + data = App::imageLinkSet(url, GoogleMapsLink, lnk); } else { link.reset(new TextLink(url)); @@ -4251,15 +4627,15 @@ _description(st::msgMinWidth) { matchIndex = 3; } if (m.hasMatch()) { - data = App::imageLink(qsl("youtube:") + m.captured(matchIndex), YouTubeLink, url); + data = App::imageLinkSet(qsl("youtube:") + m.captured(matchIndex), YouTubeLink, url); } else { m = reVimeo.match(url); if (m.hasMatch()) { - data = App::imageLink(qsl("vimeo:") + m.captured(3), VimeoLink, url); + data = App::imageLinkSet(qsl("vimeo:") + m.captured(3), VimeoLink, url); } else { m = reInstagram.match(url); if (m.hasMatch()) { - data = App::imageLink(qsl("instagram:") + m.captured(3), InstagramLink, url); + data = App::imageLinkSet(qsl("instagram:") + m.captured(3), InstagramLink, url); data->title = qsl("instagram.com/p/") + m.captured(3); } else { data = 0; @@ -4562,7 +4938,7 @@ bool HistoryImageLink::hasPoint(int32 x, int32 y, const HistoryItem *parent, int return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryImageLink::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryImageLink::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; int skipx = 0, skipy = 0, height = _height; const HistoryReply *reply = toHistoryReply(parent); @@ -4595,7 +4971,7 @@ void HistoryImageLink::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y } } else if (fwd) { if (y >= fwdFrom && y < fwdFrom + st::msgServiceNameFont->height) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } height -= st::mediaPadding.bottom(); @@ -4671,7 +5047,6 @@ void HistoryMessage::initTime() { void HistoryMessage::initMedia(const MTPMessageMedia &media, QString ¤tText) { switch (media.type()) { - case mtpc_messageMediaEmpty: initMediaFromText(currentText); break; case mtpc_messageMediaContact: { const MTPDmessageMediaContact &d(media.c_messageMediaContact()); _media = new HistoryContact(d.vuser_id.v, qs(d.vfirst_name), qs(d.vlast_name), qs(d.vphone_number)); @@ -4728,8 +5103,7 @@ void HistoryMessage::initMedia(const MTPMessageMedia &media, QString ¤tTex } break; } } break; - case mtpc_messageMediaUnsupported: - default: currentText += " (unsupported media)"; break; + default: initMediaFromText(currentText); break; }; if (_media) _media->regItem(this); } @@ -4743,7 +5117,7 @@ void HistoryMessage::initMediaFromText(QString ¤tText) { } void HistoryMessage::initMediaFromDocument(DocumentData *doc) { - if (doc->type == StickerDocument && doc->sticker && doc->dimensions.width() > 0 && doc->dimensions.height() > 0 && doc->dimensions.width() <= StickerMaxSize && doc->dimensions.height() <= StickerMaxSize && doc->size < StickerInMemory) { + if (doc->sticker()) { _media = new HistorySticker(doc); } else { _media = new HistoryDocument(doc); @@ -4858,18 +5232,16 @@ void HistoryMessage::setMedia(const MTPmessageMedia &media) { void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); - if (id == _history->activeMsgId) { - uint64 ms = App::main() ? App::main()->animActiveTime() : 0; - if (ms) { - if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { - App::main()->stopAnimActive(); - } else { - float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); - float64 o = p.opacity(); - p.setOpacity(o * dt); - p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); - p.setOpacity(o); - } + uint64 ms = App::main() ? App::main()->animActiveTime(id) : 0; + if (ms) { + if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { + App::main()->stopAnimActive(); + } else { + float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); + float64 o = p.opacity(); + p.setOpacity(o * dt); + p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); + p.setOpacity(o); } } @@ -5020,8 +5392,8 @@ bool HistoryMessage::hasPoint(int32 x, int32 y) const { return r.contains(x, y); } -void HistoryMessage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { - inText = false; +void HistoryMessage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { + state = HistoryDefaultCursorState; lnk = TextLinkPtr(); int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; @@ -5049,31 +5421,46 @@ void HistoryMessage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) width = _maxw; } if (justMedia()) { - _media->getState(lnk, inText, x - left, y - st::msgMargin.top(), this); + _media->getState(lnk, state, x - left, y - st::msgMargin.top(), this); return; } QRect r(left, st::msgMargin.top(), width, _height - st::msgMargin.top() - st::msgMargin.bottom()); if (!out() && _history->peer->chat) { // from user left name - if (x >= r.left() + st::msgPadding.left() && y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + st::msgNameFont->height && x < r.right() - st::msgPadding.right() && x < r.left() + st::msgPadding.left() + _from->nameText.maxWidth()) { + if (x >= r.left() + st::msgPadding.left() && y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + st::msgNameFont->height && x < r.left() + r.width() - st::msgPadding.right() && x < r.left() + st::msgPadding.left() + _from->nameText.maxWidth()) { lnk = _from->lnk; return; } r.setTop(r.top() + st::msgNameFont->height); } - return getStateFromMessageText(lnk, inText, x, y, r); + + getStateFromMessageText(lnk, state, x, y, r); } -void HistoryMessage::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryMessage::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { + int32 dateX = r.right() - st::msgPadding.right() + st::msgDateDelta.x() - timeWidth(true) + st::msgDateSpace; + int32 dateY = r.bottom() - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + QRect trect(r.marginsAdded(-st::msgPadding)); TextLinkPtr medialnk; if (_media && _media->isDisplayed()) { if (y >= trect.bottom() - _media->height() && y < trect.bottom()) { - _media->getState(lnk, inText, x - trect.left(), y + _media->height() - trect.bottom(), this); + _media->getState(lnk, state, x - trect.left(), y + _media->height() - trect.bottom(), this); + if (inDate) state = HistoryInDateCursorState; return; } trect.setBottom(trect.bottom() - _media->height() - st::msgPadding.bottom()); } + bool inText = false; _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width()); + + if (inDate) { + state = HistoryInDateCursorState; + } else if (inText) { + state = HistoryInTextCursorState; + } else { + state = HistoryDefaultCursorState; + } } void HistoryMessage::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { @@ -5141,15 +5528,6 @@ QString HistoryMessage::notificationText() const { return msg; } -void HistoryMessage::updateStickerEmoji() { - if (_media) { - if (_media->updateStickerEmoji()) { - _history->textCachedFor = 0; - if (App::wnd()) App::wnd()->update(); - } - } -} - HistoryMessage::~HistoryMessage() { if (_media) { _media->unregItem(this); @@ -5262,9 +5640,9 @@ bool HistoryForwarded::hasPoint(int32 x, int32 y) const { return HistoryMessage::hasPoint(x, y); } -void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryForwarded::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; if (!justMedia()) { int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(); @@ -5275,7 +5653,7 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y if (!out() && _history->peer->chat) { // from user left photo if (x >= left && x < left + st::msgPhotoSize) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } // width -= st::msgPhotoSkip; left += st::msgPhotoSkip; @@ -5290,28 +5668,28 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y if (!out() && _history->peer->chat) { style::font nameFont(st::msgNameFont); if (y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + nameFont->height) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } r.setTop(r.top() + nameFont->height); } QRect trect(r.marginsAdded(-st::msgPadding)); if (y >= trect.top() && y < trect.top() + st::msgServiceNameFont->height) { - return getForwardedState(lnk, inText, x - trect.left(), trect.right() - trect.left()); + return getForwardedState(lnk, state, x - trect.left(), trect.right() - trect.left()); } y -= st::msgServiceNameFont->height; } - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } -void HistoryForwarded::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryForwarded::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { QRect realr(r); realr.setHeight(r.height() - st::msgServiceNameFont->height); - HistoryMessage::getStateFromMessageText(lnk, inText, x, y, realr); + HistoryMessage::getStateFromMessageText(lnk, state, x, y, realr); } -void HistoryForwarded::getForwardedState(TextLinkPtr &lnk, bool &inText, int32 x, int32 w) const { - inText = false; +void HistoryForwarded::getForwardedState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 w) const { + state = HistoryDefaultCursorState; if (x >= fromWidth && x < w && x < fromWidth + fwdFromName.maxWidth()) { lnk = fwdFrom->lnk; } else { @@ -5565,9 +5943,9 @@ bool HistoryReply::hasPoint(int32 x, int32 y) const { return HistoryMessage::hasPoint(x, y); } -void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryReply::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; if (!justMedia()) { int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(); @@ -5578,7 +5956,7 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co if (!out() && _history->peer->chat) { // from user left photo if (x >= left && x < left + st::msgPhotoSize) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } // width -= st::msgPhotoSkip; left += st::msgPhotoSkip; @@ -5593,7 +5971,7 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co if (!out() && _history->peer->chat) { style::font nameFont(st::msgNameFont); if (y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + nameFont->height) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } r.setTop(r.top() + nameFont->height); } @@ -5608,15 +5986,15 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co } y -= h; } - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } -void HistoryReply::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryReply::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { int32 h = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); QRect realr(r); realr.setHeight(r.height() - h); - HistoryMessage::getStateFromMessageText(lnk, inText, x, y, realr); + HistoryMessage::getStateFromMessageText(lnk, state, x, y, realr); } void HistoryReply::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { @@ -5747,8 +6125,8 @@ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, cons setMessageByAction(msg.vaction); } -HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags, HistoryMedia *media) : - HistoryItem(history, block, msgId, flags, date, 0) +HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags, HistoryMedia *media, int32 from) : + HistoryItem(history, block, msgId, flags, date, from) , _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth) , _media(media) { @@ -5776,19 +6154,17 @@ QString HistoryServiceMsg::inReplyText() const { } void HistoryServiceMsg::draw(QPainter &p, uint32 selection) const { - if (id == _history->activeMsgId) { - uint64 ms = App::main() ? App::main()->animActiveTime() : 0; - if (ms) { - if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { - App::main()->stopAnimActive(); - } else { - textstyleSet(&st::inTextStyle); - float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); - float64 o = p.opacity(); - p.setOpacity(o * dt); - p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); - p.setOpacity(o); - } + uint64 ms = App::main() ? App::main()->animActiveTime(id) : 0; + if (ms) { + if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { + App::main()->stopAnimActive(); + } else { + textstyleSet(&st::inTextStyle); + float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); + float64 o = p.opacity(); + p.setOpacity(o * dt); + p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); + p.setOpacity(o); } } @@ -5855,9 +6231,9 @@ bool HistoryServiceMsg::hasPoint(int32 x, int32 y) const { return QRect(left, st::msgServiceMargin.top(), width, height).contains(x, y); } -void HistoryServiceMsg::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryServiceMsg::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; int32 left = st::msgServiceMargin.left(), width = _history->width - st::msgServiceMargin.left() - st::msgServiceMargin.left(), height = _height - st::msgServiceMargin.top() - st::msgServiceMargin.bottom(); // two small margins if (width < 1) return; @@ -5867,10 +6243,11 @@ void HistoryServiceMsg::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 } QRect trect(QRect(left, st::msgServiceMargin.top(), width, height).marginsAdded(-st::msgServicePadding)); if (trect.contains(x, y)) { - return _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width(), Qt::AlignCenter); - } - if (_media) { - _media->getState(lnk, inText, x - st::msgServiceMargin.left() - (width - _media->maxWidth()) / 2, y - st::msgServiceMargin.top() - height - st::msgServiceMargin.top(), this); + bool inText = false; + _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width(), Qt::AlignCenter); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; + } else if (_media) { + _media->getState(lnk, state, x - st::msgServiceMargin.left() - (width - _media->maxWidth()) / 2, y - st::msgServiceMargin.top() - height - st::msgServiceMargin.top(), this); } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index ed92ee7a3..1379928b5 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -41,7 +41,7 @@ struct Histories : public QHash, public Animated { Histories() : unreadFull(0), unreadMuted(0) { } - void regTyping(History *history, UserData *user); + void regSendAction(History *history, UserData *user, const MTPSendMessageAction &action); bool animStep(float64 ms); void clear(); @@ -106,6 +106,7 @@ enum MediaOverviewType { OverviewVideos, OverviewDocuments, OverviewAudios, + OverviewAudioDocuments, OverviewCount }; @@ -127,11 +128,31 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) { case OverviewVideos: return MTP_inputMessagesFilterVideo(); case OverviewDocuments: return MTP_inputMessagesFilterDocument(); case OverviewAudios: return MTP_inputMessagesFilterAudio(); + case OverviewAudioDocuments: return MTP_inputMessagesFilterAudioDocuments(); default: type = OverviewCount; break; } return MTPMessagesFilter(); } +enum SendActionType { + SendActionTyping, + SendActionRecordVideo, + SendActionUploadVideo, + SendActionRecordAudio, + SendActionUploadAudio, + SendActionUploadPhoto, + SendActionUploadFile, + SendActionChooseLocation, + SendActionChooseContact, +}; +struct SendAction { + SendAction(SendActionType type, uint64 until, int32 progress = 0) : type(type), until(until), progress(progress) { + } + SendActionType type; + uint64 until; + int32 progress; +}; + class HistoryMedia; class HistoryMessage; class HistoryUnreadBar; @@ -178,15 +199,14 @@ struct History : public QList { void addUnreadBar(); void clearNotifications(); - bool readyForWork() const; // all unread loaded or loaded around activeMsgId bool loadedAtBottom() const; // last message is in the list bool loadedAtTop() const; // nothing was added after loading history back + bool isReadyFor(MsgId msgId, bool check = false) const; // has messages for showing history at msgId + void getReadyFor(MsgId msgId); + void setLastMessage(HistoryItem *msg); void fixLastMessage(bool wasAtBottom); - void loadAround(MsgId msgId); - bool canShowAround(MsgId msgId) const; - MsgId minMsgId() const; MsgId maxMsgId() const; @@ -199,7 +219,7 @@ struct History : public QList { PeerData *peer; bool oldLoaded, newLoaded; HistoryItem *lastMsg; - MsgId activeMsgId; + QDateTime lastMsgDate; typedef QList NotifyQueue; NotifyQueue notifies; @@ -249,11 +269,13 @@ struct History : public QList { MessageCursor draftCursor; bool draftPreviewCancelled; int32 lastWidth, lastScrollTop; + MsgId lastShowAtMsgId; bool mute; bool lastKeyboardInited, lastKeyboardUsed; MsgId lastKeyboardId; PeerId lastKeyboardFrom; + void clearLastKeyboard(); mtpRequestId sendRequestId; @@ -272,11 +294,13 @@ struct History : public QList { typedef QMap TypingUsers; TypingUsers typing; + typedef QMap SendActionUsers; + SendActionUsers sendActions; QString typingStr; Text typingText; uint32 typingFrame; bool updateTyping(uint64 ms = 0, uint32 dots = 0, bool force = false); - uint64 myTyping; + QMap mySendActions; typedef QList MediaOverview; typedef QMap MediaOverviewIds; @@ -285,6 +309,8 @@ struct History : public QList { MediaOverviewIds _overviewIds[OverviewCount]; int32 _overviewCount[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded + void eraseFromOverview(MediaOverviewType type, MsgId msgId); + static const int32 ScrollMax = INT_MAX; }; @@ -422,11 +448,11 @@ struct DialogsList { DialogRow *row = addToEnd(history), *change = row; const QString &peerName(history->peer->name); - while (change->prev && change->prev->history->peer->name > peerName) { + while (change->prev && change->prev->history->peer->name.compare(peerName, Qt::CaseInsensitive) > 0) { change = change->prev; } if (!insertBefore(row, change)) { - while (change->next != end && change->next->history->peer->name < peerName) { + while (change->next != end && change->next->history->peer->name.compare(peerName, Qt::CaseInsensitive) < 0) { change = change->next; } insertAfter(row, change); @@ -635,6 +661,12 @@ class HistoryReply; // dynamic_cast optimize class HistoryMessage; // dynamic_cast optimize class HistoryForwarded; // dynamic_cast optimize +enum HistoryCursorState { + HistoryDefaultCursorState, + HistoryInTextCursorState, + HistoryInDateCursorState +}; + class HistoryMedia; class HistoryItem : public HistoryElem { public: @@ -697,9 +729,9 @@ public: virtual bool hasPoint(int32 x, int32 y) const { return false; } - virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { + virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; } virtual void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { // from text upon = hasPoint(x, y); @@ -717,8 +749,6 @@ public: } virtual void updateMedia(const MTPMessageMedia &media) { } - virtual void updateStickerEmoji() { - } virtual QString selectedText(uint32 selection) const { return qsl("[-]"); @@ -787,6 +817,8 @@ protected: }; class MessageLink : public ITextLink { + TEXT_LINK_CLASS(MessageLink) + public: MessageLink(PeerId peer, MsgId msgid) : _peer(peer), _msgid(msgid) { } @@ -827,7 +859,7 @@ public: w = qMin(width, _maxw); return _height; } - virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0; + virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0; virtual void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0; virtual bool uploading() const { return false; @@ -847,10 +879,6 @@ public: return false; } - virtual bool updateStickerEmoji() { - return false; - } - virtual bool animating() const { return false; } @@ -890,7 +918,7 @@ public: const QString inHistoryText() const; const Text &captionForClone() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; PhotoData *photo() const { @@ -922,6 +950,7 @@ private: }; QString formatSizeText(qint64 size); +QString formatDownloadText(qint64 ready, qint64 total); QString formatDurationText(qint64 duration); class HistoryVideo : public HistoryMedia { @@ -938,7 +967,8 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + int32 countHeight(const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool uploading() const { return (data->status == FileUploading); } @@ -978,7 +1008,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool uploading() const { return (data->status == FileUploading); } @@ -1021,7 +1051,7 @@ public: bool uploading() const { return (data->status == FileUploading); } - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; DocumentData *document() { @@ -1038,6 +1068,9 @@ public: } ImagePtr replyPreview(); + void drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const; + TextLinkPtr linkInPlaylist(); + private: DocumentData *data; @@ -1066,7 +1099,7 @@ public: const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; int32 countHeight(const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; DocumentData *document() { @@ -1077,7 +1110,6 @@ public: void unregItem(HistoryItem *item); void updateFrom(const MTPMessageMedia &media); - bool updateStickerEmoji(); private: @@ -1101,7 +1133,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const; HistoryMedia *clone() const; void updateFrom(const MTPMessageMedia &media); @@ -1131,7 +1163,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; void regItem(HistoryItem *item); @@ -1224,7 +1256,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; bool isImageLink() const { @@ -1266,8 +1298,8 @@ public: int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - virtual void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + virtual void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { @@ -1283,7 +1315,6 @@ public: _media->updateFrom(media); } } - void updateStickerEmoji(); QString selectedText(uint32 selection) const; QString inDialogsText() const; @@ -1342,9 +1373,9 @@ public: void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; - void getForwardedState(TextLinkPtr &lnk, bool &inText, int32 x, int32 w) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; + void getForwardedState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 w) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; QDateTime dateForwarded() const { @@ -1395,8 +1426,8 @@ public: void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; UserData *replyTo() const { @@ -1429,14 +1460,14 @@ class HistoryServiceMsg : public HistoryItem { public: HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg); - HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0); + HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0, int32 from = 0); void initDimensions(const HistoryItem *parent = 0); void draw(QPainter &p, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { return _text.adjustSelection(from, to, type); @@ -1477,9 +1508,9 @@ class HistoryDateMsg : public HistoryServiceMsg { public: HistoryDateMsg(History *history, HistoryBlock *block, const QDate &date); - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; } void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { symbol = 0xFFFF; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index c0515d56a..b022f64c2 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -43,14 +43,17 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo , scrollArea(scroll) , currentBlock(0) , currentItem(0) + , _firstLoading(false) , _cursor(style::cur_default) , _dragAction(NoDrag) , _dragSelType(TextSelectLetters) , _dragItem(0) + , _dragCursorState(HistoryDefaultCursorState) , _dragWasInactive(false) , _dragSelFrom(0) , _dragSelTo(0) , _dragSelecting(false) + , _wasSelectedText(false) , _touchScroll(false) , _touchSelect(false) , _touchInProgress(false) @@ -72,7 +75,9 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo _trippleClickTimer.setSingleShot(true); - if (botInfo && !botInfo->inited) App::api()->requestFullPeer(hist->peer); + if (botInfo && !botInfo->inited) { + App::api()->requestFullPeer(hist->peer); + } setMouseTracking(true); } @@ -99,7 +104,7 @@ void HistoryList::paintEvent(QPaintEvent *e) { p.setClipRect(r); } - if (botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { + if (!_firstLoading && botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { if (r.top() < botDescRect.y() + botDescRect.height() && r.bottom() > botDescRect.y()) { textstyleSet(&st::inTextStyle); App::roundRect(p, botDescRect, st::msgInBg, MessageInCorners, &st::msgInShadow); @@ -112,11 +117,11 @@ void HistoryList::paintEvent(QPaintEvent *e) { textstyleRestore(); } - } else if (hist->isEmpty()) { + } else if (_firstLoading || hist->isEmpty()) { QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); } - if (!hist->isEmpty()) { + if (!_firstLoading && !hist->isEmpty()) { adjustCurrent(r.top()); HistoryBlock *block = (*hist)[currentBlock]; HistoryItem *item = (*block)[currentItem]; @@ -395,8 +400,7 @@ void HistoryList::dragActionStart(const QPoint &screenPos, Qt::MouseButton butto _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - bool textLink = textlnkDown() && !textlnkDown()->encoded().isEmpty(); - if (textLink) { + if (textlnkDown()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { @@ -450,18 +454,22 @@ void HistoryList::dragActionStart(const QPoint &screenPos, Qt::MouseButton butto if (uponSelected) { _dragAction = PrepareDrag; // start text drag } else if (!_dragWasInactive) { - if (afterDragSymbol) ++_dragSymbol; - uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; - if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { - if (!_selected.isEmpty()) { - updateMsg(_selected.cbegin().key()); - _selected.clear(); - } - _selected.insert(_dragItem, selStatus); - _dragAction = Selecting; - updateMsg(_dragItem); + if (dynamic_cast(App::pressedItem()->getMedia()) || _dragCursorState == HistoryInDateCursorState) { + _dragAction = PrepareDrag; // start sticker drag or by-date drag } else { - _dragAction = PrepareSelect; + if (afterDragSymbol) ++_dragSymbol; + uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; + if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + if (!_selected.isEmpty()) { + updateMsg(_selected.cbegin().key()); + _selected.clear(); + } + _selected.insert(_dragItem, selStatus); + _dragAction = Selecting; + updateMsg(_dragItem); + } else { + _dragAction = PrepareSelect; + } } } } else if (!_dragWasInactive) { @@ -482,9 +490,96 @@ void HistoryList::dragActionCancel() { _dragAction = NoDrag; _dragStartPos = QPoint(0, 0); _dragSelFrom = _dragSelTo = 0; + _wasSelectedText = false; historyWidget->noSelectingScroll(); } +void HistoryList::onDragExec() { + if (_dragAction != Dragging) return; + + bool uponSelected = false; + if (_dragItem) { + bool afterDragSymbol; + uint16 symbol; + if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + uponSelected = _selected.contains(_dragItem); + } else { + _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); + if (uponSelected) { + if (_selected.isEmpty() || + _selected.cbegin().value() == FullItemSel || + _selected.cbegin().key() != _dragItem + ) { + uponSelected = false; + } else { + uint16 selFrom = (_selected.cbegin().value() >> 16) & 0xFFFF, selTo = _selected.cbegin().value() & 0xFFFF; + if (symbol < selFrom || symbol >= selTo) { + uponSelected = false; + } + } + } + } + } + QString sel; + QList urls; + if (uponSelected) { + sel = getSelectedText(); + } else if (textlnkDown()) { + sel = textlnkDown()->encoded(); + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o + } + } + if (!sel.isEmpty()) { + updateDragSelection(0, 0, false); + historyWidget->noSelectingScroll(); + + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + mimeData->setText(sel); + if (!urls.isEmpty()) mimeData->setUrls(urls); + if (uponSelected && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode()) { + mimeData->setData(qsl("application/x-td-forward-selected"), "1"); + } + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } else { + HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); + QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")), + lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(pressedLnkItem->getMedia())), + dragSticker = dynamic_cast(pressedItem ? pressedItem->getMedia() : 0), + dragByDate = (_dragCursorState == HistoryInDateCursorState); + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact || dragSticker || dragByDate) { + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + if (dragSticker || dragByDate) { + mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); + } else { + mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + } + if (lnkDocument) { + QString already = static_cast(textlnkDown().data())->document()->already(true); + if (!already.isEmpty()) { + QList urls; + urls.push_back(QUrl::fromLocalFile(already)); + mimeData->setUrls(urls); + } + } + + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } + } +} + void HistoryList::itemRemoved(HistoryItem *item) { SelectedItems::iterator i = _selected.find(item); if (i != _selected.cend()) { @@ -527,6 +622,18 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt if (textlnkOver()) { if (textlnkDown() == textlnkOver() && _dragAction != Dragging) { needClick = textlnkDown(); + + QLatin1String lnkType = needClick->type(); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")), + lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(App::pressedLinkItem() ? App::pressedLinkItem()->getMedia() : 0)); + if (_dragAction == PrepareDrag && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && button != Qt::RightButton) { + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact) { + needClick = TextLinkPtr(); + } + } } } if (textlnkDown()) { @@ -542,13 +649,16 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt updateMsg(App::pressedItem()); App::pressedItem(0); } + + _wasSelectedText = false; + if (needClick) { DEBUG_LOG(("Clicked link: %1 (%2) %3").arg(needClick->text()).arg(needClick->readable()).arg(needClick->encoded())); needClick->onClick(button); dragActionCancel(); return; } - if (_dragAction == PrepareSelect && !needClick && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_dragAction == PrepareSelect && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { SelectedItems::iterator i = _selected.find(_dragItem); if (i == _selected.cend() && !_dragItem->serviceMsg() && _dragItem->id > 0) { if (_selected.size() < MaxSelectedItems) { @@ -561,11 +671,16 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt _selected.erase(i); } updateMsg(_dragItem); - } else if (_dragAction == PrepareDrag && !needClick && !_dragWasInactive && button != Qt::RightButton) { + } else if (_dragAction == PrepareDrag && !_dragWasInactive && button != Qt::RightButton) { SelectedItems::iterator i = _selected.find(_dragItem); if (i != _selected.cend() && i.value() == FullItemSel) { _selected.erase(i); updateMsg(_dragItem); + } else if (i == _selected.cend() && !_dragItem->serviceMsg() && _dragItem->id > 0 && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_selected.size() < MaxSelectedItems) { + _selected.insert(_dragItem, FullItemSel); + updateMsg(_dragItem); + } } else { _selected.clear(); parentWidget()->update(); @@ -573,6 +688,7 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt } else if (_dragAction == Selecting) { if (_dragSelFrom && _dragSelTo) { applyDragSelection(); + _dragSelFrom = _dragSelTo = 0; } else if (!_selected.isEmpty() && !_dragWasInactive) { uint32 sel = _selected.cbegin().value(); if (sel != FullItemSel && (sel & 0xFFFF) == ((sel >> 16) & 0xFFFF)) { @@ -595,6 +711,8 @@ void HistoryList::mouseReleaseEvent(QMouseEvent *e) { } void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { + if (!hist) return; + if (((_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) || (_dragAction == NoDrag && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel))) && _dragSelType == TextSelectLetters && _dragItem) { bool afterDragSymbol, uponSelected; uint16 symbol; @@ -610,7 +728,7 @@ void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { _selected.clear(); } _selected.insert(_dragItem, selStatus); - } + } mouseMoveEvent(e); _trippleClickPoint = e->globalPos(); @@ -724,9 +842,9 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (item && !isUponSelected && !_contextMenuLnk) { if (HistorySticker *sticker = dynamic_cast(msg ? msg->getMedia() : 0)) { DocumentData *doc = sticker->document(); - if (doc && doc->sticker && doc->sticker->set.type() != mtpc_inputStickerSetEmpty) { + if (doc && doc->sticker() && doc->sticker()->set.type() != mtpc_inputStickerSetEmpty) { if (!_menu) _menu = new ContextMenu(this); - _menu->addAction(lang(lng_context_pack_info), historyWidget, SLOT(onStickerPackInfo())); + _menu->addAction(lang(doc->sticker()->setInstalled() ? lng_context_pack_info : lng_context_pack_add), historyWidget, SLOT(onStickerPackInfo())); } } QString contextMenuText = item->selectedText(FullItemSel); @@ -800,8 +918,9 @@ void HistoryList::onMenuDestroy(QObject *obj) { void HistoryList::copySelectedText() { QString sel = getSelectedText(); - DEBUG_LOG(("Setting selected text to clipboard: %1").arg(sel)); - QApplication::clipboard()->setText(sel); + if (!sel.isEmpty()) { + QApplication::clipboard()->setText(sel); + } } void HistoryList::openContextUrl() { @@ -814,7 +933,6 @@ void HistoryList::openContextUrl() { void HistoryList::copyContextUrl() { QString enc = _contextMenuLnk->encoded(); if (!enc.isEmpty()) { - DEBUG_LOG(("Setting text to clipboard from context url: %1").arg(enc)); QApplication::clipboard()->setText(enc); } } @@ -888,7 +1006,6 @@ void HistoryList::copyContextText() { QString contextMenuText = item->selectedText(FullItemSel); if (!contextMenuText.isEmpty()) { - DEBUG_LOG(("Setting text to clipboard from context menu: %1").arg(contextMenuText)); QApplication::clipboard()->setText(contextMenuText); } } @@ -898,16 +1015,24 @@ void HistoryList::resizeEvent(QResizeEvent *e) { } QString HistoryList::getSelectedText() const { - if (_selected.isEmpty()) return QString(); - if (_selected.cbegin().value() != FullItemSel) { - return _selected.cbegin().key()->selectedText(_selected.cbegin().value()); + SelectedItems sel = _selected; + + if (_dragAction == Selecting && _dragSelFrom && _dragSelTo) { + applyDragSelection(&sel); + } + + if (sel.isEmpty()) return QString(); + if (sel.cbegin().value() != FullItemSel) { + return sel.cbegin().key()->selectedText(sel.cbegin().value()); } int32 fullSize = 0; QString timeFormat(qsl(", [dd.MM.yy hh:mm]\n")); QMap texts; - for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { + for (SelectedItems::const_iterator i = sel.cbegin(), e = sel.cend(); i != e; ++i) { HistoryItem *item = i.key(); + if (item->detached()) continue; + QString text, sel = item->selectedText(FullItemSel), time = item->date.toString(timeFormat); int32 size = item->from()->name.size() + time.size() + sel.size(); text.reserve(size); @@ -940,6 +1065,14 @@ void HistoryList::keyPressEvent(QKeyEvent *e) { int32 HistoryList::recountHeight(bool dontRecountText) { int32 st = hist->lastScrollTop; + + int32 ph = scrollArea->height(), minadd = 0; + int32 wasYSkip = ph - (hist->height + st::historyPadding); + if (botInfo && !botInfo->text.isEmpty()) { + minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; + } + if (wasYSkip < minadd) wasYSkip = minadd; + hist->geomResize(scrollArea->width(), &st, dontRecountText); updateBotInfo(false); if (botInfo && !botInfo->text.isEmpty()) { @@ -954,14 +1087,21 @@ int32 HistoryList::recountHeight(bool dontRecountText) { int32 descH = st::msgMargin.top() + st::msgPadding.top() + st::msgNameFont->height + st::botDescSkip + botDescHeight + st::msgPadding.bottom() + st::msgMargin.bottom(); int32 descAtX = (scrollArea->width() - botDescWidth) / 2 - st::msgPadding.left(); - int32 descAtY = qMin(ySkip - descH, (scrollArea->height() - descH) / 2) + st::msgMargin.top(); + int32 descAtY = qMin(ySkip - descH, qMax(0, (scrollArea->height() - descH) / 2)) + st::msgMargin.top(); botDescRect = QRect(descAtX, descAtY, botDescWidth + st::msgPadding.left() + st::msgPadding.right(), descH - st::msgMargin.top() - st::msgMargin.bottom()); } else { botDescWidth = botDescHeight = 0; botDescRect = QRect(); } - return st; + + int32 newYSkip = ph - (hist->height + st::historyPadding); + if (botInfo && !botInfo->text.isEmpty()) { + minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; + } + if (newYSkip < minadd) newYSkip = minadd; + + return st + (newYSkip - wasYSkip); } void HistoryList::updateBotInfo(bool recount) { @@ -979,6 +1119,8 @@ void HistoryList::updateBotInfo(bool recount) { botDescWidth = tw; newh = botInfo->text.countHeight(botDescWidth); } + } else if (recount) { + newh = botDescHeight; } } if (recount) { @@ -999,22 +1141,34 @@ void HistoryList::updateBotInfo(bool recount) { } } +bool HistoryList::wasSelectedText() const { + return _wasSelectedText; +} + +void HistoryList::setFirstLoading(bool loading) { + _firstLoading = loading; + update(); +} + void HistoryList::updateSize() { int32 ph = scrollArea->height(), minadd = 0; - ySkip = ph - (hist->height + st::historyPadding); + int32 newYSkip = ph - (hist->height + st::historyPadding); if (botInfo && !botInfo->text.isEmpty()) { minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; } - if (ySkip < minadd) ySkip = minadd; + if (newYSkip < minadd) newYSkip = minadd; if (botDescHeight > 0) { int32 descH = st::msgMargin.top() + st::msgPadding.top() + st::msgNameFont->height + st::botDescSkip + botDescHeight + st::msgPadding.bottom() + st::msgMargin.bottom(); int32 descAtX = (scrollArea->width() - botDescWidth) / 2 - st::msgPadding.left(); - int32 descAtY = qMin(ySkip - descH, (scrollArea->height() - descH) / 2) + st::msgMargin.top(); + int32 descAtY = qMin(newYSkip - descH, qMax(0, (scrollArea->height() - descH) / 2)) + st::msgMargin.top(); botDescRect = QRect(descAtX, descAtY, botDescWidth + st::msgPadding.left() + st::msgPadding.right(), descH - st::msgMargin.top() - st::msgMargin.bottom()); } + int32 yAdded = newYSkip - ySkip; + ySkip = newYSkip; + int32 nh = hist->height + st::historyPadding + ySkip; if (width() != scrollArea->width() || height() != nh) { resize(scrollArea->width(), nh); @@ -1046,6 +1200,7 @@ void HistoryList::leaveEvent(QEvent *e) { HistoryList::~HistoryList() { delete _menu; + _dragAction = NoDrag; } void HistoryList::adjustCurrent(int32 y) { @@ -1194,16 +1349,19 @@ void HistoryList::onUpdateSelected() { linkTipTimer.start(1000); Qt::CursorShape cur = style::cur_default; - bool inText = false, lnkChanged = false, lnkInDesc = false; + HistoryCursorState cursorState = HistoryDefaultCursorState; + bool lnkChanged = false, lnkInDesc = false; TextLinkPtr lnk; if (point.y() < ySkip) { if (botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { + bool inText = false; botInfo->text.getState(lnk, inText, point.x() - botDescRect.left() - st::msgPadding.left(), point.y() - botDescRect.top() - st::msgPadding.top() - st::botDescSkip - st::msgNameFont->height, botDescWidth); + cursorState = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; lnkInDesc = true; } } else if (item) { - item->getState(lnk, inText, m.x(), m.y()); + item->getState(lnk, cursorState, m.x(), m.y()); } if (lnk != textlnkOver()) { lnkChanged = true; @@ -1227,15 +1385,19 @@ void HistoryList::onUpdateSelected() { } if (_dragAction == NoDrag) { + _dragCursorState = cursorState; if (lnk) { cur = style::cur_pointer; - } else if (inText && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + } else if (_dragCursorState == HistoryInTextCursorState && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { cur = style::cur_text; + } else if (_dragCursorState == HistoryInDateCursorState) { +// cur = style::cur_cross; } } else if (item) { if (item != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; + QTimer::singleShot(1, this, SLOT(onDragExec())); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -1247,7 +1409,12 @@ void HistoryList::onUpdateSelected() { uint16 second; _dragItem->getSymbol(second, afterSymbol, uponSymbol, m.x(), m.y()); if (afterSymbol && _dragSelType == TextSelectLetters) ++second; - _selected[_dragItem] = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); + uint32 selState = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); + _selected[_dragItem] = selState; + if (!_wasSelectedText && (selState == FullItemSel || (selState & 0xFFFF) != ((selState >> 16) & 0xFFFF))) { + _wasSelectedText = true; + setFocus(); + } updateDragSelection(0, 0, false); } else { bool selectingDown = (_dragItem->block()->y < item->block()->y) || ((_dragItem->block() == item->block()) && (_dragItem->y < item->y || (_dragItem == item && _dragStartPos.y() < m.y()))); @@ -1316,6 +1483,10 @@ void HistoryList::updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dra qSwap(_dragSelFrom, _dragSelTo); } _dragSelecting = dragSelecting; + if (!_wasSelectedText && _dragSelFrom && _dragSelTo && _dragSelecting) { + _wasSelectedText = true; + setFocus(); + } force = true; } if (!force) return; @@ -1324,9 +1495,14 @@ void HistoryList::updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dra } void HistoryList::applyDragSelection() { - if (!_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { - _selected.clear(); + applyDragSelection(&_selected); +} + +void HistoryList::applyDragSelection(SelectedItems *toItems) const { + if (!toItems->isEmpty() && toItems->cbegin().value() != FullItemSel) { + toItems->clear(); } + int32 fromy = _dragSelFrom->y + _dragSelFrom->block()->y, toy = _dragSelTo->y + _dragSelTo->block()->y + _dragSelTo->height(); if (_dragSelecting) { int32 fromblock = hist->indexOf(_dragSelFrom->block()), fromitem = _dragSelFrom->block()->indexOf(_dragSelFrom); @@ -1336,35 +1512,34 @@ void HistoryList::applyDragSelection() { HistoryBlock *block = (*hist)[fromblock]; for (int32 cnt = (fromblock < toblock) ? block->size() : (toitem + 1); fromitem < cnt; ++fromitem) { HistoryItem *item = (*block)[fromitem]; - SelectedItems::iterator i = _selected.find(item); + SelectedItems::iterator i = toItems->find(item); if (item->id > 0 && !item->serviceMsg()) { - if (i == _selected.cend()) { - if (_selected.size() >= MaxSelectedItems) break; - _selected.insert(item, FullItemSel); + if (i == toItems->cend()) { + if (toItems->size() >= MaxSelectedItems) break; + toItems->insert(item, FullItemSel); } else if (i.value() != FullItemSel) { *i = FullItemSel; } } else { - if (i != _selected.cend()) { - _selected.erase(i); + if (i != toItems->cend()) { + toItems->erase(i); } } } - if (_selected.size() >= MaxSelectedItems) break; + if (toItems->size() >= MaxSelectedItems) break; fromitem = 0; } } } else { - for (SelectedItems::iterator i = _selected.begin(); i != _selected.cend(); ) { + for (SelectedItems::iterator i = toItems->begin(); i != toItems->cend();) { int32 iy = i.key()->y + i.key()->block()->y; if (iy >= fromy && iy < toy) { - i = _selected.erase(i); + i = toItems->erase(i); } else { ++i; } } } - _dragSelFrom = _dragSelTo = 0; } void HistoryList::showLinkTip() { @@ -1449,7 +1624,7 @@ void MessageField::focusInEvent(QFocusEvent *e) { emit focused(); } -BotKeyboard::BotKeyboard() : _wasForMsgId(0), _height(0), _maxOuterHeight(0), _maximizeSize(false), _singleUse(false), +BotKeyboard::BotKeyboard() : _wasForMsgId(0), _height(0), _maxOuterHeight(0), _maximizeSize(false), _singleUse(false), _forceReply(false), _sel(-1), _down(-1), _hoverAnim(animFunc(this, &BotKeyboard::hoverStep)), _st(&st::botKbButton) { setGeometry(0, 0, _st->margin, _st->margin); _height = _st->margin; @@ -1579,12 +1754,13 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { clearSelection(); _btns.clear(); const ReplyMarkup &markup(App::replyMarkup(to->id)); + _forceReply = markup.flags & MTPDreplyKeyboardMarkup_flag_FORCE_REPLY; _maximizeSize = !(markup.flags & MTPDreplyKeyboardMarkup_flag_resize); - _singleUse = markup.flags & MTPDreplyKeyboardMarkup_flag_single_use; + _singleUse = _forceReply || (markup.flags & MTPDreplyKeyboardMarkup_flag_single_use); const ReplyMarkup::Commands &commands(markup.commands); if (!commands.isEmpty()) { - int32 i = 0, l = qMin(commands.size(), 32); + int32 i = 0, l = qMin(commands.size(), 512); _btns.reserve(l); for (; i != l; ++i) { const QList &row(commands.at(i)); @@ -1609,7 +1785,7 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { return true; } if (_wasForMsgId) { - _maximizeSize = _singleUse = false; + _maximizeSize = _singleUse = _forceReply = false; _wasForMsgId = 0; clearSelection(); _btns.clear(); @@ -1622,6 +1798,10 @@ bool BotKeyboard::hasMarkup() const { return !_btns.isEmpty(); } +bool BotKeyboard::forceReply() const { + return _forceReply; +} + bool BotKeyboard::hoverStep(float64 ms) { uint64 now = getms(); for (Animations::iterator i = _animations.begin(); i != _animations.end();) { @@ -1910,7 +2090,7 @@ void HistoryHider::forward() { } else if (_sendPath) { parent()->onSendPaths(offered->id); } else { - parent()->onForward(offered->id, _forwardSelected); + parent()->onForward(offered->id, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage); } } emit forwarded(); @@ -1966,7 +2146,7 @@ bool HistoryHider::offerPeer(PeerId peer) { } else { PeerId to = offered->id; offered = 0; - parent()->onForward(to, _forwardSelected); + parent()->onForward(to, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage); startHide(); return false; } @@ -2009,26 +2189,29 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _replyForwardPressed(false) , _replyReturn(0) , _stickersUpdateRequest(0) -, _loadingMessages(false) -, histRequestsCount(0) -, histPeer(0) -, _activeHist(0) -, histPreloading(0) -, _loadingAroundId(-1) -, _loadingAroundRequest(0) +, _peer(0) +, _showAtMsgId(0) +, _preloadRequest(0), _preloadDownRequest(0) +, _delayedShowAtMsgId(-1) +, _delayedShowAtRequest(0) +, _activeAnimMsgId(0) , _scroll(this, st::historyScroll, false) , _list(0) -, hist(0) -, _histInited(false), _histNeedUpdate(false) +, _history(0) +, _histInited(false) , _toHistoryEnd(this, st::historyToEnd) , _attachMention(this) , _send(this, lang(lng_send_button), st::btnSend) +, _unblock(this, lang(lng_unblock_button), st::btnUnblock) , _botStart(this, lang(lng_bot_start), st::btnSend) +, _unblockRequest(0) , _attachDocument(this, st::btnAttachDocument) , _attachPhoto(this, st::btnAttachPhoto) , _attachEmoji(this, st::btnAttachEmoji) , _kbShow(this, st::btnBotKbShow) , _kbHide(this, st::btnBotKbHide) +, _cmdStart(this, st::btnBotCmdStart) +, _cmdStartShown(false) , _field(this, st::taMsgField, lang(lng_message_ph)) , _recordAnim(animFunc(this, &HistoryWidget::recordStep)) , _recordingAnim(animFunc(this, &HistoryWidget::recordingStep)) @@ -2046,16 +2229,14 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _attachDrag(DragStateNone) , _attachDragDocument(this) , _attachDragPhoto(this) -, imageLoader(this) +, _imageLoader(this) , _synthedTextUpdate(false) -, serviceImageCacheSize(0) -, confirmImageId(0) -, confirmWithText(false) -, titlePeerTextWidth(0) -, hiderOffered(false) +, _serviceImageCacheSize(0) +, _confirmImageId(0) +, _confirmWithText(false) +, _titlePeerTextWidth(0) , _showAnim(animFunc(this, &HistoryWidget::showStep)) , _scrollDelta(0) -, _typingRequest(0) , _saveDraftStart(0) , _saveDraftText(false) { _scroll.setFocusPolicy(Qt::NoFocus); @@ -2066,15 +2247,17 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_toHistoryEnd, SIGNAL(clicked()), this, SLOT(onHistoryToEnd())); connect(&_replyForwardPreviewCancel, SIGNAL(clicked()), this, SLOT(onReplyForwardPreviewCancel())); connect(&_send, SIGNAL(clicked()), this, SLOT(onSend())); + connect(&_unblock, SIGNAL(clicked()), this, SLOT(onUnblock())); connect(&_botStart, SIGNAL(clicked()), this, SLOT(onBotStart())); connect(&_attachDocument, SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); connect(&_field, SIGNAL(submitted(bool)), this, SLOT(onSend(bool))); connect(&_field, SIGNAL(cancelled()), this, SLOT(onCancel())); + connect(&_field, SIGNAL(tabbed()), this, SLOT(onFieldTabbed())); connect(&_field, SIGNAL(resized()), this, SLOT(onFieldResize())); connect(&_field, SIGNAL(focused()), this, SLOT(onFieldFocused())); - connect(&imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); - connect(&imageLoader, SIGNAL(imageFailed(quint64)), this, SLOT(onPhotoFailed(quint64))); + connect(&_imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); + connect(&_imageLoader, SIGNAL(imageFailed(quint64)), this, SLOT(onPhotoFailed(quint64))); connect(&_field, SIGNAL(changed()), this, SLOT(onTextChange())); connect(&_field, SIGNAL(spacedReturnedPasted()), this, SLOT(onPreviewParse())); connect(&_field, SIGNAL(linksChanged()), this, SLOT(onPreviewCheck())); @@ -2083,7 +2266,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_emojiPan, SIGNAL(emojiSelected(EmojiPtr)), &_field, SLOT(onEmojiInsert(EmojiPtr))); connect(&_emojiPan, SIGNAL(stickerSelected(DocumentData*)), this, SLOT(onStickerSend(DocumentData*))); connect(&_emojiPan, SIGNAL(updateStickers()), this, SLOT(updateStickers())); - connect(&_typingStopTimer, SIGNAL(timeout()), this, SLOT(cancelTyping())); + connect(&_sendActionStopTimer, SIGNAL(timeout()), this, SLOT(onCancelSendAction())); connect(&_previewTimer, SIGNAL(timeout()), this, SLOT(onPreviewTimeout())); if (audioCapture()) { connect(audioCapture(), SIGNAL(onError()), this, SLOT(onRecordError())); @@ -2093,7 +2276,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _scrollTimer.setSingleShot(false); - _typingStopTimer.setSingleShot(true); + _sendActionStopTimer.setSingleShot(true); _animActiveTimer.setSingleShot(false); connect(&_animActiveTimer, SIGNAL(timeout()), this, SLOT(onAnimActiveStep())); @@ -2121,12 +2304,13 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _toHistoryEnd.installEventFilter(this); _attachMention.hide(); - connect(&_attachMention, SIGNAL(chosen(QString)), &_field, SLOT(onMentionHashtagOrBotCommandInsert(QString))); + connect(&_attachMention, SIGNAL(chosen(QString)), this, SLOT(onMentionHashtagOrBotCommandInsert(QString))); _field.installEventFilter(&_attachMention); _field.hide(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width(), _send.height() - 2 * st::sendPadding); _send.hide(); + _unblock.hide(); _botStart.hide(); _attachDocument.hide(); @@ -2134,6 +2318,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachDocument.installEventFilter(&_attachType); _attachPhoto.installEventFilter(&_attachType); @@ -2141,6 +2326,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_kbShow, SIGNAL(clicked()), this, SLOT(onKbToggle())); connect(&_kbHide, SIGNAL(clicked()), this, SLOT(onKbToggle())); + connect(&_cmdStart, SIGNAL(clicked()), this, SLOT(onCmdStart())); connect(_attachType.addButton(new IconedButton(this, st::dropdownAttachDocument, lang(lng_attach_file))), SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(_attachType.addButton(new IconedButton(this, st::dropdownAttachPhoto, lang(lng_attach_photo))), SIGNAL(clicked()), this, SLOT(onPhotoSelect())); @@ -2149,8 +2335,8 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachDragDocument.hide(); _attachDragPhoto.hide(); - connect(&_attachDragDocument, SIGNAL(dropped(QDropEvent*)), this, SLOT(onDocumentDrop(QDropEvent*))); - connect(&_attachDragPhoto, SIGNAL(dropped(QDropEvent*)), this, SLOT(onPhotoDrop(QDropEvent*))); + connect(&_attachDragDocument, SIGNAL(dropped(const QMimeData*)), this, SLOT(onDocumentDrop(const QMimeData*))); + connect(&_attachDragPhoto, SIGNAL(dropped(const QMimeData*)), this, SLOT(onPhotoDrop(const QMimeData*))); } void HistoryWidget::start() { @@ -2159,8 +2345,17 @@ void HistoryWidget::start() { connect(App::api(), SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); } +void HistoryWidget::onMentionHashtagOrBotCommandInsert(QString str) { + if (str.at(0) == '/') { // bot command + App::sendBotCommand(str); + setFieldText(_field.getLastText().mid(_field.textCursor().position())); + } else { + _field.onMentionHashtagOrBotCommandInsert(str); + } +} + void HistoryWidget::onTextChange() { - updateTyping(); + updateSendAction(_history, SendActionTyping); if (cHasAudioCapture()) { if (_field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { @@ -2177,22 +2372,27 @@ void HistoryWidget::onTextChange() { a_recordCancel = anim::cvalue(st::recordCancel->c, st::recordCancel->c); } } + if (updateCmdStartShown()) { + updateControlsVisibility(); + resizeEvent(0); + update(); + } - if (!hist || _synthedTextUpdate) return; + if (!_history || _synthedTextUpdate) return; _saveDraftText = true; onDraftSave(true); } void HistoryWidget::onDraftSaveDelayed() { - if (!hist || _synthedTextUpdate) return; + if (!_history || _synthedTextUpdate) return; if (!_field.textCursor().anchor() && !_field.textCursor().position() && !_field.verticalScrollBar()->value()) { - if (!Local::hasDraftPositions(hist->peer->id)) return; + if (!Local::hasDraftPositions(_history->peer->id)) return; } onDraftSave(true); } void HistoryWidget::onDraftSave(bool delayed) { - if (!hist) return; + if (!_history) return; if (delayed) { uint64 ms = getms(); if (!_saveDraftStart) { @@ -2206,32 +2406,65 @@ void HistoryWidget::onDraftSave(bool delayed) { } void HistoryWidget::writeDraft(MsgId *replyTo, const QString *text, const MessageCursor *cursor, bool *previewCancelled) { - bool save = hist && (_saveDraftStart > 0); + bool save = _history && (_saveDraftStart > 0); _saveDraftStart = 0; _saveDraftTimer.stop(); if (_saveDraftText) { - if (save) Local::writeDraft(hist->peer->id, Local::MessageDraft(replyTo ? (*replyTo) : _replyToId, text ? (*text) : _field.getLastText(), previewCancelled ? (*previewCancelled) : _previewCancelled)); + if (save) Local::writeDraft(_history->peer->id, Local::MessageDraft(replyTo ? (*replyTo) : _replyToId, text ? (*text) : _field.getLastText(), previewCancelled ? (*previewCancelled) : _previewCancelled)); _saveDraftText = false; } - if (save) Local::writeDraftPositions(hist->peer->id, cursor ? (*cursor) : MessageCursor(_field)); + if (save) Local::writeDraftPositions(_history->peer->id, cursor ? (*cursor) : MessageCursor(_field)); } -void HistoryWidget::cancelTyping() { - if (_typingRequest) { - MTP::cancel(_typingRequest); - _typingRequest = 0; +void HistoryWidget::cancelSendAction(History *history, SendActionType type) { + QMap, mtpRequestId>::iterator i = _sendActionRequests.find(qMakePair(history, type)); + if (i != _sendActionRequests.cend()) { + MTP::cancel(i.value()); + _sendActionRequests.erase(i); } } -void HistoryWidget::updateTyping(bool typing) { - uint64 ms = getms(true) + 10000; - if (_synthedTextUpdate || !hist || (typing && (hist->myTyping + 5000 > ms)) || (!typing && (hist->myTyping + 5000 <= ms))) return; +void HistoryWidget::onCancelSendAction() { + cancelSendAction(_history, SendActionTyping); +} - hist->myTyping = typing ? ms : 0; - cancelTyping(); - if (typing) { - _typingRequest = MTP::send(MTPmessages_SetTyping(histPeer->input, typing ? MTP_sendMessageTypingAction() : MTP_sendMessageCancelAction()), rpcDone(&HistoryWidget::typingDone)); - _typingStopTimer.start(5000); +void HistoryWidget::updateSendAction(History *history, SendActionType type, int32 progress) { + if (!history) return; + if (type == SendActionTyping && _synthedTextUpdate) return; + + bool doing = (progress >= 0); + + uint64 ms = getms(true) + 10000; + QMap::iterator i = history->mySendActions.find(type); + if (doing && i != history->mySendActions.cend() && i.value() + 5000 > ms) return; + if (!doing && (i == history->mySendActions.cend() || i.value() + 5000 <= ms)) return; + + if (doing) { + if (i == history->mySendActions.cend()) { + history->mySendActions.insert(type, ms); + } else { + i.value() = ms; + } + } else if (i != history->mySendActions.cend()) { + history->mySendActions.erase(i); + } + + cancelSendAction(history, type); + if (doing) { + MTPsendMessageAction action; + switch (type) { + case SendActionTyping: action = MTP_sendMessageTypingAction(); break; + case SendActionRecordVideo: action = MTP_sendMessageRecordVideoAction(); break; + case SendActionUploadVideo: action = MTP_sendMessageUploadVideoAction(MTP_int(progress)); break; + case SendActionRecordAudio: action = MTP_sendMessageRecordAudioAction(); break; + case SendActionUploadAudio: action = MTP_sendMessageUploadAudioAction(MTP_int(progress)); break; + case SendActionUploadPhoto: action = MTP_sendMessageUploadPhotoAction(MTP_int(progress)); break; + case SendActionUploadFile: action = MTP_sendMessageUploadDocumentAction(MTP_int(progress)); break; + case SendActionChooseLocation: action = MTP_sendMessageGeoLocationAction(); break; + case SendActionChooseContact: action = MTP_sendMessageChooseContactAction(); break; + } + _sendActionRequests.insert(qMakePair(history, type), MTP::send(MTPmessages_SetTyping(history->peer->input, action), rpcDone(&HistoryWidget::sendActionDone))); + if (type == SendActionTyping) _sendActionStopTimer.start(5000); } } @@ -2243,28 +2476,19 @@ void HistoryWidget::stickersInstalled(uint64 setId) { _emojiPan.stickersInstalled(setId); } -void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) { - if (_typingRequest == req) { - _typingRequest = 0; +void HistoryWidget::sendActionDone(const MTPBool &result, mtpRequestId req) { + for (QMap, mtpRequestId>::iterator i = _sendActionRequests.begin(), e = _sendActionRequests.end(); i != e; ++i) { + if (i.value() == req) { + _sendActionRequests.erase(i); + break; + } } } void HistoryWidget::activate() { - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } - if (App::main()->selectingPeer()) { - if (hiderOffered) { - App::main()->focusPeerSelect(); - return; - } else { - App::main()->dialogsActivate(); - return; - } - } + if (_history) updateListSize(0, true); if (_list) { - if (_selCount || _recording || !_botStart.isHidden()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart() || isBlocked()) { _list->setFocus(); } else { _field.setFocus(); @@ -2277,10 +2501,12 @@ void HistoryWidget::onRecordError() { } void HistoryWidget::onRecordDone(QByteArray result, qint32 samples) { + if (!_peer) return; + App::wnd()->activateWindow(); int32 duration = samples / AudioVoiceMsgFrequency; - imageLoader.append(result, duration, histPeer->id, _replyToId, ToPrepareAudio); - cancelReply(); + _imageLoader.append(result, duration, _peer->id, replyToId(), ToPrepareAudio); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::onRecordUpdate(qint16 level, qint32 samples) { @@ -2292,9 +2518,10 @@ void HistoryWidget::onRecordUpdate(qint16 level, qint32 samples) { _recordingAnim.start(); _recordingSamples = samples; if (samples < 0 || samples >= AudioVoiceMsgFrequency * AudioVoiceMsgMaxLength) { - stopRecording(samples > 0 && _inField); + stopRecording(_peer && samples > 0 && _inField); } updateField(); + updateSendAction(_history, SendActionRecordAudio); } void HistoryWidget::updateStickers() { @@ -2304,6 +2531,14 @@ void HistoryWidget::updateStickers() { _stickersUpdateRequest = MTP::send(MTPmessages_GetAllStickers(MTP_string(cStickersHash())), rpcDone(&HistoryWidget::stickersGot), rpcFail(&HistoryWidget::stickersFailed)); } +void HistoryWidget::botCommandsChanged(UserData *user) { + if (_peer && (_peer == user || _peer->chat)) { + if (_attachMention.clearFilteredCommands()) { + checkMentionDropdown(); + } + } +} + void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { cSetLastStickersUpdate(getms(true)); _stickersUpdateRequest = 0; @@ -2311,9 +2546,6 @@ void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { if (stickers.type() != mtpc_messages_allStickers) return; const MTPDmessages_allStickers &d(stickers.c_messages_allStickers()); - EmojiStickersMap map; - - const QVector &d_docs(d.vdocuments.c_vector().v); const QVector &d_sets(d.vsets.c_vector().v); QByteArray wasHash = cStickersHash(); @@ -2323,183 +2555,62 @@ void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { setsOrder.clear(); StickerSets &sets(cRefStickerSets()); - StickerSets::iterator def = sets.find(DefaultStickerSetId); - if (def == sets.cend()) { - def = sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString())); + QMap setsToRequest; + for (StickerSets::iterator i = sets.begin(), e = sets.end(); i != e; ++i) { + i->access = 0; // mark for removing } for (int32 i = 0, l = d_sets.size(); i != l; ++i) { if (d_sets.at(i).type() == mtpc_stickerSet) { const MTPDstickerSet &set(d_sets.at(i).c_stickerSet()); StickerSets::iterator i = sets.find(set.vid.v); - setsOrder.push_back(set.vid.v); + QString title = qs(set.vtitle); + if (set.vflags.v & MTPDstickerSet_flag_official) { + if (!title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { + title = lang(lng_stickers_default_set); + } + setsOrder.push_front(set.vid.v); + } else { + setsOrder.push_back(set.vid.v); + } + if (i == sets.cend()) { - i = sets.insert(set.vid.v, StickerSet(set.vid.v, set.vaccess_hash.v, qs(set.vtitle), qs(set.vshort_name))); + i = sets.insert(set.vid.v, StickerSet(set.vid.v, set.vaccess_hash.v, title, qs(set.vshort_name), set.vcount.v, set.vhash.v, set.vflags.v | MTPDstickerSet_flag_NOT_LOADED)); + if (!(i->flags & MTPDstickerSet_flag_disabled)) { + setsToRequest.insert(set.vid.v, set.vaccess_hash.v); + } } else { i->access = set.vaccess_hash.v; - i->title = qs(set.vtitle); + i->title = title; i->shortName = qs(set.vshort_name); + i->flags = set.vflags.v; + if (i->count != set.vcount.v || i->hash != set.vhash.v) { + i->count = set.vcount.v; + i->hash = set.vhash.v; + i->flags |= MTPDstickerSet_flag_NOT_LOADED; // need to request this set + if (!(i->flags & MTPDstickerSet_flag_disabled)) { + setsToRequest.insert(set.vid.v, set.vaccess_hash.v); + } + } } } } - - StickerSets::iterator custom = sets.find(CustomStickerSetId); - - bool added = false, removed = false; - QSet found; - QMap wasCount; - for (int32 i = 0, l = d_docs.size(); i != l; ++i) { - DocumentData *doc = App::feedDocument(d_docs.at(i)); - if (!doc || !doc->sticker) continue; - - switch (doc->sticker->set.type()) { - case mtpc_inputStickerSetEmpty: { // default set - great minds - if (!wasCount.contains(DefaultStickerSetId)) wasCount.insert(DefaultStickerSetId, def->stickers.size()); - if (def->stickers.indexOf(doc) < 0) { - def->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } break; - case mtpc_inputStickerSetID: { - StickerSets::iterator it = sets.find(doc->sticker->set.c_inputStickerSetID().vid.v); - if (it == sets.cend()) { - LOG(("Sticker Set not found by ID: %1").arg(doc->sticker->set.c_inputStickerSetID().vid.v)); - } else { - if (!wasCount.contains(it->id)) wasCount.insert(it->id, it->stickers.size()); - if (it->stickers.indexOf(doc) < 0) { - it->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } - } break; - case mtpc_inputStickerSetShortName: { - QString name = qs(doc->sticker->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); - StickerSets::iterator it = sets.begin(); - for (; it != sets.cend(); ++it) { - if (it->shortName.toLower().trimmed() == name) { - break; - } - } - if (it == sets.cend()) { - LOG(("Sticker Set not found by name: %1").arg(name)); - } else { - if (!wasCount.contains(it->id)) wasCount.insert(it->id, it->stickers.size()); - if (it->stickers.indexOf(doc) < 0) { - it->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } - } break; - } - if (custom != sets.cend()) { - int32 index = custom->stickers.indexOf(doc); - if (index >= 0) { - custom->stickers.removeAt(index); - removed = true; - } - } - } - if (custom != sets.cend() && custom->stickers.isEmpty()) { - sets.erase(custom); - custom = sets.end(); - } - bool writeRecent = false; - RecentStickerPack &recent(cGetRecentStickers()); - for (StickerSets::iterator it = sets.begin(); it != sets.cend();) { - if (it->id == CustomStickerSetId || it->id == RecentStickerSetId) { - ++it; - continue; - } - QMap::const_iterator was = wasCount.constFind(it->id); - if (was == wasCount.cend()) { // no such stickers added - for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { - if (it->stickers.indexOf(i->first) >= 0) { - i = recent.erase(i); - writeRecent = true; - } else { - ++i; - } - } - setsOrder.removeOne(it->id); - it = sets.erase(it); - removed = true; + for (StickerSets::iterator i = sets.begin(), e = sets.end(); i != e;) { + if (i->id == CustomStickerSetId || i->access != 0) { + ++i; } else { - for (int32 j = 0, l = was.value(); j < l;) { - if (found.contains(it->stickers.at(j))) { - ++j; - } else { - for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { - if (it->stickers.at(j) == i->first) { - i = recent.erase(i); - writeRecent = true; - } else { - ++i; - } - } - it->stickers.removeAt(j); - --l; - removed = true; - } - } - if (it->stickers.isEmpty()) { - setsOrder.removeOne(it->id); - it = sets.erase(it); - } else { - ++it; - } - } - } - if (added || removed || cStickersHash() != wasHash) { - Local::writeStickers(); - } - if (writeRecent) { - Local::writeUserSettings(); - } - - const QVector &packs(d.vpacks.c_vector().v); - for (int32 i = 0, l = packs.size(); i != l; ++i) { - if (packs.at(i).type() == mtpc_stickerPack) { - const MTPDstickerPack &p(packs.at(i).c_stickerPack()); - QString emoticon(qs(p.vemoticon)); - EmojiPtr e = 0; - for (const QChar *ch = emoticon.constData(), *end = emoticon.constEnd(); ch != end; ++ch) { - int len = 0; - e = emojiFromText(ch, end, len); - if (e) break; - - if (ch + 1 < end && ch->isHighSurrogate() && (ch + 1)->isLowSurrogate()) ++ch; - } - if (e) { - const QVector docs(p.vdocuments.c_vector().v); - if (!docs.isEmpty()) { - for (int32 j = 0, s = docs.size(); j < s; ++j) { - DocumentData *doc = App::document(docs.at(j).v); - map.insert(doc, e); - } - } - } else { - LOG(("Sticker Error: Could not find emoji for string: %1").arg(emoticon)); - } + i = sets.erase(i); } } - cSetEmojiStickers(map); - - const DocumentItems &items(App::documentItems()); - for (EmojiStickersMap::const_iterator i = map.cbegin(), e = map.cend(); i != e; ++i) { - DocumentItems::const_iterator j = items.constFind(i.key()); - if (j != items.cend()) { - for (HistoryItemsMap::const_iterator k = j->cbegin(), end = j->cend(); k != end; ++k) { - k.key()->updateStickerEmoji(); - } + if (!setsToRequest.isEmpty()) { + for (QMap::const_iterator i = setsToRequest.cbegin(), e = setsToRequest.cend(); i != e; ++i) { + App::api()->scheduleStickerSetRequest(i.key(), i.value()); } + App::api()->requestStickerSets(); } + Local::writeStickers(); + if (App::main()) emit App::main()->stickersUpdated(); } @@ -2513,14 +2624,6 @@ bool HistoryWidget::stickersFailed(const RPCError &error) { return true; } -void HistoryWidget::clearLoadingAround() { - _loadingAroundId = -1; - if (_loadingAroundRequest) { - MTP::cancel(_loadingAroundRequest); - _loadingAroundRequest = 0; - } -} - void HistoryWidget::clearReplyReturns() { _replyReturns.clear(); _replyReturn = 0; @@ -2538,7 +2641,8 @@ QList HistoryWidget::replyReturns() { } void HistoryWidget::setReplyReturns(PeerId peer, const QList &replyReturns) { - if (!histPeer || histPeer->id != peer) return; + if (!_peer || _peer->id != peer) return; + _replyReturns = replyReturns; _replyReturn = _replyReturns.isEmpty() ? 0 : App::histItemById(_replyReturns.back()); while (!_replyReturns.isEmpty() && !_replyReturn) { @@ -2562,13 +2666,14 @@ bool HistoryWidget::kbWasHidden() { } void HistoryWidget::setKbWasHidden() { - if (_kbWasHidden || !_keyboard.hasMarkup()) return; + if (_kbWasHidden || (!_keyboard.hasMarkup() && !_keyboard.forceReply())) return; _kbWasHidden = true; if (!_showAnim.animating()) { _kbScroll.hide(); _attachEmoji.show(); _kbHide.hide(); + _cmdStart.hide(); _kbShow.show(); } _field.setMaxHeight(st::maxFieldHeight); @@ -2581,73 +2686,78 @@ void HistoryWidget::setKbWasHidden() { update(); } -void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool leaveActive) { - if (App::main()->selectingPeer() && !force) { - hiderOffered = true; - App::main()->offerPeer(peer); - return; +void HistoryWidget::fastShowAtEnd(History *h) { + h->getReadyFor(ShowAtTheEndMsgId); + + if (_history != h) return; + + clearAllLoadRequests(); + + _showAtMsgId = ShowAtTheEndMsgId; + _histInited = false; + + if (h->isReadyFor(_showAtMsgId)) { + historyLoaded(); + } else { + firstLoadMessages(); + doneShow(); } - if (hist) { - if (histPeer->id == peer) { - if (msgId != hist->activeMsgId) { - bool canShowNow = hist->canShowAround(msgId); - if (!force && !canShowNow) { - if (_loadingAroundId != msgId) { - clearLoadingAround(); - _loadingAroundId = msgId; - loadMessagesAround(); - } - return; - } - hist->loadAround(msgId); - if (!canShowNow) { - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - } +} + +void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { + if (_history) { + if (_peer->id == peerId) { + _history->lastWidth = 0; + + bool canShowNow = _history->isReadyFor(showAtMsgId, true); + if (!canShowNow) { + delayedShowAt(showAtMsgId); + return; } - if (_replyReturn && _replyReturn->id == msgId) calcNextReplyReturn(); - if (hist->unreadBar) hist->unreadBar->destroy(); - checkUnreadLoaded(); + clearDelayedShowAt(); + if (_replyReturn && _replyReturn->id == showAtMsgId) { + calcNextReplyReturn(); + } - clearLoadingAround(); - emit peerShown(histPeer); - return App::wnd()->setInnerFocus(); + _showAtMsgId = showAtMsgId; + _histInited = false; + + historyLoaded(); + + emit peerShown(_peer); + App::main()->topBar()->update(); + update(); + return; } - updateTyping(false); + if (_history->mySendActions.contains(SendActionTyping)) updateSendAction(_history, SendActionTyping, -1); } + stopGif(); - clearLoadingAround(); clearReplyReturns(); - if (_list) { - if (!histPreload.isEmpty()) { - _list->messagesReceived(histPreload); - updateBotKeyboard(); - histPreload.clear(); - } - if (!histPreloadDown.isEmpty()) { - _list->messagesReceivedDown(histPreloadDown); - histPreloadDown.clear(); - } - } - if (hist) { - hist->draft = _field.getLastText(); - hist->draftCursor.fillFrom(_field); - hist->draftToId = _replyToId; - hist->draftPreviewCancelled = _previewCancelled; - writeDraft(&hist->draftToId, &hist->draft, &hist->draftCursor, &hist->draftPreviewCancelled); + clearAllLoadRequests(); - if (hist->readyForWork() && _scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { - hist->lastWidth = _list->width(); + if (_history) { + _history->draft = _field.getLastText(); + _history->draftCursor.fillFrom(_field); + _history->draftToId = _replyToId; + _history->draftPreviewCancelled = _previewCancelled; + + writeDraft(&_history->draftToId, &_history->draft, &_history->draftCursor, &_history->draftPreviewCancelled); + + if (_scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { + _history->lastWidth = _list->width(); + _history->lastShowAtMsgId = _showAtMsgId; } else { - hist->lastWidth = 0; + _history->lastWidth = 0; + _history->lastShowAtMsgId = ShowAtUnreadMsgId; } - hist->lastScrollTop = _scroll.scrollTop(); - if (hist->unreadBar) hist->unreadBar->destroy(); + _history->lastScrollTop = _scroll.scrollTop(); + if (_history->unreadBar) { + _history->unreadBar->destroy(); + } + _history = 0; } if (_replyToId) { @@ -2665,35 +2775,18 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l _list = 0; updateTopBarSelection(); - if (_activeHist && _activeHist->peer->id != peer && (!leaveActive || _activeHist != hist)) { - if (!_activeHist->peer->chat && _activeHist->peer->asUser()->botInfo) { - _activeHist->peer->asUser()->botInfo->startToken = QString(); - } + _showAtMsgId = showAtMsgId; + _histInited = false; + if (_history) { + App::main()->dlgUpdated(_history); } - if (leaveActive && hist) { - _activeHist = hist; - } else { - if (!leaveActive) { - _activeHist = 0; - } - if (hist) { - App::main()->dlgUpdated(hist); - if (!hist->peer->chat && hist->peer->asUser()->botInfo) { - hist->peer->asUser()->botInfo->startToken = QString(); - } - } - } - histPeer = peer ? App::peer(peer) : 0; - titlePeerText = QString(); - titlePeerTextWidth = 0; - histRequestsCount = 0; - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - hist = 0; - _histInited = _histNeedUpdate = false; + + _peer = peerId ? App::peer(peerId) : 0; + _unblockRequest = 0; + + _titlePeerText = QString(); + _titlePeerTextWidth = 0; + noSelectingScroll(); _selCount = 0; App::main()->topBar()->showSelected(0); @@ -2705,51 +2798,57 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l App::contextItem(0); App::mousedItem(0); - if (peer) { - App::forgetMedia(); - serviceImageCacheSize = imageCacheSize(); - MTP::clearLoaderPriorities(); - histInputPeer = histPeer->input; - if (histInputPeer.type() == mtpc_inputPeerEmpty) { // maybe should load user - } - Histories::iterator i = App::histories().find(peer); - if (i == App::histories().end()) { - hist = new History(peer); - i = App::histories().insert(peer, hist); - } else { - hist = i.value(); - } - if (hist->readyForWork()) { - _scroll.show(); - } - if (hist) { - App::main()->dlgUpdated(hist); - } - _list = new HistoryList(this, &_scroll, hist); - hist->loadAround(msgId); + _kbWasHidden = false; + if (_peer) { + App::forgetMedia(); + _serviceImageCacheSize = imageCacheSize(); + MTP::clearLoaderPriorities(); + + if (_peer->input.type() == mtpc_inputPeerEmpty) { // maybe should load user + } + _history = App::history(_peer->id); + + if (_showAtMsgId == ShowAtUnreadMsgId) { + if (_history->lastWidth) { + _showAtMsgId = _history->lastShowAtMsgId; + } + } else { + _history->lastWidth = 0; + } + + _list = new HistoryList(this, &_scroll, _history); _list->hide(); + _scroll.hide(); _scroll.setWidget(_list); _list->show(); - checkUnreadLoaded(); + if (_history->lastWidth || _history->isReadyFor(_showAtMsgId, true)) { + historyLoaded(); + } else { + firstLoadMessages(); + doneShow(); + } + if (_history) { + App::main()->dlgUpdated(_history); + } - App::main()->peerUpdated(histPeer); + App::main()->peerUpdated(_peer); - if (hist->draftToId > 0 || !hist->draft.isEmpty()) { - setFieldText(hist->draft); + if (_history->draftToId > 0 || !_history->draft.isEmpty()) { + setFieldText(_history->draft); _field.setFocus(); - hist->draftCursor.applyTo(_field, &_synthedTextUpdate); - _replyToId = App::main()->hasForwardingItems() ? 0 : hist->draftToId; - if (hist->draftPreviewCancelled) { + _history->draftCursor.applyTo(_field, &_synthedTextUpdate); + _replyToId = App::main()->hasForwardingItems() ? 0 : _history->draftToId; + if (_history->draftPreviewCancelled) { _previewCancelled = true; } } else { - Local::MessageDraft draft = Local::readDraft(hist->peer->id); + Local::MessageDraft draft = Local::readDraft(_peer->id); setFieldText(draft.text); _field.setFocus(); if (!draft.text.isEmpty()) { - MessageCursor cur = Local::readDraftPositions(hist->peer->id); + MessageCursor cur = Local::readDraftPositions(_peer->id); cur.applyTo(_field, &_synthedTextUpdate); } _replyToId = App::main()->hasForwardingItems() ? 0 : draft.replyTo; @@ -2769,47 +2868,36 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l connect(&_scroll, SIGNAL(geometryChanged()), _list, SLOT(onParentGeometryChanged())); connect(&_scroll, SIGNAL(scrolled()), _list, SLOT(onUpdateSelected())); } else { - updateControlsVisibility(); + doneShow(); } - _kbWasHidden = false; - updateBotKeyboard(); - - emit peerShown(histPeer); + emit peerShown(_peer); App::main()->topBar()->update(); update(); } -void HistoryWidget::checkUnreadLoaded(bool checkOnlyShow) { - if (!hist) return; - if (hist->readyForWork()) { - if (checkOnlyShow && !_scroll.isHidden()) return; - if (!_showAnim.animating()) { - if (_scroll.isHidden()) { - _scroll.show(); - if (!_field.isHidden()) update(); - } - } - updateBotKeyboard(); - } else if (checkOnlyShow) { - return; - } - updateListSize(0, true); - if (!_showAnim.animating()) updateControlsVisibility(); - if (hist->readyForWork()) { - if (!_scroll.isHidden() && !_list->isHidden()) { - onListScroll(); - } - } else { - loadMessages(); +void HistoryWidget::clearDelayedShowAt() { + _delayedShowAtMsgId = -1; + if (_delayedShowAtRequest) { + MTP::cancel(_delayedShowAtRequest); + _delayedShowAtRequest = 0; } } +void HistoryWidget::clearAllLoadRequests() { + clearDelayedShowAt(); + if (_firstLoadRequest) MTP::cancel(_firstLoadRequest); + if (_preloadRequest) MTP::cancel(_preloadRequest); + if (_preloadDownRequest) MTP::cancel(_preloadDownRequest); + _preloadRequest = _preloadDownRequest = _firstLoadRequest = 0; +} + void HistoryWidget::updateControlsVisibility() { - if (!hist || _showAnim.animating()) { + if (!_history || _showAnim.animating()) { _scroll.hide(); _kbScroll.hide(); _send.hide(); + _unblock.hide(); _botStart.hide(); _attachMention.hide(); _field.hide(); @@ -2820,174 +2908,185 @@ void HistoryWidget::updateControlsVisibility() { _toHistoryEnd.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachType.hide(); _emojiPan.hide(); return; } updateToEndVisibility(); - if (hist->readyForWork()) { - if (!histPeer->chat || !histPeer->asChat()->forbidden) { - checkMentionDropdown(); - bool botStart = !histPeer->chat && histPeer->asUser()->botInfo && (!histPeer->asUser()->botInfo->startToken.isEmpty() || (hist->isEmpty() && !hist->lastMsg)); - if (botStart) { - if (_botStart.isHidden()) { - _botStart.clearState(); - _botStart.show(); - _kbShown = false; - } + if (_firstLoadRequest) { + _scroll.hide(); + } else { + _scroll.show(); + } + if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { + checkMentionDropdown(); + if (isBlocked()) { + _botStart.hide(); + if (_unblock.isHidden()) { + _unblock.clearState(); + _unblock.show(); + _kbShown = false; + } + _send.hide(); + _field.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _kbScroll.hide(); + _replyForwardPreviewCancel.hide(); + } else if (isBotStart()) { + _unblock.hide(); + if (_botStart.isHidden()) { + _botStart.clearState(); + _botStart.show(); + _kbShown = false; + } + _send.hide(); + _field.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _kbScroll.hide(); + _replyForwardPreviewCancel.hide(); + } else { + _unblock.hide(); + _botStart.hide(); + if (cHasAudioCapture() && _field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { _send.hide(); + setMouseTracking(true); + mouseMoveEvent(0); + } else { + _send.show(); + setMouseTracking(false); + _recordAnim.stop(); + _inRecord = _inField = false; + a_recordOver = anim::fvalue(0, 0); + } + if (_recording) { _field.hide(); _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); - _kbScroll.hide(); - _replyForwardPreviewCancel.hide(); - } else { - _botStart.hide(); - if (cHasAudioCapture() && _field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { - _send.hide(); - setMouseTracking(true); - mouseMoveEvent(0); + if (_kbShown) { + _kbScroll.show(); } else { - _send.show(); - setMouseTracking(false); - _recordAnim.stop(); - _inRecord = _inField = false; - a_recordOver = anim::fvalue(0, 0); + _kbScroll.hide(); } - if (_recording) { - _field.hide(); + } else { + _field.show(); + if (_kbShown) { + _kbScroll.show(); _attachEmoji.hide(); + _kbHide.show(); _kbShow.hide(); + _cmdStart.hide(); + } else if (_kbReplyTo) { + _kbScroll.hide(); + _attachEmoji.show(); _kbHide.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - if (_kbShown) { - _kbScroll.show(); - } else { - _kbScroll.hide(); - } + _kbShow.hide(); + _cmdStart.hide(); } else { - _field.show(); - if (_kbShown) { - _kbScroll.show(); - _attachEmoji.hide(); - _kbHide.show(); - _kbShow.hide(); + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); + if (_keyboard.hasMarkup()) { + _kbShow.show(); + _cmdStart.hide(); } else { - _kbScroll.hide(); - _attachEmoji.show(); - _kbHide.hide(); - if (_keyboard.hasMarkup()) { - _kbShow.show(); + _kbShow.hide(); + if (_cmdStartShown) { + _cmdStart.show(); } else { - _kbShow.hide(); + _cmdStart.hide(); } } - if (cDefaultAttach() == dbidaPhoto) { - _attachDocument.hide(); - _attachPhoto.show(); - } else { - _attachDocument.show(); - _attachPhoto.hide(); - } } - if (_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { - if (_replyForwardPreviewCancel.isHidden()) { - _replyForwardPreviewCancel.show(); - resizeEvent(0); - update(); - } + if (cDefaultAttach() == dbidaPhoto) { + _attachDocument.hide(); + _attachPhoto.show(); } else { - _replyForwardPreviewCancel.hide(); + _attachDocument.show(); + _attachPhoto.hide(); } } - } else { - _attachMention.hide(); - _send.hide(); - _botStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - _attachEmoji.hide(); - _kbShow.hide(); - _kbHide.hide(); - _attachType.hide(); - _emojiPan.hide(); - if (!_field.isHidden()) { - _field.hide(); - resizeEvent(0); - update(); + if (_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { + if (_replyForwardPreviewCancel.isHidden()) { + _replyForwardPreviewCancel.show(); + resizeEvent(0); + update(); + } + } else { + _replyForwardPreviewCancel.hide(); } } - - if (hist->unreadCount && App::wnd()->historyIsActive()) { - historyWasRead(); - } } else { - loadMessages(); - if (!hist->readyForWork()) { - _scroll.hide(); - _kbScroll.hide(); - _attachMention.hide(); - _send.hide(); - _botStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - _attachEmoji.hide(); - _kbShow.hide(); - _kbHide.hide(); - _attachType.hide(); - _emojiPan.hide(); - _replyForwardPreviewCancel.hide(); - if (!_field.isHidden()) { - _field.hide(); - update(); - } + _attachMention.hide(); + _send.hide(); + _unblock.hide(); + _botStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachType.hide(); + _emojiPan.hide(); + if (!_field.isHidden()) { + _field.hide(); + resizeEvent(0); + update(); } } } void HistoryWidget::newUnreadMsg(History *history, HistoryItem *item) { if (App::wnd()->historyIsActive()) { - if (hist == history && hist->readyForWork()) { + if (_history == history) { historyWasRead(); if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); } } else { - if (hist != history) { - App::wnd()->notifySchedule(history, item); - } + App::wnd()->notifySchedule(history, item); history->setUnreadCount(history->unreadCount + 1); } } else { - if (hist == history && hist->readyForWork()) { + if (_history == history) { if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); } } App::wnd()->notifySchedule(history, item); history->setUnreadCount(history->unreadCount + 1); - history->lastWidth = 0; } } void HistoryWidget::historyToDown(History *history) { history->lastScrollTop = History::ScrollMax; - if (history == hist) { + if (history == _history) { _scroll.scrollToY(_scroll.scrollTopMax()); } } void HistoryWidget::historyWasRead(bool force) { - App::main()->readServerHistory(hist, force); + App::main()->readServerHistory(_history, force); } void HistoryWidget::historyCleared(History *history) { - if (history == hist) { + if (history == _history) { _list->dragActionCancel(); } } @@ -2996,25 +3095,25 @@ bool HistoryWidget::messagesFailed(const RPCError &error, mtpRequestId requestId if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; LOG(("RPC Error: %1 %2: %3").arg(error.code()).arg(error.type()).arg(error.description())); - if (histPreloading == requestId) { - histPreloading = 0; - } else if (histPreloadingDown == requestId) { - histPreloadingDown = 0; - } else if (_loadingAroundRequest == requestId) { - _loadingAroundRequest = 0; + if (_preloadRequest == requestId) { + _preloadRequest = 0; + } else if (_preloadDownRequest == requestId) { + _preloadDownRequest = 0; + } else if (_firstLoadRequest == requestId) { + _firstLoadRequest = 0; + App::main()->showDialogs(); + } else if (_delayedShowAtRequest == requestId) { + _delayedShowAtRequest = 0; } return true; } void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId) { - if (!hist) { - histPreloading = histPreloadingDown = _loadingAroundRequest = 0; - histPreload.clear(); - histPreloadDown.clear(); + if (!_history) { + _preloadRequest = _preloadDownRequest = _firstLoadRequest = _delayedShowAtRequest = 0; return; } - PeerId peer = 0; int32 count = 0; const QVector *histList = 0; switch (messages.type()) { @@ -3033,214 +3132,158 @@ void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRe count = data.vcount.v; } break; } - if (histList && !histList->isEmpty()) { - const MTPmessage &msg(histList->front()); - PeerId from_id(0), to_id(0); - switch (msg.type()) { - case mtpc_message: - from_id = App::peerFromUser(msg.c_message().vfrom_id); - to_id = App::peerFromMTP(msg.c_message().vto_id); - break; - case mtpc_messageService: - from_id = App::peerFromUser(msg.c_messageService().vfrom_id); - to_id = App::peerFromMTP(msg.c_messageService().vto_id); - break; - } - peer = (to_id == App::peerFromUser(MTP::authedId())) ? from_id : to_id; - } - - bool down = false; - if (histPreloading == requestId) { - histPreloading = 0; - } else if (histPreloadingDown == requestId) { - histPreloadingDown = 0; - down = true; - } else { - if (_loadingAroundRequest == requestId) { - _loadingAroundRequest = 0; - hist->loadAround(_loadingAroundId); - if (hist->isEmpty()) { - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - addMessagesToFront(*histList); - } - showPeer(hist->peer->id, _loadingAroundId, true); - } - return; - } - - if (peer && peer != histPeer->id) return; - - if (histList) { - if (!hist->minMsgId() || histList->isEmpty()) { - if (down) { - addMessagesToBack(*histList); - histPreloadDown.clear(); - } else { - addMessagesToFront(*histList); - histPreload.clear(); - } - } else { - if (down) { - histPreloadDown = *histList; - } else { - histPreload = *histList; - } - } - } else { - if (down) { - addMessagesToBack(QVector()); - } else { - addMessagesToFront(QVector()); - } - if (!hist->readyForWork()) { - if (hist->activeMsgId) { - hist->activeMsgId = 0; - } - if (!hist->readyForWork()) { - hist->setUnreadCount(hist->msgCount); - } - } - checkUnreadLoaded(true); - return; - } - - if (down && hist->loadedAtBottom() && histPreloadDown.size()) { - addMessagesToBack(histPreloadDown); - histPreloadDown.clear(); - loadMessagesDown(); - } else if (!down && hist->loadedAtTop() && histPreload.size()) { - addMessagesToFront(histPreload); - histPreload.clear(); - loadMessages(); - } else if ((down && histPreloadDown.size()) || (!down && histPreload.size())) { + + if (_preloadRequest == requestId) { + addMessagesToFront(*histList); + _preloadRequest = 0; onListScroll(); - } else if (down) { - loadMessagesDown(); - } else { - loadMessages(); + } else if (_preloadDownRequest == requestId) { + addMessagesToBack(*histList); + _preloadDownRequest = 0; + onListScroll(); + if (_history->loadedAtBottom() && App::wnd()) App::wnd()->checkHistoryActivation(); + } else if (_firstLoadRequest == requestId) { + addMessagesToFront(*histList); + _firstLoadRequest = 0; + if (_history->loadedAtTop()) { + if (_history->unreadCount > count) { + _history->setUnreadCount(count); + } + if (_history->isEmpty() && count > 0) { + firstLoadMessages(); + return; + } + } + + historyLoaded(); + } else if (_delayedShowAtRequest == requestId) { + _delayedShowAtRequest = 0; + _history->getReadyFor(_delayedShowAtMsgId); + if (_history->isEmpty()) { + if (_preloadRequest) MTP::cancel(_preloadRequest); + if (_preloadDownRequest) MTP::cancel(_preloadDownRequest); + if (_firstLoadRequest) MTP::cancel(_firstLoadRequest); + _preloadRequest = _preloadDownRequest = 0; + _firstLoadRequest = -1; // hack - don't updateListSize yet + addMessagesToFront(*histList); + _firstLoadRequest = 0; + if (_history->loadedAtTop()) { + if (_history->unreadCount > count) { + _history->setUnreadCount(count); + } + if (_history->isEmpty() && count > 0) { + firstLoadMessages(); + return; + } + } + } + if (_replyReturn && _replyReturn->id == _delayedShowAtMsgId) { + calcNextReplyReturn(); + } + + _showAtMsgId = _delayedShowAtMsgId; + _histInited = false; + + historyLoaded(); } } -void HistoryWidget::windowShown() { - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); +void HistoryWidget::historyLoaded() { + countHistoryShowFrom(); + if (_history->unreadBar) { + _history->unreadBar->destroy(); } + doneShow(); +} + +void HistoryWidget::windowShown() { resizeEvent(0); } bool HistoryWidget::isActive() const { - return !hist || hist->loadedAtBottom(); + if (!_history) return true; + if (_firstLoadRequest || _showAnim.animating()) return false; + if (_history->loadedAtBottom()) return true; + if (_history->showFrom && !_history->showFrom->detached() && _history->unreadBar) return true; + return false; +} + +void HistoryWidget::firstLoadMessages() { + if (!_history || _firstLoadRequest) return; + + int32 from = 0, offset = 0, loadCount = MessagesPerPage; + if (_showAtMsgId == ShowAtUnreadMsgId) { + if (_history->unreadCount > loadCount) { + _history->getReadyFor(_showAtMsgId); + offset = _history->unreadCount - loadCount / 2; + } else { + _history->getReadyFor(ShowAtTheEndMsgId); + } + } else if (_showAtMsgId == ShowAtTheEndMsgId) { + _history->getReadyFor(_showAtMsgId); + loadCount = MessagesFirstLoad; + } else if (_showAtMsgId > 0) { + _history->getReadyFor(_showAtMsgId); + offset = -loadCount / 2; + from = _showAtMsgId; + } + _firstLoadRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(from), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::loadMessages() { - if (!hist || _loadingMessages) return; - if (hist->loadedAtTop()) { - if (!hist->readyForWork()) { - if (hist->activeMsgId) { - hist->activeMsgId = 0; - } - if (!hist->readyForWork()) { - hist->setUnreadCount(hist->msgCount); - } - } - checkUnreadLoaded(true); - return; - } + if (!_history || _history->loadedAtTop() || _preloadRequest) return; - _loadingMessages = true; - if (histPreload.size()) { - bool loaded = hist->readyForWork(); - addMessagesToFront(histPreload); - histPreload.clear(); - checkUnreadLoaded(true); - if (!loaded && hist->readyForWork()) { - _loadingMessages = false; - return; - } - } - if (!histPreloading && (!hist->readyForWork() || _scroll.scrollTop() < PreloadHeightsCount * _scroll.height())) { - MsgId min = hist->minMsgId(); - int32 offset = 0, loadCount = min ? MessagesPerPage : MessagesFirstLoad; - if (!min && hist->activeMsgId) { - min = hist->activeMsgId; - offset = -loadCount / 2; - } - histPreloading = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(min), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); - ++histRequestsCount; - if (!hist->readyForWork()) update(); - } else { - checkUnreadLoaded(true); - } - _loadingMessages = false; + MsgId min = _history->minMsgId(); + int32 offset = 0, loadCount = min ? MessagesPerPage : MessagesFirstLoad; + _preloadRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(min), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::loadMessagesDown() { - if (!hist) return; - if (hist->loadedAtBottom()) { - return; - } + if (!_history || _history->loadedAtBottom() || _preloadDownRequest) return; - int32 dh = 0; - if (histPreloadDown.size()) { - bool loaded = hist->readyForWork(); - addMessagesToBack(histPreloadDown); - histPreloadDown.clear(); - checkUnreadLoaded(true); - if (!loaded && hist->readyForWork()) { - return; - } - } - if (!histPreloadingDown && hist->readyForWork() && (_scroll.scrollTop() + PreloadHeightsCount * _scroll.height() > _scroll.scrollTopMax())) { - MsgId max = hist->maxMsgId(); - if (max) { - int32 loadCount = MessagesPerPage, offset = -loadCount; - histPreloadingDown = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(max + 1), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); - ++histRequestsCount; - if (!hist->readyForWork()) update(); - } - } else { - checkUnreadLoaded(true); - } + MsgId max = _history->maxMsgId(); + if (!max) return; + + int32 loadCount = MessagesPerPage, offset = -loadCount - 1; + _preloadDownRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(max + 1), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } -void HistoryWidget::loadMessagesAround() { - if (!hist || _loadingAroundRequest || _loadingAroundId < 0) return; +void HistoryWidget::delayedShowAt(MsgId showAtMsgId) { + if (!_history || (_delayedShowAtRequest && _delayedShowAtMsgId == showAtMsgId)) return; - int32 offset = 0, loadCount = MessagesPerPage; - if (_loadingAroundId) { + clearDelayedShowAt(); + _delayedShowAtMsgId = showAtMsgId; + + int32 from = _delayedShowAtMsgId, offset = 0, loadCount = MessagesPerPage; + if (_delayedShowAtMsgId == ShowAtUnreadMsgId) { + offset = qMax(_history->unreadCount - loadCount / 2, 0); + from = 0; + } else if (_delayedShowAtMsgId == ShowAtTheEndMsgId) { + loadCount = MessagesFirstLoad; + from = 0; + } else if (_delayedShowAtMsgId > 0) { offset = -loadCount / 2; } - _loadingAroundRequest = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(_loadingAroundId), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); + _delayedShowAtRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(from), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::onListScroll() { App::checkImageCacheSize(); - - if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || _showAnim.animating() || !App::wnd()->windowHandle()->isVisible()) && hist->readyForWork())) { - checkUnreadLoaded(true); - return; - } + if (_firstLoadRequest || _scroll.isHidden()) return; updateToEndVisibility(); int st = _scroll.scrollTop(), stm = _scroll.scrollTopMax(), sh = _scroll.height(); - if (hist->readyForWork() && (st + PreloadHeightsCount * sh > stm)) { + if (st + PreloadHeightsCount * sh > stm) { loadMessagesDown(); } - if (!hist->readyForWork() || st < PreloadHeightsCount * sh) { + if (st < PreloadHeightsCount * sh) { loadMessages(); - } else { - checkUnreadLoaded(true); } while (_replyReturn) { - bool below = (_replyReturn->detached() && !hist->isEmpty() && _replyReturn->id < hist->back()->back()->id); + bool below = (_replyReturn->detached() && !_history->isEmpty() && _replyReturn->id < _history->back()->back()->id); if (!below && !_replyReturn->detached()) below = (st >= stm) || (_replyReturn->y + _replyReturn->block()->y < st + sh / 2); if (below) { calcNextReplyReturn(); @@ -3267,22 +3310,23 @@ QString HistoryWidget::prepareMessage(QString result) { void HistoryWidget::onHistoryToEnd() { if (_replyReturn) { - showPeer(histPeer->id, _replyReturn->id); - } else if (hist) { - showPeer(histPeer->id, 0); + showPeerHistory(_peer->id, _replyReturn->id); + } else if (_peer) { + showPeerHistory(_peer->id, ShowAtUnreadMsgId); } } void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { - if (!hist) return; + if (!_history) return; + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); QString text = prepareMessage(_field.getLastText()); if (!text.isEmpty()) { - App::main()->readServerHistory(hist, false); - hist->loadAround(0); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); WebPageId webPageId = _previewCancelled ? 0xFFFFFFFFFFFFFFFFULL : ((_previewData && _previewData->pendingTill >= 0) ? _previewData->id : 0); - App::main()->sendPreparedText(hist, text, replyTo, webPageId); + App::main()->sendPreparedText(_history, text, replyTo, webPageId); setFieldText(QString()); _saveDraftText = true; @@ -3292,99 +3336,117 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (!_attachMention.isHidden()) _attachMention.hideStart(); if (!_attachType.isHidden()) _attachType.hideStart(); if (!_emojiPan.isHidden()) _emojiPan.hideStart(); - } else if (App::main()->hasForwardingItems()) { - App::main()->readServerHistory(hist, false); - hist->loadAround(0); - App::main()->finishForwarding(hist); + } else if (App::main()->hasForwardingItems()) { + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); + App::main()->finishForwarding(_history); } - if (replyTo < 0) cancelReply(); + if (replyTo < 0) cancelReply(lastKeyboardUsed); if (_previewData && _previewData->pendingTill) previewCancel(); _field.setFocus(); + + if (!_keyboard.hasMarkup() && _keyboard.forceReply() && !_kbReplyTo) onKbToggle(); } -void HistoryWidget::onBotStart() { - if (histPeer->chat || !histPeer->asUser()->botInfo) { +void HistoryWidget::onUnblock() { + if (_unblockRequest) return; + if (!_peer || _peer->chat || _peer->asUser()->blocked != UserIsBlocked) { updateControlsVisibility(); return; } - QString token = histPeer->asUser()->botInfo->startToken; + + _unblockRequest = MTP::send(MTPcontacts_Unblock(_peer->asUser()->inputUser), rpcDone(&HistoryWidget::unblockDone, _peer), rpcFail(&HistoryWidget::unblockFail)); +} + +void HistoryWidget::unblockDone(PeerData *peer, const MTPBool &result) { + if (peer->chat) return; + _unblockRequest = 0; + peer->asUser()->blocked = UserIsNotBlocked; + emit App::main()->peerUpdated(peer); +} + +bool HistoryWidget::unblockFail(const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; +// _unblockRequest = 0; + return false; +} + +void HistoryWidget::onBotStart() { + if (!_peer || _peer->chat || !_peer->asUser()->botInfo) { + updateControlsVisibility(); + return; + } + + QString token = _peer->asUser()->botInfo->startToken; if (token.isEmpty()) { sendBotCommand(qsl("/start"), 0); } else { uint64 randomId = MTP::nonce(); - MTP::send(MTPmessages_StartBot(histPeer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, histPeer->asUser())); + MTP::send(MTPmessages_StartBot(_peer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _peer->asUser())); - histPeer->asUser()->botInfo->startToken = QString(); + _peer->asUser()->botInfo->startToken = QString(); if (_keyboard.hasMarkup()) { - if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; - if (!_kbWasHidden) _kbShown = true; + if (_keyboard.singleUse() && _keyboard.forMsgId() == _history->lastKeyboardId && _history->lastKeyboardUsed) { + _kbWasHidden = true; + } + if (!_kbWasHidden) _kbShown = _keyboard.hasMarkup(); } - updateControlsVisibility(); - resizeEvent(0); } + updateControlsVisibility(); + resizeEvent(0); } void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { if (!contact || contact->phone.isEmpty()) return; - App::main()->showPeer(peer, 0, false, true); - if (!hist) return; + App::main()->showPeerHistory(peer, ShowAtTheEndMsgId); + if (!_history) return; - shareContact(peer, contact->phone, contact->firstName, contact->lastName, _replyToId, int32(contact->id & 0xFFFFFFFF)); + shareContact(peer, contact->phone, contact->firstName, contact->lastName, replyToId(), int32(contact->id & 0xFFFFFFFF)); } void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId) { History *h = App::history(peer); - App::main()->readServerHistory(h, false); uint64 randomId = MTP::nonce(); MsgId newId = clientMsgId(); - h->loadAround(0); + App::main()->readServerHistory(h, false); + fastShowAtEnd(h); PeerData *p = App::peer(peer); int32 flags = newMessageFlags(p); // unread, out + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); + int32 sendFlags = 0; if (replyTo) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(_replyToId), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup)); - h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities)); + h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, h->sendRequestId); App::historyRegRandom(randomId, newId); App::main()->finishForwarding(h); - cancelReply(); + cancelReply(lastKeyboardUsed); } void HistoryWidget::onSendPaths(const PeerId &peer) { - App::main()->showPeer(peer, 0, false, true); - if (!hist) return; + App::main()->showPeerHistory(peer, ShowAtTheEndMsgId); + if (!_history) return; uploadMedias(cSendPaths(), ToPrepareDocument); } PeerData *HistoryWidget::peer() const { - return histPeer; + return _peer; } -PeerData *HistoryWidget::activePeer() const { - return histPeer ? histPeer : (_activeHist ? _activeHist->peer : 0); -} - -MsgId HistoryWidget::activeMsgId() const { - return (_loadingAroundId >= 0) ? _loadingAroundId : (hist ? hist->activeMsgId : (_activeHist ? _activeHist->activeMsgId : 0)); -} - -int32 HistoryWidget::lastWidth() const { - return width(); -} - -int32 HistoryWidget::lastScrollTop() const { - return _scroll.scrollTop(); +MsgId HistoryWidget::msgId() const { + return _showAtMsgId; } void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back) { @@ -3403,9 +3465,11 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo _attachMention.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _field.hide(); _replyForwardPreviewCancel.hide(); _send.hide(); + _unblock.hide(); _botStart.hide(); a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); @@ -3429,20 +3493,7 @@ bool HistoryWidget::showStep(float64 ms) { _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); App::main()->topBar()->enableShadow(); - if (hist && hist->readyForWork()) { - _scroll.show(); - if (hist->lastScrollTop == History::ScrollMax) { - _scroll.scrollToY(hist->lastScrollTop); - } - - onListScroll(); - } - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } - updateControlsVisibility(); - App::wnd()->setInnerFocus(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -3454,6 +3505,15 @@ bool HistoryWidget::showStep(float64 ms) { return res; } +void HistoryWidget::doneShow() { + updateBotKeyboard(); + updateControlsVisibility(); + updateListSize(0, true); + onListScroll(); + if (App::wnd()) App::wnd()->checkHistoryActivation(); + App::wnd()->setInnerFocus(); +} + void HistoryWidget::animStop() { if (!_showAnim.animating()) return; _showAnim.stop(); @@ -3462,7 +3522,7 @@ void HistoryWidget::animStop() { bool HistoryWidget::recordStep(float64 ms) { float64 dt = ms / st::btnSend.duration; bool res = true; - if (dt >= 1 || !_send.isHidden() || !_botStart.isHidden()) { + if (dt >= 1 || !_send.isHidden() || isBotStart() || isBlocked()) { res = false; a_recordOver.finish(); a_recordDown.finish(); @@ -3494,7 +3554,7 @@ bool HistoryWidget::recordingStep(float64 ms) { } void HistoryWidget::onPhotoSelect() { - if (!hist) return; + if (!_history) return; _attachDocument.clearState(); _attachDocument.hide(); @@ -3522,7 +3582,7 @@ void HistoryWidget::onPhotoSelect() { } void HistoryWidget::onDocumentSelect() { - if (!hist) return; + if (!_history) return; _attachPhoto.clearState(); _attachPhoto.hide(); @@ -3551,7 +3611,7 @@ void HistoryWidget::onDocumentSelect() { void HistoryWidget::dragEnterEvent(QDragEnterEvent *e) { - if (!hist) return; + if (!_history) return; _attachDrag = getDragState(e->mimeData()); updateDragAreas(); @@ -3581,7 +3641,7 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) { QPoint pos(e ? e->pos() : mapFromGlobal(QCursor::pos())); bool inRecord = _send.geometry().contains(pos); bool inField = pos.y() >= (_scroll.y() + _scroll.height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width(); - bool inReply = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _replyForwardPreviewCancel.width(), st::replyHeight).contains(pos) && (_replyToId || _kbReplyTo); + bool inReply = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _replyForwardPreviewCancel.width(), st::replyHeight).contains(pos) && replyToId(); bool startAnim = false; if (inRecord != _inRecord) { _inRecord = inRecord; @@ -3618,7 +3678,7 @@ void HistoryWidget::mouseReleaseEvent(QMouseEvent *e) { updateDragAreas(); } if (_recording && cHasAudioCapture()) { - stopRecording(_inField); + stopRecording(_peer && _inField); } } @@ -3630,6 +3690,8 @@ void HistoryWidget::stopRecording(bool send) { _recording = false; _recordingSamples = 0; + updateSendAction(_history, SendActionRecordAudio, -1); + updateControlsVisibility(); activate(); @@ -3642,36 +3704,40 @@ void HistoryWidget::stopRecording(bool send) { } void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // replyTo != 0 from ReplyKeyboardMarkup, == 0 from cmd links - if (!hist) return; + if (!_history) return; - App::main()->readServerHistory(hist, false); - hist->loadAround(0); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); + + bool lastKeyboardUsed = (_keyboard.forMsgId() == _history->lastKeyboardId) && (_keyboard.forMsgId() == replyTo); QString toSend = cmd; - UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); + UserData *bot = _peer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : _peer->asUser(); QString username = (bot && bot->botInfo) ? bot->username : QString(); - if (!replyTo && toSend.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) { + if (!replyTo && toSend.indexOf('@') < 2 && _peer->chat && !username.isEmpty() && (_peer->asChat()->botStatus == 0 || _peer->asChat()->botStatus == 2)) { toSend += '@' + username; } - int32 botStatus = histPeer->chat ? histPeer->asChat()->botStatus : -1; - App::main()->sendPreparedText(hist, toSend, replyTo ? ((histPeer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); + int32 botStatus = _peer->chat ? _peer->asChat()->botStatus : -1; + App::main()->sendPreparedText(_history, toSend, replyTo ? ((_peer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); if (replyTo) { cancelReply(); - if (_keyboard.hasMarkup() && _keyboard.singleUse() && _keyboard.forMsgId() == replyTo) { + if (_keyboard.singleUse() && _keyboard.hasMarkup() && lastKeyboardUsed) { if (_kbShown) onKbToggle(false); - hist->lastKeyboardUsed = true; + _history->lastKeyboardUsed = true; } } + + _field.setFocus(); } void HistoryWidget::insertBotCommand(const QString &cmd) { - if (!hist) return; + if (!_history) return; QString toInsert = cmd; - UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); + UserData *bot = _peer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : _peer->asUser(); QString username = (bot && bot->botInfo) ? bot->username : QString(); - if (toInsert.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) { + if (toInsert.indexOf('@') < 2 && _peer->chat && !username.isEmpty() && (_peer->asChat()->botStatus == 0 || _peer->asChat()->botStatus == 2)) { toInsert += '@' + username; } toInsert += ' '; @@ -3698,7 +3764,7 @@ bool HistoryWidget::eventFilter(QObject *obj, QEvent *e) { } DragState HistoryWidget::getDragState(const QMimeData *d) { - if (!d) return DragStateNone; + if (!d || d->hasFormat(qsl("application/x-td-forward-pressed-link"))) return DragStateNone; if (d->hasImage()) return DragStateImage; @@ -3768,35 +3834,114 @@ void HistoryWidget::updateDragAreas() { resizeEvent(0); } +bool HistoryWidget::isBotStart() const { + if (!_peer || _peer->chat || !_peer->asUser()->botInfo) return false; + return !_peer->asUser()->botInfo->startToken.isEmpty() || (_history->isEmpty() && !_history->lastMsg); +} + +bool HistoryWidget::isBlocked() const { + return _peer && !_peer->chat && _peer->asUser()->blocked == UserIsBlocked; +} + +bool HistoryWidget::updateCmdStartShown() { + bool cmdStartShown = false; + if (_history && _peer && ((_peer->chat && _peer->asChat()->botStatus > 0) || (!_peer->chat && _peer->asUser()->botInfo))) { + if (!isBotStart() && !isBlocked() && !_keyboard.hasMarkup() && !_keyboard.forceReply()) { + if (_field.getLastText().isEmpty()) { + cmdStartShown = true; + } + } + } + if (_cmdStartShown != cmdStartShown) { + _cmdStartShown = cmdStartShown; + return true; + } + return false; +} + void HistoryWidget::dropEvent(QDropEvent *e) { _attachDrag = DragStateNone; updateDragAreas(); e->acceptProposedAction(); } -void HistoryWidget::onDocumentDrop(QDropEvent *e) { - if (!hist) return; +void HistoryWidget::onPhotoDrop(const QMimeData *data) { + if (!_history) return; - QStringList files = getMediasFromMime(e->mimeData()); + if (data->hasImage()) { + QImage image = qvariant_cast(data->imageData()); + if (image.isNull()) return; + + uploadImage(image, false, data->text()); + } else { + QStringList files = getMediasFromMime(data); + if (files.isEmpty()) return; + + uploadMedias(files, ToPreparePhoto); + } +} + +void HistoryWidget::onDocumentDrop(const QMimeData *data) { + if (!_history) return; + + QStringList files = getMediasFromMime(data); if (files.isEmpty()) return; uploadMedias(files, ToPrepareDocument); } +void HistoryWidget::onFilesDrop(const QMimeData *data) { + if (data->hasImage()) { + QImage image = qvariant_cast(data->imageData()); + if (image.isNull()) return; + + uploadImage(image, false, data->text()); + } else { + QStringList files = getMediasFromMime(data); + if (files.isEmpty()) return; + + uploadMedias(files, ToPrepareAuto); + } +} + void HistoryWidget::onKbToggle(bool manual) { - if (_kbShown) { + if (_kbShown || _kbReplyTo) { _kbHide.hide(); - _kbShow.show(); + if (_kbShown) { + _kbShow.show(); + if (manual) _kbWasHidden = true; + + _kbScroll.hide(); + _kbShown = false; + + _field.setMaxHeight(st::maxFieldHeight); + + _kbReplyTo = 0; + if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) { + _replyForwardPreviewCancel.hide(); + } + } else { + if (_history) { + _history->clearLastKeyboard(); + } + updateBotKeyboard(); + } + } else if (!_keyboard.hasMarkup() && _keyboard.forceReply()) { + _kbHide.hide(); + _kbShow.hide(); + _cmdStart.show(); _kbScroll.hide(); _kbShown = false; _field.setMaxHeight(st::maxFieldHeight); - _kbReplyTo = 0; - if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) { - _replyForwardPreviewCancel.hide(); + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; + if (_kbReplyTo && !_replyToId) { + updateReplyToName(); + _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); + _replyForwardPreviewCancel.show(); } - if (manual) _kbWasHidden = true; + if (manual) _kbWasHidden = false; } else { _kbHide.show(); _kbShow.hide(); @@ -3806,7 +3951,7 @@ void HistoryWidget::onKbToggle(bool manual) { int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)); _field.setMaxHeight(st::maxFieldHeight - maxh); - _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -3823,20 +3968,9 @@ void HistoryWidget::onKbToggle(bool manual) { updateField(); } -void HistoryWidget::onPhotoDrop(QDropEvent *e) { - if (!hist) return; - - if (e->mimeData()->hasImage()) { - QImage image = qvariant_cast(e->mimeData()->imageData()); - if (image.isNull()) return; - - uploadImage(image); - } else { - QStringList files = getMediasFromMime(e->mimeData()); - if (files.isEmpty()) return; - - uploadMedias(files, ToPreparePhoto); - } +void HistoryWidget::onCmdStart() { + setFieldText(qsl("/")); + _field.moveCursor(QTextCursor::End); } void HistoryWidget::contextMenuEvent(QContextMenuEvent *e) { @@ -3876,22 +4010,22 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) return; } - if (!hist) return; + if (!_history) return; int32 increaseLeft = cWideMode() ? 0 : (st::topBarForwardPadding.right() - st::topBarForwardPadding.left()); decreaseWidth += increaseLeft; QRect rectForName(st::topBarForwardPadding.left() + increaseLeft, st::topBarForwardPadding.top(), width() - decreaseWidth - st::topBarForwardPadding.left() - st::topBarForwardPadding.right(), st::msgNameFont->height); p.setFont(st::dlgHistFont->f); - if (hist->typing.isEmpty()) { + if (_history->typing.isEmpty() && _history->sendActions.isEmpty()) { p.setPen(st::titleStatusColor->p); - p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, titlePeerText); + p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, _titlePeerText); } else { p.setPen(st::titleTypingColor->p); - hist->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height, rectForName.width()); + _history->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height, rectForName.width()); } p.setPen(st::dlgNameColor->p); - hist->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); + _history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); if (cWideMode()) { p.setOpacity(st::topBarForwardAlpha + (1 - st::topBarForwardAlpha) * over); @@ -3911,23 +4045,23 @@ void HistoryWidget::topBarShadowParams(int32 &x, float64 &o) { void HistoryWidget::topBarClick() { if (cWideMode()) { - if (hist) App::main()->showPeerProfile(histPeer); + if (_history) App::main()->showPeerProfile(_peer); } else { - App::main()->onShowDialogs(); + App::main()->showDialogs(); } } void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { - if (!hist) return; + if (!_history) return; QString text; int32 t = unixtime(); - if (histPeer->chat) { - ChatData *chat = histPeer->asChat(); - if (chat->forbidden) { + if (_peer->chat) { + ChatData *chat = _peer->asChat(); + if (chat->forbidden || chat->left) { text = lang(lng_chat_status_unaccessible); } else if (chat->participants.isEmpty()) { - text = titlePeerText.isEmpty() ? lng_chat_status_members(lt_count, chat->count < 0 ? 0 : chat->count) : titlePeerText; + text = _titlePeerText.isEmpty() ? lng_chat_status_members(lt_count, chat->count < 0 ? 0 : chat->count) : _titlePeerText; } else { int32 onlineCount = 0; bool onlyMe = true; @@ -3944,11 +4078,11 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } } } else { - text = App::onlineText(histPeer->asUser(), t); + text = App::onlineText(_peer->asUser(), t); } - if (titlePeerText != text) { - titlePeerText = text; - titlePeerTextWidth = st::dlgHistFont->m.width(titlePeerText); + if (_titlePeerText != text) { + _titlePeerText = text; + _titlePeerTextWidth = st::dlgHistFont->m.width(_titlePeerText); if (App::main()) { App::main()->topBar()->update(); } @@ -3957,11 +4091,11 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } void HistoryWidget::updateOnlineDisplayTimer() { - if (!hist) return; + if (!_history) return; int32 t = unixtime(), minIn = 86400; - if (histPeer->chat) { - ChatData *chat = histPeer->asChat(); + if (_peer->chat) { + ChatData *chat = _peer->asChat(); if (chat->participants.isEmpty()) return; for (ChatData::Participants::const_iterator i = chat->participants.cbegin(), e = chat->participants.cend(); i != e; ++i) { @@ -3971,7 +4105,7 @@ void HistoryWidget::updateOnlineDisplayTimer() { } } } else { - minIn = App::onlineWillChangeIn(histPeer->asUser(), t); + minIn = App::onlineWillChangeIn(_peer->asUser(), t); } App::main()->updateOnlineDisplayIn(minIn * 1000); } @@ -3991,10 +4125,12 @@ void HistoryWidget::onFieldResize() { _attachDocument.move(0, height() - kbh - _attachDocument.height()); _attachPhoto.move(_attachDocument.x(), _attachDocument.y()); _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); + _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); _send.move(width() - _send.width(), _attachDocument.y()); _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); + _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); _attachType.move(0, _attachDocument.y() - _attachType.height()); _emojiPan.move(width() - _emojiPan.width(), _attachEmoji.y() - _emojiPan.height()); @@ -4008,15 +4144,15 @@ void HistoryWidget::onFieldFocused() { } void HistoryWidget::checkMentionDropdown() { - if (!hist || _showAnim.animating()) return; + if (!_history || _showAnim.animating()) return; QString start; _field.getMentionHashtagBotCommandStart(start); if (!start.isEmpty()) { if (start.at(0) == '#' && cRecentWriteHashtags().isEmpty() && cRecentSearchHashtags().isEmpty()) Local::readRecentHashtags(); - if (start.at(0) == '@' && !hist->peer->chat) return; - if (start.at(0) == '/' && !hist->peer->chat && !hist->peer->asUser()->botInfo) return; - _attachMention.showFiltered(hist->peer, start); + if (start.at(0) == '@' && !_history->peer->chat) return; + if (start.at(0) == '/' && !_history->peer->chat && !_history->peer->asUser()->botInfo) return; + _attachMention.showFiltered(_history->peer, start); } else if (!_attachMention.isHidden()) { _attachMention.hideStart(); } @@ -4028,69 +4164,70 @@ void HistoryWidget::onFieldCursorChanged() { } void HistoryWidget::uploadImage(const QImage &img, bool withText, const QString &source) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmImage = img; - confirmWithText = withText; - confirmSource = source; - confirmImageId = imageLoader.append(img, histPeer->id, _replyToId, ToPreparePhoto); + _confirmImage = img; + _confirmWithText = withText; + _confirmSource = source; + _confirmImageId = _imageLoader.append(img, _peer->id, replyToId(), ToPreparePhoto); } void HistoryWidget::uploadFile(const QString &file, bool withText) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmWithText = withText; - confirmImageId = imageLoader.append(file, histPeer->id, _replyToId, ToPrepareDocument); + _confirmWithText = withText; + _confirmImageId = _imageLoader.append(file, _peer->id, replyToId(), ToPrepareDocument); } void HistoryWidget::shareContactConfirmation(const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, bool withText) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmWithText = withText; - confirmImageId = 0xFFFFFFFFFFFFFFFFL; + _confirmWithText = withText; + _confirmImageId = 0xFFFFFFFFFFFFFFFFL; App::wnd()->showLayer(new PhotoSendBox(phone, fname, lname, replyTo)); } void HistoryWidget::uploadConfirmImageUncompressed(bool ctrlShiftEnter, MsgId replyTo) { - if (!hist || !confirmImageId || confirmImage.isNull()) return; + if (!_history || !_confirmImageId || _confirmImage.isNull()) return; App::wnd()->activateWindow(); - PeerId peerId = histPeer->id; - if (confirmWithText) { + PeerId peerId = _peer->id; + if (_confirmWithText) { onSend(ctrlShiftEnter, replyTo); } - imageLoader.append(confirmImage, peerId, replyTo, ToPrepareDocument, ctrlShiftEnter); - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); - cancelReply(); + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); + _imageLoader.append(_confirmImage, peerId, replyTo, ToPrepareDocument, ctrlShiftEnter); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); + cancelReply(lastKeyboardUsed); } void HistoryWidget::uploadMedias(const QStringList &files, ToPrepareMediaType type) { - if (!hist) return; + if (!_history) return; App::wnd()->activateWindow(); - imageLoader.append(files, histPeer->id, _replyToId, type); - cancelReply(); + _imageLoader.append(files, _peer->id, replyToId(), type); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::uploadMedia(const QByteArray &fileContent, ToPrepareMediaType type, PeerId peer) { - if (!peer && !hist) return; + if (!peer && !_history) return; App::wnd()->activateWindow(); - imageLoader.append(fileContent, peer ? peer : histPeer->id, _replyToId, type); - cancelReply(); + _imageLoader.append(fileContent, peer ? peer : _peer->id, replyToId(), type); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::onPhotoReady() { - QMutexLocker lock(imageLoader.readyMutex()); - ReadyLocalMedias &list(imageLoader.readyList()); + QMutexLocker lock(_imageLoader.readyMutex()); + ReadyLocalMedias &list(_imageLoader.readyList()); for (ReadyLocalMedias::const_iterator i = list.cbegin(), e = list.cend(); i != e; ++i) { - if (i->id == confirmImageId) { + if (i->id == _confirmImageId) { PhotoSendBox *box = new PhotoSendBox(*i); connect(box, SIGNAL(confirmed()), this, SLOT(onSendConfirmed())); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onSendCancelled())); @@ -4103,13 +4240,13 @@ void HistoryWidget::onPhotoReady() { } void HistoryWidget::onSendConfirmed() { - if (!confirmSource.isEmpty()) confirmSource = QString(); + if (!_confirmSource.isEmpty()) _confirmSource = QString(); } void HistoryWidget::onSendCancelled() { - if (!confirmSource.isEmpty()) { - _field.textCursor().insertText(confirmSource); - confirmSource = QString(); + if (!_confirmSource.isEmpty()) { + _field.textCursor().insertText(_confirmSource); + _confirmSource = QString(); } } @@ -4117,28 +4254,28 @@ void HistoryWidget::onPhotoFailed(quint64 id) { } void HistoryWidget::confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo) { - if (!histPeer) return; + if (!_peer) return; - PeerId peerId = histPeer->id; - if (0xFFFFFFFFFFFFFFFFL == confirmImageId) { - if (confirmWithText) { + PeerId peerId = _peer->id; + if (0xFFFFFFFFFFFFFFFFL == _confirmImageId) { + if (_confirmWithText) { onSend(ctrlShiftEnter, replyTo); } - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } shareContact(peerId, phone, fname, lname, replyTo); } void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { - if (img.id == confirmImageId) { - if (confirmWithText) { + if (img.id == _confirmImageId) { + if (_confirmWithText) { onSend(img.ctrlShiftEnter, img.replyTo); } - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } MsgId newId = clientMsgId(); @@ -4146,47 +4283,47 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { connect(App::uploader(), SIGNAL(documentReady(MsgId, const MTPInputFile &)), this, SLOT(onDocumentUploaded(MsgId, const MTPInputFile &)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(thumbDocumentReady(MsgId, const MTPInputFile &, const MTPInputFile &)), this, SLOT(onThumbDocumentUploaded(MsgId, const MTPInputFile &, const MTPInputFile &)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioReady(MsgId, const MTPInputFile &)), this, SLOT(onAudioUploaded(MsgId, const MTPInputFile &)), Qt::UniqueConnection); -// connect(App::uploader(), SIGNAL(photoProgress(MsgId)), this, SLOT(onPhotoProgress(MsgId)), Qt::UniqueConnection); + connect(App::uploader(), SIGNAL(photoProgress(MsgId)), this, SLOT(onPhotoProgress(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(documentProgress(MsgId)), this, SLOT(onDocumentProgress(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioProgress(MsgId)), this, SLOT(onAudioProgress(MsgId)), Qt::UniqueConnection); -// connect(App::uploader(), SIGNAL(photoFailed(MsgId)), this, SLOT(onPhotoFailed(MsgId)), Qt::UniqueConnection); + connect(App::uploader(), SIGNAL(photoFailed(MsgId)), this, SLOT(onPhotoFailed(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(documentFailed(MsgId)), this, SLOT(onDocumentFailed(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioFailed(MsgId)), this, SLOT(onAudioFailed(MsgId)), Qt::UniqueConnection); App::uploader()->uploadMedia(newId, img); History *h = App::history(img.peer); - h->loadAround(0); + + fastShowAtEnd(h); + int32 flags = newMessageFlags(h->peer); // unread, out if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id; if (img.type == ToPreparePhoto) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareDocument) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareAudio) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags | MTPDmessage_flag_media_unread), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities)); } - if (hist && histPeer && img.peer == histPeer->id) { - App::main()->historyToDown(hist); + if (_peer && img.peer == _peer->id) { + App::main()->historyToDown(_history); } App::main()->dialogsToUp(); peerMessagesUpdated(img.peer); } void HistoryWidget::cancelSendImage() { - if (confirmImageId && confirmWithText) setFieldText(QString()); - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + if (_confirmImageId && _confirmWithText) setFieldText(QString()); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } void HistoryWidget::onPhotoUploaded(MsgId newId, const MTPInputFile &file) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4207,8 +4344,10 @@ namespace { } if (document->type == AnimatedDocument) { attributes.push_back(MTP_documentAttributeAnimated()); - } else if (document->type == StickerDocument && document->sticker) { - attributes.push_back(MTP_documentAttributeSticker(MTP_string(document->sticker->alt), document->sticker->set)); + } else if (document->type == StickerDocument && document->sticker()) { + attributes.push_back(MTP_documentAttributeSticker(MTP_string(document->sticker()->alt), document->sticker()->set)); + } else if (document->type == SongDocument && document->song()) { + attributes.push_back(MTP_documentAttributeAudio(MTP_int(document->song()->duration), MTP_string(document->song()->title), MTP_string(document->song()->performer))); } return MTP_vector(attributes); } @@ -4225,8 +4364,6 @@ void HistoryWidget::onDocumentUploaded(MsgId newId, const MTPInputFile &file) { document = media->document(); } if (document) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4251,8 +4388,6 @@ void HistoryWidget::onThumbDocumentUploaded(MsgId newId, const MTPInputFile &fil document = media->document(); } if (document) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4275,8 +4410,6 @@ void HistoryWidget::onAudioUploaded(MsgId newId, const MTPInputFile &file) { audio = media->audio(); } if (audio) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4290,10 +4423,22 @@ void HistoryWidget::onAudioUploaded(MsgId newId, const MTPInputFile &file) { } } +void HistoryWidget::onPhotoProgress(MsgId newId) { + if (!MTP::authedId()) return; + HistoryItem *item = App::histItemById(newId); + if (item) { + PhotoData *photo = (item->getMedia() && item->getMedia()->type() == MediaTypePhoto) ? static_cast(item->getMedia())->photo() : 0; + updateSendAction(item->history(), SendActionUploadPhoto, 0); +// msgUpdated(item->history()->peer->id, item); + } +} + void HistoryWidget::onDocumentProgress(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + DocumentData *doc = (item->getMedia() && item->getMedia()->type() == MediaTypeDocument) ? static_cast(item->getMedia())->document() : 0; + updateSendAction(item->history(), SendActionUploadFile, doc ? doc->uploadOffset : 0); msgUpdated(item->history()->peer->id, item); } } @@ -4302,14 +4447,26 @@ void HistoryWidget::onAudioProgress(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + AudioData *audio = (item->getMedia() && item->getMedia()->type() == MediaTypeAudio) ? static_cast(item->getMedia())->audio() : 0; + updateSendAction(item->history(), SendActionUploadAudio, audio ? audio->uploadOffset : 0); msgUpdated(item->history()->peer->id, item); } } +void HistoryWidget::onPhotoFailed(MsgId newId) { + if (!MTP::authedId()) return; + HistoryItem *item = App::histItemById(newId); + if (item) { + updateSendAction(item->history(), SendActionUploadPhoto, -1); +// msgUpdated(item->history()->peer->id, item); + } +} + void HistoryWidget::onDocumentFailed(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + updateSendAction(item->history(), SendActionUploadFile, -1); msgUpdated(item->history()->peer->id, item); } } @@ -4318,23 +4475,28 @@ void HistoryWidget::onAudioFailed(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + updateSendAction(item->history(), SendActionUploadAudio, -1); msgUpdated(item->history()->peer->id, item); } } void HistoryWidget::peerMessagesUpdated(PeerId peer) { - if (histPeer && _list && peer == histPeer->id) { + if (_peer && _list && peer == _peer->id) { updateListSize(); updateBotKeyboard(); + if (!_scroll.isHidden() && !isBlocked() && _botStart.isHidden() == isBotStart()) { + updateControlsVisibility(); + resizeEvent(0); + } } } void HistoryWidget::peerMessagesUpdated() { - if (_list) updateListSize(); + if (_list) peerMessagesUpdated(_peer->id); } void HistoryWidget::msgUpdated(PeerId peer, const HistoryItem *msg) { - if (histPeer && _list && peer == histPeer->id) { + if (_peer && _list && peer == _peer->id) { _list->updateMsg(msg); } } @@ -4354,19 +4516,23 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _attachPhoto.move(_attachDocument.x(), _attachDocument.y()); _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); - updateListSize(); + updateListSize(App::main() ? App::main()->contentScrollAddToY() : 0); - _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - ((_kbShown || !_keyboard.hasMarkup()) ? 0 : _kbShow.width()), _field.height()); + bool kbShowShown = _history && !_kbShown && _keyboard.hasMarkup(); + _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); _send.move(width() - _send.width(), _attachDocument.y()); _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); + _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); + _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); _attachType.move(0, _attachDocument.y() - _attachType.height()); + _emojiPan.setMaxHeight(height() - st::dropdownDef.padding.top() - st::dropdownDef.padding.bottom() - _attachEmoji.height()); _emojiPan.move(width() - _emojiPan.width(), _attachEmoji.y() - _emojiPan.height()); switch (_attachDrag) { @@ -4395,6 +4561,10 @@ void HistoryWidget::itemRemoved(HistoryItem *item) { if (item == _replyReturn) { calcNextReplyReturn(); } + if (_kbReplyTo && item == _kbReplyTo) { + onKbToggle(); + _kbReplyTo = 0; + } } void HistoryWidget::itemReplaced(HistoryItem *oldItem, HistoryItem *newItem) { @@ -4414,35 +4584,31 @@ void HistoryWidget::updateScrollColors() { } MsgId HistoryWidget::replyToId() const { - return _replyToId; + return _replyToId ? _replyToId : (_kbReplyTo ? _kbReplyTo->id : 0); } void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem, bool scrollToIt) { - if (!hist || (!_histInited && !initial)) return; - - if (!isVisible() || _showAnim.animating()) { - if (initial) { - _histInited = false; - } else { - _histNeedUpdate = true; - } + if (!_history || (initial && _histInited) || (!initial && !_histInited)) return; + if (_firstLoadRequest) { if (resizedItem) _list->recountHeight(true); return; // scrollTopMax etc are not working after recountHeight() } int32 newScrollHeight = height(); - if (_botStart.isHidden()) { - if (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden)) { + if (isBlocked()) { + newScrollHeight -= _unblock.height(); + } else if (isBotStart()) { + newScrollHeight -= _botStart.height(); + } else { + if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { newScrollHeight -= (_field.height() + 2 * st::sendPadding); } - if (_replyToId || _kbReplyTo || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { + if (replyToId() || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { newScrollHeight -= st::replyHeight; } if (_kbShown) { newScrollHeight -= _kbScroll.height(); } - } else { - newScrollHeight -= _botStart.height(); } bool wasAtBottom = _scroll.scrollTop() + 1 > _scroll.scrollTopMax(), needResize = _scroll.width() != width() || _scroll.height() != newScrollHeight; if (needResize) { @@ -4452,7 +4618,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } if (!initial) { - hist->lastScrollTop = _scroll.scrollTop(); + _history->lastScrollTop = _scroll.scrollTop(); } int32 newSt = _list->recountHeight(!!resizedItem); bool washidden = _scroll.isHidden(); @@ -4460,8 +4626,8 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, _scroll.show(); } _list->updateSize(); + int32 firstItemY = _list->height() - _history->height - st::historyPadding; if (resizedItem && !resizedItem->detached() && scrollToIt) { - int32 firstItemY = _list->height() - hist->height - st::historyPadding; if (newSt + _scroll.height() < firstItemY + resizedItem->block()->y + resizedItem->y + resizedItem->height()) { newSt = firstItemY + resizedItem->block()->y + resizedItem->y + resizedItem->height() - _scroll.height(); } @@ -4473,7 +4639,6 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (washidden) { _scroll.hide(); } - if (!hist->readyForWork()) return; if ((!initial && !wasAtBottom) || loadedDown) { _scroll.scrollToY(newSt + addToY); @@ -4483,78 +4648,112 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (initial) { _histInited = true; } - _histNeedUpdate = false; int32 toY = History::ScrollMax; - if (initial && hist->activeMsgId && !hist->lastWidth) { - HistoryItem *item = App::histItemById(hist->activeMsgId); + if (initial && _history->lastWidth) { + toY = newSt; + _history->lastWidth = 0; + } else if (initial && _showAtMsgId > 0) { + HistoryItem *item = App::histItemById(_showAtMsgId); if (!item || item->detached()) { - hist->activeMsgId = 0; + _showAtMsgId = 0; + _histInited = false; return updateListSize(addToY, initial); } else { - toY = (_scroll.height() > item->height()) ? qMax(item->y + item->block()->y - (_scroll.height() - item->height()) / 2, 0) : (item->y + item->block()->y); + toY = (_scroll.height() > item->height()) ? qMax(firstItemY + item->y + item->block()->y - (_scroll.height() - item->height()) / 2, 0) : (firstItemY + item->y + item->block()->y); _animActiveStart = getms(); _animActiveTimer.start(AnimationTimerDelta); + _activeAnimMsgId = _showAtMsgId; } - } else if (initial && hist->unreadBar) { - toY = hist->unreadBar->y + hist->unreadBar->block()->y; - } else if (hist->showFrom) { - toY = hist->showFrom->y + hist->showFrom->block()->y; + } else if (initial && _history->unreadBar) { + toY = firstItemY + _history->unreadBar->y + _history->unreadBar->block()->y; + } else if (_history->showFrom) { + toY = firstItemY + _history->showFrom->y + _history->showFrom->block()->y; if (toY < _scroll.scrollTopMax() + st::unreadBarHeight) { - hist->addUnreadBar(); - if (hist->unreadBar) { - hist->activeMsgId = 0; + _history->addUnreadBar(); + if (_history->unreadBar) { + _showAtMsgId = ShowAtUnreadMsgId; + _histInited = false; return updateListSize(0, true); } } - } else if (initial && hist->lastWidth) { - toY = newSt; - hist->lastWidth = 0; } else { } _scroll.scrollToY(toY); } void HistoryWidget::addMessagesToFront(const QVector &messages) { - int32 oldH = hist->height; + int32 oldH = _history->height; _list->messagesReceived(messages); - updateListSize(hist->height - oldH); - updateBotKeyboard(); - checkUnreadLoaded(true); + if (!_firstLoadRequest) { + updateListSize(_history->height - oldH); + updateBotKeyboard(); + } } void HistoryWidget::addMessagesToBack(const QVector &messages) { - int32 sliceFrom = 0; _list->messagesReceivedDown(messages); - updateListSize(0, false, true); - checkUnreadLoaded(true); + if (!_firstLoadRequest) { + updateListSize(0, false, true); + } +} + +void HistoryWidget::countHistoryShowFrom() { + if (_showAtMsgId != ShowAtUnreadMsgId || !_history->unreadCount) { + _history->showFrom = 0; + return; + } + if (_history->showFrom) return; + + int32 skip = qMin(MessagesPerPage / 2, _history->unreadCount); + for (History::const_iterator i = _history->cend(); i != _history->cbegin();) { + --i; + for (HistoryBlock::const_iterator j = (*i)->cend(); j != (*i)->cbegin();) { + --j; + if ((*j)->itemType() == HistoryItem::MsgType) { + if (!--skip) { + _history->showFrom = *j; + return; + } + } + } + } } void HistoryWidget::updateBotKeyboard() { bool changed = false; - bool wasVisible = _kbShown; - if ((_replyToId && !_replyTo) || !hist) { + bool wasVisible = _kbShown || _kbReplyTo; + if ((_replyToId && !_replyTo) || !_history) { changed = _keyboard.updateMarkup(0); } else if (_replyTo) { changed = _keyboard.updateMarkup(_replyTo); } else { - changed = _keyboard.updateMarkup(hist->lastKeyboardId ? App::histItemById(hist->lastKeyboardId) : 0); + changed = _keyboard.updateMarkup(_history->lastKeyboardId ? App::histItemById(_history->lastKeyboardId) : 0); } + updateCmdStartShown(); if (!changed) return; - if (_keyboard.hasMarkup()) { - if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; - if (_botStart.isHidden() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { + bool hasMarkup = _keyboard.hasMarkup(), forceReply = _keyboard.forceReply() && !_replyTo; + if (hasMarkup || forceReply) { + if (_keyboard.singleUse() && _keyboard.hasMarkup() && _keyboard.forMsgId() == _history->lastKeyboardId && _history->lastKeyboardUsed) _kbWasHidden = true; + if (!isBotStart() && !isBlocked() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { - _kbScroll.show(); - _attachEmoji.hide(); - _kbHide.show(); + if (hasMarkup) { + _kbScroll.show(); + _attachEmoji.hide(); + _kbHide.show(); + } else { + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); + } _kbShow.hide(); + _cmdStart.hide(); } - int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)); + int32 maxh = hasMarkup ? qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)) : 0; _field.setMaxHeight(st::maxFieldHeight - maxh); - _kbShown = true; - _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbShown = hasMarkup; + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -4566,6 +4765,7 @@ void HistoryWidget::updateBotKeyboard() { _attachEmoji.show(); _kbHide.hide(); _kbShow.show(); + _cmdStart.hide(); } _field.setMaxHeight(st::maxFieldHeight); _kbShown = false; @@ -4580,6 +4780,7 @@ void HistoryWidget::updateBotKeyboard() { _attachEmoji.show(); _kbHide.hide(); _kbShow.hide(); + _cmdStart.show(); } _field.setMaxHeight(st::maxFieldHeight); _kbShown = false; @@ -4593,7 +4794,7 @@ void HistoryWidget::updateBotKeyboard() { } void HistoryWidget::updateToEndVisibility() { - bool toEndVisible = !_showAnim.animating() && hist && hist->readyForWork() && (!hist->loadedAtBottom() || _replyReturn || _scroll.scrollTop() + st::wndMinHeight < _scroll.scrollTopMax()); + bool toEndVisible = !_showAnim.animating() && _history && !_firstLoadRequest && (!_history->loadedAtBottom() || _replyReturn || _scroll.scrollTop() + st::wndMinHeight < _scroll.scrollTopMax()); if (toEndVisible && _toHistoryEnd.isHidden()) { _toHistoryEnd.show(); } else if (!toEndVisible && !_toHistoryEnd.isHidden()) { @@ -4618,13 +4819,14 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) { a_recordOver.restart(); _recordAnim.start(); } else if (_inReply) { - App::main()->showPeer(histPeer->id, _replyToId ? _replyToId : _kbReplyTo->id); + App::main()->showPeerHistory(_peer->id, replyToId()); } } void HistoryWidget::keyPressEvent(QKeyEvent *e) { - if (!hist) return; + if (!_history) return; + MsgId msgid = qMax(_showAtMsgId, 0); if (e->key() == Qt::Key_Escape) { e->ignore(); } else if (e->key() == Qt::Key_Back) { @@ -4633,8 +4835,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) { PeerData *after = 0; MsgId afterMsgId = 0; - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); - if (after) App::main()->showPeer(after->id, afterMsgId); + App::main()->peerAfter(_peer, msgid, after, afterMsgId); + if (after) App::main()->showPeerHistory(after->id, afterMsgId); } else { _scroll.keyPressEvent(e); } @@ -4642,8 +4844,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) { PeerData *before = 0; MsgId beforeMsgId = 0; - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); - if (before) App::main()->showPeer(before->id, beforeMsgId); + App::main()->peerBefore(_peer, msgid, before, beforeMsgId); + if (before) App::main()->showPeerHistory(before->id, beforeMsgId); } else { _scroll.keyPressEvent(e); } @@ -4651,8 +4853,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if (e->modifiers() & Qt::AltModifier) { PeerData *after = 0; MsgId afterMsgId = 0; - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); - if (after) App::main()->showPeer(after->id, afterMsgId); + App::main()->peerAfter(_peer, msgid, after, afterMsgId); + if (after) App::main()->showPeerHistory(after->id, afterMsgId); } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { _scroll.keyPressEvent(e); } @@ -4660,8 +4862,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if (e->modifiers() & Qt::AltModifier) { PeerData *before = 0; MsgId beforeMsgId = 0; - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); - if (before) App::main()->showPeer(before->id, beforeMsgId); + App::main()->peerBefore(_peer, msgid, before, beforeMsgId); + if (before) App::main()->showPeerHistory(before->id, beforeMsgId); } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { _scroll.keyPressEvent(e); } @@ -4669,46 +4871,56 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { PeerData *p = 0; MsgId m = 0; if ((e->modifiers() & Qt::ShiftModifier) || e->key() == Qt::Key_Backtab) { - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, p, m); + App::main()->peerBefore(_peer, msgid, p, m); } else { - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, p, m); + App::main()->peerAfter(_peer, msgid, p, m); } - if (p) App::main()->showPeer(p->id, m); + if (p) App::main()->showPeerHistory(p->id, m); + } else if (_history && (e->key() == Qt::Key_Search || e == QKeySequence::Find)) { + App::main()->searchInPeer(_history->peer); } else { e->ignore(); } } -void HistoryWidget::onStickerSend(DocumentData *sticker) { - if (!hist || !sticker) return; +void HistoryWidget::onFieldTabbed() { + QString sel = _attachMention.isHidden() ? QString() : _attachMention.getSelected(); + if (!sel.isEmpty()) { + _field.onMentionHashtagOrBotCommandInsert(sel); + } +} - App::main()->readServerHistory(hist, false); +void HistoryWidget::onStickerSend(DocumentData *sticker) { + if (!_history || !sticker) return; + + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); uint64 randomId = MTP::nonce(); MsgId newId = clientMsgId(); - hist->loadAround(0); + bool lastKeyboardUsed = lastForceReplyReplied(); - bool out = (histPeer->input.type() != mtpc_inputPeerSelf), unread = (histPeer->input.type() != mtpc_inputPeerSelf); - int32 flags = newMessageFlags(histPeer); // unread, out + bool out = (_peer->input.type() != mtpc_inputPeerSelf), unread = (_peer->input.type() != mtpc_inputPeerSelf); + int32 flags = newMessageFlags(_peer); // unread, out int32 sendFlags = 0; - if (_replyToId) { + if (replyToId()) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - hist->addToBackDocument(newId, flags, _replyToId, date(MTP_int(unixtime())), MTP::authedId(), sticker); + _history->addToBackDocument(newId, flags, replyToId(), date(MTP_int(unixtime())), MTP::authedId(), sticker); - hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), histPeer->input, MTP_int(_replyToId), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); - App::main()->finishForwarding(hist); - cancelReply(); + _history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, _history->sendRequestId); + App::main()->finishForwarding(_history); + cancelReply(lastKeyboardUsed); - if (sticker->sticker) App::main()->incrementSticker(sticker); + if (sticker->sticker()) App::main()->incrementSticker(sticker); App::historyRegRandom(randomId, newId); - App::main()->historyToDown(hist); + App::main()->historyToDown(_history); App::main()->dialogsToUp(); - peerMessagesUpdated(histPeer->id); + peerMessagesUpdated(_peer->id); if (!_attachMention.isHidden()) _attachMention.hideStart(); if (!_attachType.isHidden()) _attachType.hideStart(); @@ -4755,23 +4967,33 @@ void HistoryWidget::onReplyToMessage() { _field.setFocus(); } -void HistoryWidget::cancelReply() { - if (!_replyToId) return; - _replyTo = 0; - _replyToId = 0; - mouseMoveEvent(0); - if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) { - _replyForwardPreviewCancel.hide(); +bool HistoryWidget::lastForceReplyReplied(MsgId replyTo) const { + return _keyboard.forceReply() && _keyboard.forMsgId() == _history->lastKeyboardId && _keyboard.forMsgId() == (replyTo < 0 ? replyToId() : replyTo); +} + +void HistoryWidget::cancelReply(bool lastKeyboardUsed) { + if (_replyToId) { + _replyTo = 0; + _replyToId = 0; + mouseMoveEvent(0); + if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) { + _replyForwardPreviewCancel.hide(); + } + + updateBotKeyboard(); + + resizeEvent(0); + update(); + + _saveDraftText = true; + _saveDraftStart = getms(); + onDraftSave(); + } + if (_keyboard.singleUse() && _keyboard.forceReply() && lastKeyboardUsed) { + if (_kbReplyTo) { + onKbToggle(false); + } } - - updateBotKeyboard(); - - resizeEvent(0); - update(); - - _saveDraftText = true; - _saveDraftStart = getms(); - onDraftSave(); } void HistoryWidget::cancelForwarding() { @@ -4801,8 +5023,8 @@ void HistoryWidget::onReplyForwardPreviewCancel() { void HistoryWidget::onStickerPackInfo() { if (HistoryMessage *item = dynamic_cast(App::contextItem())) { if (HistorySticker *sticker = dynamic_cast(item->getMedia())) { - if (sticker->document() && sticker->document()->sticker && sticker->document()->sticker->set.type() != mtpc_inputStickerSetEmpty) { - App::main()->stickersBox(sticker->document()->sticker->set); + if (sticker->document() && sticker->document()->sticker() && sticker->document()->sticker()->set.type() != mtpc_inputStickerSetEmpty) { + App::main()->stickersBox(sticker->document()->sticker()->set); } } } @@ -4908,7 +5130,7 @@ void HistoryWidget::updatePreview() { _previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions); _previewDescription.setText(st::msgFont, desc, _textDlgOptions); } - } else if (!App::main()->hasForwardingItems() && !_replyToId && !_kbReplyTo) { + } else if (!App::main()->hasForwardingItems() && !replyToId()) { _replyForwardPreviewCancel.hide(); } resizeEvent(0); @@ -4916,24 +5138,46 @@ void HistoryWidget::updatePreview() { } void HistoryWidget::onCancel() { - if (App::main()) App::main()->showPeer(0); + if (App::main()) App::main()->showDialogs(); emit cancelled(); } void HistoryWidget::onFullPeerUpdated(PeerData *data) { - peerUpdated(data); - if (_list && data == histPeer) { + int32 newScrollTop = _scroll.scrollTop(); + if (_list && data == _peer) { checkMentionDropdown(); + int32 lh = _list->height(), st = _scroll.scrollTop(); _list->updateBotInfo(); + newScrollTop = st + _list->height() - lh; + } + if (updateCmdStartShown()) { + updateControlsVisibility(); + resizeEvent(0); + update(); + } else if (!_scroll.isHidden() && _unblock.isHidden() == isBlocked()) { + updateControlsVisibility(); + resizeEvent(0); + } + if (newScrollTop != _scroll.scrollTop()) { + if (_scroll.isVisible()) { + _scroll.scrollToY(newScrollTop); + } else { + _history->lastScrollTop = newScrollTop; + } } } void HistoryWidget::peerUpdated(PeerData *data) { - if (data && data == histPeer) { + if (data && data == _peer) { updateListSize(); if (!_showAnim.animating()) updateControlsVisibility(); if (data->chat && data->asChat()->count > 0 && data->asChat()->participants.isEmpty()) { App::api()->requestFullPeer(data); + } else if (!data->chat && data->asUser()->blocked == UserBlockUnknown) { + App::api()->requestFullPeer(data); + } else if (!_scroll.isHidden() && _unblock.isHidden() == isBlocked()) { + updateControlsVisibility(); + resizeEvent(0); } App::main()->updateOnlineDisplay(); } @@ -5011,19 +5255,25 @@ void HistoryWidget::onClearSelected() { } void HistoryWidget::onAnimActiveStep() { - if (!hist || !hist->activeMsgId) return _animActiveTimer.stop(); - HistoryItem *item = App::histItemById(hist->activeMsgId); + if (!_history || _activeAnimMsgId <= 0) return _animActiveTimer.stop(); + + HistoryItem *item = App::histItemById(_activeAnimMsgId); if (!item || item->detached()) return _animActiveTimer.stop(); - App::main()->msgUpdated(histPeer->id, item); + if (getms() - _animActiveStart > st::activeFadeInDuration + st::activeFadeOutDuration) { + stopAnimActive(); + } else { + App::main()->msgUpdated(_peer->id, item); + } } -uint64 HistoryWidget::animActiveTime() const { - return _animActiveTimer.isActive() ? (getms() - _animActiveStart) : 0; +uint64 HistoryWidget::animActiveTime(MsgId id) const { + return (id == _activeAnimMsgId && _animActiveTimer.isActive()) ? (getms() - _animActiveStart) : 0; } void HistoryWidget::stopAnimActive() { _animActiveTimer.stop(); + _activeAnimMsgId = 0; } void HistoryWidget::fillSelectedItems(SelectedItemSet &sel, bool forDelete) { @@ -5043,7 +5293,7 @@ void HistoryWidget::updateTopBarSelection() { updateControlsVisibility(); updateListSize(); if (!App::wnd()->layerShown() && !App::passcoded()) { - if (_selCount || _recording || !_botStart.isHidden()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart() || isBlocked()) { _list->setFocus(); } else { _field.setFocus(); @@ -5126,7 +5376,7 @@ void HistoryWidget::drawField(Painter &p) { } p.setPen(st::replyColor->p); _replyToName.drawElided(p, replyLeft, backy + st::msgReplyPadding.top(), width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right()); - p.setPen(((drawReplyTo->getMedia() || drawReplyTo->serviceMsg()) ? st::msgInDateColor : st::msgColor)->p); + p.setPen((((drawReplyTo->toHistoryMessage() && drawReplyTo->toHistoryMessage()->justMedia()) || drawReplyTo->serviceMsg()) ? st::msgInDateColor : st::msgColor)->p); _replyToText.drawElided(p, replyLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right()); } else { p.setFont(st::msgDateFont->f); @@ -5225,9 +5475,9 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { const QPixmap &pix(*cChatBackground()); @@ -5256,32 +5506,16 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { } if (_list) { - if (!_scroll.isHidden()) { - if (!_field.isHidden() || _recording) { - drawField(p); - if (_send.isHidden()) { - drawRecordButton(p); - if (_recording) drawRecording(p); - } + if (!_field.isHidden() || _recording) { + drawField(p); + if (_send.isHidden()) { + drawRecordButton(p); + if (_recording) drawRecording(p); } - } else { + } + if (_scroll.isHidden()) { QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); - - int32 pointsCount = 8, w = pointsCount * (st::introPointWidth + 2 * st::introPointDelta), h = st::introPointHeight; - int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.pxHeight() * 6) / 5; - - int32 curPoint = histRequestsCount % pointsCount; - - p.fillRect(pointsLeft + curPoint * (st::introPointWidth + 2 * st::introPointDelta), pointsTop, st::introPointHoverWidth, st::introPointHoverHeight, App::introPointHoverColor()->b); - - // points - p.setOpacity(st::introPointAlpha); - int32 x = pointsLeft + st::introPointLeft; - for (int32 i = 0; i < pointsCount; ++i) { - p.fillRect(x, pointsTop + st::introPointTop, st::introPointWidth, st::introPointHeight, st::introPointColor->b); - x += (st::introPointWidth + 2 * st::introPointDelta); - } } } else { style::font font(st::msgServiceFont); @@ -5300,7 +5534,7 @@ QRect HistoryWidget::historyRect() const { } void HistoryWidget::destroyData() { - showPeer(0); + showPeerHistory(0, 0); } QStringList HistoryWidget::getMediasFromMime(const QMimeData *d) { diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 12a8d16ec..0ce5c0c81 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -81,6 +81,9 @@ public: void updateBotInfo(bool recount = true); + bool wasSelectedText() const; + void setFirstLoading(bool loading); + ~HistoryList(); public slots: @@ -104,6 +107,7 @@ public slots: void onMenuDestroy(QObject *obj); void onTouchSelect(); void onTouchScrollTimer(); + void onDragExec(); private: @@ -115,7 +119,6 @@ private: HistoryItem *prevItem(HistoryItem *item); HistoryItem *nextItem(HistoryItem *item); void updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dragSelTo, bool dragSelecting, bool force = false); - void applyDragSelection(); History *hist; @@ -128,11 +131,16 @@ private: ScrollArea *scrollArea; int32 currentBlock, currentItem; + bool _firstLoading; + QTimer linkTipTimer; Qt::CursorShape _cursor; typedef QMap SelectedItems; SelectedItems _selected; + void applyDragSelection(); + void applyDragSelection(SelectedItems *toItems) const; + enum DragAction { NoDrag = 0x00, PrepareDrag = 0x01, @@ -144,6 +152,7 @@ private: TextSelectType _dragSelType; QPoint _dragStartPos, _dragPos; HistoryItem *_dragItem; + HistoryCursorState _dragCursorState; uint16 _dragSymbol; bool _dragWasInactive; @@ -154,6 +163,7 @@ private: HistoryItem *_dragSelFrom, *_dragSelTo; bool _dragSelecting; + bool _wasSelectedText; // was some text selected in current drag action bool _touchScroll, _touchSelect, _touchInProgress; QPoint _touchStart, _touchPrevPos, _touchPos; @@ -214,6 +224,7 @@ public: bool updateMarkup(HistoryItem *last); bool hasMarkup() const; + bool forceReply() const; bool hoverStep(float64 ms); void resizeToWidth(int32 width, int32 maxOuterHeight); @@ -237,7 +248,7 @@ private: MsgId _wasForMsgId; int32 _height, _maxOuterHeight; - bool _maximizeSize, _singleUse; + bool _maximizeSize, _singleUse, _forceReply; QTimer _cmdTipTimer; QPoint _lastMousePos; @@ -335,6 +346,7 @@ public: void start(); void messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId); + void historyLoaded(); void windowShown(); bool isActive() const; @@ -361,7 +373,8 @@ public: void loadMessages(); void loadMessagesDown(); - void loadMessagesAround(); + void firstLoadMessages(); + void delayedShowAt(MsgId showAtMsgId); void peerMessagesUpdated(PeerId peer); void peerMessagesUpdated(); @@ -373,10 +386,12 @@ public: QRect historyRect() const; - void updateTyping(bool typing = true); + void updateSendAction(History *history, SendActionType type, int32 progress = 0); + void cancelSendAction(History *history, SendActionType type); + void updateRecentStickers(); void stickersInstalled(uint64 setId); - void typingDone(const MTPBool &result, mtpRequestId req); + void sendActionDone(const MTPBool &result, mtpRequestId req); void destroyData(); void uploadImage(const QImage &img, bool withText = false, const QString &source = QString()); @@ -389,7 +404,6 @@ public: void confirmSendImage(const ReadyLocalMedia &img); void cancelSendImage(); - void checkUnreadLoaded(bool checkOnlyShow = false); void updateControlsVisibility(); void updateOnlineDisplay(int32 x, int32 w); void updateOnlineDisplayTimer(); @@ -400,14 +414,12 @@ public: void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0); PeerData *peer() const; - PeerData *activePeer() const; - MsgId activeMsgId() const; - int32 lastWidth() const; - int32 lastScrollTop() const; + MsgId msgId() const; void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); bool showStep(float64 ms); void animStop(); + void doneShow(); QPoint clampMousePosition(QPoint point); @@ -418,7 +430,7 @@ public: QString prepareMessage(QString text); - uint64 animActiveTime() const; + uint64 animActiveTime(MsgId id) const; void stopAnimActive(); void fillSelectedItems(SelectedItemSet &sel, bool forDelete = true); @@ -430,7 +442,8 @@ public: MsgId replyToId() const; void updateReplyTo(bool force = false); - void cancelReply(); + bool lastForceReplyReplied(MsgId replyTo = -1) const; + void cancelReply(bool lastKeyboardUsed = false); void updateForwarding(bool force = false); void cancelForwarding(); // called by MainWidget @@ -458,6 +471,13 @@ public: bool eventFilter(QObject *obj, QEvent *e); void updateBotKeyboard(); + DragState getDragState(const QMimeData *d); + + void fastShowAtEnd(History *h); + void showPeerHistory(const PeerId &peer, MsgId showAtMsgId); + void clearDelayedShowAt(); + void clearAllLoadRequests(); + ~HistoryWidget(); signals: @@ -471,6 +491,8 @@ public slots: void onReplyToMessage(); void onReplyForwardPreviewCancel(); + void onCancelSendAction(); + void onStickerPackInfo(); void onPreviewParse(); @@ -480,40 +502,44 @@ public slots: void peerUpdated(PeerData *data); void onFullPeerUpdated(PeerData *data); - void cancelTyping(); - void onPhotoUploaded(MsgId msgId, const MTPInputFile &file); void onDocumentUploaded(MsgId msgId, const MTPInputFile &file); void onThumbDocumentUploaded(MsgId msgId, const MTPInputFile &file, const MTPInputFile &thumb); void onAudioUploaded(MsgId msgId, const MTPInputFile &file); + void onPhotoProgress(MsgId msgId); void onDocumentProgress(MsgId msgId); void onAudioProgress(MsgId msgId); + void onPhotoFailed(MsgId msgId); void onDocumentFailed(MsgId msgId); void onAudioFailed(MsgId msgId); void onListScroll(); void onHistoryToEnd(); void onSend(bool ctrlShiftEnter = false, MsgId replyTo = -1); + void onUnblock(); void onBotStart(); void onPhotoSelect(); void onDocumentSelect(); - void onPhotoDrop(QDropEvent *e); - void onDocumentDrop(QDropEvent *e); + void onPhotoDrop(const QMimeData *data); + void onDocumentDrop(const QMimeData *data); + void onFilesDrop(const QMimeData *data); void onKbToggle(bool manual = true); + void onCmdStart(); void onPhotoReady(); void onSendConfirmed(); void onSendCancelled(); void onPhotoFailed(quint64 id); - void showPeer(const PeerId &peer, MsgId msgId = 0, bool force = false, bool leaveActive = false); - void clearLoadingAround(); + void activate(); + void onMentionHashtagOrBotCommandInsert(QString str); void onTextChange(); + void onFieldTabbed(); void onStickerSend(DocumentData *sticker); void onVisibleChanged(); @@ -539,6 +565,7 @@ public slots: void onDraftSave(bool delayed = false); void updateStickers(); + void botCommandsChanged(UserData *user); void onRecordError(); void onRecordDone(QByteArray result, qint32 samples); @@ -578,6 +605,11 @@ private: void addMessagesToFront(const QVector &messages); void addMessagesToBack(const QVector &messages); + void unblockDone(PeerData *peer, const MTPBool &result); + bool unblockFail(const RPCError &error); + + void countHistoryShowFrom(); + void updateToEndVisibility(); void stickersGot(const MTPmessages_AllStickers &stickers); @@ -589,32 +621,36 @@ private: void setFieldText(const QString &text); QStringList getMediasFromMime(const QMimeData *d); - DragState getDragState(const QMimeData *d); void updateDragAreas(); - bool _loadingMessages; - int32 histRequestsCount; - PeerData *histPeer; - History *_activeHist; - MTPinputPeer histInputPeer; - mtpRequestId histPreloading, histPreloadingDown; - QVector histPreload, histPreloadDown; + PeerData *_peer; + MsgId _showAtMsgId; - int32 _loadingAroundId; - mtpRequestId _loadingAroundRequest; + mtpRequestId _firstLoadRequest, _preloadRequest, _preloadDownRequest; + + MsgId _delayedShowAtMsgId; + mtpRequestId _delayedShowAtRequest; + + MsgId _activeAnimMsgId; ScrollArea _scroll; HistoryList *_list; - History *hist; - bool _histInited, _histNeedUpdate; // initial updateListSize() called + History *_history; + bool _histInited; // initial updateListSize() called IconedButton _toHistoryEnd; MentionsDropdown _attachMention; - FlatButton _send, _botStart; - IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide; + bool isBotStart() const; + bool isBlocked() const; + bool updateCmdStartShown(); + + FlatButton _send, _unblock, _botStart; + mtpRequestId _unblockRequest; + IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart; + bool _cmdStartShown; MessageField _field; Animation _recordAnim, _recordingAnim; bool _recording, _inRecord, _inField, _inReply; @@ -636,19 +672,17 @@ private: int32 _selCount; // < 0 - text selected, focus list, not _field - LocalImageLoader imageLoader; + LocalImageLoader _imageLoader; bool _synthedTextUpdate; - int64 serviceImageCacheSize; - QImage confirmImage; - PhotoId confirmImageId; - bool confirmWithText; - QString confirmSource; + int64 _serviceImageCacheSize; + QImage _confirmImage; + PhotoId _confirmImageId; + bool _confirmWithText; + QString _confirmSource; - QString titlePeerText; - int32 titlePeerTextWidth; - - bool hiderOffered; + QString _titlePeerText; + int32 _titlePeerTextWidth; Animation _showAnim; QPixmap _animCache, _bgAnimCache, _animTopBarCache, _bgAnimTopBarCache; @@ -661,8 +695,8 @@ private: QTimer _animActiveTimer; float64 _animActiveStart; - mtpRequestId _typingRequest; - QTimer _typingStopTimer; + QMap, mtpRequestId> _sendActionRequests; + QTimer _sendActionStopTimer; uint64 _saveDraftStart; bool _saveDraftText; diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 8336cfc34..7c968bb3d 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { class SignUpLink : public ITextLink { + TEXT_LINK_CLASS(SignUpLink) + public: SignUpLink(IntroPhone *widget) : _widget(widget) { @@ -44,7 +46,7 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), changed(false), next(this, lang(lng_intro_next), st::btnIntroNext), country(this, st::introCountry), - phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode), + phone(this, st::inpIntroPhone), code(this, st::inpIntroCountryCode), _signup(this, lng_phone_notreg(lt_signup_start, textcmdStartLink(1), lt_signup_end, textcmdStopLink()), st::introErrLabel, st::introErrLabelTextStyle), _showSignup(false) { setVisible(false); @@ -55,6 +57,8 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), connect(&phone, SIGNAL(voidBackspace(QKeyEvent*)), &code, SLOT(startErasing(QKeyEvent*))); connect(&country, SIGNAL(codeChanged(const QString &)), &code, SLOT(codeSelected(const QString &))); connect(&code, SIGNAL(codeChanged(const QString &)), &country, SLOT(onChooseCode(const QString &))); + connect(&code, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); + connect(&country, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); connect(&code, SIGNAL(addedToNumber(const QString &)), &phone, SLOT(addedToNumber(const QString &))); connect(&country, SIGNAL(selectClosed()), this, SLOT(onSelectClose())); connect(&phone, SIGNAL(changed()), this, SLOT(onInputChange())); diff --git a/Telegram/SourceFiles/lang.cpp b/Telegram/SourceFiles/lang.cpp index 6ee239eb0..0857788d7 100644 --- a/Telegram/SourceFiles/lang.cpp +++ b/Telegram/SourceFiles/lang.cpp @@ -71,28 +71,28 @@ void LangLoader::foundKeyValue(LangKey key) { } QString Translator::translate(const char *context, const char *sourceText, const char *disambiguation, int n) const { - if (QLatin1String("QMenuBar") == context) { - if (QLatin1String("Services") == sourceText) return lang(lng_mac_menu_services); - if (QLatin1String("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1")); - if (QLatin1String("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others); - if (QLatin1String("Show All") == sourceText) return lang(lng_mac_menu_show_all); - if (QLatin1String("Preferences...") == sourceText) return lang(lng_mac_menu_preferences); - if (QLatin1String("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1")); - if (QLatin1String("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1")); + if (qstr("QMenuBar") == context) { + if (qstr("Services") == sourceText) return lang(lng_mac_menu_services); + if (qstr("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1")); + if (qstr("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others); + if (qstr("Show All") == sourceText) return lang(lng_mac_menu_show_all); + if (qstr("Preferences...") == sourceText) return lang(lng_mac_menu_preferences); + if (qstr("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1")); + if (qstr("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1")); return QString(); } - if (QLatin1String("QWidgetTextControl") == context || QLatin1String("QLineEdit") == context) { - if (QLatin1String("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo)); - if (QLatin1String("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo)); - if (QLatin1String("Cu&t") == sourceText) return lang(lng_mac_menu_cut); - if (QLatin1String("&Copy") == sourceText) return lang(lng_mac_menu_copy); - if (QLatin1String("&Paste") == sourceText) return lang(lng_mac_menu_paste); - if (QLatin1String("Delete") == sourceText) return lang(lng_mac_menu_delete); - if (QLatin1String("Select All") == sourceText) return lang(lng_mac_menu_select_all); + if (qstr("QWidgetTextControl") == context || qstr("QLineEdit") == context) { + if (qstr("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo)); + if (qstr("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo)); + if (qstr("Cu&t") == sourceText) return lang(lng_mac_menu_cut); + if (qstr("&Copy") == sourceText) return lang(lng_mac_menu_copy); + if (qstr("&Paste") == sourceText) return lang(lng_mac_menu_paste); + if (qstr("Delete") == sourceText) return lang(lng_mac_menu_delete); + if (qstr("Select All") == sourceText) return lang(lng_mac_menu_select_all); return QString(); } - if (QLatin1String("QUnicodeControlCharacterMenu") == context) { - if (QLatin1String("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode); + if (qstr("QUnicodeControlCharacterMenu") == context) { + if (qstr("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode); return QString(); } return QString(); diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index b659e74be..8b9ee477f 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Telegram öffnen"; "lng_minimize_to_tray" = "Minimieren"; "lng_quit_from_tray" = "Telegram beenden"; -"lng_tray_icon_text" = "Telegram ist noch aktiv,\ndu kannst das in den Einstellungen anpassen.\n\nWenn dieses Symbol aus der Taskleiste verschwindet,\nkannst du es wieder hierher ziehen."; +"lng_tray_icon_text" = "Telegram ist minimiert und läuft im Hintergrund,\ndu kannst das in den Einstellungen ändern.\nUm Telegram wieder anzuzeigen, klicke auf \ndas Symbol im Benachrichtigungsfeld."; "lng_month1" = "Januar"; "lng_month2" = "Februar"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Jetzt versuchen"; "lng_status_service_notifications" = "Servicemeldungen"; +"lng_status_support" = "Support"; "lng_status_bot" = "Bot"; "lng_status_bot_reads_all" = "hat Zugriff auf Nachrichten"; "lng_status_bot_not_reads_all" = "hat keinen Zugriff auf Nachrichten"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Name der Gruppe"; "lng_dlg_create_group" = "Erstellen"; "lng_no_contacts" = "Du hast keine Kontakte"; +"lng_no_chats" = "Noch keine Chats"; "lng_contacts_loading" = "Lade.."; "lng_contacts_not_found" = "Keine Kontakte gefunden"; +"lng_dlg_search_chat" = "In diesem Chat suchen"; +"lng_dlg_search_for_messages" = "Nach Nachrichten suchen"; "lng_settings_save" = "Speichern"; "lng_settings_upload" = "Profilbild festlegen"; @@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Benutzernamen ändern"; "lng_username_about" = "Wähle einen (optionalen) öffentlichen \nBenutzernamen, wenn du von anderen \ngefunden werden willst, ohne, dass sie \ndeine Nummer kennen müssen.\n\nErlaubt sind a-z, 0-9 und Unterstriche. \nDie Mindestlänge beträgt 5 Zeichen."; -"lng_username_invalid" = "Der Benutzername ist fehlerhaft."; -"lng_username_occupied" = "Der Benutzername ist bereits belegt."; -"lng_username_too_short" = "Der Benutzername ist zu kurz."; -"lng_username_bad_symbols" = "Nur a-z, 0-9 und Unterstriche sind erlaubt."; -"lng_username_available" = "Der Benutzername ist noch verfügbar."; +"lng_username_invalid" = "Benutzername ungültig."; +"lng_username_occupied" = "Benutzername ist bereits belegt."; +"lng_username_too_short" = "Benutzername ist zu kurz."; +"lng_username_bad_symbols" = "Ungültige Zeichen im Benutzernamen."; +"lng_username_available" = "Benutzername ist verfügbar."; "lng_username_not_found" = "Kontakt @{user} konnte nicht gefunden werden."; "lng_settings_section_contact_info" = "Kontaktprofil"; @@ -180,8 +184,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_section_notify" = "Benachrichtigungen"; "lng_settings_desktop_notify" = "Desktopbenachrichtigungen"; -"lng_settings_show_name" = "Sendername anzeigen"; +"lng_settings_show_name" = "Absendername anzeigen"; "lng_settings_show_preview" = "Nachrichtenvorschau anzeigen"; +"lng_settings_use_windows" = "Windows Benachrichtigungen"; "lng_settings_sound_notify" = "Ton abspielen"; "lng_notification_preview" = "Du hast eine neue Nachricht"; @@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "Kennwort und Hinweis müssen sich unterscheiden."; "lng_cloud_password_email" = "E-Mail für die Wiederherstellung"; "lng_cloud_password_bad_email" = "Ungültige E-Mai, bitte erneut versuchen."; -"lng_cloud_password_about" = "Du kannst ein eigenes Kennwort festlegen, um dich an einem neuen Gerät anzumelden, zusätzlich zum SMS-Code."; +"lng_cloud_password_about" = "Dieses Kennwort brauchst du, wenn du dich mit einem neuen Gerät anmeldest."; "lng_cloud_password_about_recover" = "Hinweis! Möchtest du wirklich keine E-Mail\nAdresse hinterlegen? \n\nWenn dir dein Kennwort nicht mehr einfällt, \nverlierst du Zugriff auf dein Telegram Konto."; "lng_cloud_password_almost" = "Ein Bestätigungslink wurde an\ndeine E-Mail Adresse gesendet.\n\nZweistufige Bestätigung wird aktiviert,\nsobald du den Link öffnest."; "lng_cloud_password_was_set" = "Zweistufige Bestätigung aktiviert."; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Verbindungsart:"; "lng_connection_auto_connecting" = "Standard (verbinden..)"; -"lng_connection_auto" = "Standard ({type} verwendet)"; -"lng_connection_http_proxy" = "HTTP mit Proxy"; -"lng_connection_tcp_proxy" = "TCP mit Proxy"; +"lng_connection_auto" = "Standard ({transport} verwendet)"; +"lng_connection_proxy_connecting" = "Verbinde über Proxy..."; +"lng_connection_proxy" = "{transport} mit Proxy"; "lng_connection_header" = "Verbindungsart"; "lng_connection_auto_rb" = "Auto (TCP wenn verfügbar oder HTTP)"; "lng_connection_http_proxy_rb" = "HTTP mit benutzerdef. http-Proxy"; "lng_connection_tcp_proxy_rb" = "TCP mit benutzerdef. socks5-Proxy"; +"lng_connection_try_ipv6" = "Über IPv6 verbinden"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Port"; "lng_connection_user_ph" = "Benutzername"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Dieses Gerät wirklich abmelden?"; "lng_settings_reset_button" = "Beenden"; "lng_settings_reset_done" = "Alle anderen Sitzungen wurden erfolgreich beendet."; +"lng_settings_ask_question" = "Eine Frage stellen"; +"lng_settings_ask_sure" = "Bedenke bitte, dass der Telegram Support von ehrenamtlichen Helfern betreut wird.\n\nKennst du schon die Telegram FAQ? Dort findest du Antworten auf die am häufigsten gestellten Fragen."; +"lng_settings_faq_button" = "FAQ öffnen"; +"lng_settings_ask_ok" = "Frage stellen"; +"lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Abmelden"; "lng_sure_logout" = "Du kannst Telegram von all deinen Geräten gleichzeitig nutzen. Wirklich abmelden?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Info"; "lng_profile_settings_section" = "Einstellungen"; +"lng_profile_actions_section" = "Aktionen"; "lng_profile_bot_settings" = "Einstellungen"; "lng_profile_bot_help" = "Hilfe"; "lng_profile_participants_section" = "Teilnehmer"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Bearbeiten"; "lng_profile_enable_notifications" = "Benachrichtigungen"; "lng_profile_clear_history" = "Chatverlauf löschen"; +"lng_profile_delete_conversation" = "Chat entfernen"; +"lng_profile_clear_and_exit" = "Löschen und verlassen"; +"lng_profile_search_messages" = "In diesem Chat suchen"; +"lng_profile_block_user" = "Blockieren"; +"lng_profile_unblock_user" = "Freigeben"; +"lng_profile_block_bot" = "Bot anhalten und blockieren"; +"lng_profile_unblock_bot" = "Bot freigeben"; "lng_profile_send_message" = "Nachricht senden"; "lng_profile_share_contact" = "Kontakt teilen"; "lng_profile_invite_to_group" = "In eine Gruppe einladen"; @@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Dateiübersicht"; "lng_profile_audios" = "{count:_not_used_|# Sprachnachricht|# Sprachnachrichten} »"; "lng_profile_audios_header" = "Übersicht Sprachnachrichten"; +"lng_profile_audio_files_header" = "Wiedergabeliste"; "lng_profile_show_all_types" = "Alle Filter anzeigen"; "lng_profile_copy_phone" = "Telefonnummer kopieren"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Neue Gruppe erstellen"; "lng_failed_add_participant" = "Kann Teilnehmer nicht hinzufügen. Später erneut versuchen."; +"lng_failed_add_not_mutual" = "Wenn man eine Gruppe verlässt, kann nur \nein gemeinsamer Kontakt die Person erneut \neinladen (beide Seiten müssen die Nummer\n des anderen gespeichert haben)."; "lng_sure_delete_contact" = "Bist du sicher, dass du {contact} von deinen Kontakten löschen willst?"; "lng_sure_delete_history" = "Sicher, dass du den kompletten Verlauf mit {contact} löschen willst?\n\nDas kann man nicht rückgängig machen."; +"lng_sure_delete_group_history" = "Möchtest du wirklich deinen Verlauf von «{group}» löschen?\n\nDas kann man nicht rückgängig machen."; "lng_sure_delete_and_exit" = "Deinen Verlauf von «{group}» löschen und die Gruppe verlassen?\n\nDas kann man nicht rückgängig machen."; -"lng_message_empty" = "(empty)"; +"lng_message_empty" = "Leere Nachricht"; +"lng_media_unsupported" = "Format Nicht Unterstützt"; "lng_action_add_user" = "{from} hat {user} hinzugefügt"; "lng_action_kick_user" = "{from} hat {user} entfernt"; @@ -459,10 +482,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Schreibe deine Nachricht.."; "lng_record_cancel" = "Zum Abbrechen rausbewegen"; "lng_empty_history" = ""; -"lng_willbe_history" = "Wähle einen Chat aus, um zu schreiben"; +"lng_willbe_history" = "Chat auswählen um zu schreiben"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Ich"; "lng_bot_description" = "Was kann dieser Bot?"; +"lng_unblock_button" = "Freigeben"; "lng_bot_start" = "Starten"; "lng_bot_choose_group" = "Gruppe auswählen"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} tippt"; "lng_users_typing" = "{user} und {second_user} tippen"; "lng_many_typing" = "{count:_not_used_|# tippt|# tippen}"; +"lng_send_action_record_video" = "schickt Video"; +"lng_user_action_record_video" = "{user} sendet Video"; +"lng_send_action_upload_video" = "schickt Video"; +"lng_user_action_upload_video" = "{user} sendet Video"; +"lng_send_action_record_audio" = "nimmt Audio auf"; +"lng_user_action_record_audio" = "{user} nimmt Audio auf"; +"lng_send_action_upload_audio" = "nimmt Audio auf"; +"lng_user_action_upload_audio" = "{user} sendet Audio"; +"lng_send_action_upload_photo" = "sendet Bild"; +"lng_user_action_upload_photo" = "{user} sendet Bild"; +"lng_send_action_upload_file" = "sendet Datei"; +"lng_user_action_upload_file" = "{user} sendet Datei"; +"lng_send_action_geo_location" = "wählt Standort aus"; +"lng_user_action_geo_location" = "{user} wählt Standort aus"; +"lng_send_action_choose_contact" = "wählt Kontakt aus"; +"lng_user_action_choose_contact" = "{user} wählt Kontakt aus"; "lng_unread_bar" = "{count:_not_used_|# Ungelesene Nachricht|# Ungelesene Nachrichten}"; "lng_maps_point" = "Standort"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Sprachnachricht öffnen"; "lng_context_save_audio" = "Sprachnachricht speichern unter.."; "lng_context_pack_info" = "Sticker-Paket"; +"lng_context_pack_add" = "Sticker hinzufügen"; "lng_context_open_file" = "Datei öffnen"; "lng_context_save_file" = "Datei speichern als.."; "lng_context_forward_file" = "Datei weiterleiten"; @@ -571,7 +612,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_selected_delete_confirm" = "Löschen"; "lng_about_version" = "Version {version}"; -"lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\ndem [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar."; +"lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\nder [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar."; "lng_about_done" = "Fertig"; "lng_search_found_results" = "{count:Keine Nachrichten|# Nachricht|# Nachrichten}"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "Diese neue Version enthält Unterstützung für die neue Bot API, welche für alle kostenlos verfügbar ist. Kannst du programmieren? Erstelle deine eigenen Bots für Spiele, Dienste oder Integrationen.\n\nMehr dazu unter {blog_link}"; +"lng_new_version_text" = "— Blockiere Nutzer über die Profilseite (im Chat auf den Namen oben tippen)\n— Windows 8, 8.1 und 10: Native Windowsbenachrichtigungen\n— Fehlerbehebung: Eingabemethoden unter Linux (Fcitx und iBus)"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index f55238406..121130a6d 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Abrir Telegram"; "lng_minimize_to_tray" = "Minimizar al icono"; "lng_quit_from_tray" = "Salir de Telegram"; -"lng_tray_icon_text" = "Telegram sigue funcionando aquí, \npuedes cambiar esto desde los ajustes.\n\nSi este ícono desaparece desde el menú,\npuedes arrastrarlo de regreso desde los iconos ocultos."; +"lng_tray_icon_text" = "Telegram aún está funcionando,\npuedes cambiar esto en los ajustes. \nSi este icono desaparece del menú, \npuedes arrastrarlo aquí desde los iconos ocultos."; "lng_month1" = "enero"; "lng_month2" = "febrero"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Intentar ahora"; "lng_status_service_notifications" = "servicio de notificaciones"; +"lng_status_support" = "soporte"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "tiene acceso a los mensajes"; "lng_status_bot_not_reads_all" = "no tiene acceso a los mensajes"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nombre del grupo"; "lng_dlg_create_group" = "Crear"; "lng_no_contacts" = "No tienes contactos"; +"lng_no_chats" = "Tus chats estarán aquí"; "lng_contacts_loading" = "Cargando..."; "lng_contacts_not_found" = "No se encontraron contactos"; +"lng_dlg_search_chat" = "Buscar en este chat"; +"lng_dlg_search_for_messages" = "Buscar mensajes"; "lng_settings_save" = "Guardar"; "lng_settings_upload" = "Poner foto de perfil"; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notificaciones de escritorio"; "lng_settings_show_name" = "Mostrar el nombre del remitente"; "lng_settings_show_preview" = "Mostrar la vista previa del mensaje"; +"lng_settings_use_windows" = "Usar notificaciones de Windows"; "lng_settings_sound_notify" = "Reproducir sonido"; "lng_notification_preview" = "Tienes un nuevo mensaje"; @@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "La contraseña y la pista no pueden ser iguales."; "lng_cloud_password_email" = "Pon un e-mail de recuperación"; "lng_cloud_password_bad_email" = "E-mail incorrecto. Por favor, prueba otro."; -"lng_cloud_password_about" = "Esta contraseña será requerida cuando inicies sesión en un nuevo dispositivo, además del código de activación."; +"lng_cloud_password_about" = "Necesitarás la contraseña al iniciar sesión en un nuevo dispositivo, además del código de activación."; "lng_cloud_password_about_recover" = "¡Advertencia! ¿No quieres añadir un e-mail \nde recuperación para la contraseña?\n\nSi olvidas tu contraseña, perderás\nel acceso a tu cuenta de Telegram."; "lng_cloud_password_almost" = "Un enlace de confirmación fue enviado\nal e-mail que estableciste.\n\nLa verificación en dos pasos se activará\nen cuanto sigas ese enlace."; "lng_cloud_password_was_set" = "Verificación en dos pasos activada."; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo de conexión:"; "lng_connection_auto_connecting" = "Por defecto (conectando...)"; -"lng_connection_auto" = "Por defecto ({type} en uso)"; -"lng_connection_http_proxy" = "HTTP con proxy"; -"lng_connection_tcp_proxy" = "TCP con proxy"; +"lng_connection_auto" = "Por defecto ({transport} en uso)"; +"lng_connection_proxy_connecting" = "Conectando a través de un proxy..."; +"lng_connection_proxy" = "{transport} con un proxy"; "lng_connection_header" = "Tipo de conexión"; "lng_connection_auto_rb" = "Automático (TCP si está disponible o HTTP)"; "lng_connection_http_proxy_rb" = "HTTP con http-proxy personalizado"; "lng_connection_tcp_proxy_rb" = "TCP con socks5-proxy personalizado"; +"lng_connection_try_ipv6" = "Intentar conectar a través de IPv6"; "lng_connection_host_ph" = "Nombre del host"; "lng_connection_port_ph" = "Puerto"; "lng_connection_user_ph" = "Alias"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "¿Quieres cerrar esta sesión?"; "lng_settings_reset_button" = "Cerrar"; "lng_settings_reset_done" = "Se cerraron las otras sesiones"; +"lng_settings_ask_question" = "Hacer una pregunta"; +"lng_settings_ask_sure" = "Por favor, considera que el soporte de Telegram está hecho por voluntarios. Respondemos lo antes posible, pero puede tomar tiempo.\n\nSi quieres, mira las preguntas frecuentes de Telegram: tienen soluciones a problemas y respuestas para la mayoría de las preguntas."; +"lng_settings_faq_button" = "Preguntas frecuentes"; +"lng_settings_ask_ok" = "Preguntar"; +"lng_settings_faq" = "Preguntas frecuentes"; "lng_settings_logout" = "Cerrar sesión"; "lng_sure_logout" = "¿Quieres cerrar sesión?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Información"; "lng_profile_about_section" = "Acerca de"; "lng_profile_settings_section" = "Ajustes"; +"lng_profile_actions_section" = "Acciones"; "lng_profile_bot_settings" = "Ajustes"; "lng_profile_bot_help" = "Ayuda"; "lng_profile_participants_section" = "Miembros"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Editar"; "lng_profile_enable_notifications" = "Notificaciones"; "lng_profile_clear_history" = "Borrar historial"; +"lng_profile_delete_conversation" = "Eliminar chat"; +"lng_profile_clear_and_exit" = "Eliminar y salir"; +"lng_profile_search_messages" = "Buscar mensajes"; +"lng_profile_block_user" = "Bloquear"; +"lng_profile_unblock_user" = "Desbloquear"; +"lng_profile_block_bot" = "Detener y bloquear el bot"; +"lng_profile_unblock_bot" = "Desbloquear el bot"; "lng_profile_send_message" = "Enviar mensaje"; "lng_profile_share_contact" = "Compartir contacto"; "lng_profile_invite_to_group" = "Añadir al grupo"; @@ -358,15 +377,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_sure_kick" = "¿Quieres expulsar a {user} del grupo?"; "lng_profile_loading" = "Cargando..."; "lng_profile_shared_media" = "Todos los archivos"; -"lng_profile_no_media" = "No hay multimedia en esta conversación."; +"lng_profile_no_media" = "No hay multimedia en este chat."; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos_header" = "Todas las fotos"; "lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »"; -"lng_profile_videos_header" = "Todos los vídeos"; +"lng_profile_videos_header" = "Vídeos"; "lng_profile_files" = "{count:_not_used_|# archivo|# archivos} »"; -"lng_profile_files_header" = "Todos los archivos"; +"lng_profile_files_header" = "Archivos"; "lng_profile_audios" = "{count:_not_used_|# mensaje de voz|# mensajes de voz} »"; -"lng_profile_audios_header" = "Todos los mensajes de voz"; +"lng_profile_audios_header" = "Mensajes de voz"; +"lng_profile_audio_files_header" = "Lista de reproducción"; "lng_profile_show_all_types" = "Mostrar todos los tipos"; "lng_profile_copy_phone" = "Copiar número"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuevo grupo"; "lng_failed_add_participant" = "No se pudo añadir el usuario. Por favor, inténtalo más tarde."; +"lng_failed_add_not_mutual" = "Si una persona dejó el grupo, sólo\nun contacto mutuo puede volver \na invitarlo (necesitan tener tu \nnúmero y tú el de ellos)."; "lng_sure_delete_contact" = "¿Quieres eliminar a {contact} de tu lista de contactos?"; "lng_sure_delete_history" = "¿Quieres eliminar todo el historial de mensajes con {contact}?\n\nEsta acción no se puede deshacer."; +"lng_sure_delete_group_history" = "¿Quieres borrar todo el historial en «{group}»?\n\nEsta acción no se puede deshacer."; "lng_sure_delete_and_exit" = "¿Quieres eliminar todo el historial de mensajes y dejar el grupo «{group}»?\n\nEsta acción no se puede deshacer."; -"lng_message_empty" = "(vacío)"; +"lng_message_empty" = "Mensaje vacío"; +"lng_media_unsupported" = "Multimedia no soportada"; "lng_action_add_user" = "{from} añadió a {user}"; "lng_action_kick_user" = "{from} expulsó a {user}"; @@ -459,12 +482,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Escribir un mensaje..."; "lng_record_cancel" = "Suelta fuera de aquí para cancelar"; "lng_empty_history" = ""; -"lng_willbe_history" = "Por favor, elige un chat para comenzar a conversar"; +"lng_willbe_history" = "Por favor, elige un chat para comenzar"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Tú"; "lng_bot_description" = "¿Qué puede hacer este bot?"; +"lng_unblock_button" = "Desbloquear"; -"lng_bot_start" = "Empezar"; +"lng_bot_start" = "Iniciar"; "lng_bot_choose_group" = "Elegir grupo"; "lng_bot_no_groups" = "No tienes grupos"; "lng_bot_groups_not_found" = "No se encontraron grupos"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} está escribiendo"; "lng_users_typing" = "{user} y {second_user} están escribiendo"; "lng_many_typing" = "{count:_not_used_|# está|# están} escribiendo"; +"lng_send_action_record_video" = "grabando vídeo"; +"lng_user_action_record_video" = "{user} está grabando un vídeo"; +"lng_send_action_upload_video" = "enviando vídeo"; +"lng_user_action_upload_video" = "{user} está enviando un vídeo"; +"lng_send_action_record_audio" = "grabando audio"; +"lng_user_action_record_audio" = "{user} está grabando un audio"; +"lng_send_action_upload_audio" = "enviando audio"; +"lng_user_action_upload_audio" = "{user} está enviando un audio"; +"lng_send_action_upload_photo" = "enviando foto"; +"lng_user_action_upload_photo" = "{user} está enviando una foto"; +"lng_send_action_upload_file" = "enviando archivo"; +"lng_user_action_upload_file" = "{user} está enviando un archivo"; +"lng_send_action_geo_location" = "obteniendo ubicación"; +"lng_user_action_geo_location" = "{user} está obteniendo una ubicación"; +"lng_send_action_choose_contact" = "eligiendo contacto"; +"lng_user_action_choose_contact" = "{user} está eligiendo un contacto"; "lng_unread_bar" = "{count:_not_used_|# mensaje sin leer|# mensajes sin leer}"; "lng_maps_point" = "Ubicación"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Abrir audio"; "lng_context_save_audio" = "Guardar como..."; "lng_context_pack_info" = "Información del pack"; +"lng_context_pack_add" = "Añadir stickers"; "lng_context_open_file" = "Abrir archivo"; "lng_context_save_file" = "Guardar como..."; "lng_context_forward_file" = "Reenviar archivo"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "Esta nueva versión incluye el soporte para bots, usando la nueva API para bots, gratis para todos. Si eres un ingeniero, crea tus propios bots para juegos, servicios o integraciones .\n\nConoce más en {blog_link}"; +"lng_new_version_text" = "— Bloquea usuarios desde sus perfiles\n— Añadido el soporte para notificaciones Windows toast\n— Arreglados los métodos de entrada en Linux (Fcitx e IBus)"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 1aaff7f38..f053bb974 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -26,9 +26,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_menu_back" = "Indietro"; "lng_open_from_tray" = "Apri Telegram"; -"lng_minimize_to_tray" = "Minimizza"; +"lng_minimize_to_tray" = "Riduci a icona"; "lng_quit_from_tray" = "Chiudi Telegram"; -"lng_tray_icon_text" = "Telegram è ancora aperto qui,\npuoi cambiare questo nelle impostazioni.\n\nSe l'icona scompare dall'area di notifica,\npuoi riportarla indietro dalle icone nascoste."; +"lng_tray_icon_text" = "Telegram è ancora attivo qui,\npuoi modificarlo nelle impostazioni.\nSe l'icona scompare dall'area di notifica,\npuoi ripristinarla dalle icone nascoste."; "lng_month1" = "Gennaio"; "lng_month2" = "Febbraio"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Prova ora"; "lng_status_service_notifications" = "notifiche di servizio"; +"lng_status_support" = "supporto"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "ha accesso ai messaggi"; "lng_status_bot_not_reads_all" = "non ha accesso ai messaggi"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nome gruppo"; "lng_dlg_create_group" = "Crea"; "lng_no_contacts" = "Non hai contatti"; +"lng_no_chats" = "Le tua chat saranno qui"; "lng_contacts_loading" = "Caricamento.."; "lng_contacts_not_found" = "Nessun contatto trovato"; +"lng_dlg_search_chat" = "Cerca in questa chat"; +"lng_dlg_search_for_messages" = "Cerca messaggi"; "lng_settings_save" = "Salva"; "lng_settings_upload" = "Imposta foto profilo"; @@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Cambia username"; "lng_username_about" = "Puoi scegliere un username su Telegram.\nSe lo fai, le altre persone potranno trovarti\ntramite questo nome utente e contattarti \nsenza conoscere il tuo numero di telefono.\n\nPuoi usare a-z, 0-9 e underscore.\nLa lunghezza minima è di 5 caratteri."; -"lng_username_invalid" = "Il nome non è valido."; -"lng_username_occupied" = "Il nome è già occupato."; -"lng_username_too_short" = "Il nome è troppo corto."; -"lng_username_bad_symbols" = "Questo nome ha simboli errati."; -"lng_username_available" = "Il nome è disponibile."; +"lng_username_invalid" = "L'username non è valido."; +"lng_username_occupied" = "L'username è già occupato."; +"lng_username_too_short" = "L'username è troppo corto."; +"lng_username_bad_symbols" = "Questo username ha simboli errati."; +"lng_username_available" = "L'username è disponibile."; "lng_username_not_found" = "Utente @{user} non trovato."; "lng_settings_section_contact_info" = "Informazioni di contatto"; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notifiche desktop"; "lng_settings_show_name" = "Mostra nome del mittente"; "lng_settings_show_preview" = "Mostra anteprima messaggio"; +"lng_settings_use_windows" = "Usa le notifiche di Windows"; "lng_settings_sound_notify" = "Riproduci suono"; "lng_notification_preview" = "Hai un nuovo messaggio"; @@ -267,7 +272,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_passcode_enter_first" = "Inserisci un codice"; "lng_passcode_enter_new" = "Inserisci il nuovo codice"; "lng_passcode_confirm_new" = "Reinserisci il nuovo codice"; -"lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se ti dimentichi il codice, dovrai rifare il login su Telegram Desktop."; +"lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se dimentichi il codice, dovrai rifare l'accesso su Telegram Desktop."; "lng_passcode_differ" = "I codici sono diversi"; "lng_passcode_wrong" = "Codice errato"; "lng_passcode_is_same" = "Il codice non è stato cambiato"; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo di connessione:"; "lng_connection_auto_connecting" = "Default (connessione..)"; -"lng_connection_auto" = "Default ({type} in uso)"; -"lng_connection_http_proxy" = "HTTP con proxy"; -"lng_connection_tcp_proxy" = "TCP con proxy"; +"lng_connection_auto" = "Predefinito ({transport} in uso)"; +"lng_connection_proxy_connecting" = "Connessione tramite proxy.."; +"lng_connection_proxy" = "{transport} con proxy"; "lng_connection_header" = "Tipo di connessione"; "lng_connection_auto_rb" = "Auto (TCP se disponibile o HTTP)"; "lng_connection_http_proxy_rb" = "HTTP con proxy-http personalizzato"; "lng_connection_tcp_proxy_rb" = "TCP con proxy-socks5 personalizzato"; +"lng_connection_try_ipv6" = "Prova a connettere tramite IPv6"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Porta"; "lng_connection_user_ph" = "Username"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Vuoi terminare questa sessione?"; "lng_settings_reset_button" = "Chiudi"; "lng_settings_reset_done" = "Altre sessioni terminate"; +"lng_settings_ask_question" = "Fai una domanda"; +"lng_settings_ask_sure" = "Per favore, considera che il supporto su Telegram è offerto da volontari. Proveremo a risponderti il più velocemente possibile, ma potrebbe volerci un po' di tempo.\n\nDai un'occhiata alle FAQ di Telegram: potrai trovare importanti suggerimenti riguardo alcune problematiche e risposte alla maggior parte delle domande."; +"lng_settings_faq_button" = "Vai alle FAQ"; +"lng_settings_ask_ok" = "Chiedi"; +"lng_settings_faq" = "FAQ di Telegram"; "lng_settings_logout" = "Disconnetti"; "lng_sure_logout" = "Sicuro di volerti disconnettere?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Info"; "lng_profile_settings_section" = "Impostazioni"; +"lng_profile_actions_section" = "Azioni"; "lng_profile_bot_settings" = "Impostazioni"; "lng_profile_bot_help" = "Aiuto"; "lng_profile_participants_section" = "Membri"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Modifica"; "lng_profile_enable_notifications" = "Notifiche"; "lng_profile_clear_history" = "Cancella la cronologia"; +"lng_profile_delete_conversation" = "Elimina chat"; +"lng_profile_clear_and_exit" = "Elimina ed esci"; +"lng_profile_search_messages" = "Cerca messaggi"; +"lng_profile_block_user" = "Blocca utente"; +"lng_profile_unblock_user" = "Sblocca utente"; +"lng_profile_block_bot" = "Arresta e blocca bot"; +"lng_profile_unblock_bot" = "Sblocca bot"; "lng_profile_send_message" = "Invia messaggio"; "lng_profile_share_contact" = "Condividi contatto"; "lng_profile_invite_to_group" = "Aggiungi a un gruppo"; @@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Panoramica file"; "lng_profile_audios" = "{count:_not_used_|# nota vocale|# note vocali} »"; "lng_profile_audios_header" = "Panoramica note vocali"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Mostra tutti i tipi"; "lng_profile_copy_phone" = "Copia numero di telefono"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuovo gruppo"; "lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi."; +"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarla\n(lei deve avere il tuo numero\ndi telefono, e tu il suo)."; "lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?"; "lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata."; +"lng_sure_delete_group_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi in «{group}»?\n\nQuesta azione non può essere annullata."; "lng_sure_delete_and_exit" = "Sicuro di voler eliminare tutta la cronologia dei messaggi e abbandonare «{group}»?\n\nQuesta azione non può essere annullata."; -"lng_message_empty" = "(vuoto)"; +"lng_message_empty" = "Messaggio vuoto"; +"lng_media_unsupported" = "Media non supportato"; "lng_action_add_user" = "{from} ha aggiunto {user}"; "lng_action_kick_user" = "{from} ha rimosso {user}"; @@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Tu"; "lng_bot_description" = "Cosa può fare questo bot?"; +"lng_unblock_button" = "Sblocca"; "lng_bot_start" = "Avvia"; "lng_bot_choose_group" = "Scegli gruppo"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} sta scrivendo"; "lng_users_typing" = "{user} e {second_user} stanno scrivendo"; "lng_many_typing" = "{count:_not_used_|# sta|# stanno} scrivendo"; +"lng_send_action_record_video" = "registrando un video"; +"lng_user_action_record_video" = "{user} sta registrando un video"; +"lng_send_action_upload_video" = "inviando un video"; +"lng_user_action_upload_video" = "{user} sta inviando un video"; +"lng_send_action_record_audio" = "registrando un audio"; +"lng_user_action_record_audio" = "{user} sta registrando un audio"; +"lng_send_action_upload_audio" = "inviando un audio"; +"lng_user_action_upload_audio" = "{user} sta inviando un audio"; +"lng_send_action_upload_photo" = "inviando una foto"; +"lng_user_action_upload_photo" = "{user} sta inviando una foto"; +"lng_send_action_upload_file" = "inviando un file"; +"lng_user_action_upload_file" = "{user} sta inviando un file"; +"lng_send_action_geo_location" = "selezionando una posizione"; +"lng_user_action_geo_location" = "{user} sta selezionando una posizione"; +"lng_send_action_choose_contact" = "selezionando un contatto"; +"lng_user_action_choose_contact" = "{user} sta selezionando un contatto"; "lng_unread_bar" = "{count:_not_used_|# messaggio non letto|# messaggi non letti}"; "lng_maps_point" = "Posizione"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Apri audio"; "lng_context_save_audio" = "Salva audio come.."; "lng_context_pack_info" = "Mostra sticker"; +"lng_context_pack_add" = "Aggiungi sticker"; "lng_context_open_file" = "Apri file"; "lng_context_save_file" = "Salva file come.."; "lng_context_forward_file" = "Inoltra file"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "Questa nuova versione include il support per i bot usando la nuova API per i bot. Se sei un ingegnere, crea i tuoi bot per giochi, servizi o integrazioni. Scopri di più su {blog_link}"; +"lng_new_version_text" = "— Blocca gli utenti dalla loro pagina profilo\n— Aggiunto il supporto per le notifiche toast di Windows\n— Risolti i problemi con alcuni metodi di input su Linux (Fcitx and IBus)"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 78c40a3c1..6807a4abe 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "텔레그램 실행"; "lng_minimize_to_tray" = "창을 최소화"; "lng_quit_from_tray" = "텔레그램 종료"; -"lng_tray_icon_text" = "텔레그램은 아직 실행중입니다.\n설정 화면에서 실행설정을 변경하실 수 있습니다.\n\n트레이메뉴에서 이 아이콘이 사라질 경우.\n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다."; +"lng_tray_icon_text" = "텔레그램은 아직 실행중입니다. \n설정 화면에서 실행설정을 변경하실 수 있습니다. \n트레이메뉴에서 이 아이콘이 사라질 경우. \n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다."; "lng_month1" = "1월"; "lng_month2" = "2월"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "다시 시도"; "lng_status_service_notifications" = "서비스 알림"; +"lng_status_support" = "지원"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "메시지 접근 권한이 있습니다."; "lng_status_bot_not_reads_all" = "메시지 접근 권한이 없습니다."; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "그룹이름"; "lng_dlg_create_group" = "만들기"; "lng_no_contacts" = "연락처가 없습니다."; +"lng_no_chats" = "대화시 대화방이 존재 할 곳입니다."; "lng_contacts_loading" = "로드중.."; "lng_contacts_not_found" = "연락처를 찾을 수 없음"; +"lng_dlg_search_chat" = "이 채팅에서 검색"; +"lng_dlg_search_for_messages" = "메시지 검색"; "lng_settings_save" = "저장"; "lng_settings_upload" = "프로필 이미지 선택"; @@ -169,7 +173,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_invalid" = "올바르지 않은 아이디입니다."; "lng_username_occupied" = "사용중인 아이디입니다."; "lng_username_too_short" = "아이디가 너무 짧습니다."; -"lng_username_bad_symbols" = "올바르지 않은 아이디입니다."; +"lng_username_bad_symbols" = "아이디에 올바르지 않은 문자가 있습니다."; "lng_username_available" = "사용 가능한 아이디입니다."; "lng_username_not_found" = "아이디 @{user}를 찾을 수 없습니다."; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "데스크탑 알림"; "lng_settings_show_name" = "발신인 표시"; "lng_settings_show_preview" = "메시지 미리보기"; +"lng_settings_use_windows" = "윈도우 알림 사용"; "lng_settings_sound_notify" = "소리 재생"; "lng_notification_preview" = "새로운 메시지가 있습니다."; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "연결 유형:"; "lng_connection_auto_connecting" = "기본값 (연결중..)"; -"lng_connection_auto" = "기본값 ({type} 사용)"; -"lng_connection_http_proxy" = "HTTP 프록시"; -"lng_connection_tcp_proxy" = "TCP 프록시"; +"lng_connection_auto" = "기본값 ({transport} 사용)"; +"lng_connection_proxy_connecting" = "프록시 연결 중..."; +"lng_connection_proxy" = "{transport} 프록시 연결"; "lng_connection_header" = "연결 유형"; "lng_connection_auto_rb" = "자동 (사용 가능하다면 TCP 아니면 HTTP 사용)"; "lng_connection_http_proxy_rb" = "HTTP (커스텀 HTTP 프록시)"; "lng_connection_tcp_proxy_rb" = "TCP (커스텀 socks5-proxy)"; +"lng_connection_try_ipv6" = "IPv6로 연결 시도 중"; "lng_connection_host_ph" = "호스트네임"; "lng_connection_port_ph" = "포트"; "lng_connection_user_ph" = "아이디"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "해당 세션을 강제 종료 하시겠습니까?"; "lng_settings_reset_button" = "종료"; "lng_settings_reset_done" = "다른 모든 세션이 강제 종료 되었습니다."; +"lng_settings_ask_question" = "질문하기"; +"lng_settings_ask_sure" = "텔레그램에 관한 질문은 자원봉사자들이 답변해 드립니다. 신속한 답변을 위해 노력하지만 답변이 다소 늦을 수 있습니다.\n\n일반적인 문제와 해결방법에 대해서는 자주 묻는 질문을 확인해 보세요."; +"lng_settings_faq_button" = "자주 묻는 질문 으로 이동"; +"lng_settings_ask_ok" = "질문하기"; +"lng_settings_faq" = "텔레그램 자주 묻는 질문"; "lng_settings_logout" = "로그아웃"; "lng_sure_logout" = "로그아웃을 하시겠습니까?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "정보"; "lng_profile_about_section" = "취소"; "lng_profile_settings_section" = "환경설정"; +"lng_profile_actions_section" = "동작"; "lng_profile_bot_settings" = "환경설정"; "lng_profile_bot_help" = "도움말"; "lng_profile_participants_section" = "사용자"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "수정"; "lng_profile_enable_notifications" = "알림"; "lng_profile_clear_history" = "히스토리 초기화"; +"lng_profile_delete_conversation" = "대화 지우기"; +"lng_profile_clear_and_exit" = "삭제 후 종료"; +"lng_profile_search_messages" = "메시지 검색"; +"lng_profile_block_user" = "차단하기"; +"lng_profile_unblock_user" = "차단해제하기"; +"lng_profile_block_bot" = "봇 중지 및 차단"; +"lng_profile_unblock_bot" = "봇 차단해제"; "lng_profile_send_message" = "메세지 전송"; "lng_profile_share_contact" = "연락처 공유"; "lng_profile_invite_to_group" = "그룹에 추가"; @@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "파일 내역"; "lng_profile_audios" = "{count:_not_used_|#개의 음성 메시지|#개의 음성 메시지} »"; "lng_profile_audios_header" = "음성 메시지 내역"; +"lng_profile_audio_files_header" = "재생목록"; "lng_profile_show_all_types" = "모든 유형 보기"; "lng_profile_copy_phone" = "전화번호 복사"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "새로운 그룹"; "lng_failed_add_participant" = "사용자를 초대할 수 없습니다. 나중에 다시 시도해주세요."; +"lng_failed_add_not_mutual" = "죄송합니다. 그룹방에서 대화상대방이 나갔을 경우,\n상대 전화번호가 있는 분만 초대가 가능합니다.\n(서로 전화번호가 등록되어져 있어야만 가능)"; "lng_sure_delete_contact" = "{contact} 님을 주소록에서 \n삭제하시겠습니까?"; "lng_sure_delete_history" = "{contact} 님과 관련된 모든 메시지를 \n삭제하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; +"lng_sure_delete_group_history" = "그룹<<{group}>> 방의 모든 메시지 기록을 삭제하시겠습니까?\n\n이 작업은 취소가 불가능합니다."; "lng_sure_delete_and_exit" = "그룹 «{group}» 방에서 모든 메시지를 \n삭제하시고 퇴장하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; -"lng_message_empty" = "(없음)"; +"lng_message_empty" = "메시지 없음"; +"lng_media_unsupported" = "지원하지 않는 미디어"; "lng_action_add_user" = "{from} 님께서 {user} 님을 초대하셨습니다."; "lng_action_kick_user" = "{from} 님께서 {user} 님을 추방하셨습니다."; @@ -457,12 +480,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_send_button" = "보내기"; "lng_message_ph" = "메시지 쓰기"; -"lng_record_cancel" = "이 영역에서 마우스 클릭을 해제하시면 취소가 됩니다."; +"lng_record_cancel" = "이 영역 밖에서 마우스 클릭을 해제하시면 취소가 됩니다."; "lng_empty_history" = ""; "lng_willbe_history" = "대화하실 방을 선택해주세요."; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "회원님"; "lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?"; +"lng_unblock_button" = "차단해제"; "lng_bot_start" = "시작"; "lng_bot_choose_group" = "그룹 선택"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user}님이 입력중입니다."; "lng_users_typing" = "{user}님과 {second_user}님이 입력중입니다."; "lng_many_typing" = "{count:_not_used_|#명이|#명이} 입력중입니다"; +"lng_send_action_record_video" = "비디오 녹화 중"; +"lng_user_action_record_video" = "{user}님이 녹화중입니다."; +"lng_send_action_upload_video" = "비디오 전송 중"; +"lng_user_action_upload_video" = "{user}님이 비디오를 전송 중입니다."; +"lng_send_action_record_audio" = "오디오 녹음 중"; +"lng_user_action_record_audio" = "{user}님이 오디오를 녹음 중입니다."; +"lng_send_action_upload_audio" = "오디오 전송 중"; +"lng_user_action_upload_audio" = "{user}님이 오디오를 전송 중입니다."; +"lng_send_action_upload_photo" = "사진 전송 중"; +"lng_user_action_upload_photo" = "{user}님이 사진을 전송 중입니다."; +"lng_send_action_upload_file" = "파일을 전송 중"; +"lng_user_action_upload_file" = "{user}님이 사진을 전송 중입니다."; +"lng_send_action_geo_location" = "위치 선택 중"; +"lng_user_action_geo_location" = "{user}님이 위치를 선택 중입니다."; +"lng_send_action_choose_contact" = "연락처 선택 중"; +"lng_user_action_choose_contact" = "{user}님이 연락처를 선택 중입니다."; "lng_unread_bar" = "{count:_not_used_|#개의 읽지 않은 메시지|#개의 읽지 않은 메시지}"; "lng_maps_point" = "위치"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "음성메시지 열기"; "lng_context_save_audio" = "음성메시지를 다른 이름으로 저장.."; "lng_context_pack_info" = "팩 정보"; +"lng_context_pack_add" = "스티커 추가"; "lng_context_open_file" = "파일 열기"; "lng_context_save_file" = "파일을 다른 이름으로 저장.."; "lng_context_forward_file" = "파일 전달"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "새로운 버전에서는 신규 봇 API를 무료로 공개합니다. 개발자라면 누구나 게임, 서비스나 통합 봇등 개발이 가능합니다. \n\n{blog_link}에서 자세한 사항을 알아보세요."; +"lng_new_version_text" = "— 프로필 화면에서 사용자 차단\n— 윈도우 알림 지원\n— 리눅스 입력 방법 수정 (Fcitx and IBus)"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index b56c5132e..a4febb0f4 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Telegram openen"; "lng_minimize_to_tray" = "Minimaliseer naar systeemvak"; "lng_quit_from_tray" = "Telegram afsluiten"; -"lng_tray_icon_text" = "Telegram is nog steeds actief,\nJe kunt dit wijzigen via instellingen.\n\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen."; +"lng_tray_icon_text" = "Telegram is nog steeds actief, \nje kunt dit wijzigen via instellingen.\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen."; "lng_month1" = "januari"; "lng_month2" = "februari"; @@ -69,8 +69,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Probeer nu"; "lng_status_service_notifications" = "servicemeldingen"; +"lng_status_support" = "ondersteuning"; "lng_status_bot" = "bot"; -"lng_status_bot_reads_all" = "toegang tot berichten"; +"lng_status_bot_reads_all" = "toegang tot berichten"; "lng_status_bot_not_reads_all" = "geen toegang tot berichten"; "lng_status_offline" = "lang geleden gezien"; "lng_status_recently" = "recent gezien"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Groepsnaam"; "lng_dlg_create_group" = "Maak"; "lng_no_contacts" = "Je hebt geen contacten"; +"lng_no_chats" = "Hier komen je chats"; "lng_contacts_loading" = "Bezig met laden"; "lng_contacts_not_found" = "Geen contacten gevonden"; +"lng_dlg_search_chat" = "Zoek in deze chat"; +"lng_dlg_search_for_messages" = "Zoek berichten"; "lng_settings_save" = "Opslaan"; "lng_settings_upload" = "Profielfoto instellen"; @@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Gebruikersnaam wijzigen"; "lng_username_about" = "Je kunt hier je gebruikersnaam kiezen. \nHiermee kunnen anderen je vinden \nen contact met je opnemen zonder \nje telefoonnummer te weten.\n\na-z, 0-9 en underscore is toegestaan. \nDe minimale lengte is 5 tekens."; -"lng_username_invalid" = "Deze naam is ongeldig."; -"lng_username_occupied" = "Sorry, deze gebruikersnaam is al bezet."; -"lng_username_too_short" = "Deze naam is te kort."; -"lng_username_bad_symbols" = "Sorry, deze naam bevat ongeldige tekens."; -"lng_username_available" = "Deze naam is beschikbaar."; +"lng_username_invalid" = "Deze gebruikersnaam is ongeldig."; +"lng_username_occupied" = "Deze gebruikersnaam is al bezet"; +"lng_username_too_short" = "Deze gebruikersnaam is te kort."; +"lng_username_bad_symbols" = "Deze gebruikersnaam bevat ongeldige tekens."; +"lng_username_available" = "Deze gebruikersnaam is beschikbaar."; "lng_username_not_found" = "Gebruiker @{user} niet gevonden."; "lng_settings_section_contact_info" = "Contactgegevens"; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Desktopmeldingen"; "lng_settings_show_name" = "Afzender weergeven"; "lng_settings_show_preview" = "Voorvertoning weergeven"; +"lng_settings_use_windows" = "Windows-berichtgeving gebruiken"; "lng_settings_sound_notify" = "Geluiden afspelen"; "lng_notification_preview" = "Je hebt een nieuw bericht"; @@ -289,7 +294,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "De hint moet anders zijn dan je wachtwoord."; "lng_cloud_password_email" = "Herstel-e-mailadres invoeren"; "lng_cloud_password_bad_email" = "Ongeldig e-mailadres, probeer een andere."; -"lng_cloud_password_about" = "Naast de code die je per SMS ontvangt kun je een extra wachtwoord instellen voor als je inlogt op een nieuw apparaat."; +"lng_cloud_password_about" = "Dit wachtwoord is nodig als je inlogt vanaf een nieuw apparaat, naast de SMS die je ontvangt."; "lng_cloud_password_about_recover" = "Let op: Echt geen herstel-emailadres\nopgeven voor je wachtwoord?\n\nBij verlies van je wachtwoord ben je\nook de toegang tot Telegram kwijt."; "lng_cloud_password_almost" = "Een bevestigingslink is naar\nhet e-mailadres verstuurd.\n\ntwee-staps-verificatie is actief\nna het klikken van de e-mail-link."; "lng_cloud_password_was_set" = "Twee-staps-verificatie ingeschakeld."; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Verbindingstype:"; "lng_connection_auto_connecting" = "Standaard (verbinden)"; -"lng_connection_auto" = "Standaard ({type} wordt gebruikt)"; -"lng_connection_http_proxy" = "HTTP met proxy"; -"lng_connection_tcp_proxy" = "TCP met proxy"; +"lng_connection_auto" = "Standaard ({transport} wordt gebruikt)"; +"lng_connection_proxy_connecting" = "Verbinden via proxy.."; +"lng_connection_proxy" = "{transport} met proxy"; "lng_connection_header" = "Verbindingstype"; "lng_connection_auto_rb" = "Auto (TCP indien beschikbaar of HTTP)"; "lng_connection_http_proxy_rb" = "HTTP met aangepaste http-proxy"; "lng_connection_tcp_proxy_rb" = "TCP met aangepaste socks5-proxy"; +"lng_connection_try_ipv6" = "Verbinden via IPV6"; "lng_connection_host_ph" = "Hostnaam"; "lng_connection_port_ph" = "Poort"; "lng_connection_user_ph" = "Gebruikersnaam"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Deze sessie beëindigen?"; "lng_settings_reset_button" = "Beëindigen"; "lng_settings_reset_done" = "Alle andere sessies zijn beëindigd"; +"lng_settings_ask_question" = "Een vraag stellen"; +"lng_settings_ask_sure" = "De ondersteuning voor Telegram wordt gedaan door vrijwilligers. We proberen zo snel mogelijk te reageren maar het kan even duren. \n\nBekijk ook de veelgestelde vragen, deze bevat belangrijke tips en antwoorden op de meest gestelde vragen. "; +"lng_settings_faq_button" = "Veelgestelde vragen"; +"lng_settings_ask_ok" = "Vraag"; +"lng_settings_faq" = "Veelgestelde vragen"; "lng_settings_logout" = "Uitloggen"; "lng_sure_logout" = "Weet je zeker dat je wilt uitloggen?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Over"; "lng_profile_settings_section" = "Instellingen"; +"lng_profile_actions_section" = "Acties"; "lng_profile_bot_settings" = "Instellingen"; "lng_profile_bot_help" = "Help"; "lng_profile_participants_section" = "Deelnemers"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Wijzig"; "lng_profile_enable_notifications" = "Meldingen"; "lng_profile_clear_history" = "Geschiedenis wissen"; +"lng_profile_delete_conversation" = "Gesprek verwijderen"; +"lng_profile_clear_and_exit" = "Verwijder en verlaat"; +"lng_profile_search_messages" = "Zoek berichten"; +"lng_profile_block_user" = "Blokkeer gebruiker"; +"lng_profile_unblock_user" = "Deblokkeer gebruiker"; +"lng_profile_block_bot" = "Stop en blokkeer bot"; +"lng_profile_unblock_bot" = "Deblokkeer bot"; "lng_profile_send_message" = "Bericht sturen"; "lng_profile_share_contact" = "Contact delen"; "lng_profile_invite_to_group" = "Groepslid maken"; @@ -367,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Bestandsoverzicht"; "lng_profile_audios" = "{count:_not_used_|# spraakbericht|# spraakberichten} »"; "lng_profile_audios_header" = "Overzicht van spraakberichten"; +"lng_profile_audio_files_header" = "Afspeellijst"; "lng_profile_show_all_types" = "Alles weergeven"; "lng_profile_copy_phone" = "Telefoonnummer kopiëren"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nieuwe groep"; "lng_failed_add_participant" = "Gebruiker toevoegen mislukt. Probeer het later nog eens."; +"lng_failed_add_not_mutual" = "Sorry, als een persoon verlaat, \nKan alleen een wederzijds\ncontact ze weer toevoegen\n(opgeslagen telefoonnummers)."; "lng_sure_delete_contact" = "{contact} echt verwijderen uit contacten?"; "lng_sure_delete_history" = "Geschiedenis met {contact} echt wissen? \n\nDeze actie kan niet ongedaan worden gemaakt."; +"lng_sure_delete_group_history" = "Echt de geschiedenis van «{group}» wissen?\n\nHerstellen is niet mogelijk. "; "lng_sure_delete_and_exit" = "Wil je de groep «{group}» verlaten en de geschiedenis wissen?\n\nDeze actie kan niet ongedaan worden gemaakt."; -"lng_message_empty" = "(leeg)"; +"lng_message_empty" = "Leeg bericht"; +"lng_media_unsupported" = "Niet-ondersteunde media"; "lng_action_add_user" = "{from} heeft {user} toegevoegd"; "lng_action_kick_user" = "{from} heeft {user} verwijderd"; @@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Jij"; "lng_bot_description" = "Wat kan deze bot? "; +"lng_unblock_button" = "Deblokkeer"; "lng_bot_start" = "Begin"; "lng_bot_choose_group" = "Groep kiezen"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} is aan het typen"; "lng_users_typing" = "{user} en {second_user} zijn aan het typen"; "lng_many_typing" = "{count:_not_used_|# is|# zijn} aan het typen"; +"lng_send_action_record_video" = "video opnemen"; +"lng_user_action_record_video" = "{user} neemt video op"; +"lng_send_action_upload_video" = "video versturen"; +"lng_user_action_upload_video" = "{user} verstuurt video"; +"lng_send_action_record_audio" = "geluid opnemen"; +"lng_user_action_record_audio" = "{user} neemt geluid op"; +"lng_send_action_upload_audio" = "geluid versturen"; +"lng_user_action_upload_audio" = "{user} verstuurt geluid"; +"lng_send_action_upload_photo" = "foto versturen"; +"lng_user_action_upload_photo" = "{user} verstuurt een foto"; +"lng_send_action_upload_file" = "bestand versturen"; +"lng_user_action_upload_file" = "{user} verstuurt een bestand"; +"lng_send_action_geo_location" = "locatie kiezen"; +"lng_user_action_geo_location" = "{user} kiest een locatie"; +"lng_send_action_choose_contact" = "contact kiezen"; +"lng_user_action_choose_contact" = "{user} kiest een contact"; "lng_unread_bar" = "{count:_not_used_|# ongelezen bericht|# ongelezen berichten}"; "lng_maps_point" = "Locatie"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Geluidsbestand openen"; "lng_context_save_audio" = "Geluidsbestand opslaan als"; "lng_context_pack_info" = "Bundelinformatie"; +"lng_context_pack_add" = "Stickers toevoegen"; "lng_context_open_file" = "Bestand openen"; "lng_context_save_file" = "Bestand opslaan als"; "lng_context_forward_file" = "Bestand doorsturen"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "Deze versie heeft ondersteuning voor de nieuwe bot-API, gratis voor iedereen. Handig met programmeren? Maak dan je eigen bots voor spelletjes, diensten en integraties. \n\nMeer weten? kijk op: {blog_link}"; +"lng_new_version_text" = "— Blokkeer gebruikers vanaf de profielpagina\n— Ondersteuning voor Windows toast-meldingen\n— Problemen met invoermethodes onder Linux (Fcitx and IBus) opgelost"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 55ff771a6..89c481fe4 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Abrir Telegram"; "lng_minimize_to_tray" = "Minimizar"; "lng_quit_from_tray" = "Sair do Telegram"; -"lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\n\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones ocultos."; +"lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones "; "lng_month1" = "Janeiro"; "lng_month2" = "Fevereiro"; @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Tentar agora"; "lng_status_service_notifications" = "notificações de serviço"; +"lng_status_support" = "suporte"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "tem acesso as mensagens"; "lng_status_bot_not_reads_all" = "não tem acesso as mensagens"; @@ -156,8 +157,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nome do grupo"; "lng_dlg_create_group" = "Criar"; "lng_no_contacts" = "Você não possui contatos"; +"lng_no_chats" = "Seus chats estarão aqui"; "lng_contacts_loading" = "Carregando.."; "lng_contacts_not_found" = "Nenhum contato encontrado"; +"lng_dlg_search_chat" = "Buscar nesse chat"; +"lng_dlg_search_for_messages" = "Buscar por mensagens"; "lng_settings_save" = "Salvar"; "lng_settings_upload" = "Definir Foto de Perfil"; @@ -166,11 +170,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Alterar nome de usuário"; "lng_username_about" = "Você pode escolher um nome de usuário no Telegram.\nAssim, outras pessoas poderão te encontrar\npelo nome de usuário e entrar em contato\nsem precisar saber seu telefone.\n\nVocê pode usar a-z, 0-9 e underline.\nO tamanho mínimo é 5 caracteres."; -"lng_username_invalid" = "Esse nome é inválido."; -"lng_username_occupied" = "Esse nome já está ocupado."; -"lng_username_too_short" = "Esse nome é muito curto."; -"lng_username_bad_symbols" = "Esse nome contém símbolos incompatíveis."; -"lng_username_available" = "Esse nome está disponível."; +"lng_username_invalid" = "Nome de usuário inválido."; +"lng_username_occupied" = "Nome de usuário ocupado."; +"lng_username_too_short" = "Nome de usuário muito curto."; +"lng_username_bad_symbols" = "Nome de usuário com símbolos incompatíveis."; +"lng_username_available" = "Nome de usuário disponível."; "lng_username_not_found" = "Usuário @{user} não encontrado."; "lng_settings_section_contact_info" = "Informação de contato"; @@ -182,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notificações na área de trabalho"; "lng_settings_show_name" = "Mostrar nome de quem enviou"; "lng_settings_show_preview" = "Mostrar pré-visualização da mensagem"; +"lng_settings_use_windows" = "Usar notificações do Windows"; "lng_settings_sound_notify" = "Tocar som"; "lng_notification_preview" = "Você tem uma nova mensagem"; @@ -301,13 +306,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo de conexão:"; "lng_connection_auto_connecting" = "Padrão (conectando..)"; -"lng_connection_auto" = "Padrão ({type} usado)"; -"lng_connection_http_proxy" = "HTTP com proxy"; -"lng_connection_tcp_proxy" = "TCP com proxy"; +"lng_connection_auto" = "Padrão ({transport} usado)"; +"lng_connection_proxy_connecting" = "Conectando via proxy..."; +"lng_connection_proxy" = "{transport} com proxy"; "lng_connection_header" = "Tipo de conexão"; "lng_connection_auto_rb" = "Auto (TCP se disponível ou HTTP)"; "lng_connection_http_proxy_rb" = "HTTP com http-proxy customizado"; "lng_connection_tcp_proxy_rb" = "TCP com socks5-proxy customizado"; +"lng_connection_try_ipv6" = "Tentando conexão via IPv6"; "lng_connection_host_ph" = "Nome do host"; "lng_connection_port_ph" = "Porta"; "lng_connection_user_ph" = "Nome de usuário"; @@ -319,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Você deseja terminar essa sessão?"; "lng_settings_reset_button" = "Encerrar"; "lng_settings_reset_done" = "Outras sessões encerradas"; +"lng_settings_ask_question" = "Fazer uma Pergunta"; +"lng_settings_ask_sure" = "Entenda que o suporte do Telegram é feito por voluntários. Tentaremos responder o mais rápido possível, mas poderemos demorar um pouco.\n\nPor favor verifique a página de Perguntas Frequentes do Telegram: há dicas e respostas para a maioria das perguntas."; +"lng_settings_faq_button" = "Perguntas Frequentes"; +"lng_settings_ask_ok" = "Perguntar"; +"lng_settings_faq" = "Perguntas Frequentes"; "lng_settings_logout" = "Sair"; "lng_sure_logout" = "Tem certeza que deseja sair?"; @@ -338,6 +349,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Sobre"; "lng_profile_settings_section" = "Configurações"; +"lng_profile_actions_section" = "Ações"; "lng_profile_bot_settings" = "Configurações"; "lng_profile_bot_help" = "Ajuda"; "lng_profile_participants_section" = "Membros"; @@ -347,6 +359,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Editar"; "lng_profile_enable_notifications" = "Notificações"; "lng_profile_clear_history" = "Limpar histórico"; +"lng_profile_delete_conversation" = "Apagar conversa"; +"lng_profile_clear_and_exit" = "Apagar e sair"; +"lng_profile_search_messages" = "Buscar mensagens"; +"lng_profile_block_user" = "Bloquear usuário"; +"lng_profile_unblock_user" = "Desbloquear usuário"; +"lng_profile_block_bot" = "Parar e bloquear o bot"; +"lng_profile_unblock_bot" = "Desbloquear bot"; "lng_profile_send_message" = "Enviar Mensagem"; "lng_profile_share_contact" = "Compartilhar"; "lng_profile_invite_to_group" = "Adicionar ao Grupo"; @@ -360,13 +379,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_shared_media" = "Mídia compartilhada"; "lng_profile_no_media" = "Nenhuma mídia nessa conversa."; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; -"lng_profile_photos_header" = "Visualização de fotos"; +"lng_profile_photos_header" = "Fotos"; "lng_profile_videos" = "{count:_not_used_|# arquivo de vídeo|# arquivo de vídeos} »"; -"lng_profile_videos_header" = "Visualização de vídeos"; +"lng_profile_videos_header" = "Vídeos"; "lng_profile_files" = "{count:_not_used_|# arquivo|# arquivos} »"; -"lng_profile_files_header" = "Visualização de arquivos"; +"lng_profile_files_header" = "Arquivos"; "lng_profile_audios" = "{count:_not_used_|# mensagem de voz|# mensagens de voz} »"; -"lng_profile_audios_header" = "Visualização de mensagens de voz"; +"lng_profile_audios_header" = "Mensagens de voz"; +"lng_profile_audio_files_header" = "Reprodução"; "lng_profile_show_all_types" = "Mostrar todos os tipos"; "lng_profile_copy_phone" = "Copiar número de telefone"; @@ -377,13 +397,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Novo Grupo"; "lng_failed_add_participant" = "Não foi possível adicionar o usuário. Tente novamente mais tarde."; +"lng_failed_add_not_mutual" = "Desculpe, se uma pessoa deixou o\ngrupo, apenas um contato mútuo pode\ncolocá-la de volta (eles precisam do seu \ncontato no telefone e você o deles)"; "lng_sure_delete_contact" = "Você tem certeza que deseja remover {contact} da sua lista de contatos?"; "lng_sure_delete_history" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens com {contact}?\n\nEssa ação não pode ser desfeita."; +"lng_sure_delete_group_history" = "Você tem certeza que deseja apagar todo o histórico de «{group}»?\n\nEssa ação não pode ser desfeita."; "lng_sure_delete_and_exit" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens e deixar «{group}»?\n\nEssa ação não pode ser desfeita."; -"lng_message_empty" = "(vazio)"; +"lng_message_empty" = "Mensagem Vazia"; +"lng_media_unsupported" = "Mídia Não-Suportada"; "lng_action_add_user" = "{from} adicionou {user}"; "lng_action_kick_user" = "{from} removeu {user}"; @@ -463,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Você"; "lng_bot_description" = "O que esse bot pode fazer?"; +"lng_unblock_button" = "Desbloquear"; "lng_bot_start" = "Iniciar"; "lng_bot_choose_group" = "Escolher Grupo"; @@ -475,6 +499,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} está escrevendo"; "lng_users_typing" = "{user} e {second_user} estão escrevendo"; "lng_many_typing" = "{count:_not_used_|# está|# estão} escrevendo"; +"lng_send_action_record_video" = "gravando vídeo"; +"lng_user_action_record_video" = "{user} está gravando vídeo"; +"lng_send_action_upload_video" = "enviando vídeo"; +"lng_user_action_upload_video" = "{user} está enviando vídeo"; +"lng_send_action_record_audio" = "gravando áudio"; +"lng_user_action_record_audio" = "{user} está gravando áudio"; +"lng_send_action_upload_audio" = "enviando áudio"; +"lng_user_action_upload_audio" = "{user} está gravando áudio"; +"lng_send_action_upload_photo" = "enviando foto"; +"lng_user_action_upload_photo" = "{user} está enviando foto"; +"lng_send_action_upload_file" = "enviando arquivo"; +"lng_user_action_upload_file" = "{user} está enviando arquivo"; +"lng_send_action_geo_location" = "escolhendo local"; +"lng_user_action_geo_location" = "{user} está escolhendo local"; +"lng_send_action_choose_contact" = "escolhendo contato"; +"lng_user_action_choose_contact" = "{user} está escolhendo contato"; "lng_unread_bar" = "{count:_not_used_|# mensagem não lida|# mensagens não lidas}"; "lng_maps_point" = "Localização"; @@ -508,6 +548,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Abrir Áudio"; "lng_context_save_audio" = "Salvar Áudio Como.."; "lng_context_pack_info" = "Informação do pacote"; +"lng_context_pack_add" = "Adicionar aos Stickers"; "lng_context_open_file" = "Abrir Arquivo"; "lng_context_save_file" = "Salvar Arquivo Como.."; "lng_context_forward_file" = "Encaminhar Arquivo"; @@ -600,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "Essa nova versão inclui suporte para bots usando a nova API de bots. Se você for um engenheiro, crie seus próprios bots para jogos, serviços ou integrações.\n\nLeia mais em {blog_link}"; +"lng_new_version_text" = "— Bloqueie usuários direto da página do perfil\n— Adicionado suporte às notificações de sistema do Windows\n— Consertado métodos de entrada no Linux (Fcitx e IBus)"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 146e69583..75d2fde67 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "localimageloader.h" #include "gui/filedialog.h" +#include "audio.h" #include LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0) @@ -77,12 +78,15 @@ void LocalImageLoaderPrivate::prepareImages() { type = ToPrepareDocument; } } - if (type == ToPrepareDocument) { - mime = mimeTypeForFile(info).name(); - } if (type != ToPrepareAuto && info.size() < MaxUploadPhotoSize) { bool opaque = (mime != stickerMime); img = App::readImage(file, 0, opaque, &animated); + if (animated) { + type = ToPrepareDocument; + } + } + if (type == ToPrepareDocument) { + mime = mimeTypeForFile(info).name(); } filename = info.fileName(); filesize = info.size(); @@ -164,7 +168,41 @@ void LocalImageLoaderPrivate::prepareImages() { MTPDocument document(MTP_documentEmpty(MTP_long(0))); MTPAudio audio(MTP_audioEmpty(MTP_long(0))); + bool isSong = false; QByteArray jpeg; + if (type == ToPrepareDocument) { + if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || mime == qstr("audio/flac") || + filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) || + filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive) || + filename.endsWith(qstr(".flac"), Qt::CaseInsensitive)) { + + QImage cover; + QByteArray coverBytes, coverFormat; + MTPDocumentAttribute audioAttribute = audioReadSongAttributes(file, data, cover, coverBytes, coverFormat); + if (audioAttribute.type() == mtpc_documentAttributeAudio) { + attributes.push_back(audioAttribute); + isSong = true; + if (!cover.isNull()) { // cover to thumb + int32 cw = cover.width(), ch = cover.height(); + if (cw < 20 * ch && ch < 20 * cw) { + QPixmap full = (cw > 90 || ch > 90) ? QPixmap::fromImage(cover.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(cover, Qt::ColorOnly); + { + QByteArray thumbFormat = "JPG"; + int32 thumbQuality = 87; + + QBuffer jpegBuffer(&jpeg); + full.save(&jpegBuffer, thumbFormat, thumbQuality); + } + + photoThumbs.insert('0', full); + thumb = MTP_photoSize(MTP_string(""), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0)); + + thumbId = MTP::nonce(); + } + } + } + } + } if (type == ToPreparePhoto) { int32 w = img.width(), h = img.height(); @@ -186,10 +224,10 @@ void LocalImageLoaderPrivate::prepareImages() { } if (!filesize) filesize = jpeg.size(); - photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector(photoSizes)); + photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector(photoSizes)); thumbId = id; - } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull()) { + } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull() && !isSong) { int32 w = img.width(), h = img.height(); QByteArray thumbFormat = "JPG"; int32 thumbQuality = 87; @@ -219,7 +257,7 @@ void LocalImageLoaderPrivate::prepareImages() { if (type == ToPrepareDocument) { document = MTP_document(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_string(mime), MTP_int(filesize), thumb, MTP_int(MTP::maindc()), MTP_vector(attributes)); } else if (type == ToPrepareAudio) { - audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc())); + audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc())); } { diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 9745126ba..125041324 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -18,6 +18,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "localstorage.h" +#include "mainwidget.h" +#include "window.h" #include "lang.h" namespace { @@ -505,6 +507,7 @@ namespace { lskUserSettings = 0x09, // no data lskRecentHashtags = 0x0a, // no data lskStickers = 0x0b, // no data + lskSavedPeers = 0x0c, // no data }; typedef QMap DraftsMap; @@ -517,6 +520,8 @@ namespace { typedef QPair FileLocationPair; typedef QMap FileLocationPairs; FileLocationPairs _fileLocationPairs; + typedef QMap FileLocationAliases; + FileLocationAliases _fileLocationAliases; FileKey _locationsKey = 0; FileKey _recentStickersKeyOld = 0, _stickersKey = 0; @@ -528,13 +533,15 @@ namespace { FileKey _recentHashtagsKey = 0; bool _recentHashtagsWereRead = false; + FileKey _savedPeersKey = 0; + typedef QPair FileDesc; // file, size typedef QMap StorageMap; StorageMap _imagesMap, _stickerImagesMap, _audiosMap; int32 _storageImagesSize = 0, _storageStickersSize = 0, _storageAudiosSize = 0; bool _mapChanged = false; - int32 _oldMapVersion = 0; + int32 _oldMapVersion = 0, _oldSettingsVersion = 0; enum WriteMapWhen { WriteMapNow, @@ -566,14 +573,28 @@ namespace { _writeMap(WriteMapFast); } quint32 size = 0; - for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { + for (FileLocations::const_iterator i = _fileLocations.cbegin(), e = _fileLocations.cend(); i != e; ++i) { // location + type + namelen + name + date + size size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(i.value().name) + _dateTimeSize() + sizeof(quint32); } + //end mark + size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(QString()) + _dateTimeSize() + sizeof(quint32); + size += sizeof(quint32); // aliases count + for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) { + // alias + location + size += sizeof(quint64) * 2 + sizeof(quint64) * 2; + } + EncryptedDescriptor data(size); for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { data.stream << quint64(i.key().first) << quint64(i.key().second) << quint32(i.value().type) << i.value().name << i.value().modified << quint32(i.value().size); } + data.stream << quint64(0) << quint64(0) << quint32(0) << QString() << QDateTime::currentDateTime() << quint32(0); + data.stream << quint32(_fileLocationAliases.size()); + for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) { + data.stream << quint64(i.key().first) << quint64(i.key().second) << quint64(i.value().first) << quint64(i.value().second); + } + FileWriteDescriptor file(_locationsKey); file.writeEncrypted(data); } @@ -588,12 +609,18 @@ namespace { return; } + bool endMarkFound = false; while (!locations.stream.atEnd()) { quint64 first, second; FileLocation loc; quint32 type; locations.stream >> first >> second >> type >> loc.name >> loc.modified >> loc.size; + if (!first && !second && !type && loc.name.isEmpty() && !loc.size) { // end mark + endMarkFound = true; + break; + } + MediaKey key(first, second); loc.type = StorageFileType(type); @@ -604,6 +631,16 @@ namespace { _writeLocations(); } } + + if (endMarkFound) { + quint32 cnt; + locations.stream >> cnt; + for (quint32 i = 0; i < cnt; ++i) { + quint64 kfirst, ksecond, vfirst, vsecond; + locations.stream >> kfirst >> ksecond >> vfirst >> vsecond; + _fileLocationAliases.insert(MediaKey(kfirst, ksecond), MediaKey(vfirst, vsecond)); + } + } } mtpDcOptions *_dcOpts = 0; @@ -701,6 +738,15 @@ namespace { cSetDesktopNotify(v == 1); } break; + case dbiWindowsNotifications: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetWindowsNotifications(v == 1); + cSetCustomNotifies((App::wnd() ? App::wnd()->psHasNativeNotifications() : true) && !cWindowsNotifications()); + } break; + case dbiWorkMode: { qint32 v; stream >> v; @@ -736,6 +782,14 @@ namespace { }; } break; + case dbiTryIPv6: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetTryIPv6(v == 1); + } break; + case dbiSeenTrayTooltip: { qint32 v; stream >> v; @@ -996,6 +1050,14 @@ namespace { cSetDialogLastPath(path); } break; + case dbiSongVolume: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetSongVolume(snap(v / 1e6, 0., 1.)); + } break; + default: LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId)); return false; @@ -1217,7 +1279,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 13 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1233,11 +1295,13 @@ namespace { data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); + data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications()); data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); data.stream << quint32(dbiDialogLastPath) << cDialogLastPath(); + data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6)); { RecentEmojisPreload v(cRecentEmojisPreload()); @@ -1383,7 +1447,7 @@ namespace { DraftsNotReadMap draftsNotReadMap; StorageMap imagesMap, stickerImagesMap, audiosMap; qint64 storageImagesSize = 0, storageStickersSize = 0, storageAudiosSize = 0; - quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0; + quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0, savedPeersKey = 0; while (!map.stream.atEnd()) { quint32 keyType; map.stream >> keyType; @@ -1463,6 +1527,9 @@ namespace { case lskStickers: { map.stream >> stickersKey; } break; + case lskSavedPeers: { + map.stream >> savedPeersKey; + } break; default: LOG(("App Error: unknown key type in encrypted map: %1").arg(keyType)); return Local::ReadMapFailed; @@ -1486,6 +1553,7 @@ namespace { _locationsKey = locationsKey; _recentStickersKeyOld = recentStickersKeyOld; _stickersKey = stickersKey; + _savedPeersKey = savedPeersKey; _backgroundKey = backgroundKey; _userSettingsKey = userSettingsKey; _recentHashtagsKey = recentHashtagsKey; @@ -1505,6 +1573,9 @@ namespace { _readMtpData(); LOG(("Map read time: %1").arg(getms() - ms)); + if (_oldSettingsVersion < AppVersion) { + Local::writeSettings(); + } return Local::ReadMapDone; } @@ -1550,6 +1621,7 @@ namespace { if (_locationsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentStickersKeyOld) mapSize += sizeof(quint32) + sizeof(quint64); if (_stickersKey) mapSize += sizeof(quint32) + sizeof(quint64); + if (_savedPeersKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_backgroundKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_userSettingsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentHashtagsKey) mapSize += sizeof(quint32) + sizeof(quint64); @@ -1593,6 +1665,9 @@ namespace { if (_stickersKey) { mapData.stream << quint32(lskStickers) << quint64(_stickersKey); } + if (_savedPeersKey) { + mapData.stream << quint32(lskSavedPeers) << quint64(_savedPeersKey); + } if (_backgroundKey) { mapData.stream << quint32(lskBackground) << quint64(_backgroundKey); } @@ -1748,6 +1823,7 @@ namespace Local { cSetDcOptions(dcOpts); } + _oldSettingsVersion = settingsData.version; _settingsSalt = salt; } @@ -1789,7 +1865,7 @@ namespace Local { cSetDcOptions(dcOpts); } - quint32 size = 10 * (sizeof(quint32) + sizeof(qint32)); + quint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); for (mtpDcOptions::const_iterator i = dcOpts.cbegin(), e = dcOpts.cend(); i != e; ++i) { size += sizeof(quint32) + sizeof(quint32) + sizeof(quint32); size += sizeof(quint32) + _stringSize(QString::fromUtf8(i->ip.data(), i->ip.size())); @@ -1827,6 +1903,7 @@ namespace Local { const ConnectionProxy &proxy(cConnectionProxy()); data.stream << proxy.host << qint32(proxy.port) << proxy.user << proxy.password; } + data.stream << quint32(dbiTryIPv6) << qint32(cTryIPv6()); TWindowPos pos(cWindowPos()); data.stream << quint32(dbiWindowPosition) << qint32(pos.x) << qint32(pos.y) << qint32(pos.w) << qint32(pos.h) << qint32(pos.moncrc) << qint32(pos.maximized); @@ -1850,7 +1927,7 @@ namespace Local { _draftsNotReadMap.clear(); _stickerImagesMap.clear(); _audiosMap.clear(); - _locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = 0; + _locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = _savedPeersKey = 0; _mapChanged = true; _writeMap(WriteMapNow); @@ -1889,6 +1966,10 @@ namespace Local { return _oldMapVersion; } + int32 oldSettingsVersion() { + return _oldSettingsVersion; + } + void writeDraft(const PeerId &peer, const MessageDraft &draft) { if (!_working()) return; @@ -1989,12 +2070,21 @@ namespace Local { return (_draftsPositionsMap.constFind(peer) != _draftsPositionsMap.cend()); } - void writeFileLocation(const MediaKey &location, const FileLocation &local) { + void writeFileLocation(MediaKey location, const FileLocation &local) { if (local.name.isEmpty()) return; + FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location); + if (aliasIt != _fileLocationAliases.cend()) { + location = aliasIt.value(); + } + FileLocationPairs::iterator i = _fileLocationPairs.find(local.name); if (i != _fileLocationPairs.cend()) { if (i.value().second == local) { + if (i.value().first != location) { + _fileLocationAliases.insert(location, i.value().first); + _writeLocations(WriteMapFast); + } return; } if (i.value().first != location) { @@ -2012,7 +2102,12 @@ namespace Local { _writeLocations(WriteMapFast); } - FileLocation readFileLocation(const MediaKey &location, bool check) { + FileLocation readFileLocation(MediaKey location, bool check) { + FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location); + if (aliasIt != _fileLocationAliases.cend()) { + location = aliasIt.value(); + } + FileLocations::iterator i = _fileLocations.find(location); for (FileLocations::iterator i = _fileLocations.find(location); (i != _fileLocations.end()) && (i.key() == location);) { if (check) { @@ -2229,15 +2324,40 @@ namespace Local { return _storageAudiosSize; } + void _writeStorageImageLocation(QDataStream &stream, const StorageImageLocation &loc) { + stream << qint32(loc.width) << qint32(loc.height); + stream << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret); + } + + uint32 _storageImageLocationSize() { + // width + height + dc + volume + local + secret + return sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); + } + + StorageImageLocation _readStorageImageLocation(FileReadDescriptor &from) { + qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal; + quint64 thumbVolume, thumbSecret; + from.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret; + return StorageImageLocation(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret); + } + void _writeStickerSet(QDataStream &stream, uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); - if (it == cStickerSets().cend() || it->stickers.isEmpty()) return; + if (it == cStickerSets().cend()) return; - stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << quint32(it->stickers.size()); + bool notLoaded = (it->flags & MTPDstickerSet_flag_NOT_LOADED); + if (notLoaded) { + stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(-it->count) << qint32(it->hash) << qint32(it->flags); + return; + } else { + if (it->stickers.isEmpty()) return; + } + + stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(it->stickers.size()) << qint32(it->hash) << qint32(it->flags); for (StickerPack::const_iterator j = it->stickers.cbegin(), e = it->stickers.cend(); j != e; ++j) { DocumentData *doc = *j; - stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker->alt; - switch (doc->sticker->set.type()) { + stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker()->alt; + switch (doc->sticker()->set.type()) { case mtpc_inputStickerSetID: { stream << qint32(StickerSetTypeID); } break; @@ -2249,8 +2369,7 @@ namespace Local { stream << qint32(StickerSetTypeEmpty); } break; } - const StorageImageLocation &loc(doc->sticker->loc); - stream << qint32(loc.width) << qint32(loc.height) << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret); + _writeStorageImageLocation(stream, doc->sticker()->loc); } } @@ -2266,30 +2385,39 @@ namespace Local { } _writeMap(); } else { + int32 setsCount = 0; + quint32 size = sizeof(quint32) + _bytearraySize(cStickersHash()); + for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { + bool notLoaded = (i->flags & MTPDstickerSet_flag_NOT_LOADED); + if (notLoaded) { + if (!(i->flags & MTPDstickerSet_flag_disabled)) { // waiting to receive + return; + } + } else { + if (i->stickers.isEmpty()) continue; + } + + // id + access + title + shortName + stickersCount + hash + flags + size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32) + sizeof(qint32) * 2; + for (StickerPack::const_iterator j = i->stickers.cbegin(), e = i->stickers.cend(); j != e; ++j) { + DocumentData *doc = *j; + + // id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set + size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker()->alt) + sizeof(qint32); + + // loc + size += _storageImageLocationSize(); + } + ++setsCount; + } + if (!_stickersKey) { _stickersKey = genKey(); _mapChanged = true; _writeMap(WriteMapFast); } - quint32 size = sizeof(quint32) + _bytearraySize(cStickersHash()); - for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { - if (i->stickers.isEmpty()) continue; - - // id + access + title + shortName + stickersCount - size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32); - for (StickerPack::const_iterator j = i->stickers.cbegin(), e = i->stickers.cend(); j != e; ++j) { - DocumentData *doc = *j; - - // id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set - size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker->alt) + sizeof(qint32); - - // thumb-width + thumb-height + thumb-dc + thumb-volume + thumb-local + thumb-secret - size += sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); - } - } EncryptedDescriptor data(size); - data.stream << quint32(cStickerSets().size()) << cStickersHash(); - _writeStickerSet(data.stream, DefaultStickerSetId); + data.stream << quint32(setsCount) << cStickersHash(); _writeStickerSet(data.stream, CustomStickerSetId); for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { _writeStickerSet(data.stream, *i); @@ -2312,15 +2440,17 @@ namespace Local { StickerSets &sets(cRefStickerSets()); sets.clear(); - cSetStickerSetsOrder(StickerSetsOrder()); + + StickerSetsOrder &order(cRefStickerSetsOrder()); + order.clear(); RecentStickerPack &recent(cRefRecentStickers()); recent.clear(); cSetStickersHash(QByteArray()); - StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString())).value()); - StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString())).value()); + StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString(), 0, 0, MTPDstickerSet_flag_official)).value()); + StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString(), 0, 0, 0)).value()); QMap read; while (!stickers.stream.atEnd()) { @@ -2347,16 +2477,22 @@ namespace Local { } DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, ImagePtr(), dc, size, StorageImageLocation()); - if (!doc->sticker) continue; + if (!doc->sticker()) continue; if (value > 0) { def.stickers.push_back(doc); + ++def.count; } else { custom.stickers.push_back(doc); + ++custom.count; } if (recent.size() < StickerPanPerRow * StickerPanRowsPerPage && qAbs(value) > 1) recent.push_back(qMakePair(doc, qAbs(value))); } - if (def.stickers.isEmpty()) sets.remove(DefaultStickerSetId); + if (def.stickers.isEmpty()) { + sets.remove(DefaultStickerSetId); + } else { + order.push_front(DefaultStickerSetId); + } if (custom.stickers.isEmpty()) sets.remove(CustomStickerSetId); writeStickers(); @@ -2396,11 +2532,18 @@ namespace Local { for (uint32 i = 0; i < cnt; ++i) { quint64 setId = 0, setAccess = 0; QString setTitle, setShortName; - quint32 scnt = 0; + qint32 scnt = 0; stickers.stream >> setId >> setAccess >> setTitle >> setShortName >> scnt; + qint32 setHash = 0, setFlags = 0; + if (stickers.version > 8033) { + stickers.stream >> setHash >> setFlags; + } + if (setId == DefaultStickerSetId) { setTitle = lang(lng_stickers_default_set); + setFlags |= MTPDstickerSet_flag_official; + order.push_front(setId); } else if (setId == CustomStickerSetId) { setTitle = lang(lng_custom_stickers); } else if (setId) { @@ -2408,19 +2551,22 @@ namespace Local { } else { continue; } - StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName)).value()); + StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName, 0, setHash, setFlags)).value()); + if (scnt < 0) { // disabled not loaded set + set.count = -scnt; + continue; + } + set.stickers.reserve(scnt); QMap read; - for (uint32 j = 0; j < scnt; ++j) { + for (int32 j = 0; j < scnt; ++j) { quint64 id, access; QString name, mime, alt; qint32 date, dc, size, width, height, type, typeOfSet; stickers.stream >> id >> access >> date >> name >> mime >> dc >> size >> width >> height >> type >> alt >> typeOfSet; - qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal; - quint64 thumbVolume, thumbSecret; - stickers.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret; + StorageImageLocation thumb(_readStorageImageLocation(stickers)); if (read.contains(id)) continue; read.insert(id, true); @@ -2451,11 +2597,11 @@ namespace Local { attributes.push_back(MTP_documentAttributeImageSize(MTP_int(width), MTP_int(height))); } - StorageImageLocation thumb(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret); DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, thumb.dc ? ImagePtr(thumb) : ImagePtr(), dc, size, thumb); - if (!doc->sticker) continue; + if (!doc->sticker()) continue; set.stickers.push_back(doc); + ++set.count; } } @@ -2603,6 +2749,190 @@ namespace Local { cSetRecentSearchHashtags(search); } + uint32 _peerSize(PeerData *peer) { + uint32 result = sizeof(quint64) + sizeof(quint64) + _storageImageLocationSize(); + if (peer->chat) { + ChatData *chat = peer->asChat(); + + // name + count + date + version + admin + forbidden + left + invitationUrl + result += _stringSize(chat->name) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(chat->invitationUrl); + } else { + UserData *user = peer->asUser(); + + // first + last + phone + username + access + onlineTill + contact + botInfoVersion + result += _stringSize(user->firstName) + _stringSize(user->lastName) + _stringSize(user->phone) + _stringSize(user->username) + sizeof(quint64) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32); + } + return result; + } + + void _writePeer(QDataStream &stream, PeerData *peer) { + stream << quint64(peer->id) << quint64(peer->photoId); + _writeStorageImageLocation(stream, peer->photoLoc); + if (peer->chat) { + ChatData *chat = peer->asChat(); + + stream << chat->name << qint32(chat->count) << qint32(chat->date) << qint32(chat->version) << qint32(chat->admin); + stream << qint32(chat->forbidden ? 1 : 0) << qint32(chat->left ? 1 : 0) << chat->invitationUrl; + } else { + UserData *user = peer->asUser(); + + stream << user->firstName << user->lastName << user->phone << user->username << quint64(user->access) << qint32(user->onlineTill) << qint32(user->contact) << qint32(user->botInfo ? user->botInfo->version : -1); + } + } + + PeerData *_readPeer(FileReadDescriptor &from) { + PeerData *result = 0; + quint64 peerId = 0, photoId = 0; + from.stream >> peerId >> photoId; + + StorageImageLocation photoLoc(_readStorageImageLocation(from)); + + result = App::peer(peerId); + result->loaded = true; + if (result->chat) { + ChatData *chat = result->asChat(); + + QString name, invitationUrl; + qint32 count, date, version, admin, forbidden, left; + from.stream >> name >> count >> date >> version >> admin >> forbidden >> left >> invitationUrl; + + chat->updateName(name, QString(), QString()); + chat->count = count; + chat->date = date; + chat->version = version; + chat->admin = admin; + chat->forbidden = (forbidden == 1); + chat->left = (left == 1); + chat->invitationUrl = invitationUrl; + + chat->input = MTP_inputPeerChat(MTP_int(App::chatFromPeer(chat->id))); + + chat->photo = photoLoc.isNull() ? ImagePtr(chatDefPhoto(chat->colorIndex)) : ImagePtr(photoLoc); + } else { + UserData *user = result->asUser(); + + QString first, last, phone, username; + quint64 access; + qint32 onlineTill, contact, botInfoVersion; + from.stream >> first >> last >> phone >> username >> access >> onlineTill >> contact >> botInfoVersion; + + bool showPhone = !isServiceUser(user->id) && (App::userFromPeer(user->id) != MTP::authedId()) && (contact <= 0); + QString pname = (showPhone && !phone.isEmpty()) ? App::formatPhone(phone) : QString(); + + user->setName(first, last, pname, username); + + user->access = access; + user->onlineTill = onlineTill; + user->contact = contact; + user->setBotInfoVersion(botInfoVersion); + + if (App::userFromPeer(user->id) == MTP::authedId()) { + user->input = MTP_inputPeerSelf(); + user->inputUser = MTP_inputUserSelf(); + } else { + user->input = MTP_inputPeerUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access)); + user->inputUser = MTP_inputUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access)); + } + + user->photo = photoLoc.isNull() ? ImagePtr(userDefPhoto(user->colorIndex)) : ImagePtr(photoLoc); + } + App::markPeerUpdated(result); + emit App::main()->peerPhotoChanged(result); + return result; + } + + void writeSavedPeers() { + if (!_working()) return; + + const SavedPeers &saved(cSavedPeers()); + if (saved.isEmpty()) { + if (_savedPeersKey) { + clearKey(_savedPeersKey); + _savedPeersKey = 0; + _mapChanged = true; + } + _writeMap(); + } else { + if (!_savedPeersKey) { + _savedPeersKey = genKey(); + _mapChanged = true; + _writeMap(WriteMapFast); + } + quint32 size = sizeof(quint32); + for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) { + size += _peerSize(i.key()) + _dateTimeSize(); + } + + EncryptedDescriptor data(size); + data.stream << quint32(saved.size()); + for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) { + _writePeer(data.stream, i.key()); + data.stream << i.value(); + } + + FileWriteDescriptor file(_savedPeersKey); + file.writeEncrypted(data); + } + } + + void readSavedPeers() { + if (!_savedPeersKey) return; + + FileReadDescriptor saved; + if (!readEncryptedFile(saved, _savedPeersKey)) { + clearKey(_savedPeersKey); + _savedPeersKey = 0; + _writeMap(); + return; + } + + quint32 count = 0; + saved.stream >> count; + cRefSavedPeers().clear(); + cRefSavedPeersByTime().clear(); + QList peers; + peers.reserve(count); + for (uint32 i = 0; i < count; ++i) { + PeerData *peer = _readPeer(saved); + if (!peer) break; + + QDateTime t; + saved.stream >> t; + + cRefSavedPeers().insert(peer, t); + cRefSavedPeersByTime().insert(t, peer); + peers.push_back(peer); + } + App::emitPeerUpdated(); + App::api()->requestPeers(peers); + } + + void addSavedPeer(PeerData *peer, const QDateTime &position) { + SavedPeers &savedPeers(cRefSavedPeers()); + SavedPeers::iterator i = savedPeers.find(peer); + if (i == savedPeers.cend()) { + savedPeers.insert(peer, position); + } else if (i.value() != position) { + cRefSavedPeersByTime().remove(i.value(), peer); + i.value() = position; + cRefSavedPeersByTime().insert(i.value(), peer); + } + writeSavedPeers(); + } + + void removeSavedPeer(PeerData *peer) { + SavedPeers &savedPeers(cRefSavedPeers()); + if (savedPeers.isEmpty()) return; + + SavedPeers::iterator i = savedPeers.find(peer); + if (i != savedPeers.cend()) { + cRefSavedPeersByTime().remove(i.value(), peer); + savedPeers.erase(i); + + writeSavedPeers(); + } + } + struct ClearManagerData { QThread *thread; StorageMap images, stickers, audios; @@ -2662,6 +2992,10 @@ namespace Local { _recentHashtagsKey = 0; _mapChanged = true; } + if (_savedPeersKey) { + _savedPeersKey = 0; + _mapChanged = true; + } _writeMap(); } else { if (task & ClearManagerStorage) { @@ -2771,7 +3105,7 @@ namespace Local { if (!QDir(di.filePath()).removeRecursively()) result = false; } else { QString path = di.filePath(); - if (!path.endsWith(QLatin1String("map0")) && !path.endsWith(QLatin1String("map1"))) { + if (!path.endsWith(qstr("map0")) && !path.endsWith(qstr("map1"))) { if (!QFile::remove(di.filePath())) result = false; } } diff --git a/Telegram/SourceFiles/localstorage.h b/Telegram/SourceFiles/localstorage.h index e306168eb..11b3f3871 100644 --- a/Telegram/SourceFiles/localstorage.h +++ b/Telegram/SourceFiles/localstorage.h @@ -100,6 +100,8 @@ namespace Local { ReadMapState readMap(const QByteArray &pass); int32 oldMapVersion(); + int32 oldSettingsVersion(); + struct MessageDraft { MessageDraft(MsgId replyTo = 0, QString text = QString(), bool previewCancelled = false) : replyTo(replyTo), text(text), previewCancelled(previewCancelled) { } @@ -113,8 +115,8 @@ namespace Local { MessageCursor readDraftPositions(const PeerId &peer); bool hasDraftPositions(const PeerId &peer); - void writeFileLocation(const StorageKey &location, const FileLocation &local); - FileLocation readFileLocation(const StorageKey &location, bool check = true); + void writeFileLocation(MediaKey location, const FileLocation &local); + FileLocation readFileLocation(MediaKey location, bool check = true); void writeImage(const StorageKey &location, const ImagePtr &img); void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true); @@ -141,4 +143,8 @@ namespace Local { void writeRecentHashtags(); void readRecentHashtags(); + void addSavedPeer(PeerData *peer, const QDateTime &position); + void removeSavedPeer(PeerData *peer); + void readSavedPeers(); + }; diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index 60e6ee8f8..c723b2d68 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -232,6 +232,9 @@ void logsInit() { logsInitDebug(); cSetDebug(true); } + if (!cDevVersion() && QFile(cWorkingDir() + qsl("tdata/devversion")).exists()) { + cSetDevVersion(true); + } QDir().setCurrent(cWorkingDir()); } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 0bea35033..26b897b08 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -39,6 +39,9 @@ int main(int argc, char *argv[]) { logsInit(); Local::readSettings(); + if (Local::oldSettingsVersion() < AppVersion) { + psNewVersion(); + } if (cFromAutoStart() && !cAutoStart()) { psAutoStart(false, true); Local::stop(); @@ -79,6 +82,15 @@ int main(int argc, char *argv[]) { DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); if (cRestartingUpdate()) { + if (DevVersion) { + LOG(("Writing 'devversion' file before launching the Updater!")); + QFile f(cWorkingDir() + qsl("tdata/devversion")); + if (!f.exists() && f.open(QIODevice::WriteOnly)) { + f.write("1"); + f.close(); + } + } + DEBUG_LOG(("Application Info: executing updater to install update..")); psExecUpdater(); } else if (cRestarting()) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index c891aff76..3a75d23cb 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -100,7 +100,7 @@ void TopBarWidget::onDeleteContactSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; UserData *u = (p && !p->chat) ? p->asUser() : 0; if (u) { - App::main()->showPeer(0, 0, true); + App::main()->showDialogs(); App::wnd()->hideLayer(); MTP::send(MTPcontacts_DeleteContact(u->inputUser), App::main()->rpcDone(&MainWidget::deletedContact, u)); } @@ -120,9 +120,9 @@ void TopBarWidget::onDeleteAndExitSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; ChatData *c = (p && p->chat) ? p->asChat() : 0; if (c) { - App::main()->showPeer(0, 0, true); + App::main()->showDialogs(); App::wnd()->hideLayer(); - MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistory, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); + MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); } } @@ -277,7 +277,7 @@ void TopBarWidget::showAll() { resizeEvent(0); return; } - PeerData *p = App::main() ? App::main()->profilePeer() : 0; + PeerData *p = App::main() ? App::main()->profilePeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; if (p && (p->chat || p->asUser()->contact >= 0)) { if (p->chat) { if (p->asChat()->forbidden) { @@ -324,7 +324,7 @@ void TopBarWidget::showAll() { _mediaType.hide(); } } - if (App::main() && App::main()->historyPeer() && !p && _clearSelection.isHidden() && !cWideMode()) { + if (App::main() && App::main()->historyPeer() && !o && !p && _clearSelection.isHidden() && !cWideMode()) { _info.show(); } else { _info.hide(); @@ -350,9 +350,13 @@ MainWidget *TopBarWidget::main() { return static_cast(parentWidget()); } -MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), -dialogs(this), history(this), profile(0), overview(0), _topBar(this), _forwardConfirm(0), hider(0), _mediaType(this), _mediaTypeMask(0), -updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), _onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), +MainWidget::MainWidget(Window *window) : QWidget(window), +_started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), +dialogs(this), history(this), profile(0), overview(0), _player(this), _topBar(this), +_forwardConfirm(0), _hider(0), _peerInStack(0), _msgIdInStack(0), +_playerHeight(0), _contentScrollAddToY(0), _mediaType(this), _mediaTypeMask(0), +updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), +_onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _background(0), _api(new ApiWrap(this)) { setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); @@ -369,14 +373,17 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr connect(&_bySeqTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&_byPtsTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&_failDifferenceTimer, SIGNAL(timeout()), this, SLOT(getDifferenceForce())); + connect(_api, SIGNAL(fullPeerUpdated(PeerData*)), this, SIGNAL(peerUpdated(PeerData*))); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); connect(&history, SIGNAL(peerShown(PeerData*)), this, SLOT(onPeerShown(PeerData*))); connect(&updateNotifySettingTimer, SIGNAL(timeout()), this, SLOT(onUpdateNotifySettings())); - connect(this, SIGNAL(showPeerAsync(quint64,qint32,bool,bool)), this, SLOT(showPeer(quint64,qint32,bool,bool)), Qt::QueuedConnection); + connect(this, SIGNAL(showPeerAsync(quint64,qint32)), this, SLOT(showPeerHistory(quint64,qint32)), Qt::QueuedConnection); if (audioPlayer()) { - connect(audioPlayer(), SIGNAL(updated(AudioData*)), this, SLOT(audioPlayProgress(AudioData*))); - connect(audioPlayer(), SIGNAL(stopped(AudioData*)), this, SLOT(audioPlayProgress(AudioData*))); + connect(audioPlayer(), SIGNAL(updated(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); + connect(audioPlayer(), SIGNAL(stopped(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); + connect(audioPlayer(), SIGNAL(updated(const SongMsgId&)), this, SLOT(documentPlayProgress(const SongMsgId&))); + connect(audioPlayer(), SIGNAL(stopped(const SongMsgId&)), this, SLOT(documentPlayProgress(const SongMsgId&))); } connect(&_updateMutedTimer, SIGNAL(timeout()), this, SLOT(onUpdateMuted())); @@ -394,9 +401,9 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr App::wnd()->getTitle()->updateBackButton(); _topBar.hide(); - _topBar.raise(); - dialogs.raise(); - _mediaType.raise(); + _player.hide(); + + orderWidgets(); MTP::setGlobalFailHandler(rpcFail(&MainWidget::updateFail)); @@ -409,20 +416,30 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr _api->init(); } -void MainWidget::onForward(const PeerId &peer, bool forwardSelected) { +void MainWidget::onForward(const PeerId &peer, ForwardWhatMessages what) { history.cancelReply(); _toForward.clear(); - if (forwardSelected) { + if (what == ForwardSelectedMessages) { if (overview) { overview->fillSelectedItems(_toForward, false); } else { history.fillSelectedItems(_toForward, false); } - } else if (App::contextItem() && dynamic_cast(App::contextItem()) && App::contextItem()->id > 0) { - _toForward.insert(App::contextItem()->id, App::contextItem()); + } else { + HistoryItem *item = 0; + if (what == ForwardContextMessage) { + item = App::contextItem(); + } else if (what == ForwardPressedMessage) { + item = App::pressedItem(); + } else if (what == ForwardPressedLinkMessage) { + item = App::pressedLinkItem(); + } + if (dynamic_cast(item) && item->id > 0) { + _toForward.insert(item->id, item); + } } updateForwardingTexts(); - showPeer(peer, 0, false, true); + showPeerHistory(peer, ShowAtUnreadMsgId); history.onClearSelected(); history.updateForwarding(); } @@ -559,6 +576,10 @@ void MainWidget::updateStickers() { history.updateStickers(); } +void MainWidget::botCommandsChanged(UserData *bot) { + history.botCommandsChanged(bot); +} + void MainWidget::onUpdateMuted() { App::updateMuted(); } @@ -571,9 +592,22 @@ void MainWidget::onSendPaths(const PeerId &peer) { history.onSendPaths(peer); } +void MainWidget::onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data) { + if (data->hasFormat(qsl("application/x-td-forward-selected"))) { + onForward(peer, ForwardSelectedMessages); + } else if (data->hasFormat(qsl("application/x-td-forward-pressed-link"))) { + onForward(peer, ForwardPressedLinkMessage); + } else if (data->hasFormat(qsl("application/x-td-forward-pressed"))) { + onForward(peer, ForwardPressedMessage); + } else { + showPeerHistory(peer, ShowAtTheEndMsgId); + history.onFilesDrop(data); + } +} + void MainWidget::noHider(HistoryHider *destroyed) { - if (hider == destroyed) { - hider = 0; + if (_hider == destroyed) { + _hider = 0; if (cWideMode()) { if (_forwardConfirm) { _forwardConfirm->deleteLater(); @@ -587,7 +621,7 @@ void MainWidget::noHider(HistoryHider *destroyed) { onPeerShown(history.peer()); if (profile || overview || (history.peer() && history.peer()->id)) { dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)), + QPixmap animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -614,17 +648,18 @@ void MainWidget::hiderLayer(HistoryHider *h) { return; } - hider = h; - connect(hider, SIGNAL(forwarded()), &dialogs, SLOT(onCancelSearch())); - dialogsToUp(); + _hider = h; + connect(_hider, SIGNAL(forwarded()), &dialogs, SLOT(onCancelSearch())); if (cWideMode()) { - hider->show(); + _hider->show(); resizeEvent(0); dialogs.activate(); } else { - hider->hide(); + dialogsToUp(); + + _hider->hide(); dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + QPixmap animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -663,13 +698,14 @@ void MainWidget::shareContactLayer(UserData *contact) { } bool MainWidget::selectingPeer(bool withConfirm) { - return hider ? (withConfirm ? hider->withConfirm() : true) : false; + return _hider ? (withConfirm ? _hider->withConfirm() : true) : false; } void MainWidget::offerPeer(PeerId peer) { - if (hider->offerPeer(peer) && !cWideMode()) { - _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); - connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + App::wnd()->hideLayer(); + if (_hider->offerPeer(peer) && !cWideMode()) { + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); connect(_forwardConfirm, SIGNAL(destroyed(QObject*)), this, SLOT(onForwardCancel(QObject*))); App::wnd()->showLayer(_forwardConfirm); @@ -682,40 +718,40 @@ void MainWidget::onForwardCancel(QObject *obj) { if (!obj) _forwardConfirm->startHide(); _forwardConfirm = 0; } - if (hider) hider->offerPeer(0); + if (_hider) _hider->offerPeer(0); } } -void MainWidget::focusPeerSelect() { - hider->setFocus(); -} - void MainWidget::dialogsActivate() { dialogs.activate(); } +DragState MainWidget::getDragState(const QMimeData *mime) { + return history.getDragState(mime); +} + bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.type() == "CHAT_ID_INVALID") { // left this chat already if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0, 0, false, true); + showDialogs(); } dialogs.removePeer(peer); - App::histories().remove(peer->id); + App::history(peer->id)->clear(); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); return true; } return false; } -void MainWidget::deleteHistory(PeerData *peer, const MTPUpdates &updates) { +void MainWidget::deleteHistoryAfterLeave(PeerData *peer, const MTPUpdates &updates) { sentUpdatesReceived(updates); if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0, 0, false, true); + showDialogs(); } dialogs.removePeer(peer); - App::histories().remove(peer->id); + App::history(peer->id)->clear(); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } @@ -735,29 +771,28 @@ void MainWidget::deleteMessages(const QVector &ids) { void MainWidget::deletedContact(UserData *user, const MTPcontacts_Link &result) { const MTPDcontacts_link &d(result.c_contacts_link()); - App::feedUsers(MTP_vector(1, d.vuser)); - App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); + App::feedUsers(MTP_vector(1, d.vuser), false); + App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link, false); + App::emitPeerUpdated(); } -void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result) { - const MTPDcontacts_link &d(result.c_contacts_link()); - App::feedUsers(MTP_vector(1, d.vuser)); - App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); - - if ((profile && profile->peer() == user) || (overview && overview->peer() == user) || _stack.contains(user) || history.peer() == user) { - showPeer(0); - } - dialogs.removePeer(user); - MTP::send(MTPmessages_DeleteHistory(user->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, (PeerData*)user)); +void MainWidget::deleteConversation(PeerData *peer) { + dialogs.removePeer(peer); + History *h = App::history(peer->id); + h->clear(); + h->newLoaded = h->oldLoaded = true; + showDialogs(); + MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } void MainWidget::clearHistory(PeerData *peer) { - if (!peer->chat && peer->asUser()->contact <= 0) { - dialogs.removePeer(peer->asUser()); + History *h = App::history(peer->id); + if (h->lastMsg) { + Local::addSavedPeer(h->peer, h->lastMsg->date); } - dialogsToUp(); - dialogs.update(); - App::history(peer->id)->clear(); + h->clear(); + h->newLoaded = h->oldLoaded = true; + showPeerHistory(peer->id, ShowAtUnreadMsgId); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } @@ -770,7 +805,7 @@ void MainWidget::addParticipants(ChatData *chat, const QVector &users MTP::send(MTPmessages_AddChatUser(MTP_int(chat->id & 0xFFFFFFFF), (*i)->inputUser, MTP_int(ForwardOnAdd)), rpcDone(&MainWidget::sentUpdatesReceived), rpcFail(&MainWidget::addParticipantFail, *i), 0, 5); } App::wnd()->hideLayer(); - showPeer(chat->id, 0, false); + showPeerHistory(chat->id, ShowAtTheEndMsgId); } bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { @@ -778,6 +813,8 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { QString text = lang(lng_failed_add_participant); if (error.type() == "USER_LEFT_CHAT") { // trying to return banned user to his group + } else if (error.type() == "USER_NOT_MUTUAL_CONTACT") { // trying to return user who does not have me in contacts + text = lang(lng_failed_add_not_mutual); } else if (error.type() == "USER_ALREADY_PARTICIPANT" && user->botInfo) { text = lang(lng_bot_already_in_group); } @@ -788,7 +825,7 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { void MainWidget::kickParticipant(ChatData *chat, UserData *user) { MTP::send(MTPmessages_DeleteChatUser(MTP_int(chat->id & 0xFFFFFFFF), user->inputUser), rpcDone(&MainWidget::sentUpdatesReceived), rpcFail(&MainWidget::kickParticipantFail, chat)); App::wnd()->hideLayer(); - showPeer(chat->id, 0, false); + showPeerHistory(chat->id, ShowAtTheEndMsgId); } bool MainWidget::kickParticipantFail(ChatData *chat, const RPCError &error) { @@ -806,22 +843,27 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu const QVector *v = 0; if (result.type() == mtpc_messages_messages) { const MTPDmessages_messages &d(result.c_messages_messages()); - App::feedChats(d.vchats); App::feedUsers(d.vusers); + App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } else if (result.type() == mtpc_messages_messagesSlice) { const MTPDmessages_messagesSlice &d(result.c_messages_messagesSlice()); - App::feedChats(d.vchats); App::feedUsers(d.vusers); + App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } if (!v) return; if (v->isEmpty()) { if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0); + showDialogs(); + } + if (peer->chat && peer->asChat()->left) { + dialogs.removePeer(peer); + } else { + History *h = App::historyLoaded(peer->id); + if (h) Local::addSavedPeer(peer, h->lastMsgDate); } - dialogs.removePeer(peer); } else { History *h = App::historyLoaded(peer->id); if (!h->lastMsg) { @@ -964,17 +1006,16 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl WebPageData *page = App::webPage(webPageId); media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); } - hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup)); - hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, MTPnullEntities)); + hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, MTPnullEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } finishForwarding(hist); } void MainWidget::sendMessage(History *hist, const QString &text, MsgId replyTo) { + hist->getReadyFor(ShowAtTheEndMsgId); readServerHistory(hist, false); - hist->loadAround(0); - if (history.peer()) sendPreparedText(hist, history.prepareMessage(text), replyTo); } @@ -1007,7 +1048,7 @@ void MainWidget::saveRecentHashtags(const QString &text) { } void MainWidget::readServerHistory(History *hist, bool force) { - if (!hist || (!force && (!hist->unreadCount || !hist->readyForWork()))) return; + if (!hist || (!force && !hist->unreadCount)) return; ReadRequests::const_iterator i = _readRequests.constFind(hist->peer); if (i == _readRequests.cend()) { @@ -1016,8 +1057,8 @@ void MainWidget::readServerHistory(History *hist, bool force) { } } -uint64 MainWidget::animActiveTime() const { - return history.animActiveTime(); +uint64 MainWidget::animActiveTime(MsgId id) const { + return history.animActiveTime(id); } void MainWidget::stopAnimActive() { @@ -1035,7 +1076,7 @@ void MainWidget::insertBotCommand(const QString &cmd) { void MainWidget::searchMessages(const QString &query) { App::wnd()->hideMediaview(); dialogs.searchMessages(query); - if (!cWideMode()) onShowDialogs(); + if (!cWideMode()) showDialogs(); } void MainWidget::preloadOverviews(PeerData *peer) { @@ -1105,13 +1146,14 @@ void MainWidget::overviewPreloaded(PeerData *peer, const MTPmessages_Messages &r } } - mediaOverviewUpdated(peer); + mediaOverviewUpdated(peer, type); } -void MainWidget::mediaOverviewUpdated(PeerData *peer) { - if (profile) profile->mediaOverviewUpdated(peer); +void MainWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (profile) profile->mediaOverviewUpdated(peer, type); + if (!_player.isHidden()) _player.mediaOverviewUpdated(peer, type); if (overview && overview->peer() == peer) { - overview->mediaOverviewUpdated(peer); + overview->mediaOverviewUpdated(peer, type); int32 mask = 0; History *h = peer ? App::historyLoaded(peer->id) : 0; @@ -1303,7 +1345,7 @@ void MainWidget::photosLoaded(History *h, const MTPmessages_Messages &msgs, mtpR h->_overview[type].push_front(item->id); } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer, type); } void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { @@ -1378,16 +1420,16 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { if (audio->loader->done()) { audio->finish(); QString already = audio->already(); - bool play = audio->openOnSave > 0 && audioPlayer(); + bool play = audio->openOnSave > 0 && audio->openOnSaveMsgId && audioPlayer(); if ((!already.isEmpty() && audio->openOnSave) || (!audio->data.isEmpty() && play)) { if (play) { - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing == audio && state != AudioPlayerStopped) { - audioPlayer()->pauseresume(); + if (playing.msgId == audio->openOnSaveMsgId && !(state & AudioPlayerStoppedMask) && state != AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewAudios); } else { - audioPlayer()->play(audio); + audioPlayer()->play(AudioMsgId(audio, audio->openOnSaveMsgId)); if (App::main()) App::main()->audioMarkRead(audio); } } else { @@ -1411,15 +1453,17 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { } } -void MainWidget::audioPlayProgress(AudioData *audio) { - AudioData *playing = 0; +void MainWidget::audioPlayProgress(const AudioMsgId &audioId) { + AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing == audio && state == AudioPlayerStoppedAtStart) { - audioPlayer()->clearStoppedAtStart(audio); + if (playing == audioId && state == AudioPlayerStoppedAtStart) { + audioPlayer()->clearStoppedAtStart(audioId); + + AudioData *audio = audioId.audio; QString already = audio->already(true); if (already.isEmpty() && !audio->data.isEmpty()) { - bool mp3 = (audio->mime == QLatin1String("audio/mp3")); + bool mp3 = (audio->mime == qstr("audio/mp3")); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), mp3 ? qsl(".mp3") : qsl(".ogg"), false); if (!filename.isEmpty()) { QFile f(filename); @@ -1438,12 +1482,78 @@ void MainWidget::audioPlayProgress(AudioData *audio) { } } - const AudioItems &items(App::audioItems()); - AudioItems::const_iterator i = items.constFind(audio); - if (i != items.cend()) { - for (HistoryItemsMap::const_iterator j = i->cbegin(), e = i->cend(); j != e; ++j) { - msgUpdated(j.key()->history()->peer->id, j.key()); + if (HistoryItem *item = App::histItemById(audioId.msgId)) { + msgUpdated(item->history()->peer->id, item); + } +} + +void MainWidget::documentPlayProgress(const SongMsgId &songId) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == songId && playingState == AudioPlayerStoppedAtStart) { + playingState = AudioPlayerStopped; + audioPlayer()->clearStoppedAtStart(songId); + + DocumentData *document = songId.song; + QString already = document->already(true); + if (already.isEmpty() && !document->data.isEmpty()) { + QString name = document->name, filter; + MimeType mimeType = mimeTypeForName(document->mime); + QStringList p = mimeType.globPatterns(); + QString pattern = p.isEmpty() ? QString() : p.front(); + if (name.isEmpty()) { + name = pattern.isEmpty() ? qsl(".unknown") : pattern.replace('*', QString()); + } + if (pattern.isEmpty()) { + filter = qsl("All files (*.*)"); + } else { + filter = mimeType.filterString() + qsl(";;All files (*.*)"); + } + QString filename = saveFileName(lang(lng_save_file), filter, qsl("doc"), name, false); + if (!filename.isEmpty()) { + QFile f(filename); + if (f.open(QIODevice::WriteOnly)) { + if (f.write(document->data) == document->data.size()) { + f.close(); + already = filename; + document->location = FileLocation(mtpToStorageType(mtpc_storage_filePartial), filename); + Local::writeFileLocation(mediaKey(mtpToLocationType(mtpc_inputDocumentFileLocation), document->dc, document->id), FileLocation(mtpToStorageType(mtpc_storage_filePartial), filename)); + } + } + } } + if (!already.isEmpty()) { + psOpenFile(already); + } + } + + if (playing == songId) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + if (_player.isHidden()) { + _player.clearSelection(); + _player.show(); + _playerHeight = _contentScrollAddToY = _player.height(); + resizeEvent(0); + } + } + } + + if (HistoryItem *item = App::histItemById(songId.msgId)) { + msgUpdated(item->history()->peer->id, item); + } +} + +void MainWidget::hidePlayer() { + if (!_player.isHidden()) { + _player.hide(); + _contentScrollAddToY = -_player.height(); + _playerHeight = 0; + resizeEvent(0); } } @@ -1463,16 +1573,32 @@ void MainWidget::audioLoadRetry() { } void MainWidget::documentLoadProgress(mtpFileLoader *loader) { + bool songPlayActivated = false; DocumentData *document = App::document(loader->objId()); if (document->loader) { if (document->loader->done()) { document->finish(); QString already = document->already(); - if (!already.isEmpty() && document->openOnSave) { - if (document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { + + HistoryItem *item = (document->openOnSave && document->openOnSaveMsgId) ? App::histItemById(document->openOnSaveMsgId) : 0; + bool play = document->song() && audioPlayer() && document->openOnSave && item; + if ((!already.isEmpty() || (!document->data.isEmpty() && play)) && document->openOnSave) { + if (play) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing.msgId == item->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + SongMsgId song(document, item->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); + } + + songPlayActivated = true; + } else if(document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { QImageReader reader(already); if (reader.canRead()) { - HistoryItem *item = App::histItemById(document->openOnSaveMsgId); if (reader.supportsAnimation() && reader.imageCount() > 1 && item) { startGif(item, already); } else if (item) { @@ -1502,6 +1628,21 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { } } App::wnd()->documentUpdated(document); + + if (!songPlayActivated && audioPlayer()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing.song == document && !_player.isHidden()) { + if (document->loader) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + } else { + audioPlayer()->play(playing); + } + } + } } void MainWidget::documentLoadFailed(mtpFileLoader *loader, bool started) { @@ -1567,13 +1708,13 @@ void MainWidget::confirmShareContact(bool ctrlShiftEnter, const QString &phone, } void MainWidget::confirmSendImage(const ReadyLocalMedia &img) { + bool lastKeyboardUsed = history.lastForceReplyReplied(img.replyTo); history.confirmSendImage(img); - history.cancelReply(); + history.cancelReply(lastKeyboardUsed); } void MainWidget::confirmSendImageUncompressed(bool ctrlShiftEnter, MsgId replyTo) { history.uploadConfirmImageUncompressed(ctrlShiftEnter, replyTo); - history.cancelReply(); } void MainWidget::cancelSendImage() { @@ -1581,13 +1722,11 @@ void MainWidget::cancelSendImage() { } void MainWidget::dialogsCancelled() { - if (hider) { - hider->startHide(); - noHider(hider); - history.activate(); - } else { - history.activate(); + if (_hider) { + _hider->startHide(); + noHider(_hider); } + history.activate(); } void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread) { @@ -1595,7 +1734,7 @@ void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia & QString sendingText, leftText = msg; HistoryItem *item = 0; while (textSplit(sendingText, leftText, MaxMessageSize)) { - item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup), unread ? 1 : 2); + item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, MTPnullEntities), unread ? 1 : 2); } if (item) { history.peerMessagesUpdated(item->history()->peer->id); @@ -1727,15 +1866,15 @@ void MainWidget::pushReplyReturn(HistoryItem *item) { } void MainWidget::setInnerFocus() { - if (hider || !history.peer()) { - if (hider && hider->wasOffered()) { - hider->setFocus(); + if (_hider || !history.peer()) { + if (_hider && _hider->wasOffered()) { + _hider->setFocus(); } else if (overview) { overview->activate(); } else if (profile) { profile->activate(); } else { - dialogs.setInnerFocus(); + dialogsActivate(); } } else if (profile) { profile->setFocus(); @@ -1748,86 +1887,104 @@ void MainWidget::createDialogAtTop(History *history, int32 unreadCount) { dialogs.createDialogAtTop(history, unreadCount); } -void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { - if (!back && _stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId) { - if (cWideMode() || !selectingPeer()) { - back = true; - } +void MainWidget::choosePeer(PeerId peerId, MsgId showAtMsgId) { + if (selectingPeer()) { + offerPeer(peerId); + } else { + showPeerHistory(peerId, showAtMsgId); } +} + +void MainWidget::clearBotStartToken(PeerData *peer) { + if (peer && !peer->chat && peer->asUser()->botInfo) { + peer->asUser()->botInfo->startToken = QString(); + } +} + +void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) { + if (!back && (!peerId || (_stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId))) { + back = true; + } + App::wnd()->hideLayer(); + if (_hider) { + _hider->startHide(); + _hider = 0; + } + QPixmap animCache, animTopBarCache; - if (force && hider) { - hider->startHide(); - hider = 0; - } - if (force || !selectingPeer()) { - if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { - dialogs.enableShadow(false); - if (peerId) { - _topBar.enableShadow(false); - if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, st::topBarHeight, width() - _dialogsWidth, height() - st::topBarHeight)); - } else { - animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)); - } - } else if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { + dialogs.enableShadow(false); + if (peerId) { + _topBar.enableShadow(false); + if (cWideMode()) { + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight + st::topBarHeight, width() - _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } else { - animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); - } - if (peerId || cWideMode()) { - animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); - } - dialogs.enableShadow(); - _topBar.enableShadow(); - history.show(); - } - } - history.showPeer(peerId, msgId, force); - if (force || !selectingPeer()) { - bool noPeer = (!history.peer() || !history.peer()->id), onlyDialogs = noPeer && !cWideMode(); - if (profile || overview) { - if (profile) { - profile->hide(); - profile->clear(); - profile->deleteLater(); - profile->rpcInvalidate(); - profile = 0; - } - if (overview) { - overview->hide(); - overview->clear(); - overview->deleteLater(); - overview->rpcInvalidate(); - overview = 0; - } - _stack.clear(); - } - if (onlyDialogs) { - _topBar.hide(); - history.hide(); - if (!animating()) { - dialogs.show(); - if (!animCache.isNull()) { - dialogs.animShow(animCache); - } + animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } + } else if (cWideMode()) { + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); } else { - if (noPeer) { - _topBar.hide(); - resizeEvent(0); + animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); + } + if (peerId || cWideMode()) { + animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + } + dialogs.enableShadow(); + _topBar.enableShadow(); + history.show(); + } + if (history.peer() && history.peer()->id != peerId) clearBotStartToken(history.peer()); + history.showPeerHistory(peerId, showAtMsgId); + + bool noPeer = (!history.peer() || !history.peer()->id), onlyDialogs = noPeer && !cWideMode(); + if (profile || overview) { + if (profile) { + profile->hide(); + profile->clear(); + profile->deleteLater(); + profile->rpcInvalidate(); + profile = 0; + } + if (overview) { + overview->hide(); + overview->clear(); + overview->deleteLater(); + overview->rpcInvalidate(); + overview = 0; + } + clearBotStartToken(_peerInStack); + _peerInStack = 0; + _msgIdInStack = 0; + _stack.clear(); + } + if (onlyDialogs) { + _topBar.hide(); + history.hide(); + if (!animating()) { + dialogs.show(); + if (!animCache.isNull()) { + dialogs.animShow(animCache); } - if (!cWideMode()) dialogs.hide(); - if (!animating()) { - history.show(); - if (!animCache.isNull()) { - history.animShow(animCache, animTopBarCache, back); - } + } + } else { + if (noPeer) { + _topBar.hide(); + resizeEvent(0); + } + if (!cWideMode() && !dialogs.isHidden()) dialogs.hide(); + if (!animating()) { + if (history.isHidden()) history.show(); + if (!animCache.isNull()) { + history.animShow(animCache, animTopBarCache, back); + } else { + QTimer::singleShot(0, this, SLOT(setInnerFocus())); } } } + if (!dialogs.isHidden()) { - dialogs.scrollToPeer(peerId, msgId); + dialogs.scrollToPeer(peerId, showAtMsgId); dialogs.update(); } App::wnd()->getTitle()->updateBackButton(); @@ -1860,19 +2017,23 @@ PeerData *MainWidget::peer() { } PeerData *MainWidget::activePeer() { - return history.activePeer(); + return history.peer() ? history.peer() : _peerInStack; } MsgId MainWidget::activeMsgId() { - return history.activeMsgId(); + return history.peer() ? history.msgId() : _msgIdInStack; } PeerData *MainWidget::profilePeer() { return profile ? profile->peer() : 0; } +PeerData *MainWidget::overviewPeer() { + return overview ? overview->peer() : 0; +} + bool MainWidget::mediaTypeSwitch() { - if (!overview) return false; + if (!overview || (overview->type() == OverviewAudioDocuments)) return false; for (int32 i = 0; i < OverviewCount; ++i) { if (!(_mediaTypeMask & ~(1 << i))) { @@ -1887,13 +2048,21 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool if (overview && overview->peer() == peer) { if (overview->type() != type) { overview->switchType(type); + } else if (type == OverviewAudioDocuments) { // hack for player + showBackFromStack(); } return; } dialogs.enableShadow(false); _topBar.enableShadow(false); - QPixmap animCache = myGrab(this, history.geometry()), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + QRect topBarRect = QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight); + QRect historyRect = QRect(history.x(), topBarRect.y() + topBarRect.height(), history.width(), history.y() + history.height() - topBarRect.y() - topBarRect.height()); + QPixmap animCache, animTopBarCache; + if (!animating() && (!cWideMode() || profile || overview || history.peer())) { + animCache = myGrab(this, historyRect); + animTopBarCache = myGrab(this, topBarRect); + } dialogs.enableShadow(); _topBar.enableShadow(); if (!back) { @@ -1901,8 +2070,10 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool _stack.push_back(new StackItemOverview(overview->peer(), overview->type(), overview->lastWidth(), overview->lastScrollTop())); } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); - } else { - _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); + } else if (history.peer()) { + _peerInStack = history.peer(); + _msgIdInStack = history.msgId(); + _stack.push_back(new StackItemHistory(_peerInStack, _msgIdInStack, history.replyReturns(), history.kbWasHidden())); } } if (overview) { @@ -1920,17 +2091,22 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool } overview = new OverviewWidget(this, peer, type); _mediaTypeMask = 0; - mediaOverviewUpdated(peer); _topBar.show(); resizeEvent(0); - overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + mediaOverviewUpdated(peer, type); + if (!animCache.isNull()) { + overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + } else { + overview->fastShow(); + } history.animStop(); - history.showPeer(0, 0, false, true); + if (back) clearBotStartToken(history.peer()); + history.showPeerHistory(0, 0); history.hide(); - _topBar.raise(); - dialogs.raise(); - _mediaType.raise(); - if (hider) hider->raise(); + if (!cWideMode()) dialogs.hide(); + + orderWidgets(); + App::wnd()->getTitle()->updateBackButton(); } @@ -1949,7 +2125,9 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); } else { - _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); + _peerInStack = history.peer(); + _msgIdInStack = history.msgId(); + _stack.push_back(new StackItemHistory(_peerInStack, _msgIdInStack, history.replyReturns(), history.kbWasHidden())); } } if (overview) { @@ -1970,22 +2148,36 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, resizeEvent(0); profile->animShow(animCache, animTopBarCache, back, lastScrollTop, allMediaShown); history.animStop(); - history.showPeer(0, 0, false, true); + if (back) clearBotStartToken(history.peer()); + history.showPeerHistory(0, 0); history.hide(); - _topBar.raise(); - dialogs.raise(); - _mediaType.raise(); - if (hider) hider->raise(); + + orderWidgets(); + App::wnd()->getTitle()->updateBackButton(); } void MainWidget::showBackFromStack() { - if (_stack.isEmpty() || selectingPeer()) return; + if (selectingPeer()) return; + if (_stack.isEmpty()) { + showDialogs(); + QTimer::singleShot(0, this, SLOT(setInnerFocus())); + return; + } StackItem *item = _stack.back(); _stack.pop_back(); if (item->type() == HistoryStackItem) { + _peerInStack = 0; + _msgIdInStack = 0; + for (int32 i = _stack.size(); i > 0;) { + if (_stack.at(--i)->type() == HistoryStackItem) { + _peerInStack = static_cast(_stack.at(i))->peer; + _msgIdInStack = static_cast(_stack.at(i))->msgId; + break; + } + } StackItemHistory *histItem = static_cast(item); - showPeer(histItem->peer->id, App::main()->activeMsgId(), true); + showPeerHistory(histItem->peer->id, App::main()->activeMsgId(), true); history.setReplyReturns(histItem->peer->id, histItem->replyReturns); if (histItem->kbWasHidden) history.setKbWasHidden(); } else if (item->type() == ProfileStackItem) { @@ -1998,6 +2190,14 @@ void MainWidget::showBackFromStack() { delete item; } +void MainWidget::orderWidgets() { + _topBar.raise(); + _player.raise(); + dialogs.raise(); + _mediaType.raise(); + if (_hider) _hider->raise(); +} + QRect MainWidget::historyRect() const { QRect r(history.historyRect()); r.moveLeft(r.left() + history.x()); @@ -2062,6 +2262,7 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage void MainWidget::sentUpdatesReceived(const MTPUpdates &result) { handleUpdates(result); + App::emitPeerUpdated(); } void MainWidget::msgUpdated(PeerId peer, const HistoryItem *msg) { @@ -2166,8 +2367,8 @@ void MainWidget::showAll() { App::wnd()->showLayer(new ConfirmBox(lang(lng_signin_password_removed), true, lang(lng_continue))); } if (cWideMode()) { - if (hider) { - hider->show(); + if (_hider) { + _hider->show(); if (_forwardConfirm) { App::wnd()->hideLayer(true); _forwardConfirm = 0; @@ -2186,11 +2387,11 @@ void MainWidget::showAll() { _topBar.show(); } } else { - if (hider) { - hider->hide(); - if (!_forwardConfirm && hider->wasOffered()) { - _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); - connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + if (_hider) { + _hider->hide(); + if (!_forwardConfirm && _hider->wasOffered()) { + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); App::wnd()->showLayer(_forwardConfirm, true); } @@ -2225,19 +2426,26 @@ void MainWidget::resizeEvent(QResizeEvent *e) { if (cWideMode()) { _dialogsWidth = snap((width() * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(_dialogsWidth, tbh, width() - _dialogsWidth, height() - tbh); - if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + _player.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, _player.height()); + _topBar.setGeometry(_dialogsWidth, _playerHeight, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(_dialogsWidth, _playerHeight + tbh, width() - _dialogsWidth, height() - _playerHeight - tbh); + if (_hider) _hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } else { _dialogsWidth = width(); - dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(0, 0, _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(0, tbh, _dialogsWidth, height() - tbh); - if (hider) hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); + _player.setGeometry(0, 0, _dialogsWidth, _player.height()); + dialogs.setGeometry(0, _playerHeight, _dialogsWidth + st::dlgShadow, height() - _playerHeight); + _topBar.setGeometry(0, _playerHeight, _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(0, _playerHeight + tbh, _dialogsWidth, height() - _playerHeight - tbh); + if (_hider) _hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); } - _mediaType.move(width() - _mediaType.width(), st::topBarHeight); + _mediaType.move(width() - _mediaType.width(), _playerHeight + st::topBarHeight); if (profile) profile->setGeometry(history.geometry()); if (overview) overview->setGeometry(history.geometry()); + _contentScrollAddToY = 0; +} + +int32 MainWidget::contentScrollAddToY() const { + return _contentScrollAddToY; } void MainWidget::keyPressEvent(QKeyEvent *e) { @@ -2252,8 +2460,8 @@ bool MainWidget::needBackButton() { return overview || profile || (history.peer() && history.peer()->id); } -void MainWidget::onShowDialogs() { - showPeer(0, 0, false, true); +void MainWidget::showDialogs() { + showPeerHistory(0, 0); } void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { @@ -2267,8 +2475,14 @@ void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { } void MainWidget::topBarShadowParams(int32 &x, float64 &o) { - if (!profile && !overview && dialogs.isHidden()) { - history.topBarShadowParams(x, o); + if (!cWideMode() && dialogs.isHidden()) { + if (profile) { + if (!_peerInStack) profile->topBarShadowParams(x, o); + } else if (overview) { + if (!_peerInStack) overview->topBarShadowParams(x, o); + } else { + history.topBarShadowParams(x, o); + } } } @@ -2296,6 +2510,10 @@ TopBarWidget *MainWidget::topBar() { return &_topBar; } +PlayerWidget *MainWidget::player() { + return &_player; +} + void MainWidget::onTopBarClick() { if (profile) { profile->topBarClick(); @@ -2316,6 +2534,16 @@ void MainWidget::onPeerShown(PeerData *peer) { if (animating()) _topBar.hide(); } +void MainWidget::searchInPeer(PeerData *peer) { + dialogs.searchInPeer(peer); + if (cWideMode()) { + dialogs.activate(); + } else { + dialogsToUp(); + showDialogs(); + } +} + void MainWidget::onUpdateNotifySettings() { if (this != App::main()) return; while (!updateNotifySettingPeers.isEmpty()) { @@ -2389,6 +2617,8 @@ void MainWidget::gotState(const MTPupdates_State &state) { dialogs.loadDialogs(); updateOnline(); + + App::emitPeerUpdated(); } void MainWidget::gotDifference(const MTPupdates_Difference &diff) { @@ -2404,6 +2634,8 @@ void MainWidget::gotDifference(const MTPupdates_Difference &diff) { noUpdatesTimer.start(NoUpdatesTimeout); updInited = true; + + App::emitPeerUpdated(); } break; case mtpc_updates_differenceSlice: { const MTPDupdates_differenceSlice &d(diff.c_updates_differenceSlice()); @@ -2416,6 +2648,8 @@ void MainWidget::gotDifference(const MTPupdates_Difference &diff) { MTP_LOG(0, ("getDifference { good - after a slice of difference was received }%1").arg(cTestMode() ? " TESTMODE" : "")); getDifference(); + + App::emitPeerUpdated(); } break; case mtpc_updates_difference: { const MTPDupdates_difference &d(diff.c_updates_difference()); @@ -2443,6 +2677,7 @@ void MainWidget::applySkippedPtsUpdates() { } --updSkipPtsUpdateLevel; clearSkippedPtsUpdates(); + App::emitPeerUpdated(); } void MainWidget::clearSkippedPtsUpdates() { @@ -2472,8 +2707,8 @@ bool MainWidget::updPtsUpdated(int pts, int ptsCount) { // return false if need void MainWidget::feedDifference(const MTPVector &users, const MTPVector &chats, const MTPVector &msgs, const MTPVector &other) { App::wnd()->checkAutoLock(); - App::feedUsers(users); - App::feedChats(chats); + App::feedUsers(users, false); + App::feedChats(chats, false); feedMessageIds(other); App::feedMsgs(msgs, 1); feedUpdates(other, true); @@ -2529,6 +2764,8 @@ void MainWidget::start(const MTPUser &user) { Local::writeMtpData(); } + Local::readSavedPeers(); + cSetOtherOnline(0); App::feedUsers(MTP_vector(1, user)); App::app()->startUpdateCheck(); @@ -2550,18 +2787,18 @@ bool MainWidget::started() { void MainWidget::openLocalUrl(const QString &url) { QString u(url.trimmed()); - if (u.startsWith(QLatin1String("tg://resolve"), Qt::CaseInsensitive)) { + if (u.startsWith(qstr("tg://resolve"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://resolve/?\\?domain=([a-zA-Z0-9\\.\\_]+)(&(start|startgroup)=([a-zA-Z0-9\\.\\_\\-]+))?(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { QString start = m.captured(3), startToken = m.captured(4); openUserByName(m.captured(1), (start == qsl("startgroup")), startToken); } - } else if (u.startsWith(QLatin1String("tg://join"), Qt::CaseInsensitive)) { + } else if (u.startsWith(qstr("tg://join"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://join/?\\?invite=([a-zA-Z0-9\\.\\_\\-]+)(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { joinGroupByHash(m.captured(1)); } - } else if (u.startsWith(QLatin1String("tg://addstickers"), Qt::CaseInsensitive)) { + } else if (u.startsWith(qstr("tg://addstickers"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://addstickers/?\\?set=([a-zA-Z0-9\\.\\_]+)(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { stickersBox(MTP_inputStickerSetShortName(MTP_string(m.captured(1)))); @@ -2589,7 +2826,7 @@ void MainWidget::openUserByName(const QString &username, bool toProfile, const Q history.resizeEvent(0); } } - emit showPeerAsync(user->id, 0, false, true); + emit showPeerAsync(user->id, 0); } } else { MTP::send(MTPcontacts_ResolveUsername(MTP_string(username)), rpcDone(&MainWidget::usernameResolveDone, qMakePair(toProfile, startToken)), rpcFail(&MainWidget::usernameResolveFail, username)); @@ -2631,7 +2868,7 @@ void MainWidget::usernameResolveDone(QPair toProfileStartToken, c history.resizeEvent(0); } } - showPeer(user->id, 0, false, true); + showPeerHistory(user->id, ShowAtUnreadMsgId); } } @@ -2664,7 +2901,7 @@ void MainWidget::inviteCheckDone(QString hash, const MTPChatInvite &invite) { connect(box, SIGNAL(confirmed()), this, SLOT(onInviteImport())); App::wnd()->showLayer(box); } else { - showPeer(chat->id, 0, false, true); + showPeerHistory(chat->id, ShowAtUnreadMsgId); } } } break; @@ -2708,7 +2945,7 @@ void MainWidget::inviteImportDone(const MTPUpdates &updates) { } break; } if (v && !v->isEmpty() && v->front().type() == mtpc_chat) { - App::main()->showPeer(App::peerFromChat(v->front().c_chat().vid.v)); + App::main()->showPeerHistory(App::peerFromChat(v->front().c_chat().vid.v), ShowAtTheEndMsgId); } } @@ -2803,8 +3040,7 @@ void MainWidget::gotNotifySetting(MTPInputNotifyPeer peer, const MTPPeerNotifySe switch (peer.c_inputNotifyPeer().vpeer.type()) { case mtpc_inputPeerEmpty: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(MTP_int(0))), settings); break; case mtpc_inputPeerSelf: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(MTP_int(MTP::authedId()))), settings); break; - case mtpc_inputPeerContact: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerContact().vuser_id)), settings); break; - case mtpc_inputPeerForeign: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerForeign().vuser_id)), settings); break; + case mtpc_inputPeerUser: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerUser().vuser_id)), settings); break; case mtpc_inputPeerChat: applyNotifySetting(MTP_notifyPeer(MTP_peerChat(peer.c_inputNotifyPeer().vpeer.c_inputPeerChat().vchat_id)), settings); break; } break; @@ -2845,7 +3081,7 @@ void MainWidget::updateNotifySetting(PeerData *peer, bool enabled) { } void MainWidget::incrementSticker(DocumentData *sticker) { - if (!sticker || !sticker->sticker) return; + if (!sticker || !sticker->sticker()) return; RecentStickerPack &recent(cGetRecentStickers()); RecentStickerPack::iterator i = recent.begin(), e = recent.end(); @@ -2886,13 +3122,13 @@ void MainWidget::incrementSticker(DocumentData *sticker) { bool found = false; uint64 setId = 0; QString setName; - switch (sticker->sticker->set.type()) { - case mtpc_inputStickerSetID: setId = sticker->sticker->set.c_inputStickerSetID().vid.v; break; - case mtpc_inputStickerSetShortName: setName = qs(sticker->sticker->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); break; + switch (sticker->sticker()->set.type()) { + case mtpc_inputStickerSetID: setId = sticker->sticker()->set.c_inputStickerSetID().vid.v; break; + case mtpc_inputStickerSetShortName: setName = qs(sticker->sticker()->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); break; } StickerSets &sets(cRefStickerSets()); for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { - if (i->id == CustomStickerSetId || (setId && i->id == setId) || (!setName.isEmpty() && i->shortName.toLower().trimmed() == setName) || (!setId && setName.isEmpty() && i->id == DefaultStickerSetId)) { + if (i->id == CustomStickerSetId || i->id == DefaultStickerSetId || (setId && i->id == setId) || (!setName.isEmpty() && i->shortName.toLower().trimmed() == setName)) { for (int32 j = 0, l = i->stickers.size(); j < l; ++j) { if (i->stickers.at(j) == sticker) { found = true; @@ -2905,9 +3141,10 @@ void MainWidget::incrementSticker(DocumentData *sticker) { if (!found) { StickerSets::iterator it = sets.find(CustomStickerSetId); if (it == sets.cend()) { - it = sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString())); + it = sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString(), 0, 0, 0)); } it->stickers.push_back(sticker); + ++it->count; Local::writeStickers(); } history.updateRecentStickers(); @@ -2915,9 +3152,9 @@ void MainWidget::incrementSticker(DocumentData *sticker) { void MainWidget::activate() { if (!profile && !overview) { - if (hider) { - if (hider->wasOffered()) { - hider->setFocus(); + if (_hider) { + if (_hider->wasOffered()) { + _hider->setFocus(); } else { dialogs.activate(); } @@ -2945,7 +3182,7 @@ void MainWidget::updateOnlineDisplayIn(int32 msecs) { void MainWidget::addNewContact(int32 uid, bool show) { if (dialogs.addNewContact(uid, show)) { - showPeer(App::peerFromUser(uid)); + showPeerHistory(App::peerFromUser(uid), ShowAtTheEndMsgId); } } @@ -2970,11 +3207,11 @@ int32 MainWidget::dlgsWidth() const { } MainWidget::~MainWidget() { - if (App::main() == this) history.showPeer(0, 0, true); + if (App::main() == this) history.showPeerHistory(0, 0); delete _background; - delete hider; + delete _hider; MTP::clearGlobalHandlers(); delete _api; if (App::wnd()) App::wnd()->noMain(this); @@ -3050,7 +3287,8 @@ void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { noUpdatesTimer.start(NoUpdatesTimeout); handleUpdates(updates); - } catch(mtpErrorUnexpected &e) { // just some other type + App::emitPeerUpdated(); + } catch (mtpErrorUnexpected &e) { // just some other type } } update(); @@ -3068,8 +3306,8 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { } } - App::feedChats(d.vchats); - App::feedUsers(d.vusers); + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); feedUpdates(d.vupdates); updSetState(0, d.vdate.v, updQts, d.vseq.v); @@ -3085,8 +3323,8 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { } } - App::feedChats(d.vchats); - App::feedUsers(d.vusers); + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); feedUpdates(d.vupdates); updSetState(0, d.vdate.v, updQts, d.vseq.v); @@ -3111,7 +3349,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { return; } bool out = (d.vflags.v & MTPDmessage_flag_out); - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3131,7 +3369,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { _byPtsUpdates.insert(ptsKey(SkippedUpdates), updates); return; } - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3210,6 +3448,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (item->isMediaUnread()) { item->markMediaRead(); msgUpdated(item->history()->peer->id, item); + if (item->out() && !item->history()->peer->chat) { + item->history()->peer->asUser()->madeAction(); + } } } } @@ -3257,11 +3498,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { History *history = App::historyLoaded(App::peerFromUser(d.vuser_id)); UserData *user = App::userLoaded(d.vuser_id.v); if (history && user) { - if (d.vaction.type() == mtpc_sendMessageTypingAction) { - App::histories().regTyping(history, user); - } else if (d.vaction.type() == mtpc_sendMessageCancelAction) { - history->unregTyping(user); - } + App::histories().regSendAction(history, user, d.vaction); } } break; @@ -3270,23 +3507,23 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { History *history = App::historyLoaded(App::peerFromChat(d.vchat_id)); UserData *user = (d.vuser_id.v == MTP::authedId()) ? 0 : App::userLoaded(d.vuser_id.v); if (history && user) { - App::histories().regTyping(history, user); + App::histories().regSendAction(history, user, d.vaction); } } break; case mtpc_updateChatParticipants: { const MTPDupdateChatParticipants &d(update.c_updateChatParticipants()); - App::feedParticipants(d.vparticipants, true); + App::feedParticipants(d.vparticipants, true, false); } break; case mtpc_updateChatParticipantAdd: { const MTPDupdateChatParticipantAdd &d(update.c_updateChatParticipantAdd()); - App::feedParticipantAdd(d); + App::feedParticipantAdd(d, false); } break; case mtpc_updateChatParticipantDelete: { const MTPDupdateChatParticipantDelete &d(update.c_updateChatParticipantDelete()); - App::feedParticipantDelete(d); + App::feedParticipantDelete(d, false); } break; case mtpc_updateUserStatus: { @@ -3305,7 +3542,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_userStatusOffline: user->onlineTill = d.vstatus.c_userStatusOffline().vwas_online.v; break; case mtpc_userStatusOnline: user->onlineTill = d.vstatus.c_userStatusOnline().vexpires.v; break; } - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); } if (d.vuser_id.v == MTP::authedId()) { if (d.vstatus.type() == mtpc_userStatusOffline || d.vstatus.type() == mtpc_userStatusEmpty) { @@ -3328,7 +3565,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } else { user->setName(textOneLine(user->firstName), textOneLine(user->lastName), user->nameOrPhone, textOneLine(qs(d.vusername))); } - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); } } break; @@ -3342,7 +3579,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { user->photosCount = -1; user->photos.clear(); } else { - if (user->photoId) { + if (user->photoId && user->photoId != UnknownPeerPhotoId) { if (user->photosCount > 0) ++user->photosCount; user->photos.push_front(App::photo(user->photoId)); } else { @@ -3350,8 +3587,8 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { user->photos.clear(); } } - if (App::main()) App::main()->peerUpdated(user); - if (App::wnd()) App::wnd()->mediaOverviewUpdated(user); + App::markPeerUpdated(user); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(user, OverviewCount); } } break; @@ -3367,7 +3604,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateContactLink: { const MTPDupdateContactLink &d(update.c_updateContactLink()); - App::feedUserLink(d.vuser_id, d.vmy_link, d.vforeign_link); + App::feedUserLink(d.vuser_id, d.vmy_link, d.vforeign_link, false); } break; case mtpc_updateNotifySettings: { @@ -3385,8 +3622,8 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { UserData *user = App::userLoaded(d.vuser_id.v); if (user) { user->setPhone(qs(d.vphone)); - user->setName(user->firstName, user->lastName, (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), user->username); - if (App::main()) App::main()->peerUpdated(user); + user->setName(user->firstName, user->lastName, (user->contact || isServiceUser(user->id) || user->input.type() == mtpc_inputPeerSelf || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), user->username); + App::markPeerUpdated(user); } } break; @@ -3412,6 +3649,10 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateUserBlocked: { const MTPDupdateUserBlocked &d(update.c_updateUserBlocked()); + if (UserData *user = App::userLoaded(d.vuser_id.v)) { + user->blocked = d.vblocked.v ? UserIsBlocked : UserIsNotBlocked; + App::markPeerUpdated(user); + } } break; case mtpc_updateNewAuthorization: { diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 2289a597a..9fec76a31 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -21,6 +21,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "historywidget.h" #include "profilewidget.h" #include "overviewwidget.h" +#include "playerwidget.h" #include "apiwrap.h" class Window; @@ -110,13 +111,14 @@ public: class StackItemHistory : public StackItem { public: - StackItemHistory(PeerData *peer, int32 lastWidth, int32 lastScrollTop, QList replyReturns, bool kbWasHidden) : StackItem(peer), replyReturns(replyReturns), lastWidth(lastWidth), lastScrollTop(lastScrollTop), kbWasHidden(kbWasHidden) { + StackItemHistory(PeerData *peer, MsgId msgId, QList replyReturns, bool kbWasHidden) : StackItem(peer), +msgId(msgId), replyReturns(replyReturns), kbWasHidden(kbWasHidden) { } StackItemType type() const { return HistoryStackItem; } + MsgId msgId; QList replyReturns; - int32 lastWidth, lastScrollTop; bool kbWasHidden; }; @@ -163,6 +165,13 @@ public: } }; +enum ForwardWhatMessages { + ForwardSelectedMessages, + ForwardContextMessage, + ForwardPressedMessage, + ForwardPressedLinkMessage +}; + class MainWidget : public QWidget, public Animated, public RPCSender { Q_OBJECT @@ -176,12 +185,15 @@ public: void updateWideMode(); bool needBackButton(); - void onShowDialogs(); + void showDialogs(); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); void topBarShadowParams(int32 &x, float64 &o); TopBarWidget *topBar(); + PlayerWidget *player(); + int32 contentScrollAddToY() const; + void animShow(const QPixmap &bgAnimCache, bool back = false); bool animStep(float64 ms); @@ -223,13 +235,17 @@ public: void peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg); PeerData *historyPeer(); PeerData *peer(); + PeerData *activePeer(); MsgId activeMsgId(); + PeerData *profilePeer(); + PeerData *overviewPeer(); bool mediaTypeSwitch(); void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false); void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1); void showBackFromStack(); + void orderWidgets(); QRect historyRect() const; void confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo); @@ -254,20 +270,22 @@ public: void shareContactLayer(UserData *contact); void hiderLayer(HistoryHider *h); void noHider(HistoryHider *destroyed); - void onForward(const PeerId &peer, bool forwardSelected); + void onForward(const PeerId &peer, ForwardWhatMessages what); void onShareContact(const PeerId &peer, UserData *contact); void onSendPaths(const PeerId &peer); + void onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data); bool selectingPeer(bool withConfirm = false); void offerPeer(PeerId peer); - void focusPeerSelect(); void dialogsActivate(); + DragState getDragState(const QMimeData *mime); + bool leaveChatFailed(PeerData *peer, const RPCError &e); - void deleteHistory(PeerData *peer, const MTPUpdates &updates); + void deleteHistoryAfterLeave(PeerData *peer, const MTPUpdates &updates); void deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHistory &result); void deleteMessages(const QVector &ids); void deletedContact(UserData *user, const MTPcontacts_Link &result); - void deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result); + void deleteConversation(PeerData *peer); void clearHistory(PeerData *peer); void removeContact(UserData *user); @@ -295,7 +313,7 @@ public: void readServerHistory(History *history, bool force = true); - uint64 animActiveTime() const; + uint64 animActiveTime(MsgId id) const; void stopAnimActive(); void sendBotCommand(const QString &cmd, MsgId msgId); @@ -303,7 +321,7 @@ public: void searchMessages(const QString &query); void preloadOverviews(PeerData *peer); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void itemRemoved(HistoryItem *item); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); @@ -352,6 +370,10 @@ public: void updateMutedIn(int32 seconds); void updateStickers(); + void botCommandsChanged(UserData *bot); + + void choosePeer(PeerId peerId, MsgId showAtMsgId); // does offerPeer or showPeerHistory + void clearBotStartToken(PeerData *peer); ~MainWidget(); @@ -363,7 +385,7 @@ signals: void dialogRowReplaced(DialogRow *oldRow, DialogRow *newRow); void dialogToTop(const History::DialogLinks &links); void dialogsUpdated(); - void showPeerAsync(quint64 peer, qint32 msgId, bool back, bool force); + void showPeerAsync(quint64 peerId, qint32 showAtMsgId); void stickersUpdated(); public slots: @@ -376,10 +398,12 @@ public slots: void audioLoadProgress(mtpFileLoader *loader); void audioLoadFailed(mtpFileLoader *loader, bool started); void audioLoadRetry(); - void audioPlayProgress(AudioData *audio); + void audioPlayProgress(const AudioMsgId &audioId); void documentLoadProgress(mtpFileLoader *loader); void documentLoadFailed(mtpFileLoader *loader, bool started); void documentLoadRetry(); + void documentPlayProgress(const SongMsgId &songId); + void hidePlayer(); void setInnerFocus(); void dialogsCancelled(); @@ -393,10 +417,12 @@ public slots: void checkIdleFinish(); void updateOnlineDisplay(); - void showPeer(quint64 peer, qint32 msgId = 0, bool back = false, bool force = false); // PeerId, MsgId + void showPeerHistory(quint64 peer, qint32 msgId, bool back = false); void onTopBarClick(); void onPeerShown(PeerData *peer); + void searchInPeer(PeerData *peer); + void onUpdateNotifySettings(); void onPhotosSelect(); @@ -479,11 +505,16 @@ private: HistoryWidget history; ProfileWidget *profile; OverviewWidget *overview; + PlayerWidget _player; TopBarWidget _topBar; ConfirmBox *_forwardConfirm; // for narrow mode - HistoryHider *hider; + HistoryHider *_hider; StackItems _stack; - QPixmap profileAnimCache; + PeerData *_peerInStack; + MsgId _msgIdInStack; + + int32 _playerHeight; + int32 _contentScrollAddToY; Dropdown _mediaType; int32 _mediaTypeMask; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 6275577ff..6baf5b562 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { class SaveMsgLink : public ITextLink { + TEXT_LINK_CLASS(SaveMsgLink) + public: SaveMsgLink(MediaView *view) : _view(view) { @@ -134,19 +136,19 @@ void MediaView::moveToScreen() { } int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize; - _closeNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize, width()); + _closeNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize); _closeNavIcon = centersprite(_closeNav, st::mvClose); - _leftNav = rtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _leftNav = myrtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip); _leftNavIcon = centersprite(_leftNav, st::mvLeft); - _rightNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _rightNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip); _rightNavIcon = centersprite(_rightNav, st::mvRight); _saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2); } -void MediaView::mediaOverviewUpdated(PeerData *peer) { +void MediaView::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (!_photo && !_doc) return; - if (_history && _history->peer == peer) { + if (_history && _history->peer == peer && type == _overview) { _index = -1; for (int i = 0, l = _history->_overview[_overview].size(); i < l; ++i) { if (_history->_overview[_overview].at(i) == _msgid) { @@ -156,7 +158,7 @@ void MediaView::mediaOverviewUpdated(PeerData *peer) { } updateControls(); preloadData(0); - } else if (_user == peer) { + } else if (_user == peer && type == OverviewCount) { if (!_photo) return; _index = -1; @@ -190,7 +192,7 @@ void MediaView::changingMsgId(HistoryItem *row, MsgId newId) { if (row->id == _msgid) { _msgid = newId; } - mediaOverviewUpdated(row->history()->peer); + mediaOverviewUpdated(row->history()->peer, _overview); } void MediaView::updateDocSize() { @@ -223,8 +225,6 @@ void MediaView::updateDocSize() { } void MediaView::updateControls() { - if (!_photo && !_doc) return; - if (_doc && _current.isNull() && _currentGif.isNull()) { if (_doc->loader) { _docDownload.hide(); @@ -255,13 +255,20 @@ void MediaView::updateControls() { _docCancel.hide(); } - _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull())))); - _saveNav = rtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull() && (_photo || _doc))))); + _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _saveNavIcon = centersprite(_saveNav, st::mvSave); - _moreNav = rtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _moreNavIcon = centersprite(_moreNav, st::mvMore); - QDateTime d(date(_photo ? _photo->date : _doc->date)), dNow(date(unixtime())); + QDateTime d, dNow(date(unixtime())); + if (_photo) { + d = date(_photo->date); + } else if (_doc) { + d = date(_doc->date); + } else if (HistoryItem *item = App::histItemById(_msgid)) { + d = item->date; + } if (d.date() == dNow.date()) { _dateText = lng_mediaview_today(lt_time, d.time().toString(cTimeFormat())); } else if (d.date().addDays(1) == dNow.date()) { @@ -271,19 +278,19 @@ void MediaView::updateControls() { } if (_from) { _fromName.setText(st::mvFont, _from->name); - _nameNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height, width()); - _dateNav = rtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } else { _nameNav = QRect(); - _dateNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } updateHeader(); - if (_photo) { + if (_photo || (_history && _overview == OverviewPhotos)) { _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _rightNavVisible = (_index >= 0) && ( (_history && _index + 1 < _history->_overview[_overview].size()) || (_user && (_index + 1 < _user->photos.size() || _index + 1 < _user->photosCount))); - } else if (_doc) { + } else if (_history && _overview == OverviewDocuments) { _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _rightNavVisible = (_index >= 0) && _history && (_index + 1 < _history->_overview[_overview].size()); } else { @@ -308,7 +315,7 @@ void MediaView::updateDropdown() { _btnSaveAs->setVisible(true); _btnCopy->setVisible((_doc && !_current.isNull()) || (_photo && _photo->full->loaded())); _btnForward->setVisible(_msgid > 0); - _btnDelete->setVisible(_msgid > 0 || (App::self() && App::self()->photoId == _photo->id) || (_photo->chat && _photo->chat->photoId == _photo->id)); + _btnDelete->setVisible(_msgid > 0 || (_photo && App::self() && App::self()->photoId == _photo->id) || (_photo && _photo->chat && _photo->chat->photoId == _photo->id)); _btnViewAll->setVisible((_overview != OverviewCount) && _history); _btnViewAll->setText(lang(_doc ? lng_mediaview_files_all : lng_mediaview_photos_all)); _dropdown.updateButtons(); @@ -347,7 +354,6 @@ bool MediaView::animStep(float64 msp) { a_cOpacity.finish(); _controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden); setCursor(_controlsState == ControlsHidden ? Qt::BlankCursor : (_over == OverNone ? style::cur_default : style::cur_pointer)); - LOG(("Finished with controls!")); } else { a_cOpacity.update(dt, anim::linear); } @@ -408,7 +414,6 @@ void MediaView::close() { void MediaView::activateControls() { _controlsHideTimer.start(int(st::mvWaitHide)); if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) { - LOG(("Showing controls..")); _controlsState = ControlsShowing; _controlsAnimStarted = getms(); a_cOpacity.start(1); @@ -419,7 +424,6 @@ void MediaView::activateControls() { void MediaView::onHideControls(bool force) { if (!force && !_dropdown.isHidden()) return; if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) return; - LOG(("Hiding controls..")); _controlsState = ControlsHiding; _controlsAnimStarted = getms(); a_cOpacity.start(0); @@ -442,7 +446,7 @@ void MediaView::onToMessage() { if (HistoryItem *item = _msgid ? App::histItemById(_msgid) : 0) { if (App::wnd()) { close(); - if (App::main()) App::main()->showPeer(item->history()->peer->id, _msgid, false, true); + if (App::main()) App::main()->showPeerHistory(item->history()->peer->id, _msgid); } } } @@ -680,7 +684,7 @@ void MediaView::showPhoto(PhotoData *photo, PeerData *context) { _photo = photo; _overview = OverviewCount; if (_user) { - if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId) { + if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId && _user->photoId != UnknownPeerPhotoId) { _index = 0; } for (int i = 0, l = _user->photos.size(); i < l; ++i) { @@ -771,18 +775,14 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { _x = (width() - _w) / 2; _y = (height() - _h) / 2; _width = _w; - if (_photo->user == WebPageUserId && _msgid) { - if (HistoryItem *item = App::histItemById(_msgid)) { - if (dynamic_cast(item)) { - _from = static_cast(item)->fromForwarded(); - } else { - _from = item->from(); - } + if (_msgid && item) { + if (HistoryForwarded *fwd = item->toHistoryForwarded()) { + _from = fwd->fromForwarded(); } else { - _from = App::user(_photo->user); + _from = item->from(); } } else { - _from = App::user(_photo->user); + _from = _user; } updateControls(); _photo->full->load(); @@ -793,24 +793,30 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { } } -void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { +void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty messages shown as docs: doc can be NULL _doc = doc; + _photo = 0; _caption = Text(); - QString already = _doc->already(true); - if (_doc->sticker && !_doc->sticker->img->isNull() && _doc->sticker->img->loaded()) { - _currentGif.stop(); - _current = _doc->sticker->img->pix(); - } else if (!already.isEmpty()) { - QImageReader reader(already); - if (reader.canRead()) { - if (reader.supportsAnimation() && reader.imageCount() > 1) { - _currentGif.start(0, already); - _current = QPixmap(); + if (_doc) { + QString already = _doc->already(true); + if (_doc->sticker() && !_doc->sticker()->img->isNull() && _doc->sticker()->img->loaded()) { + _currentGif.stop(); + _current = _doc->sticker()->img->pix(); + } else if (!already.isEmpty()) { + QImageReader reader(already); + if (reader.canRead()) { + if (reader.supportsAnimation() && reader.imageCount() > 1) { + _currentGif.start(0, already); + _current = QPixmap(); + } else { + _currentGif.stop(); + QPixmap pix = QPixmap::fromImage(App::readImage(already, 0, false), Qt::ColorOnly); + _current = pix; + } } else { _currentGif.stop(); - QPixmap pix = QPixmap::fromImage(App::readImage(already, 0, false), Qt::ColorOnly); - _current = pix; + _current = QPixmap(); } } else { _currentGif.stop(); @@ -822,37 +828,37 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { } if (_current.isNull() && _currentGif.isNull()) { - if (_doc->thumb->isNull()) { + if (!_doc || _doc->thumb->isNull()) { style::sprite thumbs[] = { st::mvDocBlue, st::mvDocGreen, st::mvDocRed, st::mvDocYellow }; style::color colors[] = { st::mvDocBlueColor, st::mvDocGreenColor, st::mvDocRedColor, st::mvDocYellowColor }; - QString name = _doc->name.toLower(), mime = _doc->mime.toLower(); - if (name.endsWith(QLatin1String(".doc")) || - name.endsWith(QLatin1String(".txt")) || - name.endsWith(QLatin1String(".psd")) || - mime.startsWith(QLatin1String("text/")) + QString name = _doc ? _doc->name.toLower() : QString(), mime = _doc ? _doc->mime.toLower() : QString(); + if (name.endsWith(qstr(".doc")) || + name.endsWith(qstr(".txt")) || + name.endsWith(qstr(".psd")) || + mime.startsWith(qstr("text/")) ) { _docIcon = thumbs[0]; _docIconColor = colors[0]; } else if ( - name.endsWith(QLatin1String(".xls")) || - name.endsWith(QLatin1String(".csv")) + name.endsWith(qstr(".xls")) || + name.endsWith(qstr(".csv")) ) { _docIcon = thumbs[1]; _docIconColor = colors[1]; } else if ( - name.endsWith(QLatin1String(".pdf")) || - name.endsWith(QLatin1String(".ppt")) || - name.endsWith(QLatin1String(".key")) + name.endsWith(qstr(".pdf")) || + name.endsWith(qstr(".ppt")) || + name.endsWith(qstr(".key")) ) { _docIcon = thumbs[2]; _docIconColor = colors[2]; } else if ( - name.endsWith(QLatin1String(".zip")) || - name.endsWith(QLatin1String(".rar")) || - name.endsWith(QLatin1String(".ai")) || - name.endsWith(QLatin1String(".mp3")) || - name.endsWith(QLatin1String(".mov")) || - name.endsWith(QLatin1String(".avi")) + name.endsWith(qstr(".zip")) || + name.endsWith(qstr(".rar")) || + name.endsWith(qstr(".ai")) || + name.endsWith(qstr(".mp3")) || + name.endsWith(qstr(".mov")) || + name.endsWith(qstr(".avi")) ) { _docIcon = thumbs[3]; _docIconColor = colors[3]; @@ -880,9 +886,9 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3; - _docName = _doc->name.isEmpty() ? lang(_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : _doc->name; + _docName = (!_doc || _doc->name.isEmpty()) ? lang(_doc ? (_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : lng_message_empty) : _doc->name; int32 lastDot = _docName.lastIndexOf('.'); - _docExt = (lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1); + _docExt = _doc ? ((lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1)) : QString(); _docNameWidth = st::mvDocNameFont->m.width(_docName); if (_docNameWidth > maxw) { _docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw); @@ -899,12 +905,12 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { _docRadialFirst = _docRadialLast = _docRadialStart = 0; - float64 prg = _doc->loader ? _doc->loader->currentProgress() : 0; + float64 prg = (_doc && _doc->loader) ? _doc->loader->currentProgress() : 0; a_docRadial = anim::fvalue(prg, qMax(prg, 0.0001)); // _docSize is updated in updateControls() _docRect = QRect((width() - st::mvDocSize.width()) / 2, (height() - st::mvDocSize.height()) / 2, st::mvDocSize.width(), st::mvDocSize.height()); - _docIconRect = rtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight(), width()); + _docIconRect = myrtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight()); } else if (!_current.isNull()) { _current.setDevicePixelRatio(cRetinaFactor()); _w = _current.width() / cIntRetinaFactor(); @@ -945,10 +951,10 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { } _x = (width() - _w) / 2; _y = (height() - _h) / 2; - if (HistoryForwarded *fwd = dynamic_cast(item)) { - _from = fwd->fromForwarded()->asUser(); + if (HistoryForwarded *fwd = item->toHistoryForwarded()) { + _from = fwd->fromForwarded(); } else { - _from = item->from()->asUser(); + _from = item->from(); } _full = 1; updateControls(); @@ -1008,7 +1014,7 @@ void MediaView::paintEvent(QPaintEvent *e) { QRect imgRect(_x, _y, _w, _h); const QPixmap *toDraw = _currentGif.isNull() ? &_current : &_currentGif.current(_currentGif.w, _currentGif.h, false); if (imgRect.intersects(r)) { - if (toDraw->hasAlpha() && (!_doc || !_doc->sticker || _doc->sticker->img->isNull())) { + if (toDraw->hasAlpha() && (!_doc || !_doc->sticker() || _doc->sticker()->img->isNull())) { p.fillRect(imgRect, _transparentBrush); } if (_zoom) { @@ -1074,17 +1080,19 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } - } else if (_doc) { + } else { if (_docRect.intersects(r)) { p.fillRect(_docRect, st::mvDocBg->b); if (_docIconRect.intersects(r)) { icon = true; - if (_doc->thumb->isNull()) { - if (!_doc->already().isEmpty() && (!_docRadialStart || _docRadialOpacity < 1)) { + if (!_doc || _doc->thumb->isNull()) { + if ((!_doc || !_doc->already().isEmpty()) && (!_docRadialStart || _docRadialOpacity < 1)) { p.drawPixmap(_docIconRect.topLeft(), App::sprite(), _docIcon); p.setPen(st::mvDocExtColor->p); p.setFont(st::mvDocExtFont->f); - p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt); + if (!_docExt.isEmpty()) { + p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt); + } } else { p.fillRect(_docIconRect, _docIconColor->b); } @@ -1094,7 +1102,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } float64 o = overLevel(OverIcon); - if (_docRadialStart > 0) { + if (_doc && _docRadialStart > 0) { if (_doc->already().isEmpty() && _docRadialOpacity < 1) { p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity) * (1 - _docRadialOpacity)); p.drawSpriteCenter(_docIconRect, st::radialDownload); @@ -1121,7 +1129,7 @@ void MediaView::paintEvent(QPaintEvent *e) { p.setOpacity(1); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - } else if (_doc->already().isEmpty()) { + } else if (_doc && _doc->already().isEmpty()) { p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity)); p.drawSpriteCenter(_docIconRect, st::radialDownload); } @@ -1191,7 +1199,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } // save button - if (_saveNavIcon.intersects(r)) { + if (_saveVisible && _saveNavIcon.intersects(r)) { float64 o = overLevel(OverSave); p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); p.drawPixmap(_saveNavIcon.topLeft(), App::sprite(), st::mvSave); @@ -1262,11 +1270,6 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } - -// static uint64 t = getms(); -// uint64 t2 = getms(); -// LOG(("paint: %1, wait: %2, name: %3, icon: %4").arg(t2 - ms).arg(t2 - t).arg(logBool(name)).arg(logBool(icon))); -// t = t2; } void MediaView::keyPressEvent(QKeyEvent *e) { @@ -1370,7 +1373,7 @@ void MediaView::keyPressEvent(QKeyEvent *e) { } void MediaView::moveToNext(int32 delta) { - if (_index < 0 || (!_photo && !_doc) || (_overview == OverviewCount && !_user)) return; + if (_index < 0 || (_history && _overview != OverviewPhotos && _overview != OverviewDocuments) || (_overview == OverviewCount && !_user)) return; int32 newIndex = _index + delta; if (_history && _overview != OverviewCount) { @@ -1378,10 +1381,15 @@ void MediaView::moveToNext(int32 delta) { _index = newIndex; if (HistoryItem *item = App::histItemById(_history->_overview[_overview][_index])) { _msgid = item->id; - switch (item->getMedia()->type()) { - case MediaTypePhoto: displayPhoto(static_cast(item->getMedia())->photo(), item); preloadData(delta); break; - case MediaTypeDocument: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; - case MediaTypeSticker: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + if (item->getMedia()) { + switch (item->getMedia()->type()) { + case MediaTypePhoto: displayPhoto(static_cast(item->getMedia())->photo(), item); preloadData(delta); break; + case MediaTypeDocument: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + case MediaTypeSticker: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + } + } else { + displayDocument(0, item); + preloadData(delta); } } } @@ -1413,7 +1421,7 @@ void MediaView::preloadData(int32 delta) { switch (media->type()) { case MediaTypePhoto: static_cast(media)->photo()->full->load(); break; case MediaTypeDocument: static_cast(media)->document()->thumb->load(); break; - case MediaTypeSticker: static_cast(media)->document()->sticker->img->load(); break; + case MediaTypeSticker: static_cast(media)->document()->sticker()->img->load(); break; } } } @@ -1826,7 +1834,7 @@ void MediaView::findCurrent() { } } - if (_history->_overviewCount[_overview] < 0) { + if (_history->_overviewCount[_overview] < 0 || (!_index && _history->_overviewCount[_overview] > 0)) { loadBack(); } } @@ -1838,7 +1846,7 @@ void MediaView::loadBack() { if (App::main()) App::main()->loadMediaBack(_history->peer, _overview); } else if (_user && _user->photosCount != 0) { int32 limit = (_index < MediaOverviewStartPerPage && _user->photos.size() > MediaOverviewStartPerPage) ? SearchPerPage : MediaOverviewStartPerPage; - _loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_int(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user)); + _loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_long(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user)); } } @@ -1875,7 +1883,7 @@ void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mt photo->thumb->load(); u->photos.push_back(photo); } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(u); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(u, OverviewCount); } void MediaView::updateHeader() { @@ -1911,7 +1919,7 @@ void MediaView::updateHeader() { hwidth = width() / 3; _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); } - _headerNav = rtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height, width()); + _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); } // //void MediaView::updatePolaroid() { diff --git a/Telegram/SourceFiles/mediaview.h b/Telegram/SourceFiles/mediaview.h index 6735a2317..11b99e266 100644 --- a/Telegram/SourceFiles/mediaview.h +++ b/Telegram/SourceFiles/mediaview.h @@ -55,7 +55,7 @@ public: updateOver(mapFromGlobal(QCursor::pos())); } - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); void updateDocSize(); diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 3967d19be..9108ce2b5 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -150,6 +150,13 @@ with open('scheme.tl') as f: print('Bad param found: "' + param + '" in line: ' + line); continue; ptype = pmasktype.group(3); + if (ptype.find('<') >= 0): + templ = re.match(r'^([vV]ector<)([A-Za-z0-9\._]+)>$', ptype); + if (templ): + ptype = templ.group(1) + 'MTP' + templ.group(2).replace('.', '_') + '>'; + else: + print('Bad template type: ' + ptype); + continue; if (not pname in conditions): conditionsList.append(pname); conditions[pname] = pmasktype.group(2); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 6b34c2780..1a8e0b0f8 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -606,7 +606,7 @@ void MTPabstractTcpConnection::socketRead() { } MTPautoConnection::MTPautoConnection(QThread *thread) : status(WaitingBoth), -tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay) { +tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) { moveToThread(thread); manager.moveToThread(thread); @@ -615,6 +615,7 @@ tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeo httpStartTimer.moveToThread(thread); httpStartTimer.setSingleShot(true); connect(&httpStartTimer, SIGNAL(timeout()), this, SLOT(onHttpStart())); + tcpTimeoutTimer.moveToThread(thread); tcpTimeoutTimer.setSingleShot(true); connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); @@ -628,7 +629,7 @@ tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeo void MTPautoConnection::onHttpStart() { if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by timer")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by timer").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -639,7 +640,7 @@ void MTPautoConnection::onSocketConnected() { if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) { mtpBuffer buffer(_preparePQFake(tcpNonce)); - DEBUG_LOG(("Connection Info: sending fake req_pq through tcp transport")); + DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; tcpTimeoutTimer.start(_tcpTimeout); @@ -677,7 +678,7 @@ void MTPautoConnection::onSocketDisconnected() { } else if (status == WaitingTcp || status == UsingTcp) { emit disconnected(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by socket disconnect")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by socket disconnect").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; emit connected(); } @@ -724,6 +725,7 @@ void MTPautoConnection::httpSend(mtpBuffer &buffer) { void MTPautoConnection::disconnectFromServer() { if (status == FinishedWork) return; + status = FinishedWork; Requests copy = requests; requests.clear(); @@ -740,7 +742,6 @@ void MTPautoConnection::disconnectFromServer() { sock.close(); httpStartTimer.stop(); - status = FinishedWork; } void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 flags) { @@ -750,19 +751,20 @@ void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 f _addr = addr; _port = port; + _flags = flags; connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); sock.connectToHost(QHostAddress(_addr), _port); mtpBuffer buffer(_preparePQFake(httpNonce)); - DEBUG_LOG(("Connection Info: sending fake req_pq through http transport")); + DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); httpSend(buffer); } -bool MTPautoConnection::isConnected() { - return status != FinishedWork && !address.isEmpty(); +bool MTPautoConnection::isConnected() const { + return (status == UsingTcp) || (status == UsingHttp); } void MTPautoConnection::requestFinished(QNetworkReply *reply) { @@ -792,13 +794,14 @@ void MTPautoConnection::requestFinished(QNetworkReply *reply) { status = HttpReady; httpStartTimer.start(MTPTcpConnectionWaitTimeout); } else { - DEBUG_LOG(("Connection Info: Http-transport chosen by pq-response, awaited")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by pq-response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); } } } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what())); if (status == WaitingBoth) { status = WaitingTcp; } else { @@ -834,7 +837,7 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { status = WaitingHttp; sock.disconnectFromHost(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, ready")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -853,16 +856,17 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { MTPResPQ res_pq = _readPQFakeReply(data); const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); if (res_pq_data.vnonce == tcpNonce) { - DEBUG_LOG(("Connection Info: Tcp-transport chosen by pq-response")); + DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingTcp; emit connected(); } } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what())); if (status == WaitingBoth) { status = WaitingHttp; sock.disconnectFromHost(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, awaited")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -902,7 +906,7 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) { if (status == WaitingBoth) { status = WaitingHttp; } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by tcp error, ready")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by tcp error, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; emit connected(); } else if (status == WaitingTcp || status == UsingTcp) { @@ -912,16 +916,64 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) { } } -MTPtcpConnection::MTPtcpConnection(QThread *thread) { +MTPtcpConnection::MTPtcpConnection(QThread *thread) : status(WaitingTcp), +tcpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) { moveToThread(thread); + + tcpTimeoutTimer.moveToThread(thread); + tcpTimeoutTimer.setSingleShot(true); + connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); + sock.moveToThread(thread); App::setProxySettings(sock); connect(&sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); - connect(&sock, SIGNAL(connected()), this, SIGNAL(connected())); - connect(&sock, SIGNAL(disconnected()), this, SIGNAL(disconnected())); + connect(&sock, SIGNAL(connected()), this, SLOT(onSocketConnected())); + connect(&sock, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected())); +} + +void MTPtcpConnection::onSocketConnected() { + if (status == WaitingTcp) { + mtpBuffer buffer(_preparePQFake(tcpNonce)); + + DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + + if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; + tcpTimeoutTimer.start(_tcpTimeout); + + sendData(buffer); + } +} + +void MTPtcpConnection::onTcpTimeoutTimer() { + if (status == WaitingTcp) { + if (_tcpTimeout < MTPMaxReceiveDelay) _tcpTimeout *= 2; + _tcpTimeout = -_tcpTimeout; + + QAbstractSocket::SocketState state = sock.state(); + if (state == QAbstractSocket::ConnectedState || state == QAbstractSocket::ConnectingState || state == QAbstractSocket::HostLookupState) { + sock.disconnectFromHost(); + } else if (state != QAbstractSocket::ClosingState) { + sock.connectToHost(QHostAddress(_addr), _port); + } + } +} + +void MTPtcpConnection::onSocketDisconnected() { + if (_tcpTimeout < 0) { + _tcpTimeout = -_tcpTimeout; + if (status == WaitingTcp) { + sock.connectToHost(QHostAddress(_addr), _port); + return; + } + } + if (status == WaitingTcp || status == UsingTcp) { + emit disconnected(); + } } void MTPtcpConnection::sendData(mtpBuffer &buffer) { + if (status == FinishedWork) return; + if (buffer.size() < 3) { LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); @@ -940,28 +992,51 @@ void MTPtcpConnection::sendData(mtpBuffer &buffer) { } void MTPtcpConnection::disconnectFromServer() { + if (status == FinishedWork) return; + status = FinishedWork; + disconnect(&sock, SIGNAL(readyRead()), 0, 0); sock.close(); } void MTPtcpConnection::connectToServer(const QString &addr, int32 port, int32 flags) { + _addr = addr; + _port = port; + _flags = flags; + connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); - sock.connectToHost(QHostAddress(addr), port); + sock.connectToHost(QHostAddress(_addr), _port); } void MTPtcpConnection::socketPacket(mtpPrime *packet, uint32 size) { + if (status == FinishedWork) return; + mtpBuffer data = _handleTcpResponse(packet, size); if (data.size() == 1) { bool mayBeBadKey = (data[0] == -404) && _sentEncrypted; emit error(mayBeBadKey); + } else if (status == UsingTcp) { + receivedQueue.push_back(data); + emit receivedData(); + } else if (status == WaitingTcp) { + tcpTimeoutTimer.stop(); + try { + MTPResPQ res_pq = _readPQFakeReply(data); + const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); + if (res_pq_data.vnonce == tcpNonce) { + DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + status = UsingTcp; + emit connected(); + } + } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what())); + emit error(); + } } - - receivedQueue.push_back(data); - emit receivedData(); } -bool MTPtcpConnection::isConnected() { - return sock.state() == QAbstractSocket::ConnectedState; +bool MTPtcpConnection::isConnected() const { + return (status == UsingTcp); } int32 MTPtcpConnection::debugState() const { @@ -969,21 +1044,25 @@ int32 MTPtcpConnection::debugState() const { } QString MTPtcpConnection::transport() const { - return qsl("TCP"); + return isConnected() ? qsl("TCP") : QString(); } void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) { + if (status == FinishedWork) return; + _handleTcpError(e, sock); emit error(); } -MTPhttpConnection::MTPhttpConnection(QThread *thread) { +MTPhttpConnection::MTPhttpConnection(QThread *thread) : status(WaitingHttp), httpNonce(MTP::nonce()), _flags(0) { moveToThread(thread); manager.moveToThread(thread); App::setProxySettings(manager); } void MTPhttpConnection::sendData(mtpBuffer &buffer) { + if (status == FinishedWork) return; + if (buffer.size() < 3) { LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); @@ -1002,6 +1081,9 @@ void MTPhttpConnection::sendData(mtpBuffer &buffer) { } void MTPhttpConnection::disconnectFromServer() { + if (status == FinishedWork) return; + status = FinishedWork; + Requests copy = requests; requests.clear(); for (Requests::const_iterator i = copy.cbegin(), e = copy.cend(); i != e; ++i) { @@ -1018,14 +1100,23 @@ void MTPhttpConnection::connectToServer(const QString &addr, int32 p, int32 flag address = QUrl(((flags & MTPDdcOption_flag_ipv6) ? qsl("http://[%1]:%2/api") : qsl("http://%1:%2/api")).arg(addr).arg(80));//not p - always 80 port for http transport TCP_LOG(("HTTP Info: address is %1").arg(address.toDisplayString())); connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*))); - emit connected(); + + _flags = flags; + + mtpBuffer buffer(_preparePQFake(httpNonce)); + + DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + + sendData(buffer); } -bool MTPhttpConnection::isConnected() { - return !address.isEmpty(); +bool MTPhttpConnection::isConnected() const { + return (status == UsingHttp); } void MTPhttpConnection::requestFinished(QNetworkReply *reply) { + if (status == FinishedWork) return; + reply->deleteLater(); if (reply->error() == QNetworkReply::NoError) { requests.remove(reply); @@ -1034,8 +1125,23 @@ void MTPhttpConnection::requestFinished(QNetworkReply *reply) { if (data.size() == 1) { emit error(); } else if (!data.isEmpty()) { - receivedQueue.push_back(data); - emit receivedData(); + if (status == UsingHttp) { + receivedQueue.push_back(data); + emit receivedData(); + } else { + try { + MTPResPQ res_pq = _readPQFakeReply(data); + const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); + if (res_pq_data.vnonce == httpNonce) { + DEBUG_LOG(("Connection Info: HTTP/%1-transport connected by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + status = UsingHttp; + emit connected(); + } + } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what())); + emit error(); + } + } } } else { if (!requests.remove(reply)) { @@ -1061,12 +1167,17 @@ int32 MTPhttpConnection::debugState() const { } QString MTPhttpConnection::transport() const { - return qsl("HTTP"); + if (status == UsingHttp) { + return qsl("HTTP"); + } else { + return QString(); + } } void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { destroyConn(); if (createIPv4) { + QWriteLocker lock(&stateConnMutex); if (cConnectionType() == dbictAuto) { _conn4 = new MTPautoConnection(thread()); } else if (cConnectionType() == dbictTcpProxy) { @@ -1078,6 +1189,7 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { connect(_conn4, SIGNAL(receivedSome()), this, SLOT(onReceivedSome())); } if (createIPv6) { + QWriteLocker lock(&stateConnMutex); if (cConnectionType() == dbictAuto) { _conn6 = new MTPautoConnection(thread()); } else if (cConnectionType() == dbictTcpProxy) { @@ -1098,14 +1210,23 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) { if (conn) { - if (*conn) { - disconnect(*conn, SIGNAL(disconnected()), 0, 0); - disconnect(*conn, SIGNAL(receivedData()), 0, 0); - disconnect(*conn, SIGNAL(receivedSome()), 0, 0); + MTPabstractConnection *toDisconnect = 0; - (*conn)->disconnectFromServer(); - (*conn)->deleteLater(); - *conn = 0; + { + QWriteLocker lock(&stateConnMutex); + if (*conn) { + toDisconnect = *conn; + disconnect(*conn, SIGNAL(connected()), 0, 0); + disconnect(*conn, SIGNAL(disconnected()), 0, 0); + disconnect(*conn, SIGNAL(error(bool)), 0, 0); + disconnect(*conn, SIGNAL(receivedData()), 0, 0); + disconnect(*conn, SIGNAL(receivedSome()), 0, 0); + *conn = 0; + } + } + if (toDisconnect) { + toDisconnect->disconnectFromServer(); + toDisconnect->deleteLater(); } } else { destroyConn(&_conn4); @@ -1132,6 +1253,7 @@ MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConne , _pingMsgId(0) , restarted(false) , keyId(0) +// , sessionDataMutex(QReadWriteLock::Recursive) , sessionData(data) , myKeyLock(false) , authKeyData(0) @@ -1200,7 +1322,7 @@ int32 MTProtoConnectionPrivate::getDC() const { } int32 MTProtoConnectionPrivate::getState() const { - QReadLocker lock(&stateMutex); + QReadLocker lock(&stateConnMutex); int32 result = _state; if (_state < 0) { if (retryTimer.isActive()) { @@ -1214,18 +1336,21 @@ int32 MTProtoConnectionPrivate::getState() const { } QString MTProtoConnectionPrivate::transport() const { - if ((!_conn4 && !_conn6) || _state < 0) { + QReadLocker lock(&stateConnMutex); + if ((!_conn4 && !_conn6) || (_conn4 && _conn6) || (_state < 0)) { return QString(); } - return (_conn4 ? _conn4 : _conn6)->transport(); + QString result = (_conn4 ? _conn4 : _conn6)->transport(); + if (!result.isEmpty() && cTryIPv6()) result += (_conn4 ? "/IPv4" : "/IPv6"); + return result; } bool MTProtoConnectionPrivate::setState(int32 state, int32 ifState) { if (ifState != MTProtoConnection::UpdateAlways) { - QReadLocker lock(&stateMutex); + QReadLocker lock(&stateConnMutex); if (_state != ifState) return false; } - QWriteLocker lock(&stateMutex); + QWriteLocker lock(&stateConnMutex); if (_state == state) return false; _state = state; if (state < 0) { @@ -1732,7 +1857,7 @@ void MTProtoConnectionPrivate::tryToSend() { } } mtpRequestData::padding(toSendRequest); - sendRequest(toSendRequest, needAnyResponse); + sendRequest(toSendRequest, needAnyResponse, lockFinished); } void MTProtoConnectionPrivate::retryByTimer() { @@ -1784,15 +1909,15 @@ void MTProtoConnectionPrivate::socketStart(bool afterConfig) { port6 = dcIndex6->port; } } - bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!port6 || ip6.empty()); + bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!cTryIPv6() || !port6 || ip6.empty()); if (noIPv4 && noIPv6) { if (afterConfig) { if (noIPv4) LOG(("MTP Error: DC %1 options for IPv4 not found right after config load!").arg(dc)); - if (noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc)); + if (cTryIPv6() && noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc)); return restart(); } if (noIPv4) DEBUG_LOG(("MTP Info: DC %1 options for IPv4 not found, waiting for config").arg(dc)); - if (noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc)); + if (cTryIPv6() && noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc)); connect(mtpConfigLoader(), SIGNAL(loaded()), this, SLOT(onConfigLoaded())); mtpConfigLoader()->load(); return; @@ -1847,8 +1972,11 @@ void MTProtoConnectionPrivate::restart(bool maybeBadKey) { } } + lockFinished.unlock(); doDisconnect(); - if (_needSessionReset) { + + lockFinished.relock(); + if (sessionData && _needSessionReset) { resetSession(); } restarted = true; @@ -1965,7 +2093,12 @@ void MTProtoConnectionPrivate::onWaitIPv4Failed() { void MTProtoConnectionPrivate::doDisconnect() { destroyConn(); - unlockKey(); + { + QReadLocker lockFinished(&sessionDataMutex); + if (sessionData) { + unlockKey(); + } + } clearAuthKeyData(); @@ -1989,12 +2122,16 @@ void MTProtoConnectionPrivate::handleReceived() { DEBUG_LOG(("MTP Error: auth_key for dc %1 busy, cant lock").arg(dc)); clearMessages(); keyId = 0; + + lockFinished.unlock(); return restart(); } mtpAuthKeyPtr key(sessionData->getKey()); if (!key || key->keyId() != keyId) { DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); + + lockFinished.unlock(); return restart(); } @@ -2005,11 +2142,15 @@ void MTProtoConnectionPrivate::handleReceived() { if (len < 18) { // 2 auth_key_id, 4 msg_key, 2 salt, 2 session, 2 msg_id, 1 seq_no, 1 length, (1 data + 3 padding) min LOG(("TCP Error: bad message received, len %1").arg(len * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); + + lockFinished.unlock(); return restart(); } if (keyId != *(uint64*)encrypted) { LOG(("TCP Error: bad auth_key_id %1 instead of %2 received").arg(keyId).arg(*(uint64*)encrypted)); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); + + lockFinished.unlock(); return restart(); } @@ -2028,6 +2169,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(msgLen).arg(dataBuffer.size())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } uchar sha1Buffer[20]; @@ -2035,6 +2178,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("TCP Error: bad SHA1 hash after aesDecrypt in message")); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } TCP_LOG(("TCP Info: decrypted message %1,%2,%3 is %4 len").arg(msgId).arg(seqNo).arg(logBool(needAck)).arg(msgLen + 8 * sizeof(mtpPrime))); @@ -2044,6 +2189,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("MTP Error: bad server session received")); TCP_LOG(("MTP Error: bad server session %1 instead of %2 in message received").arg(session).arg(serverSession)); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } @@ -2053,6 +2200,8 @@ void MTProtoConnectionPrivate::handleReceived() { bool isReply = ((msgId & 0x03) == 1); if (!isReply && ((msgId & 0x03) != 3)) { LOG(("MTP Error: bad msg_id %1 in message received").arg(msgId)); + + lockFinished.unlock(); return restart(); } @@ -2128,6 +2277,8 @@ void MTProtoConnectionPrivate::handleReceived() { if (res < 0) { _needSessionReset = (res < -1); + + lockFinished.unlock(); return restart(); } retryTimeout = 1; // reset restart() timer @@ -2898,6 +3049,8 @@ void MTProtoConnectionPrivate::onConnected4() { disconnect(_conn4, SIGNAL(connected()), this, SLOT(onConnected4())); if (!_conn4->isConnected()) { LOG(("Connection Error: not connected in onConnected4(), state: %1").arg(_conn4->debugState())); + + lockFinished.unlock(); return restart(); } @@ -2906,6 +3059,7 @@ void MTProtoConnectionPrivate::onConnected4() { DEBUG_LOG(("MTP Info: connection through IPv4 succeed.")); + lockFinished.unlock(); updateAuthKey(); } @@ -2916,9 +3070,11 @@ void MTProtoConnectionPrivate::onConnected6() { QReadLocker lockFinished(&sessionDataMutex); if (!sessionData) return; - disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected())); + disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected6())); if (!_conn6->isConnected()) { LOG(("Connection Error: not connected in onConnected(), state: %1").arg(_conn6->debugState())); + + lockFinished.unlock(); return restart(); } @@ -2997,6 +3153,7 @@ void MTProtoConnectionPrivate::updateAuthKey() { connect(_conn, SIGNAL(receivedData()), this, SLOT(pqAnswered())); DEBUG_LOG(("AuthKey Info: sending Req_pq..")); + lockFinished.unlock(); sendRequestNotSecure(req_pq); } @@ -3300,6 +3457,7 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { MTPSet_client_DH_params::ResponseType res_client_DH_params; if (!readResponseNotSecure(res_client_DH_params)) { + lockFinished.unlock(); return restart(); } @@ -3309,11 +3467,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_ok)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_ok)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 1; @@ -3321,6 +3483,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash1 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash1 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash1: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash1, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } @@ -3343,11 +3507,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_retry)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_retry)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 2; @@ -3355,6 +3523,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash2 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash2 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash2: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash2, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } authKeyData->retry_id = authKeyData->auth_key_aux_hash; @@ -3365,11 +3535,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_fail)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_fail)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 3; @@ -3377,13 +3551,20 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash3 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash3 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash3: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash3, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } LOG(("AuthKey Error: dh_gen_fail received!")); - } return restart(); + } + + lockFinished.unlock(); + return restart(); } LOG(("AuthKey Error: unknown set_client_DH_params_answer received, typeId = %1").arg(res_client_DH_params.type())); + + lockFinished.unlock(); return restart(); } @@ -3479,7 +3660,7 @@ void MTProtoConnectionPrivate::sendRequestNotSecure(const TRequest &request) { onSentSome(buffer.size() * sizeof(mtpPrime)); - } catch(Exception &e) { + } catch (Exception &e) { return restart(); } } @@ -3516,13 +3697,13 @@ bool MTProtoConnectionPrivate::readResponseNotSecure(TResponse &response) { } const mtpPrime *from(answer + 5), *end(from + len - 5); response.read(from, end); - } catch(Exception &e) { + } catch (Exception &e) { return false; } return true; } -bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse) { +bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished) { uint32 fullSize = request->size(); if (fullSize < 9) return false; @@ -3532,6 +3713,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp ReadLockerAttempt lock(sessionData->keyMutex()); if (!lock) { DEBUG_LOG(("MTP Info: could not lock key for read in sendBuffer(), dc %1, restarting..").arg(dc)); + + lockFinished.unlock(); restart(); return false; } @@ -3539,6 +3722,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp mtpAuthKeyPtr key(sessionData->getKey()); if (!key || key->keyId() != keyId) { DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); + + lockFinished.unlock(); restart(); return false; } @@ -3605,9 +3790,6 @@ void MTProtoConnectionPrivate::lockKey() { } void MTProtoConnectionPrivate::unlockKey() { - QReadLocker lockFinished(&sessionDataMutex); - if (!sessionData) return; - if (myKeyLock) { myKeyLock = false; sessionData->keyMutex()->unlock(); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index fc29b511f..2b600b60f 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -41,10 +41,18 @@ enum { MTPDreplyKeyboardMarkup_flag_resize = (1 << 0), MTPDreplyKeyboardMarkup_flag_single_use = (1 << 1), - MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31) // client side flag for zeroMarkup + MTPDreplyKeyboardMarkup_flag_personal = (1 << 2), + MTPDreplyKeyboardMarkup_flag_FORCE_REPLY = (1 << 30), // client side flag for forceReply + MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31), // client side flag for zeroMarkup + + MTPDstickerSet_flag_installed = (1 << 0), + MTPDstickerSet_flag_disabled = (1 << 1), + MTPDstickerSet_flag_official = (1 << 2), + MTPDstickerSet_flag_NOT_LOADED = (1 << 31), // client side flag for not yet loaded set }; static const MTPReplyMarkup MTPnullMarkup = MTP_replyKeyboardMarkup(MTP_int(0), MTP_vector(0)); +static const MTPVector MTPnullEntities = MTP_vector(0); #include "mtproto/mtpPublicRSA.h" #include "mtproto/mtpAuthKey.h" @@ -139,7 +147,7 @@ public: virtual void sendData(mtpBuffer &buffer) = 0; // has size + 3, buffer[0] = len, buffer[1] = packetnum, buffer[last] = crc32 virtual void disconnectFromServer() = 0; virtual void connectToServer(const QString &addr, int32 port, int32 flags) = 0; - virtual bool isConnected() = 0; + virtual bool isConnected() const = 0; virtual bool usingHttpWait() { return false; } @@ -207,7 +215,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; bool usingHttpWait(); bool needHttpWait(); @@ -254,7 +262,7 @@ private: Requests requests; QString _addr; - int32 _port, _tcpTimeout; + int32 _port, _tcpTimeout, _flags; QTimer tcpTimeoutTimer; }; @@ -269,7 +277,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; int32 debugState() const; @@ -279,10 +287,29 @@ public slots: void socketError(QAbstractSocket::SocketError e); + void onSocketConnected(); + void onSocketDisconnected(); + + void onTcpTimeoutTimer(); + protected: void socketPacket(mtpPrime *packet, uint32 packetSize); +private: + + enum Status { + WaitingTcp = 0, + UsingTcp, + FinishedWork + }; + Status status; + MTPint128 tcpNonce; + + QString _addr; + int32 _port, _tcpTimeout, _flags; + QTimer tcpTimeoutTimer; + }; class MTPhttpConnection : public MTPabstractConnection { @@ -295,7 +322,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; bool usingHttpWait(); bool needHttpWait(); @@ -309,6 +336,15 @@ public slots: private: + enum Status { + WaitingHttp = 0, + UsingHttp, + FinishedWork + }; + Status status; + MTPint128 httpNonce; + int32 _flags; + QNetworkAccessManager manager; QUrl address; @@ -375,7 +411,6 @@ public slots: void onError4(bool maybeBadKey = false); void onError6(bool maybeBadKey = false); - void doDisconnect(); void doFinish(); // Auth key creation packet receive slots @@ -395,6 +430,8 @@ public slots: private: + void doDisconnect(); + void createConn(bool createIPv4, bool createIPv6); void destroyConn(MTPabstractConnection **conn = 0); // 0 - destory all @@ -402,7 +439,7 @@ private: mtpMsgId prepareToSend(mtpRequest &request, mtpMsgId currentLastId); mtpMsgId replaceMsgId(mtpRequest &request, mtpMsgId newId); - bool sendRequest(mtpRequest &request, bool needAnyResponse); + bool sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished); mtpRequestId wasSent(mtpMsgId msgId) const; int32 handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime); @@ -412,7 +449,7 @@ private: void clearMessages(); bool setState(int32 state, int32 ifState = MTProtoConnection::UpdateAlways); - mutable QReadWriteLock stateMutex; + mutable QReadWriteLock stateConnMutex; int32 _state; bool _needSessionReset; diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 90fdf7d91..e9e479134 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -366,7 +366,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, }, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); -static const mtpPrime mtpCurrentLayer = 31; +static const mtpPrime mtpCurrentLayer = 34; template class MTPBoxed : public bareT { diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 74e7e58c8..48cf2b3f0 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -487,33 +487,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputPeerSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - case mtpc_inputPeerContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_inputPeerForeign: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerForeign"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_inputPeerChat: if (stage) { to.add(",\n").addSpaces(lev); @@ -527,6 +500,20 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_inputPeerUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_inputUserEmpty: to.add("{ inputUserEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; @@ -535,24 +522,11 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputUserSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - case mtpc_inputUserContact: + case mtpc_inputUser: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ inputUserContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_inputUserForeign: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputUserForeign"); + to.add("{ inputUser"); to.add("\n").addSpaces(lev); } switch (stage) { @@ -1374,6 +1348,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 8: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 9: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 10: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::flag_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break; + case 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -1662,10 +1637,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -1740,9 +1713,9 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 5: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 6: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; @@ -2221,10 +2194,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messages_messageEmpty: - to.add("{ messages_messageEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); - break; - case mtpc_messages_sentMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -2236,8 +2205,9 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" entities: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -2336,6 +2306,10 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputMessagesFilterAudioDocuments }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + case mtpc_inputMessagesFilterUrl: + to.add("{ inputMessagesFilterUrl }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + break; + case mtpc_updateNewMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -2847,6 +2821,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 7: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 8: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 9: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; + case 10: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -2870,6 +2845,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 8: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 9: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 10: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; + case 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -3513,12 +3489,11 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 6: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -3887,6 +3862,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" performer: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -3949,9 +3926,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" packs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" sets: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" documents: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" sets: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4262,10 +4237,13 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" short_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" short_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 6: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4294,8 +4272,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" command: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" params: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" description: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" description: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4348,7 +4325,29 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP break; case mtpc_replyKeyboardHide: - to.add("{ replyKeyboardHide }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ replyKeyboardHide"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_replyKeyboardForceReply: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ replyKeyboardForceReply"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } break; case mtpc_replyKeyboardMarkup: @@ -4365,6 +4364,179 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_help_appChangelogEmpty: + to.add("{ help_appChangelogEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + break; + + case mtpc_help_appChangelog: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_appChangelog"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" text: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityUnknown: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityUnknown"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityMention: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityMention"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityHashtag: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityHashtag"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityBotCommand: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityBotCommand"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityUrl: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityUrl"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityEmail: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityEmail"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityBold: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityBold"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityItalic: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityItalic"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityCode: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityCode"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityPre: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityPre"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" language: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityTextUrl: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityTextUrl"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" url: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_req_pq: if (stage) { to.add(",\n").addSpaces(lev); @@ -4864,6 +5036,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" stickerset: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" disabled: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -5417,6 +5590,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 3: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 4: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 5: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPmessages_sendMessage::flag_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; + case 6: to.add(" entities: "); ++stages.back(); if (flag & MTPmessages_sendMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -5761,7 +5935,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } @@ -6176,6 +6350,22 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_help_getAppChangelog: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_getAppChangelog"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_rpc_result: if (stage) { to.add(",\n").addSpaces(lev); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 5ad499233..6ee83d88c 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -67,13 +67,9 @@ enum { mtpc_null = 0x56730bcc, mtpc_inputPeerEmpty = 0x7f3b18ea, mtpc_inputPeerSelf = 0x7da07ec9, - mtpc_inputPeerContact = 0x1023dbe8, - mtpc_inputPeerForeign = 0x9b447325, mtpc_inputPeerChat = 0x179be863, mtpc_inputUserEmpty = 0xb98886cf, mtpc_inputUserSelf = 0xf7c1b13f, - mtpc_inputUserContact = 0x86e94f65, - mtpc_inputUserForeign = 0x655e74ff, mtpc_inputPhoneContact = 0xf392b7f4, mtpc_inputFile = 0xf52ff27f, mtpc_inputMediaEmpty = 0x9664f57f, @@ -128,7 +124,7 @@ enum { mtpc_chatPhotoEmpty = 0x37c1011c, mtpc_chatPhoto = 0x6153276a, mtpc_messageEmpty = 0x83e5de54, - mtpc_message = 0xc3060325, + mtpc_message = 0xf07814c8, mtpc_messageService = 0x1d86f70e, mtpc_messageMediaEmpty = 0x3ded6320, mtpc_messageMediaPhoto = 0x3d8ce53d, @@ -145,12 +141,12 @@ enum { mtpc_messageActionChatDeleteUser = 0xb2ae9b0c, mtpc_dialog = 0xc1dd804a, mtpc_photoEmpty = 0x2331b22d, - mtpc_photo = 0xc3838076, + mtpc_photo = 0xcded42fe, mtpc_photoSizeEmpty = 0xe17e23c, mtpc_photoSize = 0x77bfb61b, mtpc_photoCachedSize = 0xe9a734fa, mtpc_videoEmpty = 0xc10658a8, - mtpc_video = 0xee9f4a4d, + mtpc_video = 0xf72887d3, mtpc_geoPointEmpty = 0x1117dd5f, mtpc_geoPoint = 0x2049d70c, mtpc_auth_checkedPhone = 0x811ea28e, @@ -187,8 +183,7 @@ enum { mtpc_messages_dialogsSlice = 0x71e094f3, mtpc_messages_messages = 0x8c718e87, mtpc_messages_messagesSlice = 0xb446ae3, - mtpc_messages_messageEmpty = 0x3f4e0648, - mtpc_messages_sentMessage = 0x4c3d47f3, + mtpc_messages_sentMessage = 0x8a99d8e0, mtpc_messages_chats = 0x64ff9fd5, mtpc_messages_chatFull = 0xe5d7d19c, mtpc_messages_affectedHistory = 0xb45c69d1, @@ -200,6 +195,7 @@ enum { mtpc_inputMessagesFilterDocument = 0x9eddf188, mtpc_inputMessagesFilterAudio = 0xcfc87522, mtpc_inputMessagesFilterAudioDocuments = 0x5afbf764, + mtpc_inputMessagesFilterUrl = 0x7ef0dd87, mtpc_updateNewMessage = 0x1f2b0afd, mtpc_updateMessageID = 0x4e90bfd6, mtpc_updateDeleteMessages = 0xa20db0e5, @@ -217,8 +213,8 @@ enum { mtpc_updates_difference = 0xf49ca0, mtpc_updates_differenceSlice = 0xa8fb1981, mtpc_updatesTooLong = 0xe317af7e, - mtpc_updateShortMessage = 0xed5c2127, - mtpc_updateShortChatMessage = 0x52238b3c, + mtpc_updateShortMessage = 0x3f32d858, + mtpc_updateShortChatMessage = 0xf9409b3d, mtpc_updateShort = 0x78d4dec1, mtpc_updatesCombined = 0x725b04c3, mtpc_updates = 0x74ae4240, @@ -288,7 +284,7 @@ enum { mtpc_inputAudioFileLocation = 0x74dc404d, mtpc_inputDocumentFileLocation = 0x4e45abe9, mtpc_audioEmpty = 0x586988d8, - mtpc_audio = 0xc7ac6496, + mtpc_audio = 0xf9e35055, mtpc_documentEmpty = 0x36f8c871, mtpc_document = 0xf9a39f4f, mtpc_help_support = 0x17c6b5f6, @@ -338,13 +334,13 @@ enum { mtpc_documentAttributeAnimated = 0x11b58939, mtpc_documentAttributeSticker = 0x3a556302, mtpc_documentAttributeVideo = 0x5910cccb, - mtpc_documentAttributeAudio = 0x51448e5, + mtpc_documentAttributeAudio = 0xded218e0, mtpc_documentAttributeFilename = 0x15590068, mtpc_messages_stickersNotModified = 0xf1749a22, mtpc_messages_stickers = 0x8a8ecd32, mtpc_stickerPack = 0x12b299d4, mtpc_messages_allStickersNotModified = 0xe86602c3, - mtpc_messages_allStickers = 0x5ce352ec, + mtpc_messages_allStickers = 0xd51dafdb, mtpc_disabledFeature = 0xae636f24, mtpc_updateReadHistoryInbox = 0x9961fd5c, mtpc_updateReadHistoryOutbox = 0x2f2f21bf, @@ -377,16 +373,32 @@ enum { mtpc_inputStickerSetEmpty = 0xffb62b95, mtpc_inputStickerSetID = 0x9de7a269, mtpc_inputStickerSetShortName = 0x861cc8a0, - mtpc_stickerSet = 0xa7a43b17, + mtpc_stickerSet = 0xcd303b41, mtpc_messages_stickerSet = 0xb60a24a6, mtpc_user = 0x22e49072, - mtpc_botCommand = 0xb79d22ab, + mtpc_botCommand = 0xc27ac8c7, mtpc_botInfoEmpty = 0xbb2e37ce, mtpc_botInfo = 0x9cf585d, mtpc_keyboardButton = 0xa2fa4880, mtpc_keyboardButtonRow = 0x77608b83, - mtpc_replyKeyboardHide = 0xced6ebbc, + mtpc_replyKeyboardHide = 0xa03e5b85, + mtpc_replyKeyboardForceReply = 0xf4108aa0, mtpc_replyKeyboardMarkup = 0x3502758c, + mtpc_inputPeerUser = 0x7b8e7de6, + mtpc_inputUser = 0xd8292816, + mtpc_help_appChangelogEmpty = 0xaf7e0394, + mtpc_help_appChangelog = 0x4668e6bd, + mtpc_messageEntityUnknown = 0xbb92ba95, + mtpc_messageEntityMention = 0xfa04579d, + mtpc_messageEntityHashtag = 0x6f635b0d, + mtpc_messageEntityBotCommand = 0x6cef8ac7, + mtpc_messageEntityUrl = 0x6ed02538, + mtpc_messageEntityEmail = 0x64e475c2, + mtpc_messageEntityBold = 0xbd610bc9, + mtpc_messageEntityItalic = 0x826f8b60, + mtpc_messageEntityCode = 0x28a20571, + mtpc_messageEntityPre = 0x73924be0, + mtpc_messageEntityTextUrl = 0x76a6d327, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, mtpc_auth_checkPhone = 0x6fe51dfb, @@ -430,7 +442,7 @@ enum { mtpc_messages_deleteMessages = 0xa5f18925, mtpc_messages_receivedMessages = 0x5a954c0, mtpc_messages_setTyping = 0xa3825e50, - mtpc_messages_sendMessage = 0xfc55e6b5, + mtpc_messages_sendMessage = 0xdf12390, mtpc_messages_sendMedia = 0xc8f16791, mtpc_messages_forwardMessages = 0x55e1728d, mtpc_messages_getChats = 0x3c6aa187, @@ -452,7 +464,7 @@ enum { mtpc_help_getAppUpdate = 0xc812ac7e, mtpc_help_saveAppLog = 0x6f02f748, mtpc_help_getInviteText = 0xa4a95186, - mtpc_photos_getUserPhotos = 0xb7ee553c, + mtpc_photos_getUserPhotos = 0x91cd32a8, mtpc_messages_forwardMessage = 0x33963bf9, mtpc_messages_sendBroadcast = 0xbf73f4da, mtpc_geochats_getLocated = 0x7f192d8f, @@ -512,9 +524,10 @@ enum { mtpc_messages_checkChatInvite = 0x3eadb1bb, mtpc_messages_importChatInvite = 0x6c50051c, mtpc_messages_getStickerSet = 0x2619a90e, - mtpc_messages_installStickerSet = 0xefbbfae9, + mtpc_messages_installStickerSet = 0x7b30c3a6, mtpc_messages_uninstallStickerSet = 0xf96e55de, - mtpc_messages_startBot = 0x1b3e0ffc + mtpc_messages_startBot = 0x1b3e0ffc, + mtpc_help_getAppChangelog = 0x5bab7fb2 }; // Type forward declarations @@ -593,13 +606,11 @@ class MTPDerror; class MTPnull; class MTPinputPeer; -class MTPDinputPeerContact; -class MTPDinputPeerForeign; class MTPDinputPeerChat; +class MTPDinputPeerUser; class MTPinputUser; -class MTPDinputUserContact; -class MTPDinputUserForeign; +class MTPDinputUser; class MTPinputContact; class MTPDinputPhoneContact; @@ -808,8 +819,6 @@ class MTPmessages_messages; class MTPDmessages_messages; class MTPDmessages_messagesSlice; -class MTPmessages_message; - class MTPmessages_sentMessage; class MTPDmessages_sentMessage; class MTPDmessages_sentMessageLink; @@ -1078,8 +1087,26 @@ class MTPkeyboardButtonRow; class MTPDkeyboardButtonRow; class MTPreplyMarkup; +class MTPDreplyKeyboardHide; +class MTPDreplyKeyboardForceReply; class MTPDreplyKeyboardMarkup; +class MTPhelp_appChangelog; +class MTPDhelp_appChangelog; + +class MTPmessageEntity; +class MTPDmessageEntityUnknown; +class MTPDmessageEntityMention; +class MTPDmessageEntityHashtag; +class MTPDmessageEntityBotCommand; +class MTPDmessageEntityUrl; +class MTPDmessageEntityEmail; +class MTPDmessageEntityBold; +class MTPDmessageEntityItalic; +class MTPDmessageEntityCode; +class MTPDmessageEntityPre; +class MTPDmessageEntityTextUrl; + // Boxed types definitions typedef MTPBoxed MTPResPQ; @@ -1160,7 +1187,6 @@ typedef MTPBoxed MTPcontacts_Blocked; typedef MTPBoxed MTPcontacts_Suggested; typedef MTPBoxed MTPmessages_Dialogs; typedef MTPBoxed MTPmessages_Messages; -typedef MTPBoxed MTPmessages_Message; typedef MTPBoxed MTPmessages_SentMessage; typedef MTPBoxed MTPmessages_Chats; typedef MTPBoxed MTPmessages_ChatFull; @@ -1231,6 +1257,8 @@ typedef MTPBoxed MTPBotInfo; typedef MTPBoxed MTPKeyboardButton; typedef MTPBoxed MTPKeyboardButtonRow; typedef MTPBoxed MTPReplyMarkup; +typedef MTPBoxed MTPhelp_AppChangelog; +typedef MTPBoxed MTPMessageEntity; // Type classes definitions @@ -2067,30 +2095,6 @@ public: read(from, end, cons); } - MTPDinputPeerContact &_inputPeerContact() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerContact) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerContact); - split(); - return *(MTPDinputPeerContact*)data; - } - const MTPDinputPeerContact &c_inputPeerContact() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerContact) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerContact); - return *(const MTPDinputPeerContact*)data; - } - - MTPDinputPeerForeign &_inputPeerForeign() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerForeign); - split(); - return *(MTPDinputPeerForeign*)data; - } - const MTPDinputPeerForeign &c_inputPeerForeign() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerForeign); - return *(const MTPDinputPeerForeign*)data; - } - MTPDinputPeerChat &_inputPeerChat() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_inputPeerChat) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerChat); @@ -2103,6 +2107,18 @@ public: return *(const MTPDinputPeerChat*)data; } + MTPDinputPeerUser &_inputPeerUser() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPeerUser) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerUser); + split(); + return *(MTPDinputPeerUser*)data; + } + const MTPDinputPeerUser &c_inputPeerUser() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPeerUser) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerUser); + return *(const MTPDinputPeerUser*)data; + } + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); @@ -2112,15 +2128,13 @@ public: private: explicit MTPinputPeer(mtpTypeId type); - explicit MTPinputPeer(MTPDinputPeerContact *_data); - explicit MTPinputPeer(MTPDinputPeerForeign *_data); explicit MTPinputPeer(MTPDinputPeerChat *_data); + explicit MTPinputPeer(MTPDinputPeerUser *_data); friend MTPinputPeer MTP_inputPeerEmpty(); friend MTPinputPeer MTP_inputPeerSelf(); - friend MTPinputPeer MTP_inputPeerContact(MTPint _user_id); - friend MTPinputPeer MTP_inputPeerForeign(MTPint _user_id, const MTPlong &_access_hash); friend MTPinputPeer MTP_inputPeerChat(MTPint _chat_id); + friend MTPinputPeer MTP_inputPeerUser(MTPint _user_id, const MTPlong &_access_hash); mtpTypeId _type; }; @@ -2134,28 +2148,16 @@ public: read(from, end, cons); } - MTPDinputUserContact &_inputUserContact() { + MTPDinputUser &_inputUser() { if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserContact) throw mtpErrorWrongTypeId(_type, mtpc_inputUserContact); + if (_type != mtpc_inputUser) throw mtpErrorWrongTypeId(_type, mtpc_inputUser); split(); - return *(MTPDinputUserContact*)data; + return *(MTPDinputUser*)data; } - const MTPDinputUserContact &c_inputUserContact() const { + const MTPDinputUser &c_inputUser() const { if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserContact) throw mtpErrorWrongTypeId(_type, mtpc_inputUserContact); - return *(const MTPDinputUserContact*)data; - } - - MTPDinputUserForeign &_inputUserForeign() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputUserForeign); - split(); - return *(MTPDinputUserForeign*)data; - } - const MTPDinputUserForeign &c_inputUserForeign() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputUserForeign); - return *(const MTPDinputUserForeign*)data; + if (_type != mtpc_inputUser) throw mtpErrorWrongTypeId(_type, mtpc_inputUser); + return *(const MTPDinputUser*)data; } uint32 innerLength() const; @@ -2167,13 +2169,11 @@ public: private: explicit MTPinputUser(mtpTypeId type); - explicit MTPinputUser(MTPDinputUserContact *_data); - explicit MTPinputUser(MTPDinputUserForeign *_data); + explicit MTPinputUser(MTPDinputUser *_data); friend MTPinputUser MTP_inputUserEmpty(); friend MTPinputUser MTP_inputUserSelf(); - friend MTPinputUser MTP_inputUserContact(MTPint _user_id); - friend MTPinputUser MTP_inputUserForeign(MTPint _user_id, const MTPlong &_access_hash); + friend MTPinputUser MTP_inputUser(MTPint _user_id, const MTPlong &_access_hash); mtpTypeId _type; }; @@ -3362,7 +3362,7 @@ private: explicit MTPmessage(MTPDmessageService *_data); friend MTPmessage MTP_messageEmpty(MTPint _id); - friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup); + friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities); friend MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action); mtpTypeId _type; @@ -3706,7 +3706,7 @@ private: explicit MTPphoto(MTPDphoto *_data); friend MTPphoto MTP_photoEmpty(const MTPlong &_id); - friend MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes); + friend MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes); mtpTypeId _type; }; @@ -3822,7 +3822,7 @@ private: explicit MTPvideo(MTPDvideo *_data); friend MTPvideo MTP_videoEmpty(const MTPlong &_id); - friend MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h); + friend MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h); mtpTypeId _type; }; @@ -4735,27 +4735,6 @@ private: }; typedef MTPBoxed MTPmessages_Messages; -class MTPmessages_message { -public: - MTPmessages_message() { - } - MTPmessages_message(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_messageEmpty) { - read(from, end, cons); - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_messageEmpty); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - - friend MTPmessages_message MTP_messages_messageEmpty(); -}; -typedef MTPBoxed MTPmessages_Message; - class MTPmessages_sentMessage : private mtpDataOwner { public: MTPmessages_sentMessage() : mtpDataOwner(0), _type(0) { @@ -4800,7 +4779,7 @@ private: explicit MTPmessages_sentMessage(MTPDmessages_sentMessage *_data); explicit MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data); - friend MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count); + friend MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count); friend MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq); mtpTypeId _type; @@ -4926,6 +4905,7 @@ private: friend MTPmessagesFilter MTP_inputMessagesFilterDocument(); friend MTPmessagesFilter MTP_inputMessagesFilterAudio(); friend MTPmessagesFilter MTP_inputMessagesFilterAudioDocuments(); + friend MTPmessagesFilter MTP_inputMessagesFilterUrl(); mtpTypeId _type; }; @@ -5540,8 +5520,8 @@ private: explicit MTPupdates(MTPDupdates *_data); friend MTPupdates MTP_updatesTooLong(); - friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id); - friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id); + friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities); + friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities); friend MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date); friend MTPupdates MTP_updatesCombined(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq_start, MTPint _seq); friend MTPupdates MTP_updates(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq); @@ -6536,7 +6516,7 @@ private: explicit MTPaudio(MTPDaudio *_data); friend MTPaudio MTP_audioEmpty(const MTPlong &_id); - friend MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id); + friend MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id); mtpTypeId _type; }; @@ -7143,7 +7123,7 @@ private: friend MTPdocumentAttribute MTP_documentAttributeAnimated(); friend MTPdocumentAttribute MTP_documentAttributeSticker(const MTPstring &_alt, const MTPInputStickerSet &_stickerset); friend MTPdocumentAttribute MTP_documentAttributeVideo(MTPint _duration, MTPint _w, MTPint _h); - friend MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration); + friend MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration, const MTPstring &_title, const MTPstring &_performer); friend MTPdocumentAttribute MTP_documentAttributeFilename(const MTPstring &_file_name); mtpTypeId _type; @@ -7251,7 +7231,7 @@ private: explicit MTPmessages_allStickers(MTPDmessages_allStickers *_data); friend MTPmessages_allStickers MTP_messages_allStickersNotModified(); - friend MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents); + friend MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_sets); mtpTypeId _type; }; @@ -7816,7 +7796,7 @@ public: private: explicit MTPstickerSet(MTPDstickerSet *_data); - friend MTPstickerSet MTP_stickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name); + friend MTPstickerSet MTP_stickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash); }; typedef MTPBoxed MTPStickerSet; @@ -7878,7 +7858,7 @@ public: private: explicit MTPbotCommand(MTPDbotCommand *_data); - friend MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description); + friend MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_description); }; typedef MTPBoxed MTPBotCommand; @@ -7990,6 +7970,30 @@ public: read(from, end, cons); } + MTPDreplyKeyboardHide &_replyKeyboardHide() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardHide) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardHide); + split(); + return *(MTPDreplyKeyboardHide*)data; + } + const MTPDreplyKeyboardHide &c_replyKeyboardHide() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardHide) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardHide); + return *(const MTPDreplyKeyboardHide*)data; + } + + MTPDreplyKeyboardForceReply &_replyKeyboardForceReply() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardForceReply) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardForceReply); + split(); + return *(MTPDreplyKeyboardForceReply*)data; + } + const MTPDreplyKeyboardForceReply &c_replyKeyboardForceReply() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardForceReply) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardForceReply); + return *(const MTPDreplyKeyboardForceReply*)data; + } + MTPDreplyKeyboardMarkup &_replyKeyboardMarkup() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_replyKeyboardMarkup) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardMarkup); @@ -8011,15 +8015,233 @@ public: private: explicit MTPreplyMarkup(mtpTypeId type); + explicit MTPreplyMarkup(MTPDreplyKeyboardHide *_data); + explicit MTPreplyMarkup(MTPDreplyKeyboardForceReply *_data); explicit MTPreplyMarkup(MTPDreplyKeyboardMarkup *_data); - friend MTPreplyMarkup MTP_replyKeyboardHide(); + friend MTPreplyMarkup MTP_replyKeyboardHide(MTPint _flags); + friend MTPreplyMarkup MTP_replyKeyboardForceReply(MTPint _flags); friend MTPreplyMarkup MTP_replyKeyboardMarkup(MTPint _flags, const MTPVector &_rows); mtpTypeId _type; }; typedef MTPBoxed MTPReplyMarkup; +class MTPhelp_appChangelog : private mtpDataOwner { +public: + MTPhelp_appChangelog() : mtpDataOwner(0), _type(0) { + } + MTPhelp_appChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDhelp_appChangelog &_help_appChangelog() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_help_appChangelog) throw mtpErrorWrongTypeId(_type, mtpc_help_appChangelog); + split(); + return *(MTPDhelp_appChangelog*)data; + } + const MTPDhelp_appChangelog &c_help_appChangelog() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_help_appChangelog) throw mtpErrorWrongTypeId(_type, mtpc_help_appChangelog); + return *(const MTPDhelp_appChangelog*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPhelp_appChangelog(mtpTypeId type); + explicit MTPhelp_appChangelog(MTPDhelp_appChangelog *_data); + + friend MTPhelp_appChangelog MTP_help_appChangelogEmpty(); + friend MTPhelp_appChangelog MTP_help_appChangelog(const MTPstring &_text); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPhelp_AppChangelog; + +class MTPmessageEntity : private mtpDataOwner { +public: + MTPmessageEntity() : mtpDataOwner(0), _type(0) { + } + MTPmessageEntity(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDmessageEntityUnknown &_messageEntityUnknown() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUnknown) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUnknown); + split(); + return *(MTPDmessageEntityUnknown*)data; + } + const MTPDmessageEntityUnknown &c_messageEntityUnknown() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUnknown) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUnknown); + return *(const MTPDmessageEntityUnknown*)data; + } + + MTPDmessageEntityMention &_messageEntityMention() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityMention) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityMention); + split(); + return *(MTPDmessageEntityMention*)data; + } + const MTPDmessageEntityMention &c_messageEntityMention() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityMention) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityMention); + return *(const MTPDmessageEntityMention*)data; + } + + MTPDmessageEntityHashtag &_messageEntityHashtag() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityHashtag) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityHashtag); + split(); + return *(MTPDmessageEntityHashtag*)data; + } + const MTPDmessageEntityHashtag &c_messageEntityHashtag() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityHashtag) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityHashtag); + return *(const MTPDmessageEntityHashtag*)data; + } + + MTPDmessageEntityBotCommand &_messageEntityBotCommand() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBotCommand) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBotCommand); + split(); + return *(MTPDmessageEntityBotCommand*)data; + } + const MTPDmessageEntityBotCommand &c_messageEntityBotCommand() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBotCommand) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBotCommand); + return *(const MTPDmessageEntityBotCommand*)data; + } + + MTPDmessageEntityUrl &_messageEntityUrl() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUrl); + split(); + return *(MTPDmessageEntityUrl*)data; + } + const MTPDmessageEntityUrl &c_messageEntityUrl() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUrl); + return *(const MTPDmessageEntityUrl*)data; + } + + MTPDmessageEntityEmail &_messageEntityEmail() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityEmail) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityEmail); + split(); + return *(MTPDmessageEntityEmail*)data; + } + const MTPDmessageEntityEmail &c_messageEntityEmail() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityEmail) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityEmail); + return *(const MTPDmessageEntityEmail*)data; + } + + MTPDmessageEntityBold &_messageEntityBold() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBold) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBold); + split(); + return *(MTPDmessageEntityBold*)data; + } + const MTPDmessageEntityBold &c_messageEntityBold() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBold) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBold); + return *(const MTPDmessageEntityBold*)data; + } + + MTPDmessageEntityItalic &_messageEntityItalic() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityItalic) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityItalic); + split(); + return *(MTPDmessageEntityItalic*)data; + } + const MTPDmessageEntityItalic &c_messageEntityItalic() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityItalic) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityItalic); + return *(const MTPDmessageEntityItalic*)data; + } + + MTPDmessageEntityCode &_messageEntityCode() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityCode) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityCode); + split(); + return *(MTPDmessageEntityCode*)data; + } + const MTPDmessageEntityCode &c_messageEntityCode() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityCode) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityCode); + return *(const MTPDmessageEntityCode*)data; + } + + MTPDmessageEntityPre &_messageEntityPre() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityPre) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityPre); + split(); + return *(MTPDmessageEntityPre*)data; + } + const MTPDmessageEntityPre &c_messageEntityPre() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityPre) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityPre); + return *(const MTPDmessageEntityPre*)data; + } + + MTPDmessageEntityTextUrl &_messageEntityTextUrl() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityTextUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityTextUrl); + split(); + return *(MTPDmessageEntityTextUrl*)data; + } + const MTPDmessageEntityTextUrl &c_messageEntityTextUrl() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityTextUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityTextUrl); + return *(const MTPDmessageEntityTextUrl*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPmessageEntity(mtpTypeId type); + explicit MTPmessageEntity(MTPDmessageEntityUnknown *_data); + explicit MTPmessageEntity(MTPDmessageEntityMention *_data); + explicit MTPmessageEntity(MTPDmessageEntityHashtag *_data); + explicit MTPmessageEntity(MTPDmessageEntityBotCommand *_data); + explicit MTPmessageEntity(MTPDmessageEntityUrl *_data); + explicit MTPmessageEntity(MTPDmessageEntityEmail *_data); + explicit MTPmessageEntity(MTPDmessageEntityBold *_data); + explicit MTPmessageEntity(MTPDmessageEntityItalic *_data); + explicit MTPmessageEntity(MTPDmessageEntityCode *_data); + explicit MTPmessageEntity(MTPDmessageEntityPre *_data); + explicit MTPmessageEntity(MTPDmessageEntityTextUrl *_data); + + friend MTPmessageEntity MTP_messageEntityUnknown(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityMention(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityHashtag(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityBotCommand(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityUrl(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityEmail(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityBold(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityItalic(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityCode(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language); + friend MTPmessageEntity MTP_messageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPMessageEntity; + // Type constructors with data class MTPDresPQ : public mtpDataImpl { @@ -8353,27 +8575,6 @@ public: MTPstring vtext; }; -class MTPDinputPeerContact : public mtpDataImpl { -public: - MTPDinputPeerContact() { - } - MTPDinputPeerContact(MTPint _user_id) : vuser_id(_user_id) { - } - - MTPint vuser_id; -}; - -class MTPDinputPeerForeign : public mtpDataImpl { -public: - MTPDinputPeerForeign() { - } - MTPDinputPeerForeign(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { - } - - MTPint vuser_id; - MTPlong vaccess_hash; -}; - class MTPDinputPeerChat : public mtpDataImpl { public: MTPDinputPeerChat() { @@ -8384,21 +8585,22 @@ public: MTPint vchat_id; }; -class MTPDinputUserContact : public mtpDataImpl { +class MTPDinputPeerUser : public mtpDataImpl { public: - MTPDinputUserContact() { + MTPDinputPeerUser() { } - MTPDinputUserContact(MTPint _user_id) : vuser_id(_user_id) { + MTPDinputPeerUser(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { } MTPint vuser_id; + MTPlong vaccess_hash; }; -class MTPDinputUserForeign : public mtpDataImpl { +class MTPDinputUser : public mtpDataImpl { public: - MTPDinputUserForeign() { + MTPDinputUser() { } - MTPDinputUserForeign(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { + MTPDinputUser(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { } MTPint vuser_id; @@ -8993,7 +9195,7 @@ class MTPDmessage : public mtpDataImpl { public: MTPDmessage() { } - MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup) { + MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup), ventities(_entities) { } MTPint vflags; @@ -9007,18 +9209,21 @@ public: MTPstring vmessage; MTPMessageMedia vmedia; MTPReplyMarkup vreply_markup; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), flag_reply_markup = (1 << 6), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } bool has_reply_markup() const { return vflags.v & flag_reply_markup; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDmessageService : public mtpDataImpl { @@ -9225,14 +9430,12 @@ class MTPDphoto : public mtpDataImpl { public: MTPDphoto() { } - MTPDphoto(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vgeo(_geo), vsizes(_sizes) { + MTPDphoto(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vsizes(_sizes) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; - MTPGeoPoint vgeo; MTPVector vsizes; }; @@ -9288,14 +9491,14 @@ class MTPDvideo : public mtpDataImpl { public: MTPDvideo() { } - MTPDvideo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vduration(_duration), vsize(_size), vthumb(_thumb), vdc_id(_dc_id), vw(_w), vh(_h) { + MTPDvideo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vthumb(_thumb), vdc_id(_dc_id), vw(_w), vh(_h) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; MTPint vduration; + MTPstring vmime_type; MTPint vsize; MTPPhotoSize vthumb; MTPint vdc_id; @@ -9649,12 +9852,13 @@ class MTPDmessages_sentMessage : public mtpDataImpl { public: MTPDmessages_sentMessage() { } - MTPDmessages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count) : vid(_id), vdate(_date), vmedia(_media), vpts(_pts), vpts_count(_pts_count) { + MTPDmessages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) : vid(_id), vdate(_date), vmedia(_media), ventities(_entities), vpts(_pts), vpts_count(_pts_count) { } MTPint vid; MTPint vdate; MTPMessageMedia vmedia; + MTPVector ventities; MTPint vpts; MTPint vpts_count; }; @@ -10103,7 +10307,7 @@ class MTPDupdateShortMessage : public mtpDataImpl { public: MTPDupdateShortMessage() { } - MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id) { + MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) { } MTPint vflags; @@ -10116,23 +10320,26 @@ public: MTPint vfwd_from_id; MTPint vfwd_date; MTPint vreply_to_msg_id; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDupdateShortChatMessage : public mtpDataImpl { public: MTPDupdateShortChatMessage() { } - MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id) { + MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) { } MTPint vflags; @@ -10146,16 +10353,19 @@ public: MTPint vfwd_from_id; MTPint vfwd_date; MTPint vreply_to_msg_id; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDupdateShort : public mtpDataImpl { @@ -10654,12 +10864,11 @@ class MTPDaudio : public mtpDataImpl { public: MTPDaudio() { } - MTPDaudio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vdc_id(_dc_id) { + MTPDaudio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vdc_id(_dc_id) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; MTPint vduration; MTPstring vmime_type; @@ -10886,10 +11095,12 @@ class MTPDdocumentAttributeAudio : public mtpDataImpl { @@ -10928,13 +11139,11 @@ class MTPDmessages_allStickers : public mtpDataImpl { public: MTPDmessages_allStickers() { } - MTPDmessages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents) : vhash(_hash), vpacks(_packs), vsets(_sets), vdocuments(_documents) { + MTPDmessages_allStickers(const MTPstring &_hash, const MTPVector &_sets) : vhash(_hash), vsets(_sets) { } MTPstring vhash; - MTPVector vpacks; MTPVector vsets; - MTPVector vdocuments; }; class MTPDdisabledFeature : public mtpDataImpl { @@ -11199,13 +11408,16 @@ class MTPDstickerSet : public mtpDataImpl { public: MTPDstickerSet() { } - MTPDstickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name) : vid(_id), vaccess_hash(_access_hash), vtitle(_title), vshort_name(_short_name) { + MTPDstickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash) : vflags(_flags), vid(_id), vaccess_hash(_access_hash), vtitle(_title), vshort_name(_short_name), vcount(_count), vhash(_hash) { } + MTPint vflags; MTPlong vid; MTPlong vaccess_hash; MTPstring vtitle; MTPstring vshort_name; + MTPint vcount; + MTPint vhash; }; class MTPDmessages_stickerSet : public mtpDataImpl { @@ -11224,11 +11436,10 @@ class MTPDbotCommand : public mtpDataImpl { public: MTPDbotCommand() { } - MTPDbotCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description) : vcommand(_command), vparams(_params), vdescription(_description) { + MTPDbotCommand(const MTPstring &_command, const MTPstring &_description) : vcommand(_command), vdescription(_description) { } MTPstring vcommand; - MTPstring vparams; MTPstring vdescription; }; @@ -11266,6 +11477,26 @@ public: MTPVector vbuttons; }; +class MTPDreplyKeyboardHide : public mtpDataImpl { +public: + MTPDreplyKeyboardHide() { + } + MTPDreplyKeyboardHide(MTPint _flags) : vflags(_flags) { + } + + MTPint vflags; +}; + +class MTPDreplyKeyboardForceReply : public mtpDataImpl { +public: + MTPDreplyKeyboardForceReply() { + } + MTPDreplyKeyboardForceReply(MTPint _flags) : vflags(_flags) { + } + + MTPint vflags; +}; + class MTPDreplyKeyboardMarkup : public mtpDataImpl { public: MTPDreplyKeyboardMarkup() { @@ -11277,6 +11508,139 @@ public: MTPVector vrows; }; +class MTPDhelp_appChangelog : public mtpDataImpl { +public: + MTPDhelp_appChangelog() { + } + MTPDhelp_appChangelog(const MTPstring &_text) : vtext(_text) { + } + + MTPstring vtext; +}; + +class MTPDmessageEntityUnknown : public mtpDataImpl { +public: + MTPDmessageEntityUnknown() { + } + MTPDmessageEntityUnknown(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityMention : public mtpDataImpl { +public: + MTPDmessageEntityMention() { + } + MTPDmessageEntityMention(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityHashtag : public mtpDataImpl { +public: + MTPDmessageEntityHashtag() { + } + MTPDmessageEntityHashtag(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityBotCommand : public mtpDataImpl { +public: + MTPDmessageEntityBotCommand() { + } + MTPDmessageEntityBotCommand(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityUrl : public mtpDataImpl { +public: + MTPDmessageEntityUrl() { + } + MTPDmessageEntityUrl(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityEmail : public mtpDataImpl { +public: + MTPDmessageEntityEmail() { + } + MTPDmessageEntityEmail(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityBold : public mtpDataImpl { +public: + MTPDmessageEntityBold() { + } + MTPDmessageEntityBold(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityItalic : public mtpDataImpl { +public: + MTPDmessageEntityItalic() { + } + MTPDmessageEntityItalic(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityCode : public mtpDataImpl { +public: + MTPDmessageEntityCode() { + } + MTPDmessageEntityCode(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityPre : public mtpDataImpl { +public: + MTPDmessageEntityPre() { + } + MTPDmessageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language) : voffset(_offset), vlength(_length), vlanguage(_language) { + } + + MTPint voffset; + MTPint vlength; + MTPstring vlanguage; +}; + +class MTPDmessageEntityTextUrl : public mtpDataImpl { +public: + MTPDmessageEntityTextUrl() { + } + MTPDmessageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url) : voffset(_offset), vlength(_length), vurl(_url) { + } + + MTPint voffset; + MTPint vlength; + MTPstring vurl; +}; + // RPC methods class MTPreq_pq { // RPC method 'req_pq' @@ -13438,25 +13802,28 @@ public: MTPstring vmessage; MTPlong vrandom_id; MTPReplyMarkup vreply_markup; + MTPVector ventities; MTPmessages_sendMessage() { } MTPmessages_sendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMessage) { read(from, end, cons); } - MTPmessages_sendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup) : vflags(_flags), vpeer(_peer), vreply_to_msg_id(_reply_to_msg_id), vmessage(_message), vrandom_id(_random_id), vreply_markup(_reply_markup) { + MTPmessages_sendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : vflags(_flags), vpeer(_peer), vreply_to_msg_id(_reply_to_msg_id), vmessage(_message), vrandom_id(_random_id), vreply_markup(_reply_markup), ventities(_entities) { } enum { flag_reply_to_msg_id = (1 << 0), flag_reply_markup = (1 << 2), + flag_entities = (1 << 3), }; bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } bool has_reply_markup() const { return vflags.v & flag_reply_markup; } + bool has_entities() const { return vflags.v & flag_entities; } uint32 innerLength() const { - return vflags.innerLength() + vpeer.innerLength() + (has_reply_to_msg_id() ? vreply_to_msg_id.innerLength() : 0) + vmessage.innerLength() + vrandom_id.innerLength() + (has_reply_markup() ? vreply_markup.innerLength() : 0); + return vflags.innerLength() + vpeer.innerLength() + (has_reply_to_msg_id() ? vreply_to_msg_id.innerLength() : 0) + vmessage.innerLength() + vrandom_id.innerLength() + (has_reply_markup() ? vreply_markup.innerLength() : 0) + (has_entities() ? ventities.innerLength() : 0); } mtpTypeId type() const { return mtpc_messages_sendMessage; @@ -13468,6 +13835,7 @@ public: vmessage.read(from, end); vrandom_id.read(from, end); if (has_reply_markup()) { vreply_markup.read(from, end); } else { vreply_markup = MTPReplyMarkup(); } + if (has_entities()) { ventities.read(from, end); } else { ventities = MTPVector(); } } void write(mtpBuffer &to) const { vflags.write(to); @@ -13476,6 +13844,7 @@ public: vmessage.write(to); vrandom_id.write(to); if (has_reply_markup()) vreply_markup.write(to); + if (has_entities()) ventities.write(to); } typedef MTPmessages_SentMessage ResponseType; @@ -13488,7 +13857,7 @@ public: } MTPmessages_SendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPmessages_SendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup) : MTPBoxed(MTPmessages_sendMessage(_flags, _peer, _reply_to_msg_id, _message, _random_id, _reply_markup)) { + MTPmessages_SendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : MTPBoxed(MTPmessages_sendMessage(_flags, _peer, _reply_to_msg_id, _message, _random_id, _reply_markup, _entities)) { } }; @@ -14377,7 +14746,7 @@ class MTPphotos_getUserPhotos { // RPC method 'photos.getUserPhotos' public: MTPInputUser vuser_id; MTPint voffset; - MTPint vmax_id; + MTPlong vmax_id; MTPint vlimit; MTPphotos_getUserPhotos() { @@ -14385,7 +14754,7 @@ public: MTPphotos_getUserPhotos(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_getUserPhotos) { read(from, end, cons); } - MTPphotos_getUserPhotos(const MTPInputUser &_user_id, MTPint _offset, MTPint _max_id, MTPint _limit) : vuser_id(_user_id), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { + MTPphotos_getUserPhotos(const MTPInputUser &_user_id, MTPint _offset, const MTPlong &_max_id, MTPint _limit) : vuser_id(_user_id), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } uint32 innerLength() const { @@ -14417,7 +14786,7 @@ public: } MTPphotos_GetUserPhotos(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPphotos_GetUserPhotos(const MTPInputUser &_user_id, MTPint _offset, MTPint _max_id, MTPint _limit) : MTPBoxed(MTPphotos_getUserPhotos(_user_id, _offset, _max_id, _limit)) { + MTPphotos_GetUserPhotos(const MTPInputUser &_user_id, MTPint _offset, const MTPlong &_max_id, MTPint _limit) : MTPBoxed(MTPphotos_getUserPhotos(_user_id, _offset, _max_id, _limit)) { } }; @@ -16871,26 +17240,29 @@ public: class MTPmessages_installStickerSet { // RPC method 'messages.installStickerSet' public: MTPInputStickerSet vstickerset; + MTPBool vdisabled; MTPmessages_installStickerSet() { } MTPmessages_installStickerSet(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_installStickerSet) { read(from, end, cons); } - MTPmessages_installStickerSet(const MTPInputStickerSet &_stickerset) : vstickerset(_stickerset) { + MTPmessages_installStickerSet(const MTPInputStickerSet &_stickerset, MTPBool _disabled) : vstickerset(_stickerset), vdisabled(_disabled) { } uint32 innerLength() const { - return vstickerset.innerLength(); + return vstickerset.innerLength() + vdisabled.innerLength(); } mtpTypeId type() const { return mtpc_messages_installStickerSet; } void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_installStickerSet) { vstickerset.read(from, end); + vdisabled.read(from, end); } void write(mtpBuffer &to) const { vstickerset.write(to); + vdisabled.write(to); } typedef MTPBool ResponseType; @@ -16903,7 +17275,7 @@ public: } MTPmessages_InstallStickerSet(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPmessages_InstallStickerSet(const MTPInputStickerSet &_stickerset) : MTPBoxed(MTPmessages_installStickerSet(_stickerset)) { + MTPmessages_InstallStickerSet(const MTPInputStickerSet &_stickerset, MTPBool _disabled) : MTPBoxed(MTPmessages_installStickerSet(_stickerset, _disabled)) { } }; @@ -16994,6 +17366,54 @@ public: } }; +class MTPhelp_getAppChangelog { // RPC method 'help.getAppChangelog' +public: + MTPstring vdevice_model; + MTPstring vsystem_version; + MTPstring vapp_version; + MTPstring vlang_code; + + MTPhelp_getAppChangelog() { + } + MTPhelp_getAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) { + read(from, end, cons); + } + MTPhelp_getAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code) { + } + + uint32 innerLength() const { + return vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength(); + } + mtpTypeId type() const { + return mtpc_help_getAppChangelog; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) { + vdevice_model.read(from, end); + vsystem_version.read(from, end); + vapp_version.read(from, end); + vlang_code.read(from, end); + } + void write(mtpBuffer &to) const { + vdevice_model.write(to); + vsystem_version.write(to); + vapp_version.write(to); + vlang_code.write(to); + } + + typedef MTPhelp_AppChangelog ResponseType; +}; +class MTPhelp_GetAppChangelog : public MTPBoxed { +public: + MTPhelp_GetAppChangelog() { + } + MTPhelp_GetAppChangelog(const MTPhelp_getAppChangelog &v) : MTPBoxed(v) { + } + MTPhelp_GetAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPhelp_GetAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : MTPBoxed(MTPhelp_getAppChangelog(_device_model, _system_version, _app_version, _lang_code)) { + } +}; + // Inline methods definition inline MTPresPQ::MTPresPQ() : mtpDataOwner(new MTPDresPQ()) { @@ -17934,18 +18354,14 @@ inline MTPnull MTP_null() { inline uint32 MTPinputPeer::innerLength() const { switch (_type) { - case mtpc_inputPeerContact: { - const MTPDinputPeerContact &v(c_inputPeerContact()); - return v.vuser_id.innerLength(); - } - case mtpc_inputPeerForeign: { - const MTPDinputPeerForeign &v(c_inputPeerForeign()); - return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); - } case mtpc_inputPeerChat: { const MTPDinputPeerChat &v(c_inputPeerChat()); return v.vchat_id.innerLength(); } + case mtpc_inputPeerUser: { + const MTPDinputPeerUser &v(c_inputPeerUser()); + return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); + } } return 0; } @@ -17958,82 +18374,63 @@ inline void MTPinputPeer::read(const mtpPrime *&from, const mtpPrime *end, mtpTy switch (cons) { case mtpc_inputPeerEmpty: _type = cons; break; case mtpc_inputPeerSelf: _type = cons; break; - case mtpc_inputPeerContact: _type = cons; { - if (!data) setData(new MTPDinputPeerContact()); - MTPDinputPeerContact &v(_inputPeerContact()); - v.vuser_id.read(from, end); - } break; - case mtpc_inputPeerForeign: _type = cons; { - if (!data) setData(new MTPDinputPeerForeign()); - MTPDinputPeerForeign &v(_inputPeerForeign()); - v.vuser_id.read(from, end); - v.vaccess_hash.read(from, end); - } break; case mtpc_inputPeerChat: _type = cons; { if (!data) setData(new MTPDinputPeerChat()); MTPDinputPeerChat &v(_inputPeerChat()); v.vchat_id.read(from, end); } break; + case mtpc_inputPeerUser: _type = cons; { + if (!data) setData(new MTPDinputPeerUser()); + MTPDinputPeerUser &v(_inputPeerUser()); + v.vuser_id.read(from, end); + v.vaccess_hash.read(from, end); + } break; default: throw mtpErrorUnexpected(cons, "MTPinputPeer"); } } inline void MTPinputPeer::write(mtpBuffer &to) const { switch (_type) { - case mtpc_inputPeerContact: { - const MTPDinputPeerContact &v(c_inputPeerContact()); - v.vuser_id.write(to); - } break; - case mtpc_inputPeerForeign: { - const MTPDinputPeerForeign &v(c_inputPeerForeign()); - v.vuser_id.write(to); - v.vaccess_hash.write(to); - } break; case mtpc_inputPeerChat: { const MTPDinputPeerChat &v(c_inputPeerChat()); v.vchat_id.write(to); } break; + case mtpc_inputPeerUser: { + const MTPDinputPeerUser &v(c_inputPeerUser()); + v.vuser_id.write(to); + v.vaccess_hash.write(to); + } break; } } inline MTPinputPeer::MTPinputPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputPeerEmpty: break; case mtpc_inputPeerSelf: break; - case mtpc_inputPeerContact: setData(new MTPDinputPeerContact()); break; - case mtpc_inputPeerForeign: setData(new MTPDinputPeerForeign()); break; case mtpc_inputPeerChat: setData(new MTPDinputPeerChat()); break; + case mtpc_inputPeerUser: setData(new MTPDinputPeerUser()); break; default: throw mtpErrorBadTypeId(type, "MTPinputPeer"); } } -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerContact *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerContact) { -} -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerForeign) { -} inline MTPinputPeer::MTPinputPeer(MTPDinputPeerChat *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerChat) { } +inline MTPinputPeer::MTPinputPeer(MTPDinputPeerUser *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerUser) { +} inline MTPinputPeer MTP_inputPeerEmpty() { return MTPinputPeer(mtpc_inputPeerEmpty); } inline MTPinputPeer MTP_inputPeerSelf() { return MTPinputPeer(mtpc_inputPeerSelf); } -inline MTPinputPeer MTP_inputPeerContact(MTPint _user_id) { - return MTPinputPeer(new MTPDinputPeerContact(_user_id)); -} -inline MTPinputPeer MTP_inputPeerForeign(MTPint _user_id, const MTPlong &_access_hash) { - return MTPinputPeer(new MTPDinputPeerForeign(_user_id, _access_hash)); -} inline MTPinputPeer MTP_inputPeerChat(MTPint _chat_id) { return MTPinputPeer(new MTPDinputPeerChat(_chat_id)); } +inline MTPinputPeer MTP_inputPeerUser(MTPint _user_id, const MTPlong &_access_hash) { + return MTPinputPeer(new MTPDinputPeerUser(_user_id, _access_hash)); +} inline uint32 MTPinputUser::innerLength() const { switch (_type) { - case mtpc_inputUserContact: { - const MTPDinputUserContact &v(c_inputUserContact()); - return v.vuser_id.innerLength(); - } - case mtpc_inputUserForeign: { - const MTPDinputUserForeign &v(c_inputUserForeign()); + case mtpc_inputUser: { + const MTPDinputUser &v(c_inputUser()); return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); } } @@ -18048,14 +18445,9 @@ inline void MTPinputUser::read(const mtpPrime *&from, const mtpPrime *end, mtpTy switch (cons) { case mtpc_inputUserEmpty: _type = cons; break; case mtpc_inputUserSelf: _type = cons; break; - case mtpc_inputUserContact: _type = cons; { - if (!data) setData(new MTPDinputUserContact()); - MTPDinputUserContact &v(_inputUserContact()); - v.vuser_id.read(from, end); - } break; - case mtpc_inputUserForeign: _type = cons; { - if (!data) setData(new MTPDinputUserForeign()); - MTPDinputUserForeign &v(_inputUserForeign()); + case mtpc_inputUser: _type = cons; { + if (!data) setData(new MTPDinputUser()); + MTPDinputUser &v(_inputUser()); v.vuser_id.read(from, end); v.vaccess_hash.read(from, end); } break; @@ -18064,12 +18456,8 @@ inline void MTPinputUser::read(const mtpPrime *&from, const mtpPrime *end, mtpTy } inline void MTPinputUser::write(mtpBuffer &to) const { switch (_type) { - case mtpc_inputUserContact: { - const MTPDinputUserContact &v(c_inputUserContact()); - v.vuser_id.write(to); - } break; - case mtpc_inputUserForeign: { - const MTPDinputUserForeign &v(c_inputUserForeign()); + case mtpc_inputUser: { + const MTPDinputUser &v(c_inputUser()); v.vuser_id.write(to); v.vaccess_hash.write(to); } break; @@ -18079,14 +18467,11 @@ inline MTPinputUser::MTPinputUser(mtpTypeId type) : mtpDataOwner(0), _type(type) switch (type) { case mtpc_inputUserEmpty: break; case mtpc_inputUserSelf: break; - case mtpc_inputUserContact: setData(new MTPDinputUserContact()); break; - case mtpc_inputUserForeign: setData(new MTPDinputUserForeign()); break; + case mtpc_inputUser: setData(new MTPDinputUser()); break; default: throw mtpErrorBadTypeId(type, "MTPinputUser"); } } -inline MTPinputUser::MTPinputUser(MTPDinputUserContact *_data) : mtpDataOwner(_data), _type(mtpc_inputUserContact) { -} -inline MTPinputUser::MTPinputUser(MTPDinputUserForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputUserForeign) { +inline MTPinputUser::MTPinputUser(MTPDinputUser *_data) : mtpDataOwner(_data), _type(mtpc_inputUser) { } inline MTPinputUser MTP_inputUserEmpty() { return MTPinputUser(mtpc_inputUserEmpty); @@ -18094,11 +18479,8 @@ inline MTPinputUser MTP_inputUserEmpty() { inline MTPinputUser MTP_inputUserSelf() { return MTPinputUser(mtpc_inputUserSelf); } -inline MTPinputUser MTP_inputUserContact(MTPint _user_id) { - return MTPinputUser(new MTPDinputUserContact(_user_id)); -} -inline MTPinputUser MTP_inputUserForeign(MTPint _user_id, const MTPlong &_access_hash) { - return MTPinputUser(new MTPDinputUserForeign(_user_id, _access_hash)); +inline MTPinputUser MTP_inputUser(MTPint _user_id, const MTPlong &_access_hash) { + return MTPinputUser(new MTPDinputUser(_user_id, _access_hash)); } inline MTPinputContact::MTPinputContact() : mtpDataOwner(new MTPDinputPhoneContact()) { @@ -19735,7 +20117,7 @@ inline uint32 MTPmessage::innerLength() const { } case mtpc_message: { const MTPDmessage &v(c_message()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); @@ -19770,6 +20152,7 @@ inline void MTPmessage::read(const mtpPrime *&from, const mtpPrime *end, mtpType v.vmessage.read(from, end); v.vmedia.read(from, end); if (v.has_reply_markup()) { v.vreply_markup.read(from, end); } else { v.vreply_markup = MTPReplyMarkup(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_messageService: _type = cons; { if (!data) setData(new MTPDmessageService()); @@ -19803,6 +20186,7 @@ inline void MTPmessage::write(mtpBuffer &to) const { v.vmessage.write(to); v.vmedia.write(to); if (v.has_reply_markup()) v.vreply_markup.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); @@ -19832,8 +20216,8 @@ inline MTPmessage::MTPmessage(MTPDmessageService *_data) : mtpDataOwner(_data), inline MTPmessage MTP_messageEmpty(MTPint _id) { return MTPmessage(new MTPDmessageEmpty(_id)); } -inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup) { - return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup)); +inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) { + return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup, _entities)); } inline MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action) { return MTPmessage(new MTPDmessageService(_flags, _id, _from_id, _to_id, _date, _action)); @@ -20264,7 +20648,7 @@ inline uint32 MTPphoto::innerLength() const { } case mtpc_photo: { const MTPDphoto &v(c_photo()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vgeo.innerLength() + v.vsizes.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vsizes.innerLength(); } } return 0; @@ -20286,9 +20670,7 @@ inline void MTPphoto::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDphoto &v(_photo()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); - v.vgeo.read(from, end); v.vsizes.read(from, end); } break; default: throw mtpErrorUnexpected(cons, "MTPphoto"); @@ -20304,9 +20686,7 @@ inline void MTPphoto::write(mtpBuffer &to) const { const MTPDphoto &v(c_photo()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); - v.vgeo.write(to); v.vsizes.write(to); } break; } @@ -20325,8 +20705,8 @@ inline MTPphoto::MTPphoto(MTPDphoto *_data) : mtpDataOwner(_data), _type(mtpc_ph inline MTPphoto MTP_photoEmpty(const MTPlong &_id) { return MTPphoto(new MTPDphotoEmpty(_id)); } -inline MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes) { - return MTPphoto(new MTPDphoto(_id, _access_hash, _user_id, _date, _geo, _sizes)); +inline MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes) { + return MTPphoto(new MTPDphoto(_id, _access_hash, _date, _sizes)); } inline uint32 MTPphotoSize::innerLength() const { @@ -20435,7 +20815,7 @@ inline uint32 MTPvideo::innerLength() const { } case mtpc_video: { const MTPDvideo &v(c_video()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength() + v.vw.innerLength() + v.vh.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength() + v.vw.innerLength() + v.vh.innerLength(); } } return 0; @@ -20457,9 +20837,9 @@ inline void MTPvideo::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDvideo &v(_video()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); v.vduration.read(from, end); + v.vmime_type.read(from, end); v.vsize.read(from, end); v.vthumb.read(from, end); v.vdc_id.read(from, end); @@ -20479,9 +20859,9 @@ inline void MTPvideo::write(mtpBuffer &to) const { const MTPDvideo &v(c_video()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); v.vduration.write(to); + v.vmime_type.write(to); v.vsize.write(to); v.vthumb.write(to); v.vdc_id.write(to); @@ -20504,8 +20884,8 @@ inline MTPvideo::MTPvideo(MTPDvideo *_data) : mtpDataOwner(_data), _type(mtpc_vi inline MTPvideo MTP_videoEmpty(const MTPlong &_id) { return MTPvideo(new MTPDvideoEmpty(_id)); } -inline MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) { - return MTPvideo(new MTPDvideo(_id, _access_hash, _user_id, _date, _duration, _size, _thumb, _dc_id, _w, _h)); +inline MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) { + return MTPvideo(new MTPDvideo(_id, _access_hash, _date, _duration, _mime_type, _size, _thumb, _dc_id, _w, _h)); } inline uint32 MTPgeoPoint::innerLength() const { @@ -21594,25 +21974,11 @@ inline MTPmessages_messages MTP_messages_messagesSlice(MTPint _count, const MTPV return MTPmessages_messages(new MTPDmessages_messagesSlice(_count, _messages, _chats, _users)); } -inline uint32 MTPmessages_message::innerLength() const { - return 0; -} -inline mtpTypeId MTPmessages_message::type() const { - return mtpc_messages_messageEmpty; -} -inline void MTPmessages_message::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { -} -inline void MTPmessages_message::write(mtpBuffer &to) const { -} -inline MTPmessages_message MTP_messages_messageEmpty() { - return MTPmessages_message(); -} - inline uint32 MTPmessages_sentMessage::innerLength() const { switch (_type) { case mtpc_messages_sentMessage: { const MTPDmessages_sentMessage &v(c_messages_sentMessage()); - return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength(); + return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.ventities.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength(); } case mtpc_messages_sentMessageLink: { const MTPDmessages_sentMessageLink &v(c_messages_sentMessageLink()); @@ -21634,6 +22000,7 @@ inline void MTPmessages_sentMessage::read(const mtpPrime *&from, const mtpPrime v.vid.read(from, end); v.vdate.read(from, end); v.vmedia.read(from, end); + v.ventities.read(from, end); v.vpts.read(from, end); v.vpts_count.read(from, end); } break; @@ -21658,6 +22025,7 @@ inline void MTPmessages_sentMessage::write(mtpBuffer &to) const { v.vid.write(to); v.vdate.write(to); v.vmedia.write(to); + v.ventities.write(to); v.vpts.write(to); v.vpts_count.write(to); } break; @@ -21684,8 +22052,8 @@ inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessage } inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessageLink) { } -inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count) { - return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _media, _pts, _pts_count)); +inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) { + return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _media, _entities, _pts, _pts_count)); } inline MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq) { return MTPmessages_sentMessage(new MTPDmessages_sentMessageLink(_id, _date, _media, _pts, _pts_count, _links, _seq)); @@ -21797,6 +22165,7 @@ inline void MTPmessagesFilter::read(const mtpPrime *&from, const mtpPrime *end, case mtpc_inputMessagesFilterDocument: _type = cons; break; case mtpc_inputMessagesFilterAudio: _type = cons; break; case mtpc_inputMessagesFilterAudioDocuments: _type = cons; break; + case mtpc_inputMessagesFilterUrl: _type = cons; break; default: throw mtpErrorUnexpected(cons, "MTPmessagesFilter"); } } @@ -21814,6 +22183,7 @@ inline MTPmessagesFilter::MTPmessagesFilter(mtpTypeId type) : _type(type) { case mtpc_inputMessagesFilterDocument: break; case mtpc_inputMessagesFilterAudio: break; case mtpc_inputMessagesFilterAudioDocuments: break; + case mtpc_inputMessagesFilterUrl: break; default: throw mtpErrorBadTypeId(type, "MTPmessagesFilter"); } } @@ -21841,6 +22211,9 @@ inline MTPmessagesFilter MTP_inputMessagesFilterAudio() { inline MTPmessagesFilter MTP_inputMessagesFilterAudioDocuments() { return MTPmessagesFilter(mtpc_inputMessagesFilterAudioDocuments); } +inline MTPmessagesFilter MTP_inputMessagesFilterUrl() { + return MTPmessagesFilter(mtpc_inputMessagesFilterUrl); +} inline uint32 MTPupdate::innerLength() const { switch (_type) { @@ -22651,11 +23024,11 @@ inline uint32 MTPupdates::innerLength() const { switch (_type) { case mtpc_updateShortMessage: { const MTPDupdateShortMessage &v(c_updateShortMessage()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vuser_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vuser_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_updateShortChatMessage: { const MTPDupdateShortChatMessage &v(c_updateShortChatMessage()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vchat_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vchat_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_updateShort: { const MTPDupdateShort &v(c_updateShort()); @@ -22693,6 +23066,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); } if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); } if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_updateShortChatMessage: _type = cons; { if (!data) setData(new MTPDupdateShortChatMessage()); @@ -22708,6 +23082,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); } if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); } if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_updateShort: _type = cons; { if (!data) setData(new MTPDupdateShort()); @@ -22751,6 +23126,7 @@ inline void MTPupdates::write(mtpBuffer &to) const { if (v.has_fwd_from_id()) v.vfwd_from_id.write(to); if (v.has_fwd_date()) v.vfwd_date.write(to); if (v.has_reply_to_msg_id()) v.vreply_to_msg_id.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_updateShortChatMessage: { const MTPDupdateShortChatMessage &v(c_updateShortChatMessage()); @@ -22765,6 +23141,7 @@ inline void MTPupdates::write(mtpBuffer &to) const { if (v.has_fwd_from_id()) v.vfwd_from_id.write(to); if (v.has_fwd_date()) v.vfwd_date.write(to); if (v.has_reply_to_msg_id()) v.vreply_to_msg_id.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_updateShort: { const MTPDupdateShort &v(c_updateShort()); @@ -22814,11 +23191,11 @@ inline MTPupdates::MTPupdates(MTPDupdates *_data) : mtpDataOwner(_data), _type(m inline MTPupdates MTP_updatesTooLong() { return MTPupdates(mtpc_updatesTooLong); } -inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) { - return MTPupdates(new MTPDupdateShortMessage(_flags, _id, _user_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id)); +inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) { + return MTPupdates(new MTPDupdateShortMessage(_flags, _id, _user_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities)); } -inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) { - return MTPupdates(new MTPDupdateShortChatMessage(_flags, _id, _from_id, _chat_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id)); +inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) { + return MTPupdates(new MTPDupdateShortChatMessage(_flags, _id, _from_id, _chat_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities)); } inline MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date) { return MTPupdates(new MTPDupdateShort(_update, _date)); @@ -24092,7 +24469,7 @@ inline uint32 MTPaudio::innerLength() const { } case mtpc_audio: { const MTPDaudio &v(c_audio()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength(); } } return 0; @@ -24114,7 +24491,6 @@ inline void MTPaudio::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDaudio &v(_audio()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); v.vduration.read(from, end); v.vmime_type.read(from, end); @@ -24134,7 +24510,6 @@ inline void MTPaudio::write(mtpBuffer &to) const { const MTPDaudio &v(c_audio()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); v.vduration.write(to); v.vmime_type.write(to); @@ -24157,8 +24532,8 @@ inline MTPaudio::MTPaudio(MTPDaudio *_data) : mtpDataOwner(_data), _type(mtpc_au inline MTPaudio MTP_audioEmpty(const MTPlong &_id) { return MTPaudio(new MTPDaudioEmpty(_id)); } -inline MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) { - return MTPaudio(new MTPDaudio(_id, _access_hash, _user_id, _date, _duration, _mime_type, _size, _dc_id)); +inline MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) { + return MTPaudio(new MTPDaudio(_id, _access_hash, _date, _duration, _mime_type, _size, _dc_id)); } inline uint32 MTPdocument::innerLength() const { @@ -24808,7 +25183,7 @@ inline uint32 MTPdocumentAttribute::innerLength() const { } case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &v(c_documentAttributeAudio()); - return v.vduration.innerLength(); + return v.vduration.innerLength() + v.vtitle.innerLength() + v.vperformer.innerLength(); } case mtpc_documentAttributeFilename: { const MTPDdocumentAttributeFilename &v(c_documentAttributeFilename()); @@ -24848,6 +25223,8 @@ inline void MTPdocumentAttribute::read(const mtpPrime *&from, const mtpPrime *en if (!data) setData(new MTPDdocumentAttributeAudio()); MTPDdocumentAttributeAudio &v(_documentAttributeAudio()); v.vduration.read(from, end); + v.vtitle.read(from, end); + v.vperformer.read(from, end); } break; case mtpc_documentAttributeFilename: _type = cons; { if (!data) setData(new MTPDdocumentAttributeFilename()); @@ -24878,6 +25255,8 @@ inline void MTPdocumentAttribute::write(mtpBuffer &to) const { case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &v(c_documentAttributeAudio()); v.vduration.write(to); + v.vtitle.write(to); + v.vperformer.write(to); } break; case mtpc_documentAttributeFilename: { const MTPDdocumentAttributeFilename &v(c_documentAttributeFilename()); @@ -24918,8 +25297,8 @@ inline MTPdocumentAttribute MTP_documentAttributeSticker(const MTPstring &_alt, inline MTPdocumentAttribute MTP_documentAttributeVideo(MTPint _duration, MTPint _w, MTPint _h) { return MTPdocumentAttribute(new MTPDdocumentAttributeVideo(_duration, _w, _h)); } -inline MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration) { - return MTPdocumentAttribute(new MTPDdocumentAttributeAudio(_duration)); +inline MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration, const MTPstring &_title, const MTPstring &_performer) { + return MTPdocumentAttribute(new MTPDdocumentAttributeAudio(_duration, _title, _performer)); } inline MTPdocumentAttribute MTP_documentAttributeFilename(const MTPstring &_file_name) { return MTPdocumentAttribute(new MTPDdocumentAttributeFilename(_file_name)); @@ -25009,7 +25388,7 @@ inline uint32 MTPmessages_allStickers::innerLength() const { switch (_type) { case mtpc_messages_allStickers: { const MTPDmessages_allStickers &v(c_messages_allStickers()); - return v.vhash.innerLength() + v.vpacks.innerLength() + v.vsets.innerLength() + v.vdocuments.innerLength(); + return v.vhash.innerLength() + v.vsets.innerLength(); } } return 0; @@ -25026,9 +25405,7 @@ inline void MTPmessages_allStickers::read(const mtpPrime *&from, const mtpPrime if (!data) setData(new MTPDmessages_allStickers()); MTPDmessages_allStickers &v(_messages_allStickers()); v.vhash.read(from, end); - v.vpacks.read(from, end); v.vsets.read(from, end); - v.vdocuments.read(from, end); } break; default: throw mtpErrorUnexpected(cons, "MTPmessages_allStickers"); } @@ -25038,9 +25415,7 @@ inline void MTPmessages_allStickers::write(mtpBuffer &to) const { case mtpc_messages_allStickers: { const MTPDmessages_allStickers &v(c_messages_allStickers()); v.vhash.write(to); - v.vpacks.write(to); v.vsets.write(to); - v.vdocuments.write(to); } break; } } @@ -25056,8 +25431,8 @@ inline MTPmessages_allStickers::MTPmessages_allStickers(MTPDmessages_allStickers inline MTPmessages_allStickers MTP_messages_allStickersNotModified() { return MTPmessages_allStickers(mtpc_messages_allStickersNotModified); } -inline MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents) { - return MTPmessages_allStickers(new MTPDmessages_allStickers(_hash, _packs, _sets, _documents)); +inline MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_sets) { + return MTPmessages_allStickers(new MTPDmessages_allStickers(_hash, _sets)); } inline MTPdisabledFeature::MTPdisabledFeature() : mtpDataOwner(new MTPDdisabledFeature()) { @@ -25728,7 +26103,7 @@ inline MTPstickerSet::MTPstickerSet() : mtpDataOwner(new MTPDstickerSet()) { inline uint32 MTPstickerSet::innerLength() const { const MTPDstickerSet &v(c_stickerSet()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vshort_name.innerLength(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vshort_name.innerLength() + v.vcount.innerLength() + v.vhash.innerLength(); } inline mtpTypeId MTPstickerSet::type() const { return mtpc_stickerSet; @@ -25738,22 +26113,28 @@ inline void MTPstickerSet::read(const mtpPrime *&from, const mtpPrime *end, mtpT if (!data) setData(new MTPDstickerSet()); MTPDstickerSet &v(_stickerSet()); + v.vflags.read(from, end); v.vid.read(from, end); v.vaccess_hash.read(from, end); v.vtitle.read(from, end); v.vshort_name.read(from, end); + v.vcount.read(from, end); + v.vhash.read(from, end); } inline void MTPstickerSet::write(mtpBuffer &to) const { const MTPDstickerSet &v(c_stickerSet()); + v.vflags.write(to); v.vid.write(to); v.vaccess_hash.write(to); v.vtitle.write(to); v.vshort_name.write(to); + v.vcount.write(to); + v.vhash.write(to); } inline MTPstickerSet::MTPstickerSet(MTPDstickerSet *_data) : mtpDataOwner(_data) { } -inline MTPstickerSet MTP_stickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name) { - return MTPstickerSet(new MTPDstickerSet(_id, _access_hash, _title, _short_name)); +inline MTPstickerSet MTP_stickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash) { + return MTPstickerSet(new MTPDstickerSet(_flags, _id, _access_hash, _title, _short_name, _count, _hash)); } inline MTPmessages_stickerSet::MTPmessages_stickerSet() : mtpDataOwner(new MTPDmessages_stickerSet()) { @@ -25792,7 +26173,7 @@ inline MTPbotCommand::MTPbotCommand() : mtpDataOwner(new MTPDbotCommand()) { inline uint32 MTPbotCommand::innerLength() const { const MTPDbotCommand &v(c_botCommand()); - return v.vcommand.innerLength() + v.vparams.innerLength() + v.vdescription.innerLength(); + return v.vcommand.innerLength() + v.vdescription.innerLength(); } inline mtpTypeId MTPbotCommand::type() const { return mtpc_botCommand; @@ -25803,19 +26184,17 @@ inline void MTPbotCommand::read(const mtpPrime *&from, const mtpPrime *end, mtpT if (!data) setData(new MTPDbotCommand()); MTPDbotCommand &v(_botCommand()); v.vcommand.read(from, end); - v.vparams.read(from, end); v.vdescription.read(from, end); } inline void MTPbotCommand::write(mtpBuffer &to) const { const MTPDbotCommand &v(c_botCommand()); v.vcommand.write(to); - v.vparams.write(to); v.vdescription.write(to); } inline MTPbotCommand::MTPbotCommand(MTPDbotCommand *_data) : mtpDataOwner(_data) { } -inline MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description) { - return MTPbotCommand(new MTPDbotCommand(_command, _params, _description)); +inline MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_description) { + return MTPbotCommand(new MTPDbotCommand(_command, _description)); } inline uint32 MTPbotInfo::innerLength() const { @@ -25931,6 +26310,14 @@ inline MTPkeyboardButtonRow MTP_keyboardButtonRow(const MTPVector &_rows) { return MTPreplyMarkup(new MTPDreplyKeyboardMarkup(_flags, _rows)); } +inline uint32 MTPhelp_appChangelog::innerLength() const { + switch (_type) { + case mtpc_help_appChangelog: { + const MTPDhelp_appChangelog &v(c_help_appChangelog()); + return v.vtext.innerLength(); + } + } + return 0; +} +inline mtpTypeId MTPhelp_appChangelog::type() const { + if (!_type) throw mtpErrorUninitialized(); + return _type; +} +inline void MTPhelp_appChangelog::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != _type) setData(0); + switch (cons) { + case mtpc_help_appChangelogEmpty: _type = cons; break; + case mtpc_help_appChangelog: _type = cons; { + if (!data) setData(new MTPDhelp_appChangelog()); + MTPDhelp_appChangelog &v(_help_appChangelog()); + v.vtext.read(from, end); + } break; + default: throw mtpErrorUnexpected(cons, "MTPhelp_appChangelog"); + } +} +inline void MTPhelp_appChangelog::write(mtpBuffer &to) const { + switch (_type) { + case mtpc_help_appChangelog: { + const MTPDhelp_appChangelog &v(c_help_appChangelog()); + v.vtext.write(to); + } break; + } +} +inline MTPhelp_appChangelog::MTPhelp_appChangelog(mtpTypeId type) : mtpDataOwner(0), _type(type) { + switch (type) { + case mtpc_help_appChangelogEmpty: break; + case mtpc_help_appChangelog: setData(new MTPDhelp_appChangelog()); break; + default: throw mtpErrorBadTypeId(type, "MTPhelp_appChangelog"); + } +} +inline MTPhelp_appChangelog::MTPhelp_appChangelog(MTPDhelp_appChangelog *_data) : mtpDataOwner(_data), _type(mtpc_help_appChangelog) { +} +inline MTPhelp_appChangelog MTP_help_appChangelogEmpty() { + return MTPhelp_appChangelog(mtpc_help_appChangelogEmpty); +} +inline MTPhelp_appChangelog MTP_help_appChangelog(const MTPstring &_text) { + return MTPhelp_appChangelog(new MTPDhelp_appChangelog(_text)); +} + +inline uint32 MTPmessageEntity::innerLength() const { + switch (_type) { + case mtpc_messageEntityUnknown: { + const MTPDmessageEntityUnknown &v(c_messageEntityUnknown()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityMention: { + const MTPDmessageEntityMention &v(c_messageEntityMention()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityHashtag: { + const MTPDmessageEntityHashtag &v(c_messageEntityHashtag()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityBotCommand: { + const MTPDmessageEntityBotCommand &v(c_messageEntityBotCommand()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityUrl: { + const MTPDmessageEntityUrl &v(c_messageEntityUrl()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityEmail: { + const MTPDmessageEntityEmail &v(c_messageEntityEmail()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityBold: { + const MTPDmessageEntityBold &v(c_messageEntityBold()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityItalic: { + const MTPDmessageEntityItalic &v(c_messageEntityItalic()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityCode: { + const MTPDmessageEntityCode &v(c_messageEntityCode()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityPre: { + const MTPDmessageEntityPre &v(c_messageEntityPre()); + return v.voffset.innerLength() + v.vlength.innerLength() + v.vlanguage.innerLength(); + } + case mtpc_messageEntityTextUrl: { + const MTPDmessageEntityTextUrl &v(c_messageEntityTextUrl()); + return v.voffset.innerLength() + v.vlength.innerLength() + v.vurl.innerLength(); + } + } + return 0; +} +inline mtpTypeId MTPmessageEntity::type() const { + if (!_type) throw mtpErrorUninitialized(); + return _type; +} +inline void MTPmessageEntity::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != _type) setData(0); + switch (cons) { + case mtpc_messageEntityUnknown: _type = cons; { + if (!data) setData(new MTPDmessageEntityUnknown()); + MTPDmessageEntityUnknown &v(_messageEntityUnknown()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityMention: _type = cons; { + if (!data) setData(new MTPDmessageEntityMention()); + MTPDmessageEntityMention &v(_messageEntityMention()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityHashtag: _type = cons; { + if (!data) setData(new MTPDmessageEntityHashtag()); + MTPDmessageEntityHashtag &v(_messageEntityHashtag()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityBotCommand: _type = cons; { + if (!data) setData(new MTPDmessageEntityBotCommand()); + MTPDmessageEntityBotCommand &v(_messageEntityBotCommand()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityUrl: _type = cons; { + if (!data) setData(new MTPDmessageEntityUrl()); + MTPDmessageEntityUrl &v(_messageEntityUrl()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityEmail: _type = cons; { + if (!data) setData(new MTPDmessageEntityEmail()); + MTPDmessageEntityEmail &v(_messageEntityEmail()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityBold: _type = cons; { + if (!data) setData(new MTPDmessageEntityBold()); + MTPDmessageEntityBold &v(_messageEntityBold()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityItalic: _type = cons; { + if (!data) setData(new MTPDmessageEntityItalic()); + MTPDmessageEntityItalic &v(_messageEntityItalic()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityCode: _type = cons; { + if (!data) setData(new MTPDmessageEntityCode()); + MTPDmessageEntityCode &v(_messageEntityCode()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityPre: _type = cons; { + if (!data) setData(new MTPDmessageEntityPre()); + MTPDmessageEntityPre &v(_messageEntityPre()); + v.voffset.read(from, end); + v.vlength.read(from, end); + v.vlanguage.read(from, end); + } break; + case mtpc_messageEntityTextUrl: _type = cons; { + if (!data) setData(new MTPDmessageEntityTextUrl()); + MTPDmessageEntityTextUrl &v(_messageEntityTextUrl()); + v.voffset.read(from, end); + v.vlength.read(from, end); + v.vurl.read(from, end); + } break; + default: throw mtpErrorUnexpected(cons, "MTPmessageEntity"); + } +} +inline void MTPmessageEntity::write(mtpBuffer &to) const { + switch (_type) { + case mtpc_messageEntityUnknown: { + const MTPDmessageEntityUnknown &v(c_messageEntityUnknown()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityMention: { + const MTPDmessageEntityMention &v(c_messageEntityMention()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityHashtag: { + const MTPDmessageEntityHashtag &v(c_messageEntityHashtag()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityBotCommand: { + const MTPDmessageEntityBotCommand &v(c_messageEntityBotCommand()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityUrl: { + const MTPDmessageEntityUrl &v(c_messageEntityUrl()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityEmail: { + const MTPDmessageEntityEmail &v(c_messageEntityEmail()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityBold: { + const MTPDmessageEntityBold &v(c_messageEntityBold()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityItalic: { + const MTPDmessageEntityItalic &v(c_messageEntityItalic()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityCode: { + const MTPDmessageEntityCode &v(c_messageEntityCode()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityPre: { + const MTPDmessageEntityPre &v(c_messageEntityPre()); + v.voffset.write(to); + v.vlength.write(to); + v.vlanguage.write(to); + } break; + case mtpc_messageEntityTextUrl: { + const MTPDmessageEntityTextUrl &v(c_messageEntityTextUrl()); + v.voffset.write(to); + v.vlength.write(to); + v.vurl.write(to); + } break; + } +} +inline MTPmessageEntity::MTPmessageEntity(mtpTypeId type) : mtpDataOwner(0), _type(type) { + switch (type) { + case mtpc_messageEntityUnknown: setData(new MTPDmessageEntityUnknown()); break; + case mtpc_messageEntityMention: setData(new MTPDmessageEntityMention()); break; + case mtpc_messageEntityHashtag: setData(new MTPDmessageEntityHashtag()); break; + case mtpc_messageEntityBotCommand: setData(new MTPDmessageEntityBotCommand()); break; + case mtpc_messageEntityUrl: setData(new MTPDmessageEntityUrl()); break; + case mtpc_messageEntityEmail: setData(new MTPDmessageEntityEmail()); break; + case mtpc_messageEntityBold: setData(new MTPDmessageEntityBold()); break; + case mtpc_messageEntityItalic: setData(new MTPDmessageEntityItalic()); break; + case mtpc_messageEntityCode: setData(new MTPDmessageEntityCode()); break; + case mtpc_messageEntityPre: setData(new MTPDmessageEntityPre()); break; + case mtpc_messageEntityTextUrl: setData(new MTPDmessageEntityTextUrl()); break; + default: throw mtpErrorBadTypeId(type, "MTPmessageEntity"); + } +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityUnknown *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityUnknown) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityMention *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityMention) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityHashtag *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityHashtag) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityBotCommand *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityBotCommand) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityUrl *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityUrl) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityEmail *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityEmail) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityBold *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityBold) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityItalic *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityItalic) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityCode *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityCode) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityPre *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityPre) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityTextUrl *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityTextUrl) { +} +inline MTPmessageEntity MTP_messageEntityUnknown(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityUnknown(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityMention(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityMention(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityHashtag(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityHashtag(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityBotCommand(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityBotCommand(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityUrl(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityUrl(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityEmail(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityEmail(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityBold(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityBold(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityItalic(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityItalic(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityCode(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityCode(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language) { + return MTPmessageEntity(new MTPDmessageEntityPre(_offset, _length, _language)); +} +inline MTPmessageEntity MTP_messageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url) { + return MTPmessageEntity(new MTPDmessageEntityTextUrl(_offset, _length, _url)); +} + // Human-readable text serialization #if (defined _DEBUG || defined _WITH_DEBUG) diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index f424e8608..440d0eb3f 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -132,14 +132,10 @@ null#56730bcc = Null; inputPeerEmpty#7f3b18ea = InputPeer; inputPeerSelf#7da07ec9 = InputPeer; -inputPeerContact#1023dbe8 user_id:int = InputPeer; -inputPeerForeign#9b447325 user_id:int access_hash:long = InputPeer; inputPeerChat#179be863 chat_id:int = InputPeer; inputUserEmpty#b98886cf = InputUser; inputUserSelf#f7c1b13f = InputUser; -inputUserContact#86e94f65 user_id:int = InputUser; -inputUserForeign#655e74ff user_id:int access_hash:long = InputUser; inputPhoneContact#f392b7f4 client_id:long phone:string first_name:string last_name:string = InputContact; @@ -216,7 +212,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto; chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto; messageEmpty#83e5de54 id:int = Message; -message#c3060325 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:MessageMedia reply_markup:flags.6?ReplyMarkup = Message; +message#f07814c8 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector = Message; messageService#1d86f70e flags:int id:int from_id:int to_id:Peer date:int action:MessageAction = Message; messageMediaEmpty#3ded6320 = MessageMedia; @@ -237,14 +233,14 @@ messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction; dialog#c1dd804a peer:Peer top_message:int read_inbox_max_id:int unread_count:int notify_settings:PeerNotifySettings = Dialog; photoEmpty#2331b22d id:long = Photo; -photo#c3838076 id:long access_hash:long user_id:int date:int geo:GeoPoint sizes:Vector = Photo; +photo#cded42fe id:long access_hash:long date:int sizes:Vector = Photo; photoSizeEmpty#e17e23c type:string = PhotoSize; photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize; photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize; videoEmpty#c10658a8 id:long = Video; -video#ee9f4a4d id:long access_hash:long user_id:int date:int duration:int size:int thumb:PhotoSize dc_id:int w:int h:int = Video; +video#f72887d3 id:long access_hash:long date:int duration:int mime_type:string size:int thumb:PhotoSize dc_id:int w:int h:int = Video; geoPointEmpty#1117dd5f = GeoPoint; geoPoint#2049d70c long:double lat:double = GeoPoint; @@ -307,9 +303,7 @@ messages.dialogsSlice#71e094f3 count:int dialogs:Vector messages:Vector< messages.messages#8c718e87 messages:Vector chats:Vector users:Vector = messages.Messages; messages.messagesSlice#b446ae3 count:int messages:Vector chats:Vector users:Vector = messages.Messages; -messages.messageEmpty#3f4e0648 = messages.Message; - -messages.sentMessage#4c3d47f3 id:int date:int media:MessageMedia pts:int pts_count:int = messages.SentMessage; +messages.sentMessage#8a99d8e0 id:int date:int media:MessageMedia entities:Vector pts:int pts_count:int = messages.SentMessage; messages.chats#64ff9fd5 chats:Vector = messages.Chats; @@ -325,6 +319,7 @@ inputMessagesFilterPhotoVideoDocuments#d95e73bb = MessagesFilter; inputMessagesFilterDocument#9eddf188 = MessagesFilter; inputMessagesFilterAudio#cfc87522 = MessagesFilter; inputMessagesFilterAudioDocuments#5afbf764 = MessagesFilter; +inputMessagesFilterUrl#7ef0dd87 = MessagesFilter; updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -346,8 +341,8 @@ updates.difference#f49ca0 new_messages:Vector new_encrypted_messages:Ve updates.differenceSlice#a8fb1981 new_messages:Vector new_encrypted_messages:Vector other_updates:Vector chats:Vector users:Vector intermediate_state:updates.State = updates.Difference; updatesTooLong#e317af7e = Updates; -updateShortMessage#ed5c2127 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int = Updates; -updateShortChatMessage#52238b3c flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int = Updates; +updateShortMessage#3f32d858 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector = Updates; +updateShortChatMessage#f9409b3d flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector = Updates; updateShort#78d4dec1 update:Update date:int = Updates; updatesCombined#725b04c3 updates:Vector users:Vector chats:Vector date:int seq_start:int seq:int = Updates; updates#74ae4240 updates:Vector users:Vector chats:Vector date:int seq:int = Updates; @@ -454,7 +449,7 @@ inputAudioFileLocation#74dc404d id:long access_hash:long = InputFileLocation; inputDocumentFileLocation#4e45abe9 id:long access_hash:long = InputFileLocation; audioEmpty#586988d8 id:long = Audio; -audio#c7ac6496 id:long access_hash:long user_id:int date:int duration:int mime_type:string size:int dc_id:int = Audio; +audio#f9e35055 id:long access_hash:long date:int duration:int mime_type:string size:int dc_id:int = Audio; documentEmpty#36f8c871 id:long = Document; document#f9a39f4f id:long access_hash:long date:int mime_type:string size:int thumb:PhotoSize dc_id:int attributes:Vector = Document; @@ -524,7 +519,7 @@ documentAttributeImageSize#6c37c15c w:int h:int = DocumentAttribute; documentAttributeAnimated#11b58939 = DocumentAttribute; documentAttributeSticker#3a556302 alt:string stickerset:InputStickerSet = DocumentAttribute; documentAttributeVideo#5910cccb duration:int w:int h:int = DocumentAttribute; -documentAttributeAudio#51448e5 duration:int = DocumentAttribute; +documentAttributeAudio#ded218e0 duration:int title:string performer:string = DocumentAttribute; documentAttributeFilename#15590068 file_name:string = DocumentAttribute; messages.stickersNotModified#f1749a22 = messages.Stickers; @@ -533,7 +528,7 @@ messages.stickers#8a8ecd32 hash:string stickers:Vector = messages.Stic stickerPack#12b299d4 emoticon:string documents:Vector = StickerPack; messages.allStickersNotModified#e86602c3 = messages.AllStickers; -messages.allStickers#5ce352ec hash:string packs:Vector sets:Vector documents:Vector = messages.AllStickers; +messages.allStickers#d51dafdb hash:string sets:Vector = messages.AllStickers; disabledFeature#ae636f24 feature:string description:string = DisabledFeature; @@ -588,13 +583,13 @@ inputStickerSetEmpty#ffb62b95 = InputStickerSet; inputStickerSetID#9de7a269 id:long access_hash:long = InputStickerSet; inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet; -stickerSet#a7a43b17 id:long access_hash:long title:string short_name:string = StickerSet; +stickerSet#cd303b41 flags:# id:long access_hash:long title:string short_name:string count:int hash:int = StickerSet; messages.stickerSet#b60a24a6 set:StickerSet packs:Vector documents:Vector = messages.StickerSet; user#22e49072 flags:# id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int = User; -botCommand#b79d22ab command:string params:string description:string = BotCommand; +botCommand#c27ac8c7 command:string description:string = BotCommand; botInfoEmpty#bb2e37ce = BotInfo; botInfo#9cf585d user_id:int version:int share_text:string description:string commands:Vector = BotInfo; @@ -603,9 +598,29 @@ keyboardButton#a2fa4880 text:string = KeyboardButton; keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; -replyKeyboardHide#ced6ebbc = ReplyMarkup; +replyKeyboardHide#a03e5b85 flags:# = ReplyMarkup; +replyKeyboardForceReply#f4108aa0 flags:# = ReplyMarkup; replyKeyboardMarkup#3502758c flags:# rows:Vector = ReplyMarkup; +inputPeerUser#7b8e7de6 user_id:int access_hash:long = InputPeer; + +inputUser#d8292816 user_id:int access_hash:long = InputUser; + +help.appChangelogEmpty#af7e0394 = help.AppChangelog; +help.appChangelog#4668e6bd text:string = help.AppChangelog; + +messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity; +messageEntityMention#fa04579d offset:int length:int = MessageEntity; +messageEntityHashtag#6f635b0d offset:int length:int = MessageEntity; +messageEntityBotCommand#6cef8ac7 offset:int length:int = MessageEntity; +messageEntityUrl#6ed02538 offset:int length:int = MessageEntity; +messageEntityEmail#64e475c2 offset:int length:int = MessageEntity; +messageEntityBold#bd610bc9 offset:int length:int = MessageEntity; +messageEntityItalic#826f8b60 offset:int length:int = MessageEntity; +messageEntityCode#28a20571 offset:int length:int = MessageEntity; +messageEntityPre#73924be0 offset:int length:int language:string = MessageEntity; +messageEntityTextUrl#76a6d327 offset:int length:int url:string = MessageEntity; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -657,7 +672,7 @@ messages.deleteHistory#f4f8fb61 peer:InputPeer offset:int = messages.AffectedHis messages.deleteMessages#a5f18925 id:Vector = messages.AffectedMessages; messages.receivedMessages#5a954c0 max_id:int = Vector; messages.setTyping#a3825e50 peer:InputPeer action:SendMessageAction = Bool; -messages.sendMessage#fc55e6b5 flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup = messages.SentMessage; +messages.sendMessage#df12390 flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = messages.SentMessage; messages.sendMedia#c8f16791 flags:# peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia random_id:long reply_markup:flags.2?ReplyMarkup = Updates; messages.forwardMessages#55e1728d peer:InputPeer id:Vector random_id:Vector = Updates; messages.getChats#3c6aa187 id:Vector = messages.Chats; @@ -684,7 +699,7 @@ help.getAppUpdate#c812ac7e device_model:string system_version:string app_version help.saveAppLog#6f02f748 events:Vector = Bool; help.getInviteText#a4a95186 lang_code:string = help.InviteText; -photos.getUserPhotos#b7ee553c user_id:InputUser offset:int max_id:int limit:int = photos.Photos; +photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int = photos.Photos; messages.forwardMessage#33963bf9 peer:InputPeer id:int random_id:long = Updates; messages.sendBroadcast#bf73f4da contacts:Vector random_id:Vector message:string media:InputMedia = Updates; @@ -766,6 +781,8 @@ messages.exportChatInvite#7d885289 chat_id:int = ExportedChatInvite; messages.checkChatInvite#3eadb1bb hash:string = ChatInvite; messages.importChatInvite#6c50051c hash:string = Updates; messages.getStickerSet#2619a90e stickerset:InputStickerSet = messages.StickerSet; -messages.installStickerSet#efbbfae9 stickerset:InputStickerSet = Bool; +messages.installStickerSet#7b30c3a6 stickerset:InputStickerSet disabled:Bool = Bool; messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; messages.startBot#1b3e0ffc bot:InputUser chat_id:int random_id:long start_param:string = Updates; + +help.getAppChangelog#5bab7fb2 device_model:string system_version:string app_version:string lang_code:string = help.AppChangelog; diff --git a/Telegram/SourceFiles/numbers.h b/Telegram/SourceFiles/numbers.h new file mode 100644 index 000000000..02424f9e7 --- /dev/null +++ b/Telegram/SourceFiles/numbers.h @@ -0,0 +1,21 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ + +#pragma once + +QVector phoneNumberParse(const QString &number); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index fede2bf1d..cbc3d25f9 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -40,13 +40,16 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _photosInRow(1) , _photosToAdd(0) , _selMode(false) - , _width(0) + , _audioLeft(st::msgMargin.left()) + , _audioWidth(st::msgMinWidth) + , _audioHeight(st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom()) + , _width(st::wndMinWidth) , _height(0) , _minHeight(0) , _addToY(0) , _cursor(style::cur_default) , _dragAction(NoDrag) - , _dragItem(0) + , _dragItem(0), _selectedMsgId(0) , _dragItemIndex(-1) , _mousedItem(0) , _mousedItemIndex(-1) @@ -65,6 +68,8 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _touchTime(0) , _menu(0) { + resize(_width, height()); + App::contextItem(0); _touchSelectTimer.setSingleShot(true); @@ -75,6 +80,10 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const mediaOverviewUpdated(); setMouseTracking(true); + + if (_type == OverviewAudioDocuments) { + + } } bool OverviewInner::event(QEvent *e) { @@ -131,7 +140,7 @@ void OverviewInner::touchUpdateSpeed() { void OverviewInner::fixItemIndex(int32 ¤t, MsgId msgId) const { if (!msgId) { current = -1; - } else if (_type == OverviewPhotos) { + } else if (_type == OverviewPhotos || _type == OverviewAudioDocuments) { int32 l = _hist->_overview[_type].size(); if (current < 0 || current >= l || _hist->_overview[_type][current] != msgId) { current = -1; @@ -164,6 +173,10 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con if (x >= 0 && x < _vsize && y >= 0 && y < _vsize) { return true; } + } else if (_type == OverviewAudioDocuments) { + if (x >= _audioLeft && x < _audioLeft + _audioWidth && y >= 0 && y < _audioHeight) { + return true; + } } else { HistoryItem *item = App::histItemById(msgId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -183,6 +196,8 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con int32 OverviewInner::itemHeight(MsgId msgId, int32 index) const { if (_type == OverviewPhotos) { return _vsize; + } else if (_type == OverviewAudioDocuments) { + return _audioHeight; } fixItemIndex(index, msgId); @@ -198,7 +213,7 @@ void OverviewInner::moveToNextItem(MsgId &msgId, int32 &index, MsgId upTo, int32 } index += delta; - if (_type == OverviewPhotos) { + if (_type == OverviewPhotos || _type == OverviewAudioDocuments) { if (index < 0 || index >= _hist->_overview[_type].size()) { msgId = 0; index = -1; @@ -232,6 +247,8 @@ void OverviewInner::updateMsg(MsgId itemId, int32 itemIndex) { int32 vsize = (_vsize + st::overviewPhotoSkip); int32 row = (_photosToAdd + itemIndex) / _photosInRow, col = (_photosToAdd + itemIndex) % _photosInRow; update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); + } else if (_type == OverviewAudioDocuments) { + update(_audioLeft, _addToY + int32(itemIndex * _audioHeight), _audioWidth, _audioHeight); } else { HistoryItem *item = App::histItemById(itemId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -367,12 +384,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem, _dragItemIndex); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - bool textLink = textlnkDown() && !textlnkDown()->encoded().isEmpty(); - if (textLink) { + if (textlnkDown() && _selected.isEmpty()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { - if (_selected.constFind(_dragItem) != _selected.cend() && App::hoveredItem()) { + if (_selected.constFind(_dragItem) != _selected.cend() && textlnkDown()) { _dragAction = PrepareDrag; // start items drag } else { _dragAction = PrepareSelect; // start items select @@ -382,23 +398,25 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but if (_dragAction == NoDrag && _dragItem) { bool afterDragSymbol = false , uponSymbol = false; uint16 symbol = 0; - if (textlnkDown()) { - _dragSymbol = symbol; - uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; - if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { - if (!_selected.isEmpty()) { - updateMsg(_selected.cbegin().key(), -1); - _selected.clear(); + if (!_dragWasInactive) { + if (textlnkDown()) { + _dragSymbol = symbol; + uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; + if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + if (!_selected.isEmpty()) { + updateMsg(_selected.cbegin().key(), -1); + _selected.clear(); + } + _selected.insert(_dragItem, selStatus); + _dragAction = Selecting; + updateMsg(_dragItem, _dragItemIndex); + _overview->updateTopBarSelection(); + } else { + _dragAction = PrepareSelect; } - _selected.insert(_dragItem, selStatus); - _dragAction = Selecting; - updateMsg(_dragItem, _dragItemIndex); - _overview->updateTopBarSelection(); } else { - _dragAction = PrepareSelect; + _dragAction = PrepareSelect; // start items select } - } else { - _dragAction = PrepareSelect; // start items select } } @@ -461,6 +479,11 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu if (i != _selected.cend() && i.value() == FullItemSel) { _selected.erase(i); updateMsg(_dragItem, _dragItemIndex); + } else if (i == _selected.cend() && _dragItem > 0 && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_selected.size() < MaxSelectedItems) { + _selected.insert(_dragItem, FullItemSel); + updateMsg(_dragItem, _dragItemIndex); + } } else { _selected.clear(); parentWidget()->update(); @@ -481,6 +504,73 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu _overview->updateTopBarSelection(); } +void OverviewInner::onDragExec() { + if (_dragAction != Dragging) return; + + bool uponSelected = false; + if (_dragItem) { + bool afterDragSymbol; + uint16 symbol; + if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + uponSelected = _selected.contains(_dragItem); + } else { + uponSelected = false; + } + } + QString sel; + QList urls; + bool forwardSelected = false; + if (uponSelected) { + forwardSelected = !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode(); + } else if (textlnkDown()) { + sel = textlnkDown()->encoded(); + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o + } + } + if (!sel.isEmpty() || forwardSelected) { + updateDragSelection(0, -1, 0, -1, false); + _overview->noSelectingScroll(); + + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + if (!sel.isEmpty()) mimeData->setText(sel); + if (!urls.isEmpty()) mimeData->setUrls(urls); + if (forwardSelected) { + mimeData->setData(qsl("application/x-td-forward-selected"), "1"); + } + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } else { + HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); + QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")); + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument) { + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + if (lnkDocument) { + QString already = static_cast(textlnkDown().data())->document()->already(true); + if (!already.isEmpty()) { + QList urls; + urls.push_back(QUrl::fromLocalFile(already)); + mimeData->setUrls(urls); + } + } + + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } + } +} + void OverviewInner::touchScrollUpdated(const QPoint &screenPos) { _touchPos = screenPos; _overview->touchScroll(_touchPos - _touchPrevPos); @@ -495,7 +585,7 @@ void OverviewInner::applyDragSelection() { } if (_dragSelecting) { for (int32 i = _dragSelToIndex; i <= _dragSelFromIndex; ++i) { - MsgId msgid = (_type == OverviewPhotos) ? _hist->_overview[_type][i] : _items[i].msgid; + MsgId msgid = (_type == OverviewPhotos || _type == OverviewAudioDocuments) ? _hist->_overview[_type][i] : _items[i].msgid; if (!msgid) continue; SelectedItems::iterator j = _selected.find(msgid); @@ -514,7 +604,7 @@ void OverviewInner::applyDragSelection() { } } else { for (int32 i = _dragSelToIndex; i <= _dragSelFromIndex; ++i) { - MsgId msgid = (_type == OverviewPhotos) ? _hist->_overview[_type][i] : _items[i].msgid; + MsgId msgid = (_type == OverviewPhotos || _type == OverviewAudioDocuments) ? _hist->_overview[_type][i] : _items[i].msgid; if (!msgid) continue; SelectedItems::iterator j = _selected.find(msgid); @@ -537,6 +627,8 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) { float64 w = (_width - st::overviewPhotoSkip) / float64(_photosInRow); p.setX(p.x() - int32(col * w) - st::overviewPhotoSkip); p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip); + } else if (_type == OverviewAudioDocuments) { + p.setY(p.y() - _addToY - itemIndex * _audioHeight); } else { p.setY(p.y() - _addToY - (_height - _items[itemIndex].y)); } @@ -547,6 +639,16 @@ void OverviewInner::clear() { _cached.clear(); } +int32 OverviewInner::itemTop(MsgId msgId) const { + if (_type == OverviewAudioDocuments) { + int32 index = _hist->_overview[_type].indexOf(msgId); + if (index >= 0) { + return _addToY + int32(index * _audioHeight); + } + } + return -1; +} + QPixmap OverviewInner::genPix(PhotoData *photo, int32 size) { size *= cIntRetinaFactor(); QImage img = (photo->full->loaded() ? photo->full : (photo->medium->loaded() ? photo->medium : photo->thumb))->pix().toImage(); @@ -672,6 +774,32 @@ void OverviewInner::paintEvent(QPaintEvent *e) { } } } + } else if (_type == OverviewAudioDocuments) { + int32 from = int32(r.top() - _addToY) / int32(_audioHeight); + int32 to = int32(r.bottom() - _addToY) / int32(_audioHeight) + 1; + History::MediaOverview &overview(_hist->_overview[_type]); + int32 count = overview.size(); + p.translate(_audioLeft, _addToY + from * _audioHeight); + for (int32 index = from; index < to; ++index) { + if (index >= count) break; + + HistoryItem *item = App::histItemById(overview[index]); + HistoryMedia *m = item ? item->getMedia(true) : 0; + if (!m || m->type() != MediaTypeDocument) continue; + + uint32 sel = 0; + if (index >= selfrom && index <= selto) { + sel = (_dragSelecting && item->id > 0) ? FullItemSel : 0; + } else if (hasSel) { + SelectedItems::const_iterator i = _selected.constFind(item->id); + if (i != selEnd) { + sel = i.value(); + } + } + + static_cast(m)->drawInPlaylist(p, item, (sel == FullItemSel), ((_menu ? (App::contextItem() ? App::contextItem()->id : 0) : _selectedMsgId) == item->id), _audioWidth); + p.translate(0, _audioHeight); + } } else { p.translate(0, st::msgMargin.top() + _addToY); int32 y = 0, w = _width - st::msgMargin.left() - st::msgMargin.right(); @@ -750,6 +878,7 @@ void OverviewInner::onUpdateSelected() { TextLinkPtr lnk; HistoryItem *item = 0; int32 index = -1; + int32 newsel = 0; if (_type == OverviewPhotos) { float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow); int32 inRow = int32((m.x() - (st::overviewPhotoSkip / 2)) / w), vsize = (_vsize + st::overviewPhotoSkip); @@ -785,6 +914,43 @@ void OverviewInner::onUpdateSelected() { } else { return; } + } else if (_type == OverviewAudioDocuments) { + int32 i = int32((m.y() - _addToY) / _audioHeight), count = _hist->_overview[_type].size(); + if (!count) return; + + bool upon = true; + if (m.y() < _addToY) { + i = 0; + upon = false; + } + if (i >= count) { + i = count - 1; + upon = false; + } + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypeDocument) { + lnk = static_cast(media)->linkInPlaylist(); + newsel = item->id; + } + } + if (newsel != _selectedMsgId) { + updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + updateMsg(item); + } + } else { + if (newsel != _selectedMsgId) { + updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + } + return; + } } else { int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); if (_items.isEmpty()) return; @@ -824,9 +990,9 @@ void OverviewInner::onUpdateSelected() { } left += st::msgPhotoSkip; } - bool inText = false; + HistoryCursorState cursorState = HistoryDefaultCursorState; TextLinkPtr link; - media->getState(link, inText, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); + media->getState(link, cursorState, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); if (link) lnk = link; } } else { @@ -841,7 +1007,7 @@ void OverviewInner::onUpdateSelected() { m = mapMouseToItem(m, _mousedItem, _mousedItemIndex); Qt::CursorShape cur = style::cur_default; - bool inText = false, lnkChanged = false; + bool lnkChanged = false; if (lnk != textlnkOver()) { lnkChanged = true; updateMsg(App::hoveredLinkItem()); @@ -866,6 +1032,7 @@ void OverviewInner::onUpdateSelected() { if (_mousedItem != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; + QTimer::singleShot(1, this, SLOT(onDragExec())); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -878,7 +1045,7 @@ void OverviewInner::onUpdateSelected() { _selected[_dragItem] = 0; updateDragSelection(0, -1, 0, -1, false); } else { - bool selectingDown = (_type == OverviewPhotos ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); + bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem; int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex; if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom @@ -887,6 +1054,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.x() >= _vsize || ((_mousedItem == dragSelFrom) && (m.x() < _dragStartPos.x() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); } + } else if (_type == OverviewAudioDocuments) { + if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); + } } else { if (_dragStartPos.y() >= (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom()) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); @@ -897,6 +1068,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.x() < 0 || ((_mousedItem == dragSelFrom) && (m.x() >= _dragStartPos.x() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); } + } else if (_type == OverviewAudioDocuments) { + if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); + } } else { if (_dragStartPos.y() < st::msgMargin.top() || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); @@ -910,6 +1085,10 @@ void OverviewInner::onUpdateSelected() { if (m.x() < 0) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); } + } else if (_type == OverviewAudioDocuments) { + if (m.y() < 0) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); + } } else { if (m.y() < st::msgMargin.top()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); @@ -920,6 +1099,10 @@ void OverviewInner::onUpdateSelected() { if (m.x() >= _vsize) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } + } else if (_type == OverviewAudioDocuments) { + if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); + } } else { if (m.y() >= itemHeight(dragSelTo, dragSelToIndex) - st::msgMargin.bottom()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); @@ -931,7 +1114,7 @@ void OverviewInner::onUpdateSelected() { MsgId dragFirstAffected = dragSelFrom; int32 dragFirstAffectedIndex = dragSelFromIndex; while (dragFirstAffectedIndex >= 0 && dragFirstAffected <= 0) { - moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, ((selectingDown && (_type == OverviewPhotos)) || (!selectingDown && (_type != OverviewPhotos))) ? -1 : 1); + moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, ((selectingDown && (_type == OverviewPhotos || _type == OverviewAudioDocuments)) || (!selectingDown && (_type != OverviewPhotos && _type != OverviewAudioDocuments))) ? -1 : 1); } if (dragFirstAffectedIndex >= 0) { SelectedItems::const_iterator i = _selected.constFind(dragFirstAffected); @@ -1007,6 +1190,10 @@ void OverviewInner::enterEvent(QEvent *e) { } void OverviewInner::leaveEvent(QEvent *e) { + if (_selectedMsgId > 0) { + updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = 0; + } if (textlnkOver()) { updateMsg(App::hoveredLinkItem()); textlnkOver(TextLinkPtr()); @@ -1021,7 +1208,9 @@ void OverviewInner::leaveEvent(QEvent *e) { void OverviewInner::resizeEvent(QResizeEvent *e) { _width = width(); - showAll(); + _audioWidth = qMin(_width - st::profilePadding.left() - st::profilePadding.right(), int(st::profileMaxWidth)); + _audioLeft = (_width - _audioWidth) / 2; + showAll(true); onUpdateSelected(); update(); } @@ -1030,6 +1219,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (_menu) { _menu->deleteLater(); _menu = 0; + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } if (e->reason() == QContextMenuEvent::Mouse) { dragActionUpdate(e->globalPos()); @@ -1089,6 +1280,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } App::contextItem(App::hoveredLinkItem()); + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } else if (App::mousedItem() && App::mousedItem()->id == _mousedItem) { _menu = new ContextMenu(_overview); _menu->addAction(lang(lng_context_to_msg), this, SLOT(goToMessage()))->setEnabled(true); @@ -1106,6 +1299,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } App::contextItem(App::mousedItem()); + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } if (_menu) { _menu->deleteOnHide(); @@ -1118,7 +1313,7 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeight) { if (width() == nwidth && minHeight == _minHeight) return scrollTop; _minHeight = minHeight; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (_type == OverviewPhotos && _resizeIndex < 0) { _resizeIndex = _photosInRow * ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) + _photosInRow - 1; _resizeSkip = (scrollTop + minHeight) - ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) * int32(_vsize + st::overviewPhotoSkip); @@ -1172,7 +1367,7 @@ void OverviewInner::goToMessage() { HistoryItem *item = App::contextItem(); if (!item) return; - App::main()->showPeer(item->history()->peer->id, item->id, true, true); + App::main()->showPeerHistory(item->history()->peer->id, item->id); } void OverviewInner::forwardMessage() { @@ -1241,6 +1436,8 @@ void OverviewInner::openContextFile() { void OverviewInner::onMenuDestroy(QObject *obj) { if (_menu == obj) { _menu = 0; + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } } @@ -1304,14 +1501,15 @@ void OverviewInner::onTouchScrollTimer() { } } -void OverviewInner::mediaOverviewUpdated() { +void OverviewInner::mediaOverviewUpdated(bool fromResize) { int32 oldHeight = _height; - if (_type != OverviewPhotos) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { History::MediaOverview &o(_hist->_overview[_type]); int32 l = o.size(); _items.reserve(2 * l); // day items int32 y = 0, in = 0; + int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); bool allGood = true; QDate prevDate; for (int32 i = 0; i < l; ++i) { @@ -1319,14 +1517,36 @@ void OverviewInner::mediaOverviewUpdated() { if (allGood) { if (_items.size() > in && _items.at(in).msgid == msgid) { prevDate = _items.at(in).date; - y = _items.at(in).y; + if (fromResize) { + HistoryItem *item = App::histItemById(msgid); + HistoryMedia *media = item ? item->getMedia(true) : 0; + if (media) { + y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height + } + _items[in].y = y; + } else { + y = _items.at(in).y; + } ++in; continue; } if (_items.size() > in + 1 && !_items.at(in).msgid && _items.at(in + 1).msgid == msgid) { // day item + if (fromResize) { + y += st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + st::msgServiceMargin.top() + st::msgServiceMargin.bottom(); // day item height + _items[in].y = y; + } ++in; prevDate = _items.at(in).date; - y = _items.at(in).y; + if (fromResize) { + HistoryItem *item = App::histItemById(msgid); + HistoryMedia *media = item ? item->getMedia(true) : 0; + if (media) { + y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height + } + _items[in].y = y; + } else { + y = _items.at(in).y; + } ++in; continue; } @@ -1353,7 +1573,6 @@ void OverviewInner::mediaOverviewUpdated() { } else { prevDate = date; } - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); media->initDimensions(item); y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height if (_items.size() > in) { @@ -1378,8 +1597,10 @@ void OverviewInner::mediaOverviewUpdated() { } if (_height != y) { _height = y; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; - resize(width(), _minHeight > _height ? _minHeight : _height); + if (!fromResize) { + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + resize(width(), _minHeight > _height ? _minHeight : _height); + } } } @@ -1388,9 +1609,11 @@ void OverviewInner::mediaOverviewUpdated() { fixItemIndex(_mousedItemIndex, _mousedItem); fixItemIndex(_dragItemIndex, _dragItem); - resizeEvent(0); - if (_height != oldHeight) { - _overview->scrollBy(_height - oldHeight); + if (!fromResize) { + resizeEvent(0); + if (_height != oldHeight) { + _overview->scrollBy(_height - oldHeight); + } } } @@ -1442,7 +1665,7 @@ void OverviewInner::itemRemoved(HistoryItem *item) { } void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { - if (_type != OverviewPhotos) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { HistoryMedia *media = item ? item->getMedia(true) : 0; if (!media) return; @@ -1460,7 +1683,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -1490,6 +1713,11 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { int32 row = (_photosToAdd + index) / _photosInRow, col = (_photosToAdd + index) % _photosInRow; update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); } + } else if (_type == OverviewAudioDocuments) { + int32 index = _hist->_overview[_type].indexOf(msgid); + if (index >= 0) { + update(_audioLeft, _addToY + int32(index * _audioHeight), _audioWidth, _audioHeight); + } } else { for (int32 i = 0, l = _items.size(); i != l; ++i) { if (_items[i].msgid == msgid) { @@ -1503,7 +1731,7 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { } } -void OverviewInner::showAll() { +void OverviewInner::showAll(bool recountHeights) { int32 newHeight = height(); if (_type == OverviewPhotos) { _photosInRow = int32(width() - st::overviewPhotoSkip) / int32(st::overviewPhotoMinSize + st::overviewPhotoSkip); @@ -1518,10 +1746,16 @@ void OverviewInner::showAll() { } int32 rows = ((_photosToAdd + count) / _photosInRow) + (((_photosToAdd + count) % _photosInRow) ? 1 : 0); newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + } else if (_type == OverviewAudioDocuments) { + int32 count = _hist->_overview[_type].size(), fullCount = _hist->_overviewCount[_type]; + newHeight = _height = count * _audioHeight + 2 * st::playlistPadding; } else { + if (recountHeights && _type == OverviewVideos) { // recount heights because of captions + mediaOverviewUpdated(true); + } newHeight = _height; } + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (newHeight < _minHeight) { newHeight = _minHeight; } @@ -1531,6 +1765,7 @@ void OverviewInner::showAll() { } OverviewInner::~OverviewInner() { + _dragAction = NoDrag; } OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverviewType type) : QWidget(parent) @@ -1555,6 +1790,8 @@ OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverv connect(&_scrollTimer, SIGNAL(timeout()), this, SLOT(onScrollTimer())); _scrollTimer.setSingleShot(false); + connect(App::main()->player(), SIGNAL(playerSongChanged(MsgId)), this, SLOT(onPlayerSongChanged(MsgId))); + switchType(type); } @@ -1575,8 +1812,12 @@ void OverviewWidget::onScroll() { } void OverviewWidget::resizeEvent(QResizeEvent *e) { + int32 st = _scroll.scrollTop(); _scroll.resize(size()); - int32 newScrollTop = _inner.resizeToWidth(width(), _scroll.scrollTop(), height()); + int32 newScrollTop = _inner.resizeToWidth(width(), st, height()); + if (int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0) { + newScrollTop += addToY; + } if (newScrollTop != _scroll.scrollTop()) { _noDropResizeIndex = true; _scroll.scrollToY(newScrollTop); @@ -1594,33 +1835,36 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); QRect r(e->rect()); - if (type() == OverviewPhotos) { + if (type() == OverviewPhotos || type() == OverviewAudioDocuments) { p.fillRect(r, st::white->b); - } else if (cTileBackground()) { - int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); - if (right > 0 && bottom > 0) { - QRect fill(left, top + (hasTopBar ? st::topBarHeight : 0), right, bottom + (hasTopBar ? st::topBarHeight : 0)); - - if (hasTopBar) p.translate(0, -st::topBarHeight); - p.fillRect(fill, QBrush(*cChatBackground())); - if (hasTopBar) p.translate(0, st::topBarHeight); - } } else { + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { - bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); - p.setRenderHint(QPainter::SmoothPixmapTransform); + const QPixmap &pix(*cChatBackground()); + if (cTileBackground()) { + int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); + float64 w = pix.width() / cRetinaFactor(), h = pix.height() / cRetinaFactor(); + int sx = qFloor(left / w), sy = qFloor((top - fromy) / h), cx = qCeil(right / w), cy = qCeil((bottom - fromy) / h); + for (int i = sx; i < cx; ++i) { + for (int j = sy; j < cy; ++j) { + p.drawPixmap(QPointF(i * w, fromy + j * h), pix); + } + } + } else { + bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); + p.setRenderHint(QPainter::SmoothPixmapTransform); - QRect to, from; - App::main()->backgroundParams(fill, to, from); - to.moveTop(to.top() + fromy); - p.drawPixmap(to, *cChatBackground(), from); + QRect to, from; + App::main()->backgroundParams(fill, to, from); + to.moveTop(to.top() + fromy); + p.drawPixmap(to, pix, from); - if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + } } else { p.drawPixmap(x, fromy + y, cached); } @@ -1654,6 +1898,13 @@ void OverviewWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void OverviewWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void OverviewWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1675,6 +1926,7 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewVideos: _header = lang(lng_profile_videos_header); break; case OverviewDocuments: _header = lang(lng_profile_files_header); break; case OverviewAudios: _header = lang(lng_profile_audios_header); break; + case OverviewAudioDocuments: _header = lang(lng_profile_audio_files_header); break; } noSelectingScroll(); App::main()->topBar()->showSelected(0); @@ -1706,12 +1958,36 @@ int32 OverviewWidget::lastScrollTop() const { return _scroll.scrollTop(); } +int32 OverviewWidget::countBestScroll() const { + if (type() == OverviewAudioDocuments && audioPlayer()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing) { + int32 top = _inner.itemTop(playing.msgId); + if (top >= 0) { + return snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax()); + } + } + } + return _scroll.scrollTopMax(); +} + +void OverviewWidget::fastShow(bool back, int32 lastScrollTop) { + stopGif(); + resizeEvent(0); + _scrollSetAfterShow = (lastScrollTop < 0 ? countBestScroll() : lastScrollTop); + show(); + _inner.setFocus(); + doneShow(); +} + void OverviewWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back, int32 lastScrollTop) { stopGif(); _bgAnimCache = bgAnimCache; _bgAnimTopBarCache = bgAnimTopBarCache; resizeEvent(0); - _scroll.scrollToY(lastScrollTop < 0 ? _scroll.scrollTopMax() : lastScrollTop); + _scroll.scrollToY(lastScrollTop < 0 ? countBestScroll() : lastScrollTop); _animCache = myGrab(this, rect()); App::main()->topBar()->stopAnim(); _animTopBarCache = myGrab(App::main()->topBar(), QRect(0, 0, width(), st::topBarHeight)); @@ -1741,10 +2017,7 @@ bool OverviewWidget::animStep(float64 ms) { a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); - _scroll.show(); - _scroll.scrollToY(_scrollSetAfterShow); - activate(); - onScroll(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -1756,8 +2029,15 @@ bool OverviewWidget::animStep(float64 ms) { return res; } -void OverviewWidget::mediaOverviewUpdated(PeerData *p) { - if (peer() == p) { +void OverviewWidget::doneShow() { + _scroll.show(); + _scroll.scrollToY(_scrollSetAfterShow); + activate(); + onScroll(); +} + +void OverviewWidget::mediaOverviewUpdated(PeerData *p, MediaOverviewType t) { + if (peer() == p && t == type()) { _inner.mediaOverviewUpdated(); onScroll(); updateTopBarSelection(); @@ -1825,6 +2105,15 @@ void OverviewWidget::onScrollTimer() { _scroll.scrollToY(_scroll.scrollTop() + d); } +void OverviewWidget::onPlayerSongChanged(MsgId msgId) { + if (type() == OverviewAudioDocuments) { +// int32 top = _inner.itemTop(msgId); +// if (top > 0) { +// _scroll.scrollToY(snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax())); +// } + } +} + void OverviewWidget::checkSelectingScroll(QPoint point) { if (point.y() < _scroll.scrollTop()) { _scrollDelta = point.y() - _scroll.scrollTop(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 963844bbd..6c08d903b 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -26,6 +26,7 @@ public: OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type); void clear(); + int32 itemTop(MsgId msgId) const; bool event(QEvent *e); void touchEvent(QTouchEvent *e); @@ -57,7 +58,7 @@ public: void setSelectMode(bool enabled); - void mediaOverviewUpdated(); + void mediaOverviewUpdated(bool fromResize = false); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(const HistoryItem *msg); void itemRemoved(HistoryItem *item); @@ -88,6 +89,8 @@ public slots: void onTouchSelect(); void onTouchScrollTimer(); + void onDragExec(); + private: void fixItemIndex(int32 ¤t, MsgId msgId) const; @@ -107,7 +110,7 @@ private: void applyDragSelection(); QPixmap genPix(PhotoData *photo, int32 size); - void showAll(); + void showAll(bool recountHeights = false); OverviewWidget *_overview; ScrollArea *_scroll; @@ -128,6 +131,9 @@ private: CachedSizes _cached; bool _selMode; + // audio documents + int32 _audioLeft, _audioWidth, _audioHeight; + // other typedef struct _CachedItem { _CachedItem() : msgid(0), y(0) { @@ -140,6 +146,7 @@ private: } CachedItem; typedef QVector CachedItems; CachedItems _items; + int32 _width, _height, _minHeight, _addToY; // selection support, like in HistoryWidget @@ -155,7 +162,7 @@ private: }; DragAction _dragAction; QPoint _dragStartPos, _dragPos; - MsgId _dragItem; + MsgId _dragItem, _selectedMsgId; int32 _dragItemIndex; MsgId _mousedItem; int32 _mousedItemIndex; @@ -197,6 +204,7 @@ public: void scrollBy(int32 add); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -206,11 +214,15 @@ public: int32 lastWidth() const; int32 lastScrollTop() const; + int32 countBestScroll() const; + void fastShow(bool back = false, int32 lastScrollTop = -1); void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1); bool animStep(float64 ms); - void mediaOverviewUpdated(PeerData *peer); + void doneShow(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(PeerId peer, const HistoryItem *msg); void itemRemoved(HistoryItem *item); @@ -235,6 +247,7 @@ public slots: void onScroll(); void onScrollTimer(); + void onPlayerSongChanged(MsgId msgId); void onForwardSelected(); void onDeleteSelected(); diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp new file mode 100644 index 000000000..317ac2e85 --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -0,0 +1,625 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "style.h" +#include "lang.h" + +#include "boxes/addcontactbox.h" +#include "application.h" +#include "window.h" +#include "playerwidget.h" +#include "mainwidget.h" + +#include "localstorage.h" + +#include "audio.h" + +PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent), +_prevAvailable(false), _nextAvailable(false), _fullAvailable(false), +_over(OverNone), _down(OverNone), _downCoord(0), _downFrequency(AudioVoiceMsgFrequency), _downProgress(0.), +_stateAnim(animFunc(this, &PlayerWidget::stateStep)), +_index(-1), _history(0), _timeWidth(0), _repeat(false), _showPause(false), _position(0), _duration(0), _loaded(0), +a_progress(0., 0.), a_loadProgress(0., 0.), _progressAnim(animFunc(this, &PlayerWidget::progressStep)) { + resize(st::wndMinWidth, st::playerHeight); + setMouseTracking(true); + memset(_stateHovers, 0, sizeof(_stateHovers)); +} + +void PlayerWidget::paintEvent(QPaintEvent *e) { + Painter p(this); + + QRect r(e->rect()), checkr(myrtlrect(r)); + p.fillRect(r, st::playerBg->b); + + if (!_playbackRect.contains(checkr)) { + if (_fullAvailable && checkr.intersects(_prevRect)) { + if (_prevAvailable) { + float64 o = _stateHovers[OverPrev]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_prevRect, width(), st::playerPrev); + } + if (checkr.intersects(_playRect)) { + float64 o = _stateHovers[OverPlay]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_playRect, width(), (_showPause || _down == OverPlayback) ? st::playerPause : st::playerPlay); + } + if (_fullAvailable && checkr.intersects(_nextRect)) { + if (_nextAvailable) { + float64 o = _stateHovers[OverNext]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_nextRect, width(), st::playerNext); + } + if (checkr.intersects(_closeRect)) { + float64 o = _stateHovers[OverClose]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_closeRect, width(), st::playerClose); + } + if (checkr.intersects(_volumeRect)) { + float64 o = _stateHovers[OverVolume]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + int32 top = _volumeRect.y() + (_volumeRect.height() - st::playerVolume.pxHeight()) / 2; + int32 left = _volumeRect.x() + (_volumeRect.width() - st::playerVolume.pxWidth()) / 2; + int32 mid = left + qRound(st::playerVolume.pxWidth() * cSongVolume()); + int32 right = left + st::playerVolume.pxWidth(); + if (rtl()) { + left = width() - left; + mid = width() - mid; + right = width() - right; + if (mid < left) { + p.drawPixmap(QRect(mid, top, left - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - right) * cIntRetinaFactor(), st::playerVolume.y(), (left - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right < mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(right, top, mid - right, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - right) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } else { + if (mid > left) { + p.drawPixmap(QRect(left, top, mid - left, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - left) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right > mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(mid, top, right - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - left) * cIntRetinaFactor(), st::playerVolume.y(), (right - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } + } + if (_fullAvailable && checkr.intersects(_fullRect)) { + float64 o = _stateHovers[OverFull]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_fullRect, width(), st::playerFull); + } + if (checkr.intersects(_repeatRect)) { + float64 o = _stateHovers[OverRepeat]; + p.setOpacity(_repeat ? 1. : (o * st::playerInactiveOpacity + (1. - o) * st::playerUnavailableOpacity)); + p.drawSpriteCenterLeft(_repeatRect, width(), st::playerRepeat); + } + p.setOpacity(1.); + + p.setPen(st::playerTimeFg->p); + p.setFont(st::linkFont->f); + p.drawTextLeft(_infoRect.x() + _infoRect.width() - _timeWidth, _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, width(), _time, _timeWidth); + + textstyleSet(&st::playerNameStyle); + p.setPen(st::playerFg->p); + _name.drawElided(p, _infoRect.x() + (rtl() ? (_timeWidth + st::playerSkip) : 0), _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, _infoRect.width() - _timeWidth - st::playerSkip); + textstyleRestore(); + } + + if (_duration) { + float64 prg = (_down == OverPlayback) ? _downProgress : a_progress.current(); + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + prg * _playbackRect.width()), end = _playbackRect.x() + _playbackRect.width(); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineActive->b); + } + if (end > mid) { + p.fillRect(rtl() ? (width() - end) : mid, height() - st::playerLineHeight, end - mid, st::playerLineHeight, st::playerLineInactive->b); + } + if (_stateHovers[OverPlayback] > 0) { + p.setOpacity(_stateHovers[OverPlayback]); + + int32 x = mid - (st::playerMoverSize.width() / 2); + p.fillRect(rtl() ? (width() - x - st::playerMoverSize.width()) : x, height() - st::playerMoverSize.height(), st::playerMoverSize.width(), st::playerMoverSize.height(), st::playerLineActive->b); + } + } else if (a_loadProgress.current() > 0) { + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + a_loadProgress.current() * _playbackRect.width()); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineInactive->b); + } + } +} + +void PlayerWidget::mousePressEvent(QMouseEvent *e) { + QPoint pos(myrtlpoint(e->pos())); + + if (e->button() == Qt::LeftButton) { + _down = OverNone; + if (_song && _over == OverPlay) { + playPausePressed(); + return; + } else if (_over == OverPrev) { + prevPressed(); + } else if (_over == OverNext) { + nextPressed(); + } else if (_over == OverClose) { + _down = OverClose; + } else if (_over == OverVolume) { + _down = OverVolume; + _downCoord = pos.x() - _volumeRect.x(); + cSetSongVolume(snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.)); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } else if (_over == OverPlayback) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + if (playingState == AudioPlayerPlaying || playingState == AudioPlayerStarting || playingState == AudioPlayerResuming) { + audioPlayer()->pauseresume(OverviewDocuments); + } + _down = OverPlayback; + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + _downDuration = playingDuration; + _downFrequency = (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + + rtlupdate(_playbackRect); + updateDownTime(); + } + } else if (_over == OverFull && _song) { + if (HistoryItem *item = App::histItemById(_song.msgId)) { + App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments); + } + } else if (_over == OverRepeat) { + _repeat = !_repeat; + updateOverRect(OverRepeat); + } + } +} + +void PlayerWidget::updateDownTime() { + QString time = formatDurationText(qRound(_downDuration * _downProgress) / _downFrequency); + if (time != _time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + rtlupdate(_infoRect); + } +} + +void PlayerWidget::updateOverState(OverState newState) { + bool result = true; + if (_over != newState) { + updateOverRect(_over); + updateOverRect(newState); + if (_over != OverNone) { + _stateAnimations.remove(_over); + _stateAnimations[-_over] = getms() - ((1. - _stateHovers[_over]) * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + } else { + result = false; + } + _over = newState; + if (newState != OverNone) { + _stateAnimations.remove(-_over); + _stateAnimations[_over] = getms() - (_stateHovers[_over] * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + setCursor(style::cur_pointer); + } else { + setCursor(style::cur_default); + } + } +} + +void PlayerWidget::updateOverRect(OverState state) { + switch (state) { + case OverPrev: rtlupdate(_prevRect); break; + case OverPlay: rtlupdate(_playRect); break; + case OverNext: rtlupdate(_nextRect); break; + case OverClose: rtlupdate(_closeRect); break; + case OverVolume: rtlupdate(_volumeRect); break; + case OverFull: rtlupdate(_fullRect); break; + case OverRepeat: rtlupdate(_repeatRect); break; + case OverPlayback: rtlupdate(_playbackRect); break; + } +} + +void PlayerWidget::updateControls() { + _fullAvailable = (_index >= 0); + _prevAvailable = _fullAvailable && (_index > 0); + _nextAvailable = _fullAvailable && (_index < _history->_overview[OverviewAudioDocuments].size() - 1); + resizeEvent(0); + update(); + + if (_index >= 0 && _index < MediaOverviewStartPerPage) { + if (_history->_overviewCount[OverviewAudioDocuments] < 0 || _history->_overviewCount[OverviewAudioDocuments] > 0) { + if (App::main()) App::main()->loadMediaBack(_history->peer, OverviewAudioDocuments); + } + } +} + +void PlayerWidget::findCurrent() { + _index = -1; + if (!_history) return; + + const History::MediaOverview *o = &_history->_overview[OverviewAudioDocuments]; + for (int i = 0, l = o->size(); i < l; ++i) { + if (o->at(i) == _song.msgId) { + _index = i; + break; + } + } + if (_index < 0) return; + + if (_index < o->size() - 1) { + if (HistoryItem *next = App::histItemById(o->at(_index + 1))) { + if (HistoryDocument *document = static_cast(next->getMedia())) { + if (document->document()->already(true).isEmpty() && document->document()->data.isEmpty()) { + if (!document->document()->loader) { + DocumentOpenLink::doOpen(document->document()); + document->document()->openOnSave = document->document()->openOnSaveMsgId = 0; + } + } + } + } + } +} + +void PlayerWidget::startPlay(MsgId msgId) { + if (HistoryItem *item = App::histItemById(msgId)) { + if (HistoryDocument *doc = static_cast(item->getMedia())) { + audioPlayer()->play(SongMsgId(doc->document(), item->id)); + updateState(); + } + } +} + +void PlayerWidget::clearSelection() { + for (StateAnimations::const_iterator i = _stateAnimations.cbegin(); i != _stateAnimations.cend(); ++i) { + _stateHovers[qAbs(i.key())] = 0; + } + _stateAnimations.clear(); +} + +void PlayerWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (_history && _history->peer == peer && type == OverviewAudioDocuments) { + _index = -1; + for (int i = 0, l = _history->_overview[OverviewAudioDocuments].size(); i < l; ++i) { + if (_history->_overview[OverviewAudioDocuments].at(i) == _song.msgId) { + _index = i; + break; + } + } + updateControls(); + } +} + +bool PlayerWidget::seekingSong(const SongMsgId &song) const { + return (_down == OverPlayback) && (song == _song); +} + +bool PlayerWidget::stateStep(float64 msc) { + bool result = false; + uint64 ms = getms(); + for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) { + int32 over = qAbs(i.key()); + updateOverRect(OverState(over)); + + float64 dt = float64(ms - i.value()) / st::playerDuration; + if (dt >= 1) { + _stateHovers[over] = (i.key() > 0) ? 1 : 0; + i = _stateAnimations.erase(i); + } else { + _stateHovers[over] = (i.key() > 0) ? dt : (1 - dt); + ++i; + } + } + return !_stateAnimations.isEmpty(); +} + +void PlayerWidget::mouseMoveEvent(QMouseEvent *e) { + _lastMousePos = e->globalPos(); + updateSelected(); +} + +void PlayerWidget::leaveEvent(QEvent *e) { + _lastMousePos = QCursor::pos(); + updateSelected(); +} + +void PlayerWidget::updateSelected() { + QPoint pos(myrtlpoint(mapFromGlobal(_lastMousePos))); + + if (_down == OverVolume) { + int32 delta = (pos.x() - _volumeRect.x()) - _downCoord; + float64 startFrom = snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.); + float64 add = delta / float64(4 * st::playerVolume.pxWidth()), result = snap(startFrom + add, 0., 1.); + if (result != cSongVolume()) { + cSetSongVolume(result); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } + } else if (_down == OverPlayback) { + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + rtlupdate(_playbackRect); + updateDownTime(); + } else if (_down == OverNone) { + bool inInfo = ((pos.x() >= _infoRect.x()) && (pos.x() < _fullRect.x() + _fullRect.width()) && (pos.y() >= _playRect.y()) && (pos.y() <= _playRect.y() + _playRect.height())); + if (_prevAvailable && _prevRect.contains(pos)) { + updateOverState(OverPrev); + } else if (_nextAvailable && _nextRect.contains(pos)) { + updateOverState(OverNext); + } else if (_playRect.contains(pos)) { + updateOverState(OverPlay); + } else if (_closeRect.contains(pos)) { + updateOverState(OverClose); + } else if (_volumeRect.contains(pos)) { + updateOverState(OverVolume); + } else if (_repeatRect.contains(pos)) { + updateOverState(OverRepeat); + } else if (_duration && _playbackRect.contains(pos)) { + updateOverState(OverPlayback); + } else if (_fullAvailable && inInfo) { + updateOverState(OverFull); + } else if (_over != OverNone) { + updateOverState(OverNone); + } + } +} + +void PlayerWidget::mouseReleaseEvent(QMouseEvent *e) { + if (_down == OverVolume) { + mouseMoveEvent(e); + Local::writeUserSettings(); + } else if (_down == OverPlayback) { + mouseMoveEvent(e); + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + _downDuration = playingDuration; + audioPlayer()->seek(qRound(_downProgress * _downDuration)); + + _showPause = true; + + a_progress = anim::fvalue(_downProgress, _downProgress); + _progressAnim.stop(); + } + update(); + } else if (_down == OverClose && _over == OverClose) { + stopPressed(); + } + _down = OverNone; +} + +void PlayerWidget::playPressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + if (playingState == AudioPlayerPausing || playingState == AudioPlayerPaused || playingState == AudioPlayerPausedAtEnd) { + audioPlayer()->pauseresume(OverviewDocuments); + } + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } +} + +void PlayerWidget::pausePressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + if (playingState == AudioPlayerStarting || playingState == AudioPlayerResuming || playingState == AudioPlayerPlaying || playingState == AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewDocuments); + } + } +} + +void PlayerWidget::playPausePressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } +} + +void PlayerWidget::prevPressed() { + if (isHidden()) return; + + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { + startPlay(o->at(_index - 1)); + } +} + +void PlayerWidget::nextPressed() { + if (isHidden()) return; + + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } +} + +void PlayerWidget::stopPressed() { + if (!_song || isHidden()) return; + + audioPlayer()->stop(OverviewDocuments); + if (App::main()) App::main()->hidePlayer(); +} + +void PlayerWidget::resizeEvent(QResizeEvent *e) { + int32 availh = (height() - st::playerLineHeight); + int32 ch = st::playerPlay.pxHeight() + st::playerSkip, ct = (availh - ch) / 2; + _playbackRect = QRect(cWideMode() ? st::dlgShadow : 0, height() - st::playerMoverSize.height(), width() - (cWideMode() ? st::dlgShadow : 0), st::playerMoverSize.height()); + _prevRect = _fullAvailable ? QRect(st::playerSkip / 2, ct, st::playerPrev.pxWidth() + st::playerSkip, ch) : QRect(); + _playRect = QRect(_fullAvailable ? (_prevRect.x() + _prevRect.width()) : (st::playerSkip / 2), ct, st::playerPlay.pxWidth() + st::playerSkip, ch); + _nextRect = _fullAvailable ? QRect(_playRect.x() + _playRect.width(), ct, st::playerNext.pxWidth() + st::playerSkip, ch) : QRect(); + + _closeRect = QRect(width() - st::playerSkip / 2 - st::playerClose.pxWidth() - st::playerSkip, ct, st::playerClose.pxWidth() + st::playerSkip, ch); + _volumeRect = QRect(_closeRect.x() - st::playerVolume.pxWidth() - st::playerSkip, ct, st::playerVolume.pxWidth() + st::playerSkip, ch); + _repeatRect = QRect(_volumeRect.x() - st::playerRepeat.pxWidth() - st::playerSkip, ct, st::playerRepeat.pxWidth() + st::playerSkip, ch); + _fullRect = _fullAvailable ? QRect(_repeatRect.x() - st::playerFull.pxWidth() - st::playerSkip, ct, st::playerFull.pxWidth() + st::playerSkip, ch) : QRect(); + + int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width())); + _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _repeatRect.x()) - infoLeft - st::playerSkip, availh); + update(); +} + +bool PlayerWidget::progressStep(float64 ms) { + float64 dt = ms / (2 * AudioVoiceMsgUpdateView); + bool res = true; + if (_duration && dt >= 1) { + a_progress.finish(); + a_loadProgress.finish(); + res = false; + } else { + a_progress.update(qMin(dt, 1.), anim::linear); + a_loadProgress.update(1. - (st::radialDuration / (st::radialDuration + ms)), anim::linear); + } + rtlupdate(_playbackRect); + return res; +} + +void PlayerWidget::updateState() { + updateState(SongMsgId(), AudioPlayerStopped, 0, 0, 0); +} + +void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency) { + if (!playing) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + bool songChanged = false; + if (playing && _song != playing) { + songChanged = true; + _song = playing; + if (HistoryItem *item = App::histItemById(_song.msgId)) { + _history = item->history(); + findCurrent(); + } else { + _history = 0; + _index = -1; + } + SongData *song = _song.song->song(); + if (song->performer.isEmpty()) { + _name.setText(st::linkFont, song->title.isEmpty() ? (_song.song->name.isEmpty() ? qsl("Unknown Track") : _song.song->name) : song->title, _textNameOptions); + } else { + TextCustomTagsMap custom; + custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); + _name.setRichText(st::linkFont, QString::fromUtf8("[c]%1[/c] \xe2\x80\x93 %2").arg(textRichPrepare(song->performer)).arg(song->title.isEmpty() ? qsl("Unknown Track") : textRichPrepare(song->title)), _textNameOptions, custom); + } + updateControls(); + } + + qint64 position = 0, duration = 0, display = 0; + if (playing == _song) { + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + display = position = playingPosition; + duration = playingDuration; + } else { + display = playingDuration; + } + display = display / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + } else if (_song) { + display = _song.song->song()->duration; + } + bool showPause = false, stopped = ((playingState & AudioPlayerStoppedMask) || playingState == AudioPlayerFinishing); + bool wasPlaying = !!_duration; + if (!stopped) { + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } + QString time; + float64 progress = 0.; + int32 loaded; + float64 loadProgress = 1.; + if (duration || !_song.song->loader) { + time = (_down == OverPlayback) ? _time : formatDurationText(display); + progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.; + loaded = duration ? _song.song->size : 0; + } else { + loaded = _song.song->loader ? _song.song->loader->currentOffset() : 0; + time = formatDownloadText(loaded, _song.song->size); + loadProgress = snap(float64(loaded) / qMax(_song.song->size, 1), 0., 1.); + } + if (time != _time || showPause != _showPause) { + if (_time != time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + } + _showPause = showPause; + if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + update(); + } else if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + + if (wasPlaying && playingState == AudioPlayerStoppedAtEnd) { + if (_repeat) { + startPlay(_song.msgId); + } else { + nextPressed(); + } + } + + if (songChanged) { + emit playerSongChanged(_song.msgId); + } +} diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h new file mode 100644 index 000000000..7e6095287 --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.h @@ -0,0 +1,113 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include "audio.h" + +class PlayerWidget : public TWidget { + Q_OBJECT + +public: + + PlayerWidget(QWidget *parent); + + void paintEvent(QPaintEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + void leaveEvent(QEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void resizeEvent(QResizeEvent *e); + + void playPressed(); + void pausePressed(); + void playPausePressed(); + void prevPressed(); + void nextPressed(); + void stopPressed(); + + bool progressStep(float64 ms); + bool stateStep(float64 ms); + + void updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency); + void updateState(); + void clearSelection(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); + + bool seekingSong(const SongMsgId &song) const; + +signals: + + void playerSongChanged(MsgId msgId); + +private: + + enum OverState { + OverNone = 0, + OverPrev, + OverPlay, + OverNext, + OverClose, + OverVolume, + OverFull, + OverRepeat, + OverPlayback, + + OverStateCount + }; + void updateDownTime(); + void updateOverState(OverState newState); + void updateOverRect(OverState state); + + void updateControls(); + void findCurrent(); + + void startPlay(MsgId msgId); + + QPoint _lastMousePos; + void updateSelected(); + + bool _prevAvailable, _nextAvailable, _fullAvailable; + OverState _over, _down; + int32 _downCoord; + int64 _downDuration; + int32 _downFrequency; + float64 _downProgress; + + float64 _stateHovers[OverStateCount]; + typedef QMap StateAnimations; + StateAnimations _stateAnimations; + Animation _stateAnim; + + SongMsgId _song; + int32 _index; + History *_history; + QRect _playRect, _prevRect, _nextRect, _playbackRect; + QRect _closeRect, _volumeRect, _fullRect, _repeatRect, _infoRect; + int32 _timeWidth; + bool _repeat; + QString _time; + Text _name; + bool _showPause; + int64 _position, _duration; + int32 _loaded; + + anim::fvalue a_progress, a_loadProgress; + Animation _progressAnim; + +}; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 295c2cb1f..d5ee5fcaf 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -55,7 +55,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings _enableNotifications(this, lang(lng_profile_enable_notifications)), - _clearHistory(this, lang(lng_profile_clear_history)), // shared media _allMediaTypes(false), @@ -65,6 +64,14 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _mediaDocuments(this, QString()), _mediaAudios(this, QString()), + // actions + _searchInPeer(this, lang(lng_profile_search_messages)), + _clearHistory(this, lang(lng_profile_clear_history)), + _deleteConversation(this, lang(_peer->chat ? lng_profile_clear_and_exit : lng_profile_delete_conversation)), + _wasBlocked(_peerUser ? _peerUser->blocked : UserBlockUnknown), + _blockRequest(0), + _blockUser(this, lang((_peerUser && _peerUser->botInfo) ? lng_profile_block_bot : lng_profile_block_user), st::btnRedLink), + // participants _pHeight(st::profileListPhotoSize + st::profileListPadding.height() * 2), _kickWidth(st::linkFont->m.width(lang(lng_profile_kick))), @@ -76,20 +83,29 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee connect(App::api(), SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); if (_peerUser) { - _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); - App::api()->requestFullPeer(_peer); - } else if (_peerChat->photoId) { - PhotoData *ph = App::photo(_peerChat->photoId); - if (ph->date) { - _photoLink = TextLinkPtr(new PhotoLink(ph, _peer)); + if (_peerUser->blocked == UserIsBlocked) { + _blockUser.setText(lang(_peerUser->botInfo ? lng_profile_unblock_bot : lng_profile_unblock_user)); + } + _phoneText = App::formatPhone(_peerUser->phone); + PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; + if (userPhoto && userPhoto->date) { + _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); + } + if ((_peerUser->botInfo && !_peerUser->botInfo->inited) || (_peerUser->photoId == UnknownPeerPhotoId) || (_peerUser->photoId && !userPhoto->date) || (_peerUser->blocked == UserBlockUnknown)) { + App::api()->requestFullPeer(_peer); } } else { - App::api()->requestFullPeer(_peer); + PhotoData *chatPhoto = (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) ? App::photo(_peerChat->photoId) : 0; + if (chatPhoto && chatPhoto->date) { + _photoLink = TextLinkPtr(new PhotoLink(chatPhoto, _peer)); + } + if (_peerChat->photoId == UnknownPeerPhotoId) { + App::api()->requestFullPeer(_peer); + } } // profile _nameText.setText(st::profileNameFont, _nameCache, _textNameOptions); - connect(&_uploadPhoto, SIGNAL(clicked()), this, SLOT(onUpdatePhoto())); connect(&_addParticipant, SIGNAL(clicked()), this, SLOT(onAddParticipant())); connect(&_sendMessage, SIGNAL(clicked()), this, SLOT(onSendMessage())); @@ -142,7 +158,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings connect(&_enableNotifications, SIGNAL(clicked()), this, SLOT(onEnableNotifications())); - connect(&_clearHistory, SIGNAL(clicked()), this, SLOT(onClearHistory())); // shared media connect(&_mediaShowAll, SIGNAL(clicked()), this, SLOT(onMediaShowAll())); @@ -156,6 +171,12 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _mediaLinks[OverviewAudios] = &_mediaAudios; App::main()->preloadOverviews(_peer); + // actions + connect(&_searchInPeer, SIGNAL(clicked()), this, SLOT(onSearchInPeer())); + connect(&_clearHistory, SIGNAL(clicked()), this, SLOT(onClearHistory())); + connect(&_deleteConversation, SIGNAL(clicked()), this, SLOT(onDeleteConversation())); + connect(&_blockUser, SIGNAL(clicked()), this, SLOT(onBlockUser())); + App::contextItem(0); resizeEvent(0); @@ -171,7 +192,11 @@ void ProfileInner::onInviteToGroup() { } void ProfileInner::onSendMessage() { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtUnreadMsgId); +} + +void ProfileInner::onSearchInPeer() { + App::main()->searchInPeer(_peer); } void ProfileInner::onEnableNotifications() { @@ -237,17 +262,54 @@ void ProfileInner::onUpdatePhoto() { } void ProfileInner::onClearHistory() { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_history(lt_contact, _peer->name)); + ConfirmBox *box = new ConfirmBox(_peer->chat ? lng_sure_delete_group_history(lt_group, _peer->name) : lng_sure_delete_history(lt_contact, _peer->name)); connect(box, SIGNAL(confirmed()), this, SLOT(onClearHistorySure())); App::wnd()->showLayer(box); } void ProfileInner::onClearHistorySure() { - App::main()->showPeer(0, 0, true); App::wnd()->hideLayer(); App::main()->clearHistory(_peer); } +void ProfileInner::onDeleteConversation() { + ConfirmBox *box = new ConfirmBox(_peer->chat ? lng_sure_delete_and_exit(lt_group, _peer->name) : lng_sure_delete_history(lt_contact, _peer->name)); + connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteConversationSure())); + App::wnd()->showLayer(box); +} + +void ProfileInner::onDeleteConversationSure() { + if (_peer->chat) { + App::wnd()->hideLayer(); + App::main()->showDialogs(); + MTP::send(MTPmessages_DeleteChatUser(MTP_int(_peer->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, _peer), App::main()->rpcFail(&MainWidget::leaveChatFailed, _peer)); + } else { + App::main()->deleteConversation(_peer); + } +} + +void ProfileInner::onBlockUser() { + if (!_peerUser || _blockRequest) return; + if (_peerUser->blocked == UserIsBlocked) { + _blockRequest = MTP::send(MTPcontacts_Unblock(_peerUser->inputUser), rpcDone(&ProfileInner::blockDone, false), rpcFail(&ProfileInner::blockFail)); + } else { + _blockRequest = MTP::send(MTPcontacts_Block(_peerUser->inputUser), rpcDone(&ProfileInner::blockDone, true), rpcFail(&ProfileInner::blockFail)); + } +} + +void ProfileInner::blockDone(bool blocked, const MTPBool &result) { + _blockRequest = 0; + if (!_peerUser) return; + _peerUser->blocked = blocked ? UserIsBlocked : UserIsNotBlocked; + emit App::main()->peerUpdated(_peerUser); +} + +bool ProfileInner::blockFail(const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + //_blockRequest = 0; + return false; +} + void ProfileInner::onAddParticipant() { App::wnd()->showLayer(new ContactsBox(_peerChat)); } @@ -300,7 +362,6 @@ void ProfileInner::onMediaAudios() { } void ProfileInner::onInvitationLink() { - DEBUG_LOG(("Setting text to clipboard from invite url: %1").arg(_peerChat->invitationUrl)); QApplication::clipboard()->setText(_peerChat->invitationUrl); App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); } @@ -326,7 +387,7 @@ void ProfileInner::chatInviteDone(const MTPExportedChatInvite &result) { void ProfileInner::onFullPeerUpdated(PeerData *peer) { if (peer != _peer) return; if (_peerUser) { - PhotoData *userPhoto = _peerUser->photoId ? App::photo(_peerUser->photoId) : 0; + PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; if (userPhoto && userPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); } else { @@ -352,7 +413,7 @@ void ProfileInner::onBotSettings() { for (int32 i = 0, l = _peerUser->botInfo->commands.size(); i != l; ++i) { QString cmd = _peerUser->botInfo->commands.at(i).command; if (!cmd.compare(qsl("settings"), Qt::CaseInsensitive)) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); App::main()->sendBotCommand('/' + cmd, 0); return; } @@ -364,7 +425,7 @@ void ProfileInner::onBotHelp() { for (int32 i = 0, l = _peerUser->botInfo->commands.size(); i != l; ++i) { QString cmd = _peerUser->botInfo->commands.at(i).command; if (!cmd.compare(qsl("help"), Qt::CaseInsensitive)) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); App::main()->sendBotCommand('/' + cmd, 0); return; } @@ -376,10 +437,14 @@ void ProfileInner::peerUpdated(PeerData *data) { if (data == _peer) { PhotoData *photo = 0; if (_peerUser) { - _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); - if (_peerUser->photoId) photo = App::photo(_peerUser->photoId); + _phoneText = App::formatPhone(_peerUser->phone); + if (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) photo = App::photo(_peerUser->photoId); + if (_wasBlocked != _peerUser->blocked) { + _wasBlocked = _peerUser->blocked; + _blockUser.setText(lang((_peerUser->blocked == UserIsBlocked) ? (_peerUser->botInfo ? lng_profile_unblock_bot : lng_profile_unblock_user) : (_peerUser->botInfo ? lng_profile_block_bot : lng_profile_block_user))); + } } else { - if (_peerChat->photoId) photo = App::photo(_peerChat->photoId); + if (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) photo = App::photo(_peerChat->photoId); } _photoLink = (photo && photo->date) ? TextLinkPtr(new PhotoLink(photo, _peer)) : TextLinkPtr(); if (_peer->name != _nameCache) { @@ -512,7 +577,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); p.drawText(_left + st::profilePhotoSize + st::profileStatusLeft, top + st::profileStatusTop + st::linkFont->ascent, '@' + _peerUser->username); } - p.setPen((_peerUser && App::onlineColorUse(_peerUser->onlineTill, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); + p.setPen((_peerUser && App::onlineColorUse(_peerUser, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); p.drawText(_left + st::profilePhotoSize + st::profileStatusLeft, top + addbyname + st::profileStatusTop + st::linkFont->ascent, _onlineText); if (_chatAdmin && !_peerChat->invitationUrl.isEmpty()) { p.setPen(st::black->p); @@ -573,6 +638,8 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); int oneState = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count < 0) { if (!oneState) oneState = count; @@ -602,6 +669,15 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += _mediaLinks[OverviewPhotos]->height(); } + // actions + p.setFont(st::profileHeaderFont->f); + p.setPen(st::profileHeaderColor->p); + p.drawText(_left + st::profileHeaderLeft, top + st::profileHeaderTop + st::profileHeaderFont->ascent, lang(lng_profile_actions_section)); + top += st::profileHeaderSkip; + + top += _searchInPeer.height() + st::setLittleSkip + _clearHistory.height() + st::setLittleSkip + _deleteConversation.height(); + if (_peerUser && App::userFromPeer(_peerUser->id) != MTP::authedId()) top += st::setSectionSkip + _blockUser.height(); + // participants if (_peerChat && (_peerChat->count > 0 || !_participants.isEmpty())) { QString sectionHeader = lang(_participants.isEmpty() ? lng_profile_loading : lng_profile_participants_section); @@ -643,7 +719,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setFont(st::linkFont->f); data->name.drawElided(p, _left + st::profileListPhotoSize + st::profileListPadding.width(), top + st::profileListNameTop, _width - _kickWidth - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width()); p.setFont(st::profileSubFont->f); - p.setPen((App::onlineColorUse(user->onlineTill, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); + p.setPen((App::onlineColorUse(user, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); p.drawText(_left + st::profileListPhotoSize + st::profileListPadding.width(), top + st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, data->online); if (data->cankick) { @@ -699,7 +775,7 @@ void ProfileInner::updateSelected() { update(QRect(_left, _aboutTop, _width, _aboutHeight)); } - int32 partfrom = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + int32 partfrom = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; int32 newSelected = (lp.x() >= _left - st::profileListPadding.width() && lp.x() < _left + _width + st::profileListPadding.width() && lp.y() >= partfrom) ? (lp.y() - partfrom) / _pHeight : -1; UserData *newKickOver = 0; @@ -758,7 +834,7 @@ void ProfileInner::mouseReleaseEvent(QMouseEvent *e) { textlnkDown(TextLinkPtr()); if (lnk == textlnkOver()) { if (reBotCommand().match(lnk->encoded()).hasMatch()) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); } lnk->onClick(e->button()); } @@ -853,6 +929,8 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { _mediaShowAll.move(_left + _width - _mediaShowAll.width(), top); int wasCount = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + if (_allMediaTypes) { int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { @@ -864,6 +942,16 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { } top += _mediaLinks[OverviewPhotos]->height(); + // actions + top += st::profileHeaderSkip; + _searchInPeer.move(_left, top); top += _searchInPeer.height() + st::setLittleSkip; + _clearHistory.move(_left, top); top += _clearHistory.height() + st::setLittleSkip; + _deleteConversation.move(_left, top); top += _deleteConversation.height(); + if (_peerUser && App::userFromPeer(_peerUser->id) != MTP::authedId()) { + top += st::setSectionSkip; + _blockUser.move(_left, top); top += _blockUser.height(); + } + // participants if (_peerChat && (_peerChat->count > 0 || !_participants.isEmpty())) { top += st::profileHeaderSkip; @@ -873,7 +961,6 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { } } top += st::profileHeaderTop + st::profileHeaderFont->ascent - st::linkFont->ascent; - _clearHistory.move(_left, top); } void ProfileInner::contextMenuEvent(QContextMenuEvent *e) { @@ -906,12 +993,10 @@ void ProfileInner::onMenuDestroy(QObject *obj) { } void ProfileInner::onCopyPhone() { - DEBUG_LOG(("Setting text to clipboard from user phone: %1").arg(_phoneText)); QApplication::clipboard()->setText(_phoneText); } void ProfileInner::onCopyUsername() { - DEBUG_LOG(("Setting text to clipboard from username: @%1").arg(_peerUser->username)); QApplication::clipboard()->setText('@' + _peerUser->username); } @@ -953,7 +1038,7 @@ void ProfileInner::updateNotifySettings() { _enableNotifications.setChecked(_peer->notify == EmptyNotifySettings || _peer->notify == UnknownNotifySettings || _peer->notify->mute < unixtime()); } -void ProfileInner::mediaOverviewUpdated(PeerData *peer) { +void ProfileInner::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (peer == _peer) { resizeEvent(0); showAll(); @@ -962,6 +1047,9 @@ void ProfileInner::mediaOverviewUpdated(PeerData *peer) { } void ProfileInner::showAll() { + _searchInPeer.show(); + _clearHistory.show(); + _deleteConversation.show(); if (_peerChat) { _sendMessage.hide(); _shareContact.hide(); @@ -997,8 +1085,7 @@ void ProfileInner::showAll() { _addParticipant.hide(); } } - _enableNotifications.show(); - _clearHistory.hide(); + _blockUser.hide(); } else { _uploadPhoto.hide(); _cancelPhoto.hide(); @@ -1017,14 +1104,21 @@ void ProfileInner::showAll() { _shareContact.show(); _inviteToGroup.hide(); } - _enableNotifications.show(); _clearHistory.show(); + if (App::userFromPeer(_peerUser->id) != MTP::authedId()) { + _blockUser.show(); + } else { + _blockUser.hide(); + } } + _enableNotifications.show(); updateNotifySettings(); // shared media bool first = false, wasCount = false, manyCounts = false; for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { if (wasCount) { @@ -1060,9 +1154,13 @@ void ProfileInner::showAll() { reorderParticipants(); int32 h; if (_peerUser) { - h = _clearHistory.y() + _clearHistory.height() + st::profileHeaderSkip; + if (App::userFromPeer(_peerUser->id) == MTP::authedId()) { + h = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; + } else { + h = _blockUser.y() + _blockUser.height() + st::profileHeaderSkip; + } } else { - h = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + h = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; if (!_participants.isEmpty()) { h += st::profileHeaderSkip + _participants.size() * _pHeight; } else if (_peerChat->count > 0) { @@ -1079,9 +1177,9 @@ void ProfileInner::updateInvitationLink() { } else { _createInvitationLink.setText(lang(lng_group_invite_create_new)); _invitationText = _peerChat->invitationUrl; - if (_invitationText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive)) { + if (_invitationText.startsWith(qstr("http://"), Qt::CaseInsensitive)) { _invitationText = _invitationText.mid(7); - } else if (_invitationText.startsWith(QLatin1String("https://"), Qt::CaseInsensitive)) { + } else if (_invitationText.startsWith(qstr("https://"), Qt::CaseInsensitive)) { _invitationText = _invitationText.mid(8); } } @@ -1132,8 +1230,13 @@ void ProfileWidget::onScroll() { } void ProfileWidget::resizeEvent(QResizeEvent *e) { + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = _scroll.scrollTop() + addToY; _scroll.resize(size()); _inner.resize(width(), _inner.height()); + if (addToY) { + _scroll.scrollToY(newScrollY); + } } void ProfileWidget::mousePressEvent(QMouseEvent *e) { @@ -1172,6 +1275,13 @@ void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void ProfileWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void ProfileWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1249,8 +1359,8 @@ void ProfileWidget::updateNotifySettings() { _inner.updateNotifySettings(); } -void ProfileWidget::mediaOverviewUpdated(PeerData *peer) { - _inner.mediaOverviewUpdated(peer); +void ProfileWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + _inner.mediaOverviewUpdated(peer, type); } void ProfileWidget::clear() { diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 4ecaa77d5..5c742d31f 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -53,7 +53,7 @@ public: void loadProfilePhotos(int32 yFrom); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); ~ProfileInner(); @@ -68,10 +68,14 @@ public slots: void onShareContact(); void onInviteToGroup(); void onSendMessage(); + void onSearchInPeer(); void onEnableNotifications(); void onClearHistory(); void onClearHistorySure(); + void onDeleteConversation(); + void onDeleteConversationSure(); + void onBlockUser(); void onAddParticipant(); void onUpdatePhoto(); @@ -142,7 +146,6 @@ private: // settings FlatCheckbox _enableNotifications; - LinkButton _clearHistory; // shared media bool _allMediaTypes; @@ -150,6 +153,12 @@ private: LinkButton *_mediaLinks[OverviewCount]; QString overviewLinkText(int32 type, int32 count); + // actions + LinkButton _searchInPeer, _clearHistory, _deleteConversation; + UserBlockedStatus _wasBlocked; + mtpRequestId _blockRequest; + LinkButton _blockUser; + // participants int32 _pHeight; int32 _kickWidth, _selectedRow, _lastPreload; @@ -171,6 +180,9 @@ private: QString _onlineText; ContextMenu *_menu; + void blockDone(bool blocked, const MTPBool &result); + bool blockFail(const RPCError &error); + }; class ProfileWidget : public QWidget, public RPCSender, public Animated { @@ -187,6 +199,7 @@ public: void dropEvent(QDropEvent *e); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -200,7 +213,7 @@ public: void updateOnlineDisplayTimer(); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void clear(); ~ProfileWidget(); diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 75c20c365..3c96e062b 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -68,7 +68,7 @@ namespace { bool frameless = true; bool finished = true; - bool noQtTrayIcon = false; + bool noQtTrayIcon = false, noTryUnity = false, tryAppIndicator = false; bool useGtkBase = false, useAppIndicator = false, useStatusIcon = false, trayIconChecked = false, useUnityCount = false; AppIndicator *_trayIndicator = 0; @@ -351,10 +351,17 @@ namespace { class _PsInitializer { public: _PsInitializer() { + static bool inited = false; + if (inited) return; + inited = true; + QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = (cdesktop == QLatin1String("unity")) || (cdesktop == QLatin1String("pantheon")) || (cdesktop == QLatin1String("gnome")); + noQtTrayIcon = (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + tryAppIndicator = (cdesktop == qstr("xfce")); + noTryUnity = (cdesktop != qstr("unity")); if (noQtTrayIcon) cSetSupportTray(false); + std::cout << "libs init..\n"; setupGtk(); setupUnity(); @@ -395,6 +402,9 @@ namespace { if (!loadFunction(lib_gtk, "g_type_check_instance_cast", ps_g_type_check_instance_cast)) return; if (!loadFunction(lib_gtk, "g_signal_connect_data", ps_g_signal_connect_data)) return; + if (!loadFunction(lib_gtk, "g_object_ref_sink", ps_g_object_ref_sink)) return; + if (!loadFunction(lib_gtk, "g_object_unref", ps_g_object_unref)) return; + useGtkBase = true; std::cout << "loaded gtk funcs!\n"; } @@ -409,9 +419,24 @@ namespace { } void setupGtk() { - if (!noQtTrayIcon) return; - QLibrary lib_gtk, lib_indicator; + if (!noQtTrayIcon && !tryAppIndicator) { + if (!noTryUnity) { + if (loadLibrary(lib_gtk, "gtk-3", 0)) { + setupGtkBase(lib_gtk); + } + if (!useGtkBase) { + if (loadLibrary(lib_gtk, "gtk-x11-2.0", 0)) { + setupGtkBase(lib_gtk); + } + } + if (!useGtkBase) { + noTryUnity = true; + } + } + return; + } + if (loadLibrary(lib_indicator, "appindicator3", 1)) { if (loadLibrary(lib_gtk, "gtk-3", 0)) { setupGtkBase(lib_gtk); @@ -427,6 +452,14 @@ namespace { } } } + if (tryAppIndicator) { + if (useGtkBase && useAppIndicator) { + noQtTrayIcon = true; + cSetSupportTray(false); + } + return; + } + if (!useGtkBase && lib_gtk.isLoaded()) { std::cout << "no appindicator, trying to load gtk..\n"; setupGtkBase(lib_gtk); @@ -450,17 +483,15 @@ namespace { if (!loadFunction(lib_gtk, "gtk_status_icon_position_menu", ps_gtk_status_icon_position_menu)) return; if (!loadFunction(lib_gtk, "gtk_menu_popup", ps_gtk_menu_popup)) return; if (!loadFunction(lib_gtk, "gtk_get_current_event_time", ps_gtk_get_current_event_time)) return; - if (!loadFunction(lib_gtk, "g_object_ref_sink", ps_g_object_ref_sink)) return; - if (!loadFunction(lib_gtk, "g_object_unref", ps_g_object_unref)) return; if (!loadFunction(lib_gtk, "g_idle_add", ps_g_idle_add)) return; useStatusIcon = true; std::cout << "status icon api loaded\n"; } void setupUnity() { - if (!useGtkBase || !noQtTrayIcon) return; + if (noTryUnity) return; - QLibrary lib_unity(QLatin1String("unity"), 9, 0); + QLibrary lib_unity(qstr("unity"), 9, 0); if (!loadLibrary(lib_unity, "unity", 9)) return; if (!loadFunction(lib_unity, "unity_launcher_entry_get_for_desktop_id", ps_unity_launcher_entry_get_for_desktop_id)) return; @@ -470,7 +501,6 @@ namespace { std::cout << "unity count api loaded\n"; } }; - _PsInitializer _psInitializer; class _PsEventFilter : public QAbstractNativeEventFilter { public: @@ -740,6 +770,14 @@ void PsMainWindow::psUpdatedPosition() { void PsMainWindow::psCreateTrayIcon() { if (!noQtTrayIcon) { cSetSupportTray(QSystemTrayIcon::isSystemTrayAvailable()); + if (!noTryUnity) { + if (ps_gtk_init_check(0, 0)) { + DEBUG_LOG(("Checked gtk with gtk_init_check!")); + } else { + DEBUG_LOG(("Failed to gtk_init_check(0, 0)!")); + useUnityCount = false; + } + } return; } @@ -933,6 +971,8 @@ void PsMainWindow::psPlatformNotify(HistoryItem *item, int32 fwdCount) { } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { + _PsInitializer _psInitializer; + Q_UNUSED(_psInitializer); } void PsApplication::psInstallEventFilter() { @@ -1209,6 +1249,10 @@ void psRegisterCustomScheme() { } } +void psNewVersion() { + psRegisterCustomScheme(); +} + bool _execUpdater(bool update = true) { static const int MaxLen = 65536, MaxArgsCount = 128; diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index 580fefcec..3c2c2bd8d 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -68,6 +68,10 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications() { + return false; + } + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); @@ -159,7 +163,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(QWidget *widget); inline QString psConvertFileUrl(const QString &url) { diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index f957384e2..0cac59f75 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -41,7 +41,7 @@ namespace { Window *wnd = Application::wnd(); if (!wnd) return false; - return false; + return wnd->psFilterNativeEvent(message); } }; _PsEventFilter *_psEventFilter = 0; @@ -76,7 +76,7 @@ void MacPrivate::notifyClicked(unsigned long long peer, int msgid) { tomsg = false; } } - App::main()->showPeer(history->peer->id, tomsg ? msgid : 0, false, true); + App::main()->showPeerHistory(history->peer->id, tomsg ? msgid : ShowAtUnreadMsgId); App::wnd()->notifyClear(history); } } @@ -460,6 +460,10 @@ void PsMainWindow::psActivateNotify(NotifyWindow *w) { objc_activateWnd(w->winId()); } +bool PsMainWindow::psFilterNativeEvent(void *event) { + return _private.filterNativeEvent(event); +} + namespace { QRect _monitorRect; uint64 _monitorLastGot = 0; @@ -560,7 +564,9 @@ void psClearInitLogs() { } void psActivateProcess(uint64 pid) { - objc_activateProgram(); + if (!pid) { + objc_activateProgram(App::wnd() ? App::wnd()->winId() : 0); + } } QString psCurrentCountry() { @@ -647,7 +653,7 @@ void psFinish() { objc_finish(); } -void psRegisterCustomScheme() { +void psNewVersion() { objc_registerCustomScheme(); } diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index ffca8718a..b7664d2dd 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -36,7 +36,7 @@ public: void darkModeChanged(); void notifyClicked(unsigned long long peer, int msgid); void notifyReplied(unsigned long long peer, int msgid, const char *str); - + }; class NotifyWindow; @@ -72,6 +72,8 @@ public: return posInited; } + bool psFilterNativeEvent(void *event); + void psActivateNotify(NotifyWindow *w); void psClearNotifies(PeerId peerId = 0); void psNotifyShown(NotifyWindow *w); @@ -81,6 +83,10 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications() { + return !(QSysInfo::macVersion() < QSysInfo::MV_10_8); + } + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); @@ -187,7 +193,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(QWidget *widget); QString psConvertFileUrl(const QString &url); diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 385dc0ab1..1ed7626c0 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -33,7 +33,9 @@ public: void clearNotifies(uint64 peer = 0); void enableShadow(WId winId); - + + bool filterNativeEvent(void *event); + virtual void activeSpaceChanged() { } virtual void darkModeChanged() { @@ -71,7 +73,7 @@ void objc_execTelegram(); void objc_registerCustomScheme(); -void objc_activateProgram(); +void objc_activateProgram(WId winId); bool objc_moveFile(const QString &from, const QString &to); void objc_deleteDir(const QString &dir); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index fe5c91c15..845ca5e2a 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -19,6 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "pspecific_mac_p.h" #include "window.h" +#include "mainwidget.h" #include "application.h" #include "lang.h" @@ -27,6 +28,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +#include + @interface qVisualize : NSObject { } @@ -304,6 +307,41 @@ void PsMacWindowPrivate::enableShadow(WId winId) { // [[(NSView*)winId window] setHasShadow:YES]; } +bool PsMacWindowPrivate::filterNativeEvent(void *event) { + NSEvent *e = static_cast(event); + if (e && [e type] == NSSystemDefined && [e subtype] == 8) { + int keyCode = (([e data1] & 0xFFFF0000) >> 16); + int keyFlags = ([e data1] & 0x0000FFFF); + int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; + int keyRepeat = (keyFlags & 0x1); + + switch (keyCode) { + case NX_KEYTYPE_PLAY: + if (keyState == 0) { // Play pressed and released + if (App::main()) App::main()->player()->playPausePressed(); + return true; + } + break; + + case NX_KEYTYPE_FAST: + if (keyState == 0) { // Next pressed and released + if (App::main()) App::main()->player()->nextPressed(); + return true; + } + break; + + case NX_KEYTYPE_REWIND: + if (keyState == 0) { // Previous pressed and released + if (App::main()) App::main()->player()->prevPressed(); + return true; + } + break; + } + } + return false; +} + + void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; if (peer) { @@ -944,8 +982,12 @@ void objc_execTelegram() { _execUpdater(NO); } -void objc_activateProgram() { +void objc_activateProgram(WId winId) { [NSApp activateIgnoringOtherApps:YES]; + if (winId) { + NSWindow *w = [reinterpret_cast(winId) window]; + [w makeKeyAndOrderFront:NSApp]; + } } bool objc_moveFile(const QString &from, const QString &to) { diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 15ab2bf9d..aab2e04eb 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -24,20 +24,41 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" +#include "passcodewidget.h" + #include -#include #include + +#include +#include +#include +#include + +#include #include #include #include #include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + #include #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) < (b) ? (b) : (a)) +#include + #ifndef DCX_USESTYLE #define DCX_USESTYLE 0x00010000 #endif @@ -48,9 +69,15 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #define WM_NCPOINTERUP 0x0243 #endif -#include -#pragma comment (lib,"Gdiplus.lib") -#pragma comment (lib,"Msimg32.lib") +const WCHAR AppUserModelId[] = L"Telegram.TelegramDesktop"; + +static const PROPERTYKEY pkey_AppUserModel_ID = { { 0x9F4C2855, 0x9F79, 0x4B39, { 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 } }, 5 }; +static const PROPERTYKEY pkey_AppUserModel_StartPinOption = { { 0x9F4C2855, 0x9F79, 0x4B39, { 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 } }, 12 }; + +using namespace Microsoft::WRL; +using namespace ABI::Windows::UI::Notifications; +using namespace ABI::Windows::Data::Xml::Dom; +using namespace Windows::Foundation; namespace { QStringList _initLogs; @@ -61,6 +88,7 @@ namespace { bool useOpenAs = false; bool useWtsapi = false; bool useShellapi = false; + bool useToast = false; bool themeInited = false; bool finished = true; int menuShown = 0, menuHidden = 0; @@ -70,7 +98,28 @@ namespace { bool sessionLoggedOff = false; UINT tbCreatedMsgId = 0; - ITaskbarList3 *tbListInterface = 0; + + ComPtr taskbarList; + + ComPtr toastNotificationManager; + ComPtr toastNotifier; + ComPtr toastNotificationFactory; + struct ToastNotificationPtr { + ToastNotificationPtr() { + } + ToastNotificationPtr(const ComPtr &ptr) : p(ptr) { + } + ComPtr p; + }; + typedef QMap > ToastNotifications; + ToastNotifications toastNotifications; + struct ToastImage { + uint64 until; + QString path; + }; + typedef QMap ToastImages; + ToastImages toastImages; + bool toastImageCreated = false; HWND createTaskbarHider() { HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); @@ -214,7 +263,8 @@ namespace { if (max_h < st::wndMinHeight) max_h = st::wndMinHeight; HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - + HWND hwnd = Application::wnd() ? Application::wnd()->psHwnd() : 0; + for (int i = 0; i < 4; ++i) { QString cn = QString("TelegramShadow%1").arg(i); LPCWSTR _cn = (LPCWSTR)cn.utf16(); @@ -244,6 +294,7 @@ namespace { destroy(); return false; } + SetWindowLong(hwnds[i], GWL_HWNDPARENT, (LONG)hwnd); dcs[i] = CreateCompatibleDC(screenDC); if (!dcs[i]) { @@ -625,9 +676,6 @@ namespace { typedef HRESULT (FAR STDAPICALLTYPE *f_shCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv); f_shCreateItemFromParsingName shCreateItemFromParsingName = 0; - typedef HRESULT (FAR STDAPICALLTYPE *f_shLoadIndirectString)(LPCWSTR pszSource, LPWSTR pszOutBuf, UINT cchOutBuf, void **ppvReserved); - f_shLoadIndirectString shLoadIndirectString = 0; - typedef BOOL (FAR STDAPICALLTYPE *f_wtsRegisterSessionNotification)(HWND hWnd, DWORD dwFlags); f_wtsRegisterSessionNotification wtsRegisterSessionNotification = 0; @@ -636,6 +684,21 @@ namespace { typedef HRESULT (FAR STDAPICALLTYPE *f_shQueryUserNotificationState)(QUERY_USER_NOTIFICATION_STATE *pquns); f_shQueryUserNotificationState shQueryUserNotificationState = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_setCurrentProcessExplicitAppUserModelID)(__in PCWSTR AppID); + f_setCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_roGetActivationFactory)(_In_ HSTRING activatableClassId, _In_ REFIID iid, _COM_Outptr_ void ** factory); + f_roGetActivationFactory roGetActivationFactory = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_windowsCreateStringReference)(_In_reads_opt_(length + 1) PCWSTR sourceString, UINT32 length, _Out_ HSTRING_HEADER * hstringHeader, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * string); + f_windowsCreateStringReference windowsCreateStringReference = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_windowsDeleteString)(_In_opt_ HSTRING string); + f_windowsDeleteString windowsDeleteString = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_propVariantToString)(_In_ REFPROPVARIANT propvar, _Out_writes_(cch) PWSTR psz, _In_ UINT cch); + f_propVariantToString propVariantToString = 0; template bool loadFunction(HINSTANCE dll, LPCSTR name, TFunction &func) { @@ -653,31 +716,39 @@ namespace { setupUx(); setupShell(); setupWtsapi(); + setupPropSys(); + setupCombase(); + + useTheme = !!setWindowTheme; } void setupUx() { HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); - if (!loadFunction(procId, "SetWindowTheme", setWindowTheme)) return; - useTheme = true; + loadFunction(procId, "SetWindowTheme", setWindowTheme); } void setupShell() { HINSTANCE procId = LoadLibrary(L"SHELL32.DLL"); setupOpenWith(procId); setupOpenAs(procId); setupShellapi(procId); + setupAppUserModel(procId); } void setupOpenWith(HINSTANCE procId) { if (!loadFunction(procId, "SHAssocEnumHandlers", shAssocEnumHandlers)) return; if (!loadFunction(procId, "SHCreateItemFromParsingName", shCreateItemFromParsingName)) return; useOpenWith = true; - - HINSTANCE otherProcId = LoadLibrary(L"SHLWAPI.DLL"); - if (otherProcId) loadFunction(otherProcId, "SHLoadIndirectString", shLoadIndirectString); } void setupOpenAs(HINSTANCE procId) { if (!loadFunction(procId, "SHOpenWithDialog", shOpenWithDialog) && !loadFunction(procId, "OpenAs_RunDLLW", openAs_RunDLL)) return; useOpenAs = true; } + void setupShellapi(HINSTANCE procId) { + if (!loadFunction(procId, "SHQueryUserNotificationState", shQueryUserNotificationState)) return; + useShellapi = true; + } + void setupAppUserModel(HINSTANCE procId) { + if (!loadFunction(procId, "SetCurrentProcessExplicitAppUserModelID", setCurrentProcessExplicitAppUserModelID)) return; + } void setupWtsapi() { HINSTANCE procId = LoadLibrary(L"WTSAPI32.DLL"); @@ -685,9 +756,26 @@ namespace { if (!loadFunction(procId, "WTSUnRegisterSessionNotification", wtsUnRegisterSessionNotification)) return; useWtsapi = true; } - void setupShellapi(HINSTANCE procId) { - if (!loadFunction(procId, "SHQueryUserNotificationState", shQueryUserNotificationState)) return; - useShellapi = true; + void setupCombase() { + if (!setCurrentProcessExplicitAppUserModelID) return; + + HINSTANCE procId = LoadLibrary(L"COMBASE.DLL"); + setupToast(procId); + } + void setupPropSys() { + HINSTANCE procId = LoadLibrary(L"PROPSYS.DLL"); + if (!loadFunction(procId, "PropVariantToString", propVariantToString)) return; + } + void setupToast(HINSTANCE procId) { + if (!propVariantToString) return; + if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS8) return; + if (!loadFunction(procId, "RoGetActivationFactory", roGetActivationFactory)) return; + + HINSTANCE otherProcId = LoadLibrary(L"api-ms-win-core-winrt-string-l1-1-0.dll"); + if (!loadFunction(otherProcId, "WindowsCreateStringReference", windowsCreateStringReference)) return; + if (!loadFunction(otherProcId, "WindowsDeleteString", windowsDeleteString)) return; + + useToast = true; } }; _PsInitializer _psInitializer; @@ -714,8 +802,9 @@ namespace { bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { if (tbCreatedMsgId && msg == tbCreatedMsgId) { - if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { - tbListInterface = 0; + HRESULT hr = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_ALL, IID_PPV_ARGS(&taskbarList)); + if (!SUCCEEDED(hr)) { + taskbarList.Reset(); } } switch (msg) { @@ -911,12 +1000,41 @@ namespace { PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), ps_hWnd(0), ps_menu(0), icon256(qsl(":/gui/art/icon256.png")), iconbig256(qsl(":/gui/art/iconbig256.png")), wndIcon(QPixmap::fromImage(icon256, Qt::ColorOnly)), ps_iconBig(0), ps_iconSmall(0), ps_iconOverlay(0), trayIcon(0), trayIconMenu(0), posInited(false), ps_tbHider_hWnd(createTaskbarHider()) { tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); + connect(&ps_cleanNotifyPhotosTimer, SIGNAL(timeout()), this, SLOT(psCleanNotifyPhotos())); } void PsMainWindow::psShowTrayMenu() { trayIconMenu->popup(QCursor::pos()); } +void PsMainWindow::psCleanNotifyPhotosIn(int32 dt) { + if (dt < 0) { + if (ps_cleanNotifyPhotosTimer.isActive() && ps_cleanNotifyPhotosTimer.remainingTime() <= -dt) return; + dt = -dt; + } + ps_cleanNotifyPhotosTimer.start(dt); +} + +void PsMainWindow::psCleanNotifyPhotos() { + uint64 ms = getms(true), minuntil = 0; + for (ToastImages::iterator i = toastImages.begin(); i != toastImages.end();) { + if (!i->until) { + ++i; + continue; + } + if (i->until <= ms) { + QFile(i->path).remove(); + i = toastImages.erase(i); + } else { + if (!minuntil || minuntil > i->until) { + minuntil = i->until; + } + ++i; + } + } + if (minuntil) psCleanNotifyPhotosIn(int32(minuntil - ms)); +} + void PsMainWindow::psRefreshTaskbarIcon() { QWidget *w = new QWidget(this); w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); @@ -1004,8 +1122,8 @@ void PsMainWindow::psUpdateCounter() { QIcon iconSmall, iconBig; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); - iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(32, tbListInterface ? 0 : counter, bg, false), Qt::ColorOnly)); - iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(64, tbListInterface ? 0 : counter, bg, false), Qt::ColorOnly)); + iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(32, taskbarList.Get() ? 0 : counter, bg, false), Qt::ColorOnly)); + iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(64, taskbarList.Get() ? 0 : counter, bg, false), Qt::ColorOnly)); if (trayIcon) { trayIcon->setIcon(iconSmall); } @@ -1016,7 +1134,7 @@ void PsMainWindow::psUpdateCounter() { ps_iconBig = _qt_createHIcon(iconBig, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); SendMessage(ps_hWnd, WM_SETICON, 0, (LPARAM)ps_iconSmall); SendMessage(ps_hWnd, WM_SETICON, 1, (LPARAM)(ps_iconBig ? ps_iconBig : ps_iconSmall)); - if (tbListInterface) { + if (taskbarList.Get()) { if (counter > 0) { QIcon iconOverlay; iconOverlay.addPixmap(QPixmap::fromImage(iconWithCounter(-16, counter, bg, false), Qt::ColorOnly)); @@ -1024,9 +1142,7 @@ void PsMainWindow::psUpdateCounter() { ps_iconOverlay = _qt_createHIcon(iconOverlay, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); } QString description = counter > 0 ? QString("%1 unread messages").arg(counter) : qsl("No unread messages"); - static WCHAR descriptionArr[1024]; - description.toWCharArray(descriptionArr); - tbListInterface->SetOverlayIcon(ps_hWnd, ps_iconOverlay, descriptionArr); + taskbarList->SetOverlayIcon(ps_hWnd, ps_iconOverlay, description.toStdWString().c_str()); } SetWindowPos(ps_hWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); } @@ -1085,6 +1201,11 @@ void PsMainWindow::psInitSize() { setGeometry(geom); } +bool InitToastManager(); +bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title, const QString &subtitle, const QString &msg); +void CheckPinnedAppUserModelId(); +void CleanupAppUserModelIdShortcut(); + void PsMainWindow::psInitFrameless() { psUpdatedPositionTimer.setSingleShot(true); connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); @@ -1101,6 +1222,9 @@ void PsMainWindow::psInitFrameless() { } // RegisterApplicationRestart(NULL, 0); + if (!InitToastManager()) { + useToast = false; + } psInitSysMenu(); } @@ -1147,8 +1271,18 @@ void PsMainWindow::psUpdatedPosition() { psUpdatedPositionTimer.start(SaveWindowPositionTimeout); } +bool PsMainWindow::psHasNativeNotifications() { + return useToast; +} + Q_DECLARE_METATYPE(QMargins); void PsMainWindow::psFirstShow() { + if (useToast) { + cSetCustomNotifies(!cWindowsNotifications()); + } else { + cSetCustomNotifies(true); + } + _psShadowWindows.init(_shActive); finished = false; @@ -1324,6 +1458,13 @@ PsMainWindow::~PsMainWindow() { } } + if (taskbarList) taskbarList.Reset(); + + toastNotifications.clear(); + if (toastNotificationManager) toastNotificationManager.Reset(); + if (toastNotifier) toastNotifier.Reset(); + if (toastNotificationFactory) toastNotificationFactory.Reset(); + finished = true; if (ps_menu) DestroyMenu(ps_menu); psDestroyIcons(); @@ -1363,12 +1504,40 @@ void PsMainWindow::psActivateNotify(NotifyWindow *w) { } void PsMainWindow::psClearNotifies(PeerId peerId) { + if (!toastNotifier) return; + + if (peerId) { + ToastNotifications::iterator i = toastNotifications.find(peerId); + if (i != toastNotifications.cend()) { + QMap temp = i.value(); + toastNotifications.erase(i); + + for (QMap::const_iterator j = temp.cbegin(), e = temp.cend(); j != e; ++j) { + toastNotifier->Hide(j->p.Get()); + } + } + } else { + ToastNotifications temp = toastNotifications; + toastNotifications.clear(); + + for (ToastNotifications::const_iterator i = temp.cbegin(), end = temp.cend(); i != end; ++i) { + for (QMap::const_iterator j = i->cbegin(), e = i->cend(); j != e; ++j) { + toastNotifier->Hide(j->p.Get()); + } + } + } } void PsMainWindow::psNotifyShown(NotifyWindow *w) { } void PsMainWindow::psPlatformNotify(HistoryItem *item, int32 fwdCount) { + QString title = (!App::passcoded() && cNotifyView() <= dbinvShowName) ? item->history()->peer->name : qsl("Telegram Desktop"); + QString subtitle = (!App::passcoded() && cNotifyView() <= dbinvShowName) ? item->notificationHeader() : QString(); + bool showpix = (!App::passcoded() && cNotifyView() <= dbinvShowName); + QString msg = (!App::passcoded() && cNotifyView() <= dbinvShowPreview) ? (fwdCount < 2 ? item->notificationText() : lng_forward_messages(lt_count, fwdCount)) : lang(lng_notification_preview); + + CreateToast(item->history()->peer, item->id, showpix, title, subtitle, msg); } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { @@ -1700,6 +1869,7 @@ void psDoCleanup() { try { psAutoStart(false, true); psSendToMenu(false, true); + CleanupAppUserModelIdShortcut(); } catch (...) { } } @@ -1818,7 +1988,7 @@ namespace { HBITMAP _iconToBitmap(LPWSTR icon, int iconindex) { if (!icon) return 0; WCHAR tmpIcon[4096]; - if (icon[0] == L'@' && shLoadIndirectString && SUCCEEDED(shLoadIndirectString(icon, tmpIcon, 4096, 0))) { + if (icon[0] == L'@' && SUCCEEDED(SHLoadIndirectString(icon, tmpIcon, 4096, 0))) { icon = tmpIcon; } int32 w = GetSystemMetrics(SM_CXSMICON), h = GetSystemMetrics(SM_CYSMICON); @@ -1979,6 +2149,9 @@ void psStart() { } void psFinish() { + if (toastImageCreated) { + psDeleteDir(cWorkingDir() + qsl("tdata/temp")); + } } namespace { @@ -2033,11 +2206,11 @@ namespace { } } -void psRegisterCustomScheme() { +void RegisterCustomScheme() { DEBUG_LOG(("App Info: Checking custom scheme 'tg'..")); HKEY rkey; - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + '/' + QString::fromWCharArray(AppFile) + qsl(".exe")); + QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()); if (!_psOpenRegKey(L"Software\\Classes\\tg", &rkey)) return; if (!_psSetKeyValue(rkey, L"URL Protocol", QString())) return; @@ -2052,6 +2225,13 @@ void psRegisterCustomScheme() { if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return; } +void psNewVersion() { + RegisterCustomScheme(); + if (Local::oldSettingsVersion() < 8051) { + CheckPinnedAppUserModelId(); + } +} + void psExecUpdater() { QString targs = qsl("-update"); if (cFromAutoStart()) targs += qsl(" -autostart"); @@ -2080,9 +2260,9 @@ void psExecTelegram() { if (cTestMode()) targs += qsl(" -testmode"); if (cDataFile() != qsl("data")) targs += qsl(" -key \"") + cDataFile() + '"'; - QString telegram(QDir::toNativeSeparators(cExeDir() + QString::fromWCharArray(AppFile) + qsl(".exe"))), wdir(QDir::toNativeSeparators(cWorkingDir())); + QString telegram(QDir::toNativeSeparators(cExeDir() + cExeName())), wdir(QDir::toNativeSeparators(cWorkingDir())); - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + QString::fromWCharArray(AppFile) + qsl(".exe")).arg(targs)); + DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + cExeName()).arg(targs)); HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); if (long(r) < 32) { DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); @@ -2091,38 +2271,49 @@ void psExecTelegram() { void _manageAppLnk(bool create, bool silent, int path_csidl, const wchar_t *args, const wchar_t *description) { WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder); - if (SUCCEEDED(hres)) { + HRESULT hr = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder); + if (SUCCEEDED(hr)) { QString lnk = QString::fromWCharArray(startupFolder) + '\\' + QString::fromWCharArray(AppFile) + qsl(".lnk"); if (create) { - IShellLink* psl; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) { - IPersistFile* ppf; + ComPtr shellLink; + hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (SUCCEEDED(hr)) { + ComPtr persistFile; - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + '/' + QString::fromWCharArray(AppFile) + qsl(".exe")), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); - psl->SetArguments(args); - psl->SetPath(exe.toStdWString().c_str()); - psl->SetWorkingDirectory(dir.toStdWString().c_str()); - psl->SetDescription(description); + QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); + shellLink->SetArguments(args); + shellLink->SetPath(exe.toStdWString().c_str()); + shellLink->SetWorkingDirectory(dir.toStdWString().c_str()); + shellLink->SetDescription(description); - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) { - hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); - ppf->Release(); - } else { - if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (SUCCEEDED(hr)) { + PROPVARIANT appIdPropVar; + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (SUCCEEDED(hr)) { + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (SUCCEEDED(hr)) { + hr = propertyStore->Commit(); + } + } + } + + hr = shellLink.As(&persistFile); + if (SUCCEEDED(hr)) { + hr = persistFile->Save(lnk.toStdWString().c_str(), TRUE); + } else { + if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hr)); } - psl->Release(); } else { - if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); + if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hr)); } } else { QFile::remove(lnk); } } else { - if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hres)); + if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hr)); } } @@ -2243,3 +2434,678 @@ LONG CALLBACK _exceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) { return _oldWndExceptionFilter ? (*_oldWndExceptionFilter)(pExceptionPointers) : EXCEPTION_CONTINUE_SEARCH; } #endif + +class StringReferenceWrapper { +public: + + StringReferenceWrapper(_In_reads_(length) PCWSTR stringRef, _In_ UINT32 length) throw() { + HRESULT hr = windowsCreateStringReference(stringRef, length, &_header, &_hstring); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + } + + ~StringReferenceWrapper() { + windowsDeleteString(_hstring); + } + + template + StringReferenceWrapper(_In_reads_(N) wchar_t const (&stringRef)[N]) throw() { + UINT32 length = N - 1; + HRESULT hr = windowsCreateStringReference(stringRef, length, &_header, &_hstring); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + } + + template + StringReferenceWrapper(_In_reads_(_) wchar_t(&stringRef)[_]) throw() { + UINT32 length; + HRESULT hr = SizeTToUInt32(wcslen(stringRef), &length); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + + windowsCreateStringReference(stringRef, length, &_header, &_hstring); + } + + HSTRING Get() const throw() { + return _hstring; + } + +private: + HSTRING _hstring; + HSTRING_HEADER _header; + +}; + +HRESULT SetNodeValueString(_In_ HSTRING inputString, _In_ IXmlNode *node, _In_ IXmlDocument *xml) { + ComPtr inputText; + + HRESULT hr = xml->CreateTextNode(inputString, &inputText); + if (!SUCCEEDED(hr)) return hr; + ComPtr inputTextNode; + + hr = inputText.As(&inputTextNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr pAppendedChild; + return node->AppendChild(inputTextNode.Get(), &pAppendedChild); +} + +HRESULT SetAudioSilent(_In_ IXmlDocument *toastXml) { + ComPtr nodeList; + HRESULT hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"audio").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr audioNode; + hr = nodeList->Item(0, &audioNode); + if (!SUCCEEDED(hr)) return hr; + + if (audioNode) { + ComPtr audioElement; + hr = audioNode.As(&audioElement); + if (!SUCCEEDED(hr)) return hr; + + hr = audioElement->SetAttribute(StringReferenceWrapper(L"silent").Get(), StringReferenceWrapper(L"true").Get()); + if (!SUCCEEDED(hr)) return hr; + } else { + ComPtr audioElement; + hr = toastXml->CreateElement(StringReferenceWrapper(L"audio").Get(), &audioElement); + if (!SUCCEEDED(hr)) return hr; + + hr = audioElement->SetAttribute(StringReferenceWrapper(L"silent").Get(), StringReferenceWrapper(L"true").Get()); + if (!SUCCEEDED(hr)) return hr; + + ComPtr audioNode; + hr = audioElement.As(&audioNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"toast").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr toastNode; + hr = nodeList->Item(0, &toastNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr appendedNode; + hr = toastNode->AppendChild(audioNode.Get(), &appendedNode); + } + return hr; +} + +HRESULT SetImageSrc(_In_z_ const wchar_t *imagePath, _In_ IXmlDocument *toastXml) { + wchar_t imageSrc[MAX_PATH] = L"file:///"; + HRESULT hr = StringCchCat(imageSrc, ARRAYSIZE(imageSrc), imagePath); + if (!SUCCEEDED(hr)) return hr; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"image").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr imageNode; + hr = nodeList->Item(0, &imageNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr attributes; + hr = imageNode->get_Attributes(&attributes); + if (!SUCCEEDED(hr)) return hr; + + ComPtr srcAttribute; + hr = attributes->GetNamedItem(StringReferenceWrapper(L"src").Get(), &srcAttribute); + if (!SUCCEEDED(hr)) return hr; + + return SetNodeValueString(StringReferenceWrapper(imageSrc).Get(), srcAttribute.Get(), toastXml); +} + +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastActivatedEventHandler; +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastDismissedEventHandler; +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastFailedEventHandler; + +class ToastEventHandler : public Implements { +public: + ToastEventHandler::ToastEventHandler(uint64 peer, int32 msg) : _ref(1), _peerId(peer), _msgId(msg) { + } + ~ToastEventHandler() { + } + + // DesktopToastActivatedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IInspectable* args) { + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + if (App::wnd()) { + History *history = App::history(PeerId(_peerId)); + + App::wnd()->showFromTray(); + if (App::passcoded()) { + App::wnd()->passcodeWidget()->setInnerFocus(); + App::wnd()->notifyClear(); + } else { + App::wnd()->hideSettings(); + bool tomsg = history->peer->chat && (_msgId > 0); + if (tomsg) { + HistoryItem *item = App::histItemById(_msgId); + if (!item || !item->notifyByFrom()) { + tomsg = false; + } + } + App::main()->showPeerHistory(history->peer->id, tomsg ? _msgId : ShowAtUnreadMsgId); + App::wnd()->notifyClear(history); + } + SetForegroundWindow(App::wnd()->psHwnd()); + } + return S_OK; + } + + // DesktopToastDismissedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IToastDismissedEventArgs *e) { + ToastDismissalReason tdr; + if (SUCCEEDED(e->get_Reason(&tdr))) { + switch (tdr) { + case ToastDismissalReason_ApplicationHidden: + break; + case ToastDismissalReason_UserCanceled: + case ToastDismissalReason_TimedOut: + default: + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + break; + } + } + return S_OK; + } + + // DesktopToastFailedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IToastFailedEventArgs *e) { + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + return S_OK; + } + + // IUnknown + IFACEMETHODIMP_(ULONG) AddRef() { + return InterlockedIncrement(&_ref); + } + + IFACEMETHODIMP_(ULONG) Release() { + ULONG l = InterlockedDecrement(&_ref); + if (l == 0) delete this; + return l; + } + + IFACEMETHODIMP QueryInterface(_In_ REFIID riid, _COM_Outptr_ void **ppv) { + if (IsEqualIID(riid, IID_IUnknown)) + *ppv = static_cast(static_cast(this)); + else if (IsEqualIID(riid, __uuidof(DesktopToastActivatedEventHandler))) + *ppv = static_cast(this); + else if (IsEqualIID(riid, __uuidof(DesktopToastDismissedEventHandler))) + *ppv = static_cast(this); + else if (IsEqualIID(riid, __uuidof(DesktopToastFailedEventHandler))) + *ppv = static_cast(this); + else *ppv = nullptr; + + if (*ppv) { + reinterpret_cast(*ppv)->AddRef(); + return S_OK; + } + + return E_NOINTERFACE; + } + +private: + ULONG _ref; + uint64 _peerId; + int32 _msgId; +}; + +template +_Check_return_ __inline HRESULT _1_GetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ T** factory) { + return roGetActivationFactory(activatableClassId, IID_INS_ARGS(factory)); +} + +template +inline HRESULT wrap_GetActivationFactory(_In_ HSTRING activatableClassId, _Inout_ Details::ComPtrRef factory) throw() { + return _1_GetActivationFactory(activatableClassId, factory.ReleaseAndGetAddressOf()); +} + +QString toastImage(const StorageKey &key, PeerData *peer) { + uint64 ms = getms(true); + ToastImages::iterator i = toastImages.find(key); + if (i != toastImages.cend()) { + if (i->until) { + i->until = ms + NotifyDeletePhotoAfter; + if (App::wnd()) App::wnd()->psCleanNotifyPhotosIn(-NotifyDeletePhotoAfter); + } + } else { + ToastImage v; + if (key.first) { + v.until = ms + NotifyDeletePhotoAfter; + if (App::wnd()) App::wnd()->psCleanNotifyPhotosIn(-NotifyDeletePhotoAfter); + } else { + v.until = 0; + } + v.path = cWorkingDir() + qsl("tdata/temp/") + QString::number(MTP::nonce(), 16) + qsl(".png"); + if (peer->photo->loaded() && (key.first || key.second)) { + peer->photo->pix().save(v.path, "PNG"); + } else if (!key.first && key.second) { + (peer->chat ? chatDefPhoto : userDefPhoto)(peer->colorIndex)->pix().save(v.path, "PNG"); + } else { + App::wnd()->iconLarge().save(v.path, "PNG"); + } + i = toastImages.insert(key, v); + toastImageCreated = true; + } + return i->path; +} + +bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title, const QString &subtitle, const QString &msg) { + if (!useToast || !toastNotificationManager || !toastNotifier || !toastNotificationFactory) return false; + + ComPtr toastXml; + bool withSubtitle = !subtitle.isEmpty(); + + HRESULT hr = toastNotificationManager->GetTemplateContent(withSubtitle ? ToastTemplateType_ToastImageAndText04 : ToastTemplateType_ToastImageAndText02, &toastXml); + if (!SUCCEEDED(hr)) return false; + + hr = SetAudioSilent(toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + + StorageKey key; + QString imagePath; + if (showpix) { + if (peer->photoLoc.isNull() || !peer->photo->loaded()) { + key = StorageKey(0, (peer->chat ? 0x2000 : 0x1000) | peer->colorIndex); + } else { + key = storageKey(peer->photoLoc); + } + } else { + key = StorageKey(0, 0); + } + QString image = toastImage(key, peer); + std::wstring wimage = QDir::toNativeSeparators(image).toStdWString(); + + hr = SetImageSrc(wimage.c_str(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"text").Get(), &nodeList); + if (!SUCCEEDED(hr)) return false; + + UINT32 nodeListLength; + hr = nodeList->get_Length(&nodeListLength); + if (!SUCCEEDED(hr)) return false; + + if (nodeListLength < (withSubtitle ? 3 : 2)) return false; + + { + ComPtr textNode; + hr = nodeList->Item(0, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wtitle = title.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wtitle.data(), wtitle.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + if (withSubtitle) { + ComPtr textNode; + hr = nodeList->Item(1, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wsubtitle = subtitle.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wsubtitle.data(), wsubtitle.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + { + ComPtr textNode; + hr = nodeList->Item(withSubtitle ? 2 : 1, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wmsg = msg.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wmsg.data(), wmsg.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + + ComPtr toast; + hr = toastNotificationFactory->CreateToastNotification(toastXml.Get(), &toast); + if (!SUCCEEDED(hr)) return false; + + EventRegistrationToken activatedToken, dismissedToken, failedToken; + ComPtr eventHandler(new ToastEventHandler(peer->id, msgId)); + + hr = toast->add_Activated(eventHandler.Get(), &activatedToken); + if (!SUCCEEDED(hr)) return false; + + hr = toast->add_Dismissed(eventHandler.Get(), &dismissedToken); + if (!SUCCEEDED(hr)) return false; + + hr = toast->add_Failed(eventHandler.Get(), &failedToken); + if (!SUCCEEDED(hr)) return false; + + ToastNotifications::iterator i = toastNotifications.find(peer->id); + if (i == toastNotifications.cend()) { + i = toastNotifications.insert(peer->id, QMap()); + } else { + QMap::iterator j = i->find(msgId); + if (j != i->cend()) { + toastNotifier->Hide(j->p.Get()); + i->erase(j); + if (i->isEmpty()) { + toastNotifications.erase(i); + } + } + } + hr = toastNotifier->Show(toast.Get()); + if (!SUCCEEDED(hr)) { + if (i->isEmpty()) toastNotifications.erase(i); + return false; + } + i->insert(msgId, toast); + + return true; +} + +QString pinnedPath() { + static const int maxFileLen = MAX_PATH * 10; + WCHAR wstrPath[maxFileLen]; + if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { + QDir appData(QString::fromStdWString(std::wstring(wstrPath))); + return appData.absolutePath() + qsl("/Microsoft/Internet Explorer/Quick Launch/User Pinned/TaskBar/"); + } + return QString(); +} + +void CheckPinnedAppUserModelId() { + if (!propVariantToString) return; + + static const int maxFileLen = MAX_PATH * 10; + + HRESULT hr = CoInitialize(0); + if (!SUCCEEDED(hr)) return; + + QString path = pinnedPath(); + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + WCHAR src[MAX_PATH]; + GetModuleFileName(GetModuleHandle(0), src, MAX_PATH); + BY_HANDLE_FILE_INFORMATION srcinfo = { 0 }; + HANDLE srcfile = CreateFile(src, 0x00, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (srcfile == INVALID_HANDLE_VALUE) return; + BOOL srcres = GetFileInformationByHandle(srcfile, &srcinfo); + CloseHandle(srcfile); + if (!srcres) return; + LOG(("Checking..")); + WIN32_FIND_DATA findData; + HANDLE findHandle = FindFirstFileEx((p + L"*").c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, 0, 0); + if (findHandle == INVALID_HANDLE_VALUE) { + LOG(("Init Error: could not find files in pinned folder")); + return; + } + do { + std::wstring fname = p + findData.cFileName; + LOG(("Checking %1").arg(QString::fromStdWString(fname))); + if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + continue; + } else { + DWORD attributes = GetFileAttributes(fname.c_str()); + if (attributes >= 0xFFFFFFF) continue; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) continue; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) continue; + + hr = persistFile->Load(fname.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) continue; + + WCHAR dst[MAX_PATH]; + hr = shellLink->GetPath(dst, MAX_PATH, 0, 0); + if (!SUCCEEDED(hr)) continue; + + BY_HANDLE_FILE_INFORMATION dstinfo = { 0 }; + HANDLE dstfile = CreateFile(dst, 0x00, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (dstfile == INVALID_HANDLE_VALUE) continue; + BOOL dstres = GetFileInformationByHandle(dstfile, &dstinfo); + CloseHandle(dstfile); + if (!dstres) continue; + + if (srcinfo.dwVolumeSerialNumber == dstinfo.dwVolumeSerialNumber && srcinfo.nFileIndexLow == dstinfo.nFileIndexLow && srcinfo.nFileIndexHigh == dstinfo.nFileIndexHigh) { + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return; + + PROPVARIANT appIdPropVar; + hr = propertyStore->GetValue(pkey_AppUserModel_ID, &appIdPropVar); + if (!SUCCEEDED(hr)) return; + LOG(("Reading..")); + WCHAR already[MAX_PATH]; + hr = propVariantToString(appIdPropVar, already, MAX_PATH); + if (SUCCEEDED(hr)) { + if (std::wstring(AppUserModelId) == already) { + LOG(("Already!")); + PropVariantClear(&appIdPropVar); + return; + } + } + if (appIdPropVar.vt != VT_EMPTY) { + PropVariantClear(&appIdPropVar); + return; + } + PropVariantClear(&appIdPropVar); + + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return; + + if (persistFile->IsDirty() == S_OK) { + persistFile->Save(fname.c_str(), TRUE); + } + return; + } + } + } while (FindNextFile(findHandle, &findData)); + DWORD errorCode = GetLastError(); + if (errorCode && errorCode != ERROR_NO_MORE_FILES) { // everything is found + LOG(("Init Error: could not find some files in pinned folder")); + return; + } + FindClose(findHandle); +} + +QString systemShortcutPath() { + static const int maxFileLen = MAX_PATH * 10; + WCHAR wstrPath[maxFileLen]; + if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { + QDir appData(QString::fromStdWString(std::wstring(wstrPath))); + return appData.absolutePath() + qsl("/Microsoft/Windows/Start Menu/Programs/"); + } + return QString(); +} + +void CleanupAppUserModelIdShortcut() { + static const int maxFileLen = MAX_PATH * 10; + + QString path = systemShortcutPath() + qsl("Telegram.lnk"); + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + DWORD attributes = GetFileAttributes(p.c_str()); + if (attributes >= 0xFFFFFFF) return; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return; + + hr = persistFile->Load(p.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) return; + + WCHAR szGotPath[MAX_PATH]; + WIN32_FIND_DATA wfd; + hr = shellLink->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA*)&wfd, SLGP_SHORTPATH); + if (!SUCCEEDED(hr)) return; + + if (QDir::toNativeSeparators(cExeDir() + cExeName()).toStdWString() == szGotPath) { + QFile().remove(path); + } +} + +bool ValidateAppUserModelIdShortcutAt(const QString &path) { + static const int maxFileLen = MAX_PATH * 10; + + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + DWORD attributes = GetFileAttributes(p.c_str()); + if (attributes >= 0xFFFFFFF) return false; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return false; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return false; + + hr = persistFile->Load(p.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) return false; + + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT appIdPropVar; + hr = propertyStore->GetValue(pkey_AppUserModel_ID, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + WCHAR already[MAX_PATH]; + hr = propVariantToString(appIdPropVar, already, MAX_PATH); + if (SUCCEEDED(hr)) { + if (std::wstring(AppUserModelId) == already) { + PropVariantClear(&appIdPropVar); + return true; + } + } + if (appIdPropVar.vt != VT_EMPTY) { + PropVariantClear(&appIdPropVar); + return false; + } + PropVariantClear(&appIdPropVar); + + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return false; + + if (persistFile->IsDirty() == S_OK) { + persistFile->Save(p.c_str(), TRUE); + } + + return true; +} + +bool ValidateAppUserModelIdShortcut() { + if (!useToast) return false; + + QString path = systemShortcutPath(); + if (path.isEmpty()) return false; + + if (ValidateAppUserModelIdShortcutAt(path + qsl("Telegram Desktop/Telegram.lnk"))) return true; + if (ValidateAppUserModelIdShortcutAt(path + qsl("Telegram Win (Unofficial)/Telegram.lnk"))) return true; + + path += qsl("Telegram.lnk"); + if (ValidateAppUserModelIdShortcutAt(path)) return true; + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetPath(QDir::toNativeSeparators(cExeDir() + cExeName()).toStdWString().c_str()); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetArguments(L""); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetWorkingDirectory(QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()).toStdWString().c_str()); + if (!SUCCEEDED(hr)) return false; + + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT appIdPropVar; + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT startPinPropVar; + hr = InitPropVariantFromUInt32(APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL, &startPinPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_StartPinOption, startPinPropVar); + PropVariantClear(&startPinPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return false; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return false; + + hr = persistFile->Save(QDir::toNativeSeparators(path).toStdWString().c_str(), TRUE); + if (!SUCCEEDED(hr)) return false; + + return true; +} + +bool InitToastManager() { + if (!useToast || !ValidateAppUserModelIdShortcut()) return false; + if (!SUCCEEDED(setCurrentProcessExplicitAppUserModelID(AppUserModelId))) { + return false; + } + if (!SUCCEEDED(wrap_GetActivationFactory(StringReferenceWrapper(RuntimeClass_Windows_UI_Notifications_ToastNotificationManager).Get(), &toastNotificationManager))) { + return false; + } + if (!SUCCEEDED(toastNotificationManager->CreateToastNotifierWithId(StringReferenceWrapper(AppUserModelId).Get(), &toastNotifier))) { + return false; + } + if (!SUCCEEDED(wrap_GetActivationFactory(StringReferenceWrapper(RuntimeClass_Windows_UI_Notifications_ToastNotification).Get(), &toastNotificationFactory))) { + return false; + } + QDir().mkpath(cWorkingDir() + qsl("tdata/temp")); + return true; +} diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 6e8040b23..3cb01cd2c 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -67,6 +67,9 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications(); + void psCleanNotifyPhotosIn(int32 dt); + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); @@ -77,6 +80,8 @@ public slots: void psSavePosition(Qt::WindowState state = Qt::WindowActive); void psShowTrayMenu(); + void psCleanNotifyPhotos(); + protected: bool psHasTrayIcon() const { @@ -100,6 +105,8 @@ private: HMENU ps_menu; HICON ps_iconBig, ps_iconSmall, ps_iconOverlay; + SingleTimer ps_cleanNotifyPhotosTimer; + void psDestroyIcons(); }; @@ -161,7 +168,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(TWidget *widget); inline QString psConvertFileUrl(const QString &url) { diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 51dfa9759..da839b676 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -25,6 +25,7 @@ Qt::LayoutDirection gLangDir = Qt::LeftToRight; mtpDcOptions gDcOptions; +bool gDevVersion = DevVersion; bool gTestMode = false; bool gDebug = false; bool gManyInstance = false; @@ -41,6 +42,7 @@ QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog bool gSoundNotify = true; bool gDesktopNotify = true; DBINotifyView gNotifyView = dbinvShowPreview; +bool gWindowsNotifications = true; bool gStartMinimized = false; bool gStartInTray = false; bool gAutoStart = false; @@ -52,6 +54,11 @@ bool gSupportTray = true; DBIWorkMode gWorkMode = dbiwmWindowAndTray; DBIConnectionType gConnectionType = dbictAuto; ConnectionProxy gConnectionProxy; +#ifdef Q_OS_WIN +bool gTryIPv6 = false; +#else +bool gTryIPv6 = true; +#endif bool gSeenTrayTooltip = false; bool gRestartingUpdate = false, gRestarting = false, gRestartingToSettings = false, gWriteProtected = false; int32 gLastUpdateCheck = 0; @@ -94,8 +101,6 @@ EmojiColorVariants gEmojiVariants; QByteArray gStickersHash; -EmojiStickersMap gEmojiStickers; - RecentStickerPreload gRecentStickersPreload; RecentStickerPack gRecentStickers; StickerSets gStickerSets; @@ -115,11 +120,7 @@ QString gLangFile; bool gRetina = false; float64 gRetinaFactor = 1.; int32 gIntRetinaFactor = 1; -#ifdef Q_OS_MAC -bool gCustomNotifies = false; -#else bool gCustomNotifies = true; -#endif uint64 gInstance = 0.; #ifdef Q_OS_WIN @@ -153,11 +154,18 @@ int gNotifyDefaultDelay = 1500; int gOtherOnline = 0; +float64 gSongVolume = 0.9; + +SavedPeers gSavedPeers; +SavedPeersByTime gSavedPeersByTime; + void settingsParseArgs(int argc, char *argv[]) { #ifdef Q_OS_MAC - gCustomNotifies = (QSysInfo::macVersion() < QSysInfo::MV_10_8); -#else - gCustomNotifies = true; + if (QSysInfo::macVersion() < QSysInfo::MV_10_8) { + gUpdateURL = QUrl(qsl("http://tdesktop.com/mac32/tupdates/current")); + } else { + gCustomNotifies = false; + } #endif memset_rand(&gInstance, sizeof(gInstance)); gExeDir = psCurrentExeDirectory(argc, argv); @@ -286,7 +294,7 @@ RecentStickerPack &cGetRecentStickers() { recent.reserve(p.size()); for (RecentStickerPreload::const_iterator i = p.cbegin(), e = p.cend(); i != e; ++i) { DocumentData *doc = App::document(i->first); - if (!doc || !doc->sticker) continue; + if (!doc || !doc->sticker()) continue; recent.push_back(qMakePair(doc, i->second)); } diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index ed0a588e0..47c9a3610 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -64,6 +64,8 @@ struct mtpDcOption { typedef QMap mtpDcOptions; DeclareSetting(mtpDcOptions, DcOptions); +DeclareSetting(bool, DevVersion); + DeclareSetting(bool, TestMode); DeclareSetting(QString, LoggedPhoneNumber); DeclareReadSetting(uint32, ConnectionsInSession); @@ -99,6 +101,8 @@ DeclareSetting(bool, DesktopNotify); DeclareSetting(DBINotifyView, NotifyView); DeclareSetting(bool, AutoUpdate); +DeclareSetting(bool, WindowsNotifications); + struct TWindowPos { TWindowPos() : moncrc(0), maximized(0), x(0), y(0), w(0), h(0) { } @@ -109,6 +113,7 @@ DeclareSetting(TWindowPos, WindowPos); DeclareSetting(bool, SupportTray); DeclareSetting(DBIWorkMode, WorkMode); DeclareSetting(DBIConnectionType, ConnectionType); +DeclareSetting(bool, TryIPv6); DeclareSetting(DBIDefaultAttach, DefaultAttach); DeclareSetting(ConnectionProxy, ConnectionProxy); DeclareSetting(bool, SeenTrayTooltip); @@ -188,9 +193,6 @@ struct DocumentData; typedef QVector StickerPack; DeclareSetting(QByteArray, StickersHash); -typedef QMap EmojiStickersMap; -DeclareSetting(EmojiStickersMap, EmojiStickers); - typedef QList > RecentStickerPackOld; typedef QVector > RecentStickerPreload; typedef QVector > RecentStickerPack; @@ -201,12 +203,14 @@ RecentStickerPack &cGetRecentStickers(); DeclareSetting(uint64, LastStickersUpdate); -static const uint64 DefaultStickerSetId = 0, CustomStickerSetId = 0xFFFFFFFFFFFFFFFFLLU, RecentStickerSetId = 0xFFFFFFFFFFFFFFFELLU; +static const uint64 DefaultStickerSetId = 0; // for backward compatibility +static const uint64 CustomStickerSetId = 0xFFFFFFFFFFFFFFFFLLU, RecentStickerSetId = 0xFFFFFFFFFFFFFFFELLU; struct StickerSet { - StickerSet(uint64 id, uint64 access, const QString &title, const QString &shortName) : id(id), access(access), title(title), shortName(shortName) { + StickerSet(uint64 id, uint64 access, const QString &title, const QString &shortName, int32 count, int32 hash, int32 flags) : id(id), access(access), title(title), shortName(shortName), count(count), hash(hash), flags(flags) { } uint64 id, access; QString title, shortName; + int32 count, hash, flags; StickerPack stickers; }; typedef QMap StickerSets; @@ -304,4 +308,12 @@ DeclareSetting(int, NotifyDefaultDelay); DeclareSetting(int, OtherOnline); +DeclareSetting(float64, SongVolume); + +struct PeerData; +typedef QMap SavedPeers; +typedef QMultiMap SavedPeersByTime; +DeclareRefSetting(SavedPeers, SavedPeers); +DeclareRefSetting(SavedPeersByTime, SavedPeersByTime); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 17e3c62bb..84b53cf38 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -122,6 +122,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), _senderName(this, lang(lng_settings_show_name), cNotifyView() <= dbinvShowName), _messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), + _windowsNotifications(this, lang(lng_settings_use_windows), cWindowsNotifications()), _soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), // general @@ -182,15 +183,18 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _passwordEdit(this, lang(lng_cloud_password_set)), _passwordTurnOff(this, lang(lng_passcode_turn_off)), _hasPasswordRecovery(false), - _connectionType(this, lng_connection_auto(lt_type, QString())), + _connectionType(this, lang(lng_connection_auto_connecting)), _connectionTypeText(lang(lng_connection_type) + ' '), _connectionTypeWidth(st::linkFont->m.width(_connectionTypeText)), _showSessions(this, lang(lng_settings_show_sessions)), - _logOut(this, lang(lng_settings_logout), st::btnLogout) + _askQuestion(this, lang(lng_settings_ask_question)), + _telegramFAQ(this, lang(lng_settings_faq)), + _logOut(this, lang(lng_settings_logout), st::btnLogout), + _supportGetRequest(0) { if (self()) { _nameText.setText(st::setNameFont, _nameCache, _textNameOptions); - PhotoData *selfPhoto = self()->photoId ? App::photo(self()->photoId) : 0; + PhotoData *selfPhoto = (self()->photoId && self()->photoId != UnknownPeerPhotoId) ? App::photo(self()->photoId) : 0; if (selfPhoto && selfPhoto->date) _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); MTP::send(MTPusers_GetFullUser(self()->inputUser), rpcDone(&SettingsInner::gotFullSelf), RPCFailHandlerPtr(), 0, 10); onReloadPassword(); @@ -217,6 +221,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_desktopNotify, SIGNAL(changed()), this, SLOT(onDesktopNotify())); connect(&_senderName, SIGNAL(changed()), this, SLOT(onSenderName())); connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); + connect(&_windowsNotifications, SIGNAL(changed()), this, SLOT(onWindowsNotifications())); connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); // general @@ -236,7 +241,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_dpiAutoScale, SIGNAL(changed()), this, SLOT(onScaleAuto())); connect(&_dpiSlider, SIGNAL(changed(int32)), this, SLOT(onScaleChange())); - _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (DevChannel ? " dev" : "")) + ' '; + _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : "")) + ' '; _curVersionWidth = st::linkFont->m.width(_curVersionText); _newVersionText = lang(lng_settings_update_ready) + ' '; _newVersionWidth = st::linkFont->m.width(_newVersionText); @@ -288,6 +293,8 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_passwordTurnOff, SIGNAL(clicked()), this, SLOT(onPasswordOff())); connect(&_connectionType, SIGNAL(clicked()), this, SLOT(onConnectionType())); connect(&_showSessions, SIGNAL(clicked()), this, SLOT(onShowSessions())); + connect(&_askQuestion, SIGNAL(clicked()), this, SLOT(onAskQuestion())); + connect(&_telegramFAQ, SIGNAL(clicked()), this, SLOT(onTelegramFAQ())); connect(&_logOut, SIGNAL(clicked()), App::wnd(), SLOT(onLogout())); if (App::main()) { @@ -312,7 +319,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), void SettingsInner::peerUpdated(PeerData *data) { if (self() && data == self()) { - if (self()->photoId) { + if (self()->photoId && self()->photoId != UnknownPeerPhotoId) { PhotoData *selfPhoto = App::photo(self()->photoId); if (selfPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); @@ -411,6 +418,9 @@ void SettingsInner::paintEvent(QPaintEvent *e) { top += _desktopNotify.height() + st::setLittleSkip; top += _senderName.height() + st::setLittleSkip; top += _messagePreview.height() + st::setSectionSkip; + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + top += _windowsNotifications.height() + st::setSectionSkip; + } top += _soundNotify.height(); } @@ -637,6 +647,9 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _desktopNotify.move(_left, top); top += _desktopNotify.height() + st::setLittleSkip; _senderName.move(_left, top); top += _senderName.height() + st::setLittleSkip; _messagePreview.move(_left, top); top += _messagePreview.height() + st::setSectionSkip; + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + _windowsNotifications.move(_left, top); top += _windowsNotifications.height() + st::setSectionSkip; + } _soundNotify.move(_left, top); top += _soundNotify.height(); } @@ -719,7 +732,12 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _connectionType.move(_left + _connectionTypeWidth, top); top += _connectionType.height() + st::setLittleSkip; if (self()) { _showSessions.move(_left, top); top += _showSessions.height() + st::setSectionSkip; + _askQuestion.move(_left, top); top += _askQuestion.height() + st::setLittleSkip; + _telegramFAQ.move(_left, top); top += _telegramFAQ.height() + st::setSectionSkip; _logOut.move(_left, top); + } else { + top += st::setSectionSkip - st::setLittleSkip; + _telegramFAQ.move(_left, top); } } @@ -731,21 +749,23 @@ void SettingsInner::keyPressEvent(QKeyEvent *e) { int32 size = _secretText.size(), from = 0; while (size > from) { QStringRef str(_secretText.midRef(from)); - if (str == QLatin1String("debugmode")) { + if (str == qstr("debugmode")) { QString text = cDebug() ? qsl("Do you want to disable DEBUG logs?") : qsl("Do you want to enable DEBUG logs?\n\nAll network events will be logged."); ConfirmBox *box = new ConfirmBox(text); connect(box, SIGNAL(confirmed()), App::app(), SLOT(onSwitchDebugMode())); App::wnd()->showLayer(box); from = size; break; - } else if (str == QLatin1String("testmode")) { + } else if (str == qstr("testmode")) { QString text = cTestMode() ? qsl("Do you want to disable TEST mode?") : qsl("Do you want to enable TEST mode?\n\nYou will be switched to test cloud."); ConfirmBox *box = new ConfirmBox(text); connect(box, SIGNAL(confirmed()), App::app(), SLOT(onSwitchTestMode())); App::wnd()->showLayer(box); from = size; break; - } else if (qsl("debugmode").startsWith(str) || qsl("testmode").startsWith(str)) { + } else if (str == qstr("loadlang")) { + chooseCustomLang(); + } else if (qsl("debugmode").startsWith(str) || qsl("testmode").startsWith(str) || qsl("loadlang").startsWith(str)) { break; } ++from; @@ -810,7 +830,7 @@ bool SettingsInner::animStep(float64 ms) { void SettingsInner::updateSize(int32 newWidth) { if (_logOut.isHidden()) { - resize(newWidth, _connectionType.geometry().bottom() + st::setBottom); + resize(newWidth, _telegramFAQ.geometry().bottom() + st::setBottom); } else { resize(newWidth, _logOut.geometry().bottom() + st::setBottom); } @@ -820,18 +840,19 @@ void SettingsInner::updateOnlineDisplay() { } void SettingsInner::updateConnectionType() { + QString connection; switch (cConnectionType()) { case dbictAuto: { QString transport = MTP::dctransport(); - if (transport.isEmpty()) { - _connectionType.setText(lang(lng_connection_auto_connecting)); - } else { - _connectionType.setText(lng_connection_auto(lt_type, transport)); - } + connection = transport.isEmpty() ? lang(lng_connection_auto_connecting) : lng_connection_auto(lt_transport, transport); + } break; + case dbictHttpProxy: + case dbictTcpProxy: { + QString transport = MTP::dctransport(); + connection = transport.isEmpty() ? lang(lng_connection_proxy_connecting) : lng_connection_proxy(lt_transport, transport); } break; - case dbictHttpProxy: _connectionType.setText(lang(lng_connection_http_proxy)); break; - case dbictTcpProxy: _connectionType.setText(lang(lng_connection_tcp_proxy)); break; } + _connectionType.setText(connection); } void SettingsInner::passcodeChanged() { @@ -850,7 +871,7 @@ void SettingsInner::gotFullSelf(const MTPUserFull &selfFull) { if (!self()) return; App::feedPhoto(selfFull.c_userFull().vprofile_photo); App::feedUsers(MTP_vector(1, selfFull.c_userFull().vuser)); - PhotoData *selfPhoto = self()->photoId ? App::photo(self()->photoId) : 0; + PhotoData *selfPhoto = (self()->photoId && self()->photoId != UnknownPeerPhotoId) ? App::photo(self()->photoId) : 0; if (selfPhoto && selfPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); } else { @@ -935,11 +956,17 @@ void SettingsInner::showAll() { _desktopNotify.show(); _senderName.show(); _messagePreview.show(); + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + _windowsNotifications.show(); + } else { + _windowsNotifications.hide(); + } _soundNotify.show(); } else { _desktopNotify.hide(); _senderName.hide(); _messagePreview.hide(); + _windowsNotifications.hide(); _soundNotify.hide(); } @@ -1048,6 +1075,7 @@ void SettingsInner::showAll() { _passwordTurnOff.show(); } _showSessions.show(); + _askQuestion.show(); _logOut.show(); } else { _passcodeEdit.hide(); @@ -1056,8 +1084,10 @@ void SettingsInner::showAll() { _passwordEdit.hide(); _passwordTurnOff.hide(); _showSessions.hide(); + _askQuestion.hide(); _logOut.hide(); } + _telegramFAQ.show(); } void SettingsInner::saveError(const QString &str) { @@ -1066,6 +1096,17 @@ void SettingsInner::saveError(const QString &str) { update(); } +void SettingsInner::supportGot(const MTPhelp_Support &support) { + if (!App::main()) return; + + if (support.type() == mtpc_help_support) { + const MTPDhelp_support &d(support.c_help_support()); + UserData *u = App::feedUsers(MTP_vector(1, d.vuser)); + App::main()->showPeerHistory(u->id, ShowAtUnreadMsgId); + App::wnd()->hideSettings(); + } +} + void SettingsInner::onUpdatePhotoCancel() { if (self()) { App::app()->cancelPhotoUpdate(self()->id); @@ -1109,25 +1150,56 @@ void SettingsInner::onShowSessions() { App::wnd()->showLayer(box); } +void SettingsInner::onAskQuestion() { + if (!App::self()) return; + + ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), lang(lng_settings_faq_button)); + connect(box, SIGNAL(confirmed()), this, SLOT(onAskQuestionSure())); + connect(box, SIGNAL(cancelPressed()), this, SLOT(onTelegramFAQ())); + App::wnd()->showLayer(box); +} + +void SettingsInner::onAskQuestionSure() { + if (_supportGetRequest) return; + _supportGetRequest = MTP::send(MTPhelp_GetSupport(), rpcDone(&SettingsInner::supportGot)); +} + +void SettingsInner::onTelegramFAQ() { + QString url = qsl("https://telegram.org/faq"); + if (cLang() > languageDefault && cLang() < languageCount) { + const char *code = LanguageCodes[cLang()]; + if (qstr("de") == code || qstr("es") == code || qstr("it") == code || qstr("ko") == code) { + url += qsl("/") + code; + } else if (qstr("pt_BR") == code) { + url += qsl("/br"); + } + } + QDesktopServices::openUrl(url); +} + +void SettingsInner::chooseCustomLang() { + QString file; + QByteArray arr; + if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { + _testlang = QFileInfo(file).absoluteFilePath(); + LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + if (loader.errors().isEmpty()) { + LangLoaderResult result = loader.found(); + QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), + save = result.value(lng_continue, langOriginal(lng_continue)), + cancel = result.value(lng_cancel, langOriginal(lng_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, cancel); + connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); + App::wnd()->showLayer(box); + } else { + App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); + } + } +} + void SettingsInner::onChangeLanguage() { if ((_changeLanguage.clickModifiers() & Qt::ShiftModifier) && (_changeLanguage.clickModifiers() & Qt::AltModifier)) { - QString file; - QByteArray arr; - if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { - _testlang = QFileInfo(file).absoluteFilePath(); - LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); - if (loader.errors().isEmpty()) { - LangLoaderResult result = loader.found(); - QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); - connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); - App::wnd()->showLayer(box); - } else { - App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); - } - } + chooseCustomLang(); } else { App::wnd()->showLayer(new LanguageBox()); } @@ -1348,6 +1420,13 @@ void SettingsInner::onSoundNotify() { Local::writeUserSettings(); } +void SettingsInner::onWindowsNotifications() { + cSetWindowsNotifications(!cWindowsNotifications()); + App::wnd()->notifyClearFast(); + cSetCustomNotifies(!cWindowsNotifications()); + Local::writeUserSettings(); +} + void SettingsInner::onDesktopNotify() { cSetDesktopNotify(_desktopNotify.checked()); if (!_desktopNotify.checked()) { diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 1de46a36c..faf500406 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -78,6 +78,8 @@ public: void showAll(); + void chooseCustomLang(); + void updateChatBackground(); void needBackgroundUpdate(bool tile); @@ -125,6 +127,8 @@ public slots: void onSenderName(); void onMessagePreview(); + void onWindowsNotifications(); + void onReplaceEmojis(); void onViewEmojis(); @@ -162,10 +166,16 @@ public slots: void onUpdateLocalStorage(); + void onAskQuestion(); + void onAskQuestionSure(); + void onTelegramFAQ(); + private: void saveError(const QString &str = QString()); + void supportGot(const MTPhelp_Support &support); + void setScale(DBIScale newScale); QString _testlang, _secretText; @@ -192,7 +202,7 @@ private: LinkButton _chooseUsername; // notifications - FlatCheckbox _desktopNotify, _senderName, _messagePreview, _soundNotify; + FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify; // general LinkButton _changeLanguage; @@ -261,9 +271,11 @@ private: LinkButton _connectionType; QString _connectionTypeText; int32 _connectionTypeWidth; - LinkButton _showSessions; + LinkButton _showSessions, _askQuestion, _telegramFAQ; FlatButton _logOut; + mtpRequestId _supportGetRequest; + void gotPassword(const MTPaccount_Password &result); void offPasswordDone(const MTPBool &result); bool offPasswordFail(const RPCError &error); diff --git a/Telegram/SourceFiles/stdafx.cpp b/Telegram/SourceFiles/stdafx.cpp index 2b0067974..e2d89d33b 100644 --- a/Telegram/SourceFiles/stdafx.cpp +++ b/Telegram/SourceFiles/stdafx.cpp @@ -35,5 +35,7 @@ Q_IMPORT_PLUGIN(QWbmpPlugin) Q_IMPORT_PLUGIN(QWebpPlugin) #elif defined Q_OS_LINUX Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QIbusPlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QFcitxPlatformInputContextPlugin) Q_IMPORT_PLUGIN(QWebpPlugin) #endif diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index bb7cc5f4b..6a17ea088 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -16,7 +16,7 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #define __HUGE - +#define PSAPI_VERSION 1 // fix WinXP //#define Q_NO_TEMPLATE_FRIENDS // fix some compiler difference issues #include diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 56345676f..86885d11e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -90,10 +90,10 @@ NotifySettingsPtr globalNotifyAllPtr = UnknownNotifySettings, globalNotifyUsersP PeerData::PeerData(const PeerId &id) : id(id) , loaded(false) , chat(App::isChat(id)) -, access(0) , colorIndex(peerColorIndex(id)) , color(peerColor(colorIndex)) , photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex)) +, photoId(UnknownPeerPhotoId) , nameVersion(0) , notify(UnknownNotifySettings) { @@ -126,30 +126,42 @@ void PeerData::updateName(const QString &newName, const QString &newNameOrPhone, NameFirstChars oldChars = chars; fillNames(); App::history(id)->updateNameText(); + nameUpdated(); if (App::main()) { emit App::main()->peerNameChanged(this, oldNames, oldChars); } - nameUpdated(); } -void UserData::setPhoto(const MTPUserProfilePhoto &p) { +void UserData::setPhoto(const MTPUserProfilePhoto &p) { // see Local::readPeer as well + PhotoId newPhotoId = photoId; + ImagePtr newPhoto = photo; + StorageImageLocation newPhotoLoc = photoLoc; switch (p.type()) { case mtpc_userProfilePhoto: { const MTPDuserProfilePhoto d(p.c_userProfilePhoto()); - photoId = d.vphoto_id.v; - photo = ImagePtr(160, 160, d.vphoto_small, userDefPhoto(colorIndex)); - // App::feedPhoto(App::photoFromUserPhoto(MTP_int(id & 0xFFFFFFFF), MTP_int(unixtime()), p)); + newPhotoId = d.vphoto_id.v; + newPhotoLoc = App::imageLocation(160, 160, d.vphoto_small); + newPhoto = newPhotoLoc.isNull() ? userDefPhoto(colorIndex) : ImagePtr(newPhotoLoc); + //App::feedPhoto(App::photoFromUserPhoto(MTP_int(id & 0xFFFFFFFF), MTP_int(unixtime()), p)); } break; default: { - photoId = 0; + newPhotoId = 0; if (id == ServiceUserId) { - photo = ImagePtr(QPixmap::fromImage(App::wnd()->iconLarge().scaledToWidth(160, Qt::SmoothTransformation), Qt::ColorOnly), "PNG"); + if (photo->isNull()) { + newPhoto = ImagePtr(QPixmap::fromImage(App::wnd()->iconLarge().scaledToWidth(160, Qt::SmoothTransformation), Qt::ColorOnly), "PNG"); + } } else { - photo = userDefPhoto(colorIndex); + newPhoto = userDefPhoto(colorIndex); } + newPhotoLoc = StorageImageLocation(); } break; } - emit App::main()->peerPhotoChanged(this); + if (newPhotoId != photoId || newPhoto.v() != photo.v() || newPhotoLoc != photoLoc) { + photoId = newPhotoId; + photo = newPhoto; + photoLoc = newPhotoLoc; + emit App::main()->peerPhotoChanged(this); + } } void PeerData::fillNames() { @@ -198,7 +210,6 @@ void UserData::setName(const QString &first, const QString &last, const QString void UserData::setPhone(const QString &newPhone) { phone = newPhone; - ++nameVersion; } void UserData::setBotInfoVersion(int32 version) { @@ -209,16 +220,23 @@ void UserData::setBotInfoVersion(int32 version) { botInfo = new BotInfo(); botInfo->version = version; } else if (botInfo->version < version) { - botInfo->commands.clear(); + if (!botInfo->commands.isEmpty()) { + botInfo->commands.clear(); + if (App::main()) App::main()->botCommandsChanged(this); + } botInfo->description.clear(); botInfo->shareText.clear(); botInfo->version = version; botInfo->inited = false; } } + void UserData::setBotInfo(const MTPBotInfo &info) { switch (info.type()) { case mtpc_botInfoEmpty: + if (botInfo && !botInfo->commands.isEmpty()) { + if (App::main()) App::main()->botCommandsChanged(this); + } delete botInfo; botInfo = 0; break; @@ -240,15 +258,37 @@ void UserData::setBotInfo(const MTPBotInfo &info) { botInfo->shareText = qs(d.vshare_text); const QVector &v(d.vcommands.c_vector().v); - botInfo->commands.clear(); botInfo->commands.reserve(v.size()); + bool changedCommands = false; + int32 j = 0; for (int32 i = 0, l = v.size(); i < l; ++i) { - if (v.at(i).type() == mtpc_botCommand) { - botInfo->commands.push_back(BotCommand(qs(v.at(i).c_botCommand().vcommand), qs(v.at(i).c_botCommand().vparams), qs(v.at(i).c_botCommand().vdescription))); + if (v.at(i).type() != mtpc_botCommand) continue; + + QString cmd = qs(v.at(i).c_botCommand().vcommand), desc = qs(v.at(i).c_botCommand().vdescription); + if (botInfo->commands.size() <= j) { + botInfo->commands.push_back(BotCommand(cmd, desc)); + changedCommands = true; + } else { + if (botInfo->commands[j].command != cmd) { + botInfo->commands[j].command = cmd; + changedCommands = true; + } + if (botInfo->commands[j].setDescription(desc)) { + changedCommands = true; + } } + ++j; + } + while (j < botInfo->commands.size()) { + botInfo->commands.pop_back(); + changedCommands = true; } botInfo->inited = true; + + if (changedCommands && App::main()) { + App::main()->botCommandsChanged(this); + } } break; } } @@ -258,33 +298,45 @@ void UserData::nameUpdated() { } void UserData::madeAction() { + if (botInfo || isServiceUser(id)) return; + int32 t = unixtime(); if (onlineTill <= 0 && -onlineTill < t) { onlineTill = -t - SetOnlineAfterActivity; - if (App::main()) App::main()->peerUpdated(this); + App::markPeerUpdated(this); } else if (onlineTill > 0 && onlineTill < t + 1) { onlineTill = t + SetOnlineAfterActivity; - if (App::main()) App::main()->peerUpdated(this); + App::markPeerUpdated(this); } } -void ChatData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { +void ChatData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { // see Local::readPeer as well + PhotoId newPhotoId = photoId; + ImagePtr newPhoto = photo; + StorageImageLocation newPhotoLoc = photoLoc; switch (p.type()) { case mtpc_chatPhoto: { const MTPDchatPhoto d(p.c_chatPhoto()); - photo = ImagePtr(160, 160, d.vphoto_small, chatDefPhoto(colorIndex)); - photoFull = ImagePtr(640, 640, d.vphoto_big, chatDefPhoto(colorIndex)); - if (phId) { - photoId = phId; + if (phId != UnknownPeerPhotoId) { + newPhotoId = phId; } + newPhotoLoc = App::imageLocation(160, 160, d.vphoto_small); + newPhoto = newPhotoLoc.isNull() ? chatDefPhoto(colorIndex) : ImagePtr(newPhotoLoc); +// photoFull = ImagePtr(640, 640, d.vphoto_big, chatDefPhoto(colorIndex)); } break; default: { - photo = chatDefPhoto(colorIndex); - photoFull = ImagePtr(); - photoId = 0; + newPhotoId = 0; + newPhotoLoc = StorageImageLocation(); + newPhoto = chatDefPhoto(colorIndex); +// photoFull = ImagePtr(); } break; } - emit App::main()->peerPhotoChanged(this); + if (newPhotoId != photoId || newPhoto.v() != photo.v() || newPhotoLoc != photoLoc) { + photoId = newPhotoId; + photo = newPhoto; + photoLoc = newPhotoLoc; + emit App::main()->peerPhotoChanged(this); + } } void PhotoLink::onClick(Qt::MouseButton button) const { @@ -352,7 +404,7 @@ QString saveFileName(const QString &title, const QString &filter, const QString void VideoOpenLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; QString already = data->already(true); if (!already.isEmpty()) { @@ -372,7 +424,7 @@ void VideoOpenLink::onClick(Qt::MouseButton button) const { } void VideoSaveLink::doSave(VideoData *data, bool forceSavingAs) { - if (!data->user && !data->date) return; + if (!data->date) return; QString already = data->already(true); if (!already.isEmpty() && !forceSavingAs) { @@ -404,13 +456,13 @@ void VideoSaveLink::onClick(Qt::MouseButton button) const { void VideoCancelLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; data->cancel(); } -VideoData::VideoData(const VideoId &id, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) : -id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { +VideoData::VideoData(const VideoId &id, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) : +id(id), access(access), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { location = Local::readFileLocation(mediaKey(VideoFileLocation, dc, id)); } @@ -430,19 +482,19 @@ QString VideoData::already(bool check) { void AudioOpenLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; QString already = data->already(true); - bool play = audioPlayer(); + bool play = App::hoveredLinkItem() && audioPlayer(); if (!already.isEmpty() || (!data->data.isEmpty() && play)) { if (play) { - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing == data && playingState != AudioPlayerStopped) { - audioPlayer()->pauseresume(); + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewAudios); } else { - audioPlayer()->play(data); + audioPlayer()->play(AudioMsgId(data, App::hoveredLinkItem()->id)); if (App::main()) App::main()->audioMarkRead(data); } } else { @@ -454,7 +506,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { if (data->status != FileReady) return; - bool mp3 = (data->mime == QLatin1String("audio/mp3")); + bool mp3 = (data->mime == qstr("audio/mp3")); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), mp3 ? qsl(".mp3") : qsl(".ogg"), false); if (!filename.isEmpty()) { data->openOnSave = 1; @@ -464,7 +516,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { } void AudioSaveLink::doSave(AudioData *data, bool forceSavingAs) { - if (!data->user && !data->date) return; + if (!data->date) return; QString already = data->already(true); if (!already.isEmpty() && !forceSavingAs) { @@ -475,7 +527,7 @@ void AudioSaveLink::doSave(AudioData *data, bool forceSavingAs) { } else { QFileInfo alreadyInfo(already); QDir alreadyDir(already.isEmpty() ? QDir() : alreadyInfo.dir()); - bool mp3 = (data->mime == QLatin1String("audio/mp3")); + bool mp3 = (data->mime == qstr("audio/mp3")); QString name = already.isEmpty() ? (mp3 ? qsl(".mp3") : qsl(".ogg")) : alreadyInfo.fileName(); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), name, forceSavingAs, alreadyDir); if (!filename.isEmpty()) { @@ -497,13 +549,28 @@ void AudioSaveLink::onClick(Qt::MouseButton button) const { void AudioCancelLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; data->cancel(); } -AudioData::AudioData(const AudioId &id, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) : -id(id), access(access), user(user), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { +bool StickerData::setInstalled() const { + switch (set.type()) { + case mtpc_inputStickerSetID: { + return (cStickerSets().constFind(set.c_inputStickerSetID().vid.v) != cStickerSets().cend()); + } break; + case mtpc_inputStickerSetShortName: { + QString name = qs(set.c_inputStickerSetShortName().vshort_name).toLower(); + for (StickerSets::const_iterator i = cStickerSets().cbegin(), e = cStickerSets().cend(); i != e; ++i) { + if (i->shortName.toLower() == name) return true; + } + } break; + } + return false; +} + +AudioData::AudioData(const AudioId &id, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) : +id(id), access(access), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { location = Local::readFileLocation(mediaKey(AudioFileLocation, dc, id)); } @@ -521,13 +588,24 @@ QString AudioData::already(bool check) { return location.name; } -void DocumentOpenLink::onClick(Qt::MouseButton button) const { - DocumentData *data = document(); - if (!data->date || button != Qt::LeftButton) return; +void DocumentOpenLink::doOpen(DocumentData *data) { + if (!data->date) return; + bool play = data->song() && App::hoveredLinkItem() && audioPlayer(); QString already = data->already(true); - if (!already.isEmpty()) { - if (data->size < MediaViewImageSizeLimit) { + if (!already.isEmpty() || (!data->data.isEmpty() && play)) { + if (play) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + SongMsgId song(data, App::hoveredLinkItem()->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); + } + } else if (data->size < MediaViewImageSizeLimit) { QImageReader reader(already); if (reader.canRead()) { if (reader.supportsAnimation() && reader.imageCount() > 1 && App::hoveredLinkItem()) { @@ -570,6 +648,11 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { } } +void DocumentOpenLink::onClick(Qt::MouseButton button) const { + if (button != Qt::LeftButton) return; + doOpen(document()); +} + void DocumentSaveLink::doSave(DocumentData *data, bool forceSavingAs) { if (!data->date) return; @@ -622,7 +705,7 @@ void DocumentCancelLink::onClick(Qt::MouseButton button) const { } DocumentData::DocumentData(const DocumentId &id, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size) : -id(id), type(FileDocument), duration(0), access(access), date(date), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0), sticker(0) { +id(id), type(FileDocument), access(access), date(date), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0), _additional(0) { setattributes(attributes); location = Local::readFileLocation(mediaKey(DocumentFileLocation, dc, id)); } @@ -634,12 +717,17 @@ void DocumentData::setattributes(const QVector &attributes const MTPDdocumentAttributeImageSize &d(attributes[i].c_documentAttributeImageSize()); dimensions = QSize(d.vw.v, d.vh.v); } break; - case mtpc_documentAttributeAnimated: if (type == FileDocument || type == StickerDocument) type = AnimatedDocument; break; + case mtpc_documentAttributeAnimated: if (type == FileDocument || type == StickerDocument) { + type = AnimatedDocument; + delete _additional; + _additional = 0; + } break; case mtpc_documentAttributeSticker: { const MTPDdocumentAttributeSticker &d(attributes[i].c_documentAttributeSticker()); - if (type == FileDocument) type = StickerDocument; - if (type == StickerDocument && !sticker) sticker = new StickerData(); - if (sticker) { + if (type == FileDocument) { + type = StickerDocument; + StickerData *sticker = new StickerData(); + _additional = sticker; sticker->alt = qs(d.valt); sticker->set = d.vstickerset; } @@ -647,17 +735,28 @@ void DocumentData::setattributes(const QVector &attributes case mtpc_documentAttributeVideo: { const MTPDdocumentAttributeVideo &d(attributes[i].c_documentAttributeVideo()); type = VideoDocument; - duration = d.vduration.v; +// duration = d.vduration.v; dimensions = QSize(d.vw.v, d.vh.v); } break; case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &d(attributes[i].c_documentAttributeAudio()); - type = AudioDocument; - duration = d.vduration.v; + type = SongDocument; + SongData *song = new SongData(); + _additional = song; + song->duration = d.vduration.v; + song->title = qs(d.vtitle); + song->performer = qs(d.vperformer); } break; case mtpc_documentAttributeFilename: name = qs(attributes[i].c_documentAttributeFilename().vfile_name); break; } } + if (type == StickerDocument) { + if (dimensions.width() <= 0 || dimensions.height() <= 0 || dimensions.width() > StickerMaxSize || dimensions.height() > StickerMaxSize || size > StickerInMemory) { + type = FileDocument; + delete _additional; + _additional = 0; + } + } } void DocumentData::save(const QString &toFile) { @@ -691,7 +790,7 @@ void MessageLink::onClick(Qt::MouseButton button) const { if (current && current->history()->peer->id == peer()) { App::main()->pushReplyReturn(current); } - App::main()->showPeer(peer(), msgid()); + App::main()->showPeerHistory(peer(), msgid()); } } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index f25d2d328..bbc1b41b3 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -25,6 +25,9 @@ typedef uint64 DocumentId; typedef uint64 WebPageId; typedef int32 MsgId; +static const MsgId ShowAtTheEndMsgId = -0x40000000; +static const MsgId ShowAtUnreadMsgId = 0; + struct NotifySettings { NotifySettings() : mute(0), sound("default"), previews(true), events(1) { } @@ -56,8 +59,10 @@ style::color peerColor(int32 index); ImagePtr userDefPhoto(int32 index); ImagePtr chatDefPhoto(int32 index); -struct ChatData; +static const PhotoId UnknownPeerPhotoId = 0xFFFFFFFFFFFFFFFFULL; + struct UserData; +struct ChatData; struct PeerData { PeerData(const PeerId &id); virtual ~PeerData() { @@ -91,13 +96,13 @@ struct PeerData { bool loaded; bool chat; - uint64 access; MTPinputPeer input; - MTPinputUser inputUser; int32 colorIndex; style::color color; ImagePtr photo; + PhotoId photoId; + StorageImageLocation photoLoc; int32 nameVersion; @@ -106,6 +111,8 @@ struct PeerData { static const uint64 UserNoAccess = 0xFFFFFFFFFFFFFFFFULL; class PeerLink : public ITextLink { + TEXT_LINK_CLASS(PeerLink) + public: PeerLink(PeerData *peer) : _peer(peer) { } @@ -118,11 +125,35 @@ private: PeerData *_peer; }; -struct BotCommand { - BotCommand(const QString &command, const QString ¶ms, const QString &description) : command(command), params(params), description(description) { +class BotCommand { +public: + BotCommand(const QString &command, const QString &description) : command(command), _description(description) { + } - QString command, params, description; + QString command; + + bool setDescription(const QString &description) { + if (_description != description) { + _description = description; + _descriptionText = Text(); + return true; + } + return false; + } + + const Text &descriptionText() const { + if (_descriptionText.isEmpty() && !_description.isEmpty()) { + _descriptionText.setText(st::mentionFont, _description, _textNameOptions); + } + return _descriptionText; + } + +private: + QString _description; + mutable Text _descriptionText; + }; + struct BotInfo { BotInfo() : inited(false), readsAllHistory(false), cantJoinGroups(false), version(0), text(st::msgMinWidth) { } @@ -136,9 +167,15 @@ struct BotInfo { QString startToken, startGroupToken; }; +enum UserBlockedStatus { + UserBlockUnknown = 0, + UserIsBlocked, + UserIsNotBlocked, +}; + struct PhotoData; struct UserData : public PeerData { - UserData(const PeerId &id) : PeerData(id), photoId(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { + UserData(const PeerId &id) : PeerData(id), access(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), blocked(UserBlockUnknown), photosCount(-1), botInfo(0) { } void setPhoto(const MTPUserProfilePhoto &photo); void setName(const QString &first, const QString &last, const QString &phoneName, const QString &username); @@ -149,15 +186,19 @@ struct UserData : public PeerData { void madeAction(); // pseudo-online + uint64 access; + + MTPinputUser inputUser; + QString firstName; QString lastName; QString username; QString phone; Text nameText; - PhotoId photoId; TextLinkPtr lnk; int32 onlineTill; int32 contact; // -1 - not contact, cant add (self, empty, deleted, foreign), 0 - not contact, can add (request), 1 - contact + UserBlockedStatus blocked; typedef QList Photos; Photos photos; @@ -167,9 +208,9 @@ struct UserData : public PeerData { }; struct ChatData : public PeerData { - ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0), photoId(0) { + ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0) { } - void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = 0); + void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = UnknownPeerPhotoId); int32 count; int32 date; int32 version; @@ -185,8 +226,7 @@ struct ChatData : public PeerData { typedef QMap MarkupSenders; MarkupSenders markupSenders; int32 botStatus; // -1 - no bots, 0 - unknown, 1 - one bot, that sees all history, 2 - other - ImagePtr photoFull; - PhotoId photoId; +// ImagePtr photoFull; QString invitationUrl; // geo }; @@ -197,8 +237,8 @@ inline int32 newMessageFlags(PeerData *p) { typedef QMap PreparedPhotoThumbs; struct PhotoData { - PhotoData(const PhotoId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()) : - id(id), access(access), user(user), date(date), thumb(thumb), medium(medium), full(full), chat(0) { + PhotoData(const PhotoId &id, const uint64 &access = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()) : + id(id), access(access), date(date), thumb(thumb), medium(medium), full(full), chat(0) { } void forget() { thumb->forget(); @@ -221,7 +261,6 @@ struct PhotoData { } PhotoId id; uint64 access; - int32 user; int32 date; ImagePtr thumb, replyPreview; ImagePtr medium; @@ -234,6 +273,8 @@ struct PhotoData { }; class PhotoLink : public ITextLink { + TEXT_LINK_CLASS(PhotoLink) + public: PhotoLink(PhotoData *photo) : _photo(photo), _peer(0) { } @@ -259,7 +300,7 @@ enum FileStatus { }; struct VideoData { - VideoData(const VideoId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); + VideoData(const VideoId &id, const uint64 &access = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); void forget() { thumb->forget(); @@ -295,7 +336,6 @@ struct VideoData { VideoId id; uint64 access; - int32 user; int32 date; int32 duration; int32 w, h; @@ -313,6 +353,8 @@ struct VideoData { }; class VideoLink : public ITextLink { + TEXT_LINK_CLASS(VideoLink) + public: VideoLink(VideoData *video) : _video(video) { } @@ -325,6 +367,8 @@ private: }; class VideoSaveLink : public VideoLink { + TEXT_LINK_CLASS(VideoSaveLink) + public: VideoSaveLink(VideoData *video) : VideoLink(video) { } @@ -333,6 +377,8 @@ public: }; class VideoOpenLink : public VideoLink { + TEXT_LINK_CLASS(VideoOpenLink) + public: VideoOpenLink(VideoData *video) : VideoLink(video) { } @@ -340,6 +386,8 @@ public: }; class VideoCancelLink : public VideoLink { + TEXT_LINK_CLASS(VideoCancelLink) + public: VideoCancelLink(VideoData *video) : VideoLink(video) { } @@ -347,7 +395,7 @@ public: }; struct AudioData { - AudioData(const AudioId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); + AudioData(const AudioId &id, const uint64 &access = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); void forget() { } @@ -382,7 +430,6 @@ struct AudioData { AudioId id; uint64 access; - int32 user; int32 date; QString mime; int32 duration; @@ -399,7 +446,30 @@ struct AudioData { int32 md5[8]; }; +struct AudioMsgId { + AudioMsgId() : audio(0), msgId(0) { + } + AudioMsgId(AudioData *audio, MsgId msgId) : audio(audio), msgId(msgId) { + } + operator bool() const { + return audio; + } + AudioData *audio; + MsgId msgId; +}; +inline bool operator<(const AudioMsgId &a, const AudioMsgId &b) { + return quintptr(a.audio) < quintptr(b.audio) || (quintptr(a.audio) == quintptr(b.audio) && a.msgId < b.msgId); +} +inline bool operator==(const AudioMsgId &a, const AudioMsgId &b) { + return a.audio == b.audio && a.msgId == b.msgId; +} +inline bool operator!=(const AudioMsgId &a, const AudioMsgId &b) { + return !(a == b); +} + class AudioLink : public ITextLink { + TEXT_LINK_CLASS(AudioLink) + public: AudioLink(AudioData *audio) : _audio(audio) { } @@ -412,6 +482,8 @@ private: }; class AudioSaveLink : public AudioLink { + TEXT_LINK_CLASS(AudioSaveLink) + public: AudioSaveLink(AudioData *audio) : AudioLink(audio) { } @@ -420,6 +492,8 @@ public: }; class AudioOpenLink : public AudioLink { + TEXT_LINK_CLASS(AudioOpenLink) + public: AudioOpenLink(AudioData *audio) : AudioLink(audio) { } @@ -427,36 +501,51 @@ public: }; class AudioCancelLink : public AudioLink { + TEXT_LINK_CLASS(AudioCancelLink) + public: AudioCancelLink(AudioData *audio) : AudioLink(audio) { } void onClick(Qt::MouseButton button) const; }; -struct StickerData { +enum DocumentType { + FileDocument = 0, + VideoDocument = 1, + SongDocument = 2, + StickerDocument = 3, + AnimatedDocument = 4, +}; + +struct DocumentAdditionalData { +}; + +struct StickerData : public DocumentAdditionalData { StickerData() : set(MTP_inputStickerSetEmpty()) { } ImagePtr img; QString alt; MTPInputStickerSet set; + bool setInstalled() const; + StorageImageLocation loc; // doc thumb location }; -enum DocumentType { - FileDocument, - VideoDocument, - AudioDocument, - StickerDocument, - AnimatedDocument +struct SongData : public DocumentAdditionalData { + SongData() : duration(0) { + } + int32 duration; + QString title, performer; }; + struct DocumentData { DocumentData(const DocumentId &id, const uint64 &access = 0, int32 date = 0, const QVector &attributes = QVector(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); void setattributes(const QVector &attributes); void forget() { thumb->forget(); - if (sticker) sticker->img->forget(); + if (sticker()) sticker()->img->forget(); replyPreview->forget(); } @@ -486,15 +575,20 @@ struct DocumentData { loader = 0; } ~DocumentData() { - delete sticker; + delete _additional; } QString already(bool check = false); + StickerData *sticker() { + return (type == StickerDocument) ? static_cast(_additional) : 0; + } + SongData *song() { + return (type == SongDocument) ? static_cast(_additional) : 0; + } DocumentId id; DocumentType type; QSize dimensions; - int32 duration; uint64 access; int32 date; QString name, mime; @@ -510,12 +604,35 @@ struct DocumentData { FileLocation location; QByteArray data; - StickerData *sticker; + DocumentAdditionalData *_additional; int32 md5[8]; }; +struct SongMsgId { + SongMsgId() : song(0), msgId(0) { + } + SongMsgId(DocumentData *song, MsgId msgId) : song(song), msgId(msgId) { + } + operator bool() const { + return song; + } + DocumentData *song; + MsgId msgId; +}; +inline bool operator<(const SongMsgId &a, const SongMsgId &b) { + return quintptr(a.song) < quintptr(b.song) || (quintptr(a.song) == quintptr(b.song) && a.msgId < b.msgId); +} +inline bool operator==(const SongMsgId &a, const SongMsgId &b) { + return a.song == b.song && a.msgId == b.msgId; +} +inline bool operator!=(const SongMsgId &a, const SongMsgId &b) { + return !(a == b); +} + class DocumentLink : public ITextLink { + TEXT_LINK_CLASS(DocumentLink) + public: DocumentLink(DocumentData *document) : _document(document) { } @@ -528,6 +645,8 @@ private: }; class DocumentSaveLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentSaveLink) + public: DocumentSaveLink(DocumentData *document) : DocumentLink(document) { } @@ -536,13 +655,18 @@ public: }; class DocumentOpenLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentOpenLink) + public: DocumentOpenLink(DocumentData *document) : DocumentLink(document) { } + static void doOpen(DocumentData *document); void onClick(Qt::MouseButton button) const; }; class DocumentCancelLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentCancelLink) + public: DocumentCancelLink(DocumentData *document) : DocumentLink(document) { } @@ -556,14 +680,14 @@ enum WebPageType { WebPageArticle }; inline WebPageType toWebPageType(const QString &type) { - if (type == QLatin1String("photo")) return WebPagePhoto; - if (type == QLatin1String("video")) return WebPageVideo; - if (type == QLatin1String("profile")) return WebPageProfile; + if (type == qstr("photo")) return WebPagePhoto; + if (type == qstr("video")) return WebPageVideo; + if (type == qstr("profile")) return WebPageProfile; return WebPageArticle; } struct WebPageData { - WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = 0); + WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -1); void forget() { if (photo) photo->forget(); diff --git a/Telegram/SourceFiles/telegram.qrc b/Telegram/SourceFiles/telegram.qrc index 3418022e0..6a0af5648 100644 --- a/Telegram/SourceFiles/telegram.qrc +++ b/Telegram/SourceFiles/telegram.qrc @@ -1,42 +1,42 @@ - - art/fonts/OpenSans-Regular.ttf - art/fonts/OpenSans-Bold.ttf - art/fonts/OpenSans-Semibold.ttf - art/newmsg.wav - art/bg.jpg - art/bg0.png - art/sprite.png - art/sprite_125x.png - art/sprite_150x.png - art/sprite_200x.png - art/blank.gif - art/icon256.png - art/iconbig256.png - - - art/chatcolor1.png - art/chatcolor2.png - art/chatcolor3.png - art/chatcolor4.png - art/usercolor1.png - art/usercolor2.png - art/usercolor3.png - art/usercolor4.png - art/usercolor5.png - art/usercolor6.png - art/usercolor7.png - art/usercolor8.png - - - qmime/freedesktop.org.xml - - - langs/lang_it.strings - langs/lang_es.strings - langs/lang_de.strings - langs/lang_nl.strings - langs/lang_pt_BR.strings - langs/lang_ko.strings - + + art/fonts/OpenSans-Regular.ttf + art/fonts/OpenSans-Bold.ttf + art/fonts/OpenSans-Semibold.ttf + art/newmsg.wav + art/bg.jpg + art/bg0.png + art/sprite.png + art/sprite_125x.png + art/sprite_150x.png + art/sprite_200x.png + art/blank.gif + art/icon256.png + art/iconbig256.png + + + art/chatcolor1.png + art/chatcolor2.png + art/chatcolor3.png + art/chatcolor4.png + art/usercolor1.png + art/usercolor2.png + art/usercolor3.png + art/usercolor4.png + art/usercolor5.png + art/usercolor6.png + art/usercolor7.png + art/usercolor8.png + + + qmime/freedesktop.org.xml + + + langs/lang_it.strings + langs/lang_es.strings + langs/lang_de.strings + langs/lang_nl.strings + langs/lang_pt_BR.strings + langs/lang_ko.strings + diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 1fed10b7b..976f40085 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -199,6 +199,7 @@ private: }; #define qsl(s) QStringLiteral(s) +#define qstr(s) QLatin1String(s, sizeof(s) - 1) static const QRegularExpression::PatternOptions reMultiline(QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption); @@ -231,53 +232,56 @@ QString translitRusEng(const QString &rus); QString rusKeyboardLayoutSwitch(const QString &from); enum DataBlockId { - dbiKey = 0x00, - dbiUser = 0x01, - dbiDcOptionOld = 0x02, - dbiMaxGroupCount = 0x03, - dbiMutePeer = 0x04, - dbiSendKey = 0x05, - dbiAutoStart = 0x06, - dbiStartMinimized = 0x07, - dbiSoundNotify = 0x08, - dbiWorkMode = 0x09, - dbiSeenTrayTooltip = 0x0a, - dbiDesktopNotify = 0x0b, - dbiAutoUpdate = 0x0c, - dbiLastUpdateCheck = 0x0d, - dbiWindowPosition = 0x0e, - dbiConnectionType = 0x0f, -// 16 reserved - dbiDefaultAttach = 0x11, - dbiCatsAndDogs = 0x12, - dbiReplaceEmojis = 0x13, - dbiAskDownloadPath = 0x14, - dbiDownloadPath = 0x15, - dbiScale = 0x16, - dbiEmojiTab = 0x17, - dbiRecentEmojisOld = 0x18, - dbiLoggedPhoneNumber = 0x19, - dbiMutedPeers = 0x1a, -// 27 reserved - dbiNotifyView = 0x1c, - dbiSendToMenu = 0x1d, - dbiCompressPastedImage = 0x1e, - dbiLang = 0x1f, - dbiLangFile = 0x20, - dbiTileBackground = 0x21, - dbiAutoLock = 0x22, - dbiDialogLastPath = 0x23, - dbiRecentEmojis = 0x24, - dbiEmojiVariants = 0x25, - dbiRecentStickers = 0x26, - dbiDcOption = 0x27, + dbiKey = 0x00, + dbiUser = 0x01, + dbiDcOptionOld = 0x02, + dbiMaxGroupCount = 0x03, + dbiMutePeer = 0x04, + dbiSendKey = 0x05, + dbiAutoStart = 0x06, + dbiStartMinimized = 0x07, + dbiSoundNotify = 0x08, + dbiWorkMode = 0x09, + dbiSeenTrayTooltip = 0x0a, + dbiDesktopNotify = 0x0b, + dbiAutoUpdate = 0x0c, + dbiLastUpdateCheck = 0x0d, + dbiWindowPosition = 0x0e, + dbiConnectionType = 0x0f, +// 0x10 reserved + dbiDefaultAttach = 0x11, + dbiCatsAndDogs = 0x12, + dbiReplaceEmojis = 0x13, + dbiAskDownloadPath = 0x14, + dbiDownloadPath = 0x15, + dbiScale = 0x16, + dbiEmojiTab = 0x17, + dbiRecentEmojisOld = 0x18, + dbiLoggedPhoneNumber = 0x19, + dbiMutedPeers = 0x1a, +// 0x1b reserved + dbiNotifyView = 0x1c, + dbiSendToMenu = 0x1d, + dbiCompressPastedImage = 0x1e, + dbiLang = 0x1f, + dbiLangFile = 0x20, + dbiTileBackground = 0x21, + dbiAutoLock = 0x22, + dbiDialogLastPath = 0x23, + dbiRecentEmojis = 0x24, + dbiEmojiVariants = 0x25, + dbiRecentStickers = 0x26, + dbiDcOption = 0x27, + dbiTryIPv6 = 0x28, + dbiSongVolume = 0x29, + dbiWindowsNotifications = 0x30, - dbiEncryptedWithSalt = 333, - dbiEncrypted = 444, + dbiEncryptedWithSalt = 333, + dbiEncrypted = 444, // 500-600 reserved - dbiVersion = 666, + dbiVersion = 666, }; enum DBISendKey { diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index bb218b9c9..8f18cfda6 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -287,7 +287,7 @@ void NotifyWindow::mousePressEvent(QMouseEvent *e) { App::wnd()->notifyClear(); } else { App::wnd()->hideSettings(); - App::main()->showPeer(peer, (history->peer->chat && item && item->notifyByFrom() && item->id > 0) ? item->id : 0, false, true); + App::main()->showPeerHistory(peer, (history->peer->chat && item && item->notifyByFrom() && item->id > 0) ? item->id : ShowAtUnreadMsgId); } e->ignore(); } @@ -429,28 +429,27 @@ void Window::init() { title = new TitleWidget(this); - psInitSize(); - psUpdateWorkmode(); + psInitSize(); } void Window::firstShow() { #ifdef Q_OS_WIN - trayIconMenu = new ContextMenu(this); + trayIconMenu = new ContextMenu(this); #else trayIconMenu = new QMenu(this); trayIconMenu->setFont(QFont("Tahoma")); #endif - if (cPlatform() == dbipWindows || cPlatform() == dbipMac) { - trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); - } else { - trayIconMenu->addAction(lang(lng_open_from_tray), this, SLOT(showFromTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); - } + if (cPlatform() == dbipWindows || cPlatform() == dbipMac) { + trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); + } else { + trayIconMenu->addAction(lang(lng_open_from_tray), this, SLOT(showFromTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); + } + psUpdateWorkmode(); psFirstShow(); - updateTrayMenu(); } @@ -1426,7 +1425,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (j == notifyWhenMaps.end()) { history->clearNotifications(); i = notifyWaiters.erase(i); - if (notifyHistory) notifyWaiter = notifyWaiters.find(notifyHistory); + notifyWaiter = notifyHistory ? notifyWaiters.find(notifyHistory) : notifyWaiters.end(); continue; } do { @@ -1442,7 +1441,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (!history->currentNotification()) { notifyWhenMaps.remove(history); i = notifyWaiters.erase(i); - if (notifyHistory) notifyWaiter = notifyWaiters.find(notifyHistory); + notifyWaiter = notifyHistory ? notifyWaiters.find(notifyHistory) : notifyWaiters.end(); continue; } uint64 when = i.value().when; @@ -1468,8 +1467,8 @@ void Window::notifyShowNext(NotifyWindow *remove) { uint64 ms = getms(true); History *history = notifyItem->history(); NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - - if (j == notifyWhenMaps.end()) { + bool notifyWhenFound = (j != notifyWhenMaps.cend()); + if (!notifyWhenFound) { history->clearNotifications(); } else { HistoryItem *nextNotify = 0; @@ -1517,7 +1516,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (!history->hasNotification()) { if (notifyWaiter != notifyWaiters.cend()) notifyWaiters.erase(notifyWaiter); - if (j != notifyWhenMaps.cend()) notifyWhenMaps.erase(j); + if (notifyWhenFound) notifyWhenMaps.erase(j); continue; } } @@ -1712,10 +1711,10 @@ void Window::sendPaths() { } } -void Window::mediaOverviewUpdated(PeerData *peer) { - if (main) main->mediaOverviewUpdated(peer); +void Window::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (main) main->mediaOverviewUpdated(peer, type); if (!_mediaView || _mediaView->isHidden()) return; - _mediaView->mediaOverviewUpdated(peer); + _mediaView->mediaOverviewUpdated(peer, type); } void Window::documentUpdated(DocumentData *doc) { diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 3835f573c..321cbae27 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -226,7 +226,7 @@ public: void sendPaths(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index d05afdb15..37e739bf7 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.28 + 0.8.51 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index 8eabffcdc..13b036d28 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -32,17 +32,22 @@ linux { style_auto_cpp.target = ./GeneratedFiles/style_auto.cpp style_auto_cpp.depends = FORCE style_auto_cpp.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_auto_cpp.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_auto_cpp.depends = ./../../Telegram/Resources/style.txt style_auto_h.target = ./GeneratedFiles/style_auto.h style_auto_h.depends = FORCE style_auto_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_auto_h.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_auto_h.depends = ./../../Telegram/Resources/style.txt style_classes_h.target = ./GeneratedFiles/style_classes.h style_classes_h.depends = FORCE style_classes_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_classes_h.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_classes_h.depends = ./../../Telegram/Resources/style_classes.txt + +numbers_cpp.target = ./GeneratedFiles/numbers.cpp +numbers_cpp.depends = FORCE +numbers_cpp.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ +numbers_cpp.depends = ./../../Telegram/Resources/numbers.txt lang_auto_cpp.target = ./GeneratedFiles/lang_auto.cpp lang_auto_cpp.depends = FORCE @@ -54,13 +59,13 @@ lang_auto_h.depends = FORCE lang_auto_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugLang/MetaLang -lang_in ./../../Telegram/Resources/lang.strings -lang_out ./../../Telegram/GeneratedFiles/lang_auto lang_auto_h.depends = ./../../Telegram/Resources/lang.strings -hook.depends = style_auto_cpp style_auto_h style_classes_h lang_auto_cpp lang_auto_h +hook.depends = style_auto_cpp style_auto_h style_classes_h numbers_cpp lang_auto_cpp lang_auto_h CONFIG(debug,debug|release):hook.target = Makefile.Debug CONFIG(release,debug|release):hook.target = Makefile.Release -QMAKE_EXTRA_TARGETS += style_auto_cpp style_auto_h style_classes_h lang_auto_cpp lang_auto_h hook +QMAKE_EXTRA_TARGETS += style_auto_cpp style_auto_h style_classes_h numbers_cpp lang_auto_cpp lang_auto_h hook -PRE_TARGETDEPS += ./GeneratedFiles/style_auto.cpp ./GeneratedFiles/style_auto.h ./GeneratedFiles/style_classes.h ./GeneratedFiles/lang_auto.h ./GeneratedFiles/lang_auto.cpp +PRE_TARGETDEPS += ./GeneratedFiles/style_auto.cpp ./GeneratedFiles/style_auto.h ./GeneratedFiles/style_classes.h ./GeneratedFiles/numbers.cpp ./GeneratedFiles/lang_auto.h ./GeneratedFiles/lang_auto.cpp unix { linux-g++:QMAKE_TARGET.arch = $$QMAKE_HOST.arch @@ -96,6 +101,7 @@ SOURCES += \ ./SourceFiles/overviewwidget.cpp \ ./SourceFiles/passcodewidget.cpp \ ./SourceFiles/profilewidget.cpp \ + ./SourceFiles/playerwidget.cpp \ ./SourceFiles/localimageloader.cpp \ ./SourceFiles/localstorage.cpp \ ./SourceFiles/logs.cpp \ @@ -137,6 +143,7 @@ SOURCES += \ ./SourceFiles/gui/switcher.cpp \ ./GeneratedFiles/lang_auto.cpp \ ./GeneratedFiles/style_auto.cpp \ + ./GeneratedFiles/numbers.cpp \ ./SourceFiles/boxes/aboutbox.cpp \ ./SourceFiles/boxes/abstractbox.cpp \ ./SourceFiles/boxes/addcontactbox.cpp \ @@ -179,9 +186,11 @@ HEADERS += \ ./SourceFiles/langloaderplain.h \ ./SourceFiles/layerwidget.h \ ./SourceFiles/mediaview.h \ + ./SourceFiles/numbers.h \ ./SourceFiles/overviewwidget.h \ ./SourceFiles/passcodewidget.h \ ./SourceFiles/profilewidget.h \ + ./SourceFiles/playerwidget.h \ ./SourceFiles/localimageloader.h \ ./SourceFiles/localstorage.h \ ./SourceFiles/logs.h \ @@ -280,8 +289,8 @@ CONFIG(release, debug|release) { QMAKE_LFLAGS_RELEASE += -Ofast -flto } -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ /usr/local/include/opus\ ./SourceFiles\ @@ -303,7 +312,10 @@ INCLUDEPATH += "/usr/include/dee-1.0" INCLUDEPATH += "/usr/include/libdbusmenu-glib-0.4" LIBS += -lcrypto -lssl -lz -ldl -llzma -lexif -lopenal -lavformat -lavcodec -lswresample -lavutil -lopus -LIBS += ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.a +LIBS += ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.a \ + ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libibusplatforminputcontextplugin.a \ + ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.a +LIBS += /usr/local/lib/libxkbcommon.a RESOURCES += \ ./SourceFiles/telegram.qrc \ diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 061f78a850c91b9922b0ab2540105cfb957a68fe..c9f1d53aa3a65d3f21592d8171b3064441d1c2e1 100644 GIT binary patch delta 61 zcmZ3Yy+nIM0WY&DgW=?2UPBPQc{y)C6FZQ>pvPb^d82^t<}3j&MkE38$x8%<7B3NG F0RZOr4@v+4 delta 61 zcmZ3Yy+nIM0WY%=gT>@xUPBPQc{y)C6FZQ>pvPb^d82^t<}3j&MkE38$x8%<7B3NG F0RZVE4_W{K diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index edce240a6..7c366d53c 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -54,19 +54,22 @@ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSDK_IncludePath); - AL_LIBTYPE_STATIC;UNICODE;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;UNICODE;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase false Use @@ -80,7 +83,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Debug;.\..\..\Libraries\libexif-0.6.20\win32\Debug;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Debug;.\..\..\Libraries\openal-soft\build\Debug;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatDebug;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) true LIBCMT @@ -92,8 +95,8 @@ - AL_LIBTYPE_STATIC;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\libogg-1.3.2\include;.\..\..\Libraries\opus\include;.\..\..\Libraries\opusfile\include;.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++;.\..\..\Libraries\mpg123-1.22.1\src\libmpg123;.\..\..\Libraries\faad2-2.7\include;.\..\..\Libraries\faad2-2.7\common\mp4ff;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\libogg-1.3.2\include;.\..\..\Libraries\opus\include;.\..\..\Libraries\opusfile\include;.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++;.\..\..\Libraries\mpg123-1.22.1\src\libmpg123;.\..\..\Libraries\faad2-2.7\include;.\..\..\Libraries\faad2-2.7\common\mp4ff;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -108,7 +111,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib $(IntDir)$(TargetName).pgd @@ -119,8 +122,8 @@ - AL_LIBTYPE_STATIC;CUSTOM_API_ID;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;CUSTOM_API_ID;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -130,12 +133,13 @@ AnySuitable true Speed + /Zm110 %(AdditionalOptions) Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib @@ -348,6 +352,10 @@ true true + + true + true + true true @@ -610,6 +618,10 @@ true true + + true + true + true true @@ -673,6 +685,7 @@ true + @@ -897,6 +910,10 @@ true true + + true + true + true true @@ -1031,6 +1048,7 @@ + true @@ -1061,26 +1079,26 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" Moc%27ing window.h... Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1091,6 +1109,11 @@ .\GeneratedFiles\style_auto.h + .\GeneratedFiles\style_auto.cpp + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" + + + .\GeneratedFiles\numbers.cpp "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" @@ -1101,13 +1124,13 @@ Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" Moc%27ing application.h... Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1120,27 +1143,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" Moc%27ing aboutbox.h... Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1148,13 +1171,13 @@ Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" Moc%27ing addcontactbox.h... Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1162,13 +1185,13 @@ Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" Moc%27ing confirmbox.h... Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1176,13 +1199,13 @@ Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" Moc%27ing connectionbox.h... Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1190,13 +1213,13 @@ Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" Moc%27ing contactsbox.h... Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1204,13 +1227,13 @@ Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" Moc%27ing photocropbox.h... Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1218,13 +1241,13 @@ Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" Moc%27ing photosendbox.h... Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1232,13 +1255,13 @@ Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" Moc%27ing emojibox.h... Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1246,13 +1269,13 @@ Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" Moc%27ing downloadpathbox.h... Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1261,153 +1284,153 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" Moc%27ing animation.h... Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1415,13 +1438,13 @@ Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" Moc%27ing button.h... Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1429,13 +1452,13 @@ Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" Moc%27ing flatbutton.h... Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1443,13 +1466,13 @@ Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" Moc%27ing flatinput.h... Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1457,13 +1480,13 @@ Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" Moc%27ing phoneinput.h... Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1471,13 +1494,13 @@ Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" Moc%27ing countryinput.h... Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1486,13 +1509,13 @@ Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" Moc%27ing scrollarea.h... Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1500,13 +1523,13 @@ Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" Moc%27ing dialogswidget.h... Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1514,13 +1537,13 @@ Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" Moc%27ing flattextarea.h... Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1528,13 +1551,13 @@ Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" Moc%27ing fileuploader.h... Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1542,13 +1565,13 @@ Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" Moc%27ing dropdown.h... Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1558,27 +1581,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" Moc%27ing flatcheckbox.h... Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1607,13 +1630,13 @@ Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" Moc%27ing flatlabel.h... Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1621,13 +1644,13 @@ Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" Moc%27ing twidget.h... Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1637,41 +1660,41 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" Moc%27ing historywidget.h... Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1679,13 +1702,13 @@ Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" Moc%27ing intro.h... Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1693,13 +1716,13 @@ Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" Moc%27ing introcode.h... Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1707,13 +1730,13 @@ Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" Moc%27ing introphone.h... Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1721,13 +1744,13 @@ Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" Moc%27ing introsignup.h... Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1736,27 +1759,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" Moc%27ing layerwidget.h... Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1764,13 +1787,13 @@ Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" Moc%27ing localimageloader.h... Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1781,27 +1804,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" Moc%27ing mtpConnection.h... Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1809,13 +1832,13 @@ Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" Moc%27ing mainwidget.h... Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1823,13 +1846,13 @@ Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" Moc%27ing mtp.h... Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1838,27 +1861,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" Moc%27ing mtpFileLoader.h... Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1868,13 +1891,13 @@ Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" Moc%27ing mtpDC.h... Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1884,13 +1907,13 @@ Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" Moc%27ing mtpSession.h... Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1898,13 +1921,13 @@ Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" Moc%27ing settingswidget.h... Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1912,13 +1935,13 @@ Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" Moc%27ing profilewidget.h... Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1926,13 +1949,13 @@ Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" Moc%27ing pspecific_wnd.h... Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1942,44 +1965,59 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" + + $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" true true true @@ -1988,15 +2026,15 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" true true true @@ -2012,13 +2050,13 @@ Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" Moc%27ing sysbuttons.h... Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -2026,13 +2064,13 @@ Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" Moc%27ing title.h... Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index 27c4e9f0f..547bf8990 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -891,6 +891,21 @@ Generated Files\Release + + Source Files + + + Generated Files\Deploy + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files + @@ -977,6 +992,9 @@ Source Files + + Source Files + @@ -1183,6 +1201,10 @@ Source Files + + Source Files + + diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 49c556759..8e0a76647 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -64,6 +64,8 @@ 07AF95F51AFD03B90060B057 /* qrc_telegram_mac.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07AF95F31AFD03B90060B057 /* qrc_telegram_mac.cpp */; }; 07AF95F91AFD03C80060B057 /* telegram_emojis.qrc in Resources */ = {isa = PBXBuildFile; fileRef = 07AF95F71AFD03C80060B057 /* telegram_emojis.qrc */; }; 07AF95FA1AFD03C80060B057 /* telegram_mac.qrc in Resources */ = {isa = PBXBuildFile; fileRef = 07AF95F81AFD03C80060B057 /* telegram_mac.qrc */; }; + 07B604321B46A0EC00CA29FE /* playerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07B604301B46A0EC00CA29FE /* playerwidget.cpp */; }; + 07B604351B46A20900CA29FE /* moc_playerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */; }; 07BE850F1A2093C9008ACB9F /* localstorage.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07BE850D1A2093C9008ACB9F /* localstorage.cpp */; }; 07BE85121A20961F008ACB9F /* moc_localstorage.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07BE85111A20961F008ACB9F /* moc_localstorage.cpp */; }; 07C4753B1967DF1C00CAAFE9 /* switcher.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07C475391967DF1C00CAAFE9 /* switcher.cpp */; }; @@ -73,6 +75,7 @@ 07CAACD81AEA64F00058E508 /* AudioUnit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07CAACD71AEA64F00058E508 /* AudioUnit.framework */; }; 07D7034B19B8755A00C4EED2 /* audio.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D7034919B8755A00C4EED2 /* audio.cpp */; }; 07D703BB19B88FB900C4EED2 /* moc_audio.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */; }; + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 07D7EABA1A597DD000838BA2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07D7EABC1A597DD000838BA2 /* Localizable.strings */; }; 07D8509419F5C97E00623D75 /* mtpCoreTypes.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D8509219F5C97E00623D75 /* mtpCoreTypes.cpp */; }; 07D8509519F5C97E00623D75 /* mtpScheme.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D8509319F5C97E00623D75 /* mtpScheme.cpp */; }; @@ -82,6 +85,7 @@ 07DB674D1AD07C9200A51329 /* abstractbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB67491AD07C9200A51329 /* abstractbox.cpp */; }; 07DB674E1AD07C9200A51329 /* sessionsbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB674B1AD07C9200A51329 /* sessionsbox.cpp */; }; 07DB67511AD07CB800A51329 /* intropwdcheck.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB674F1AD07CB800A51329 /* intropwdcheck.cpp */; }; + 07DC42A01B5EA15300B6B888 /* numbers.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DC429F1B5EA15300B6B888 /* numbers.cpp */; }; 07DE92A01AA4923300A18F6F /* passcodewidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */; }; 07DE92A71AA4925B00A18F6F /* autolockbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE92A31AA4925B00A18F6F /* autolockbox.cpp */; }; 07DE92A81AA4925B00A18F6F /* passcodebox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE92A51AA4925B00A18F6F /* passcodebox.cpp */; }; @@ -256,9 +260,9 @@ /* Begin PBXFileReference section */ 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpFileLoader.cpp; path = SourceFiles/mtproto/mtpFileLoader.cpp; sourceTree = ""; }; 032C1BF3E727B450A4851D48 /* emojibox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emojibox.h; path = SourceFiles/boxes/emojibox.h; sourceTree = ""; }; - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; 07080BCB1A4357F300741A51 /* lang.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang.strings; path = Resources/lang.strings; sourceTree = SOURCE_ROOT; }; @@ -286,7 +290,7 @@ 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_abstractbox.cpp; path = GeneratedFiles/Debug/moc_abstractbox.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDB1AD12A80004D738A /* moc_intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intropwdcheck.cpp; path = GeneratedFiles/Debug/moc_intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDC1AD12A80004D738A /* moc_sessionsbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sessionsbox.cpp; path = GeneratedFiles/Debug/moc_sessionsbox.cpp; sourceTree = SOURCE_ROOT; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 075F99A91A45EEF200915C72 /* lang_es.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang_es.strings; path = SourceFiles/langs/lang_es.strings; sourceTree = SOURCE_ROOT; }; 0764D5581ABAD6F900FBFEED /* apiwrap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = apiwrap.cpp; path = SourceFiles/apiwrap.cpp; sourceTree = SOURCE_ROOT; }; 0764D5591ABAD6F900FBFEED /* apiwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apiwrap.h; path = SourceFiles/apiwrap.h; sourceTree = SOURCE_ROOT; }; @@ -305,6 +309,9 @@ 07AF95F31AFD03B90060B057 /* qrc_telegram_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram_mac.cpp; path = GeneratedFiles/qrc_telegram_mac.cpp; sourceTree = SOURCE_ROOT; }; 07AF95F71AFD03C80060B057 /* telegram_emojis.qrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = telegram_emojis.qrc; path = SourceFiles/telegram_emojis.qrc; sourceTree = SOURCE_ROOT; }; 07AF95F81AFD03C80060B057 /* telegram_mac.qrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = telegram_mac.qrc; path = SourceFiles/telegram_mac.qrc; sourceTree = SOURCE_ROOT; }; + 07B604301B46A0EC00CA29FE /* playerwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playerwidget.cpp; path = SourceFiles/playerwidget.cpp; sourceTree = SOURCE_ROOT; }; + 07B604311B46A0EC00CA29FE /* playerwidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playerwidget.h; path = SourceFiles/playerwidget.h; sourceTree = SOURCE_ROOT; }; + 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_playerwidget.cpp; path = GeneratedFiles/Debug/moc_playerwidget.cpp; sourceTree = SOURCE_ROOT; }; 07BE850D1A2093C9008ACB9F /* localstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = localstorage.cpp; path = SourceFiles/localstorage.cpp; sourceTree = SOURCE_ROOT; }; 07BE850E1A2093C9008ACB9F /* localstorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = localstorage.h; path = SourceFiles/localstorage.h; sourceTree = SOURCE_ROOT; }; 07BE85111A20961F008ACB9F /* moc_localstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localstorage.cpp; path = GeneratedFiles/Debug/moc_localstorage.cpp; sourceTree = SOURCE_ROOT; }; @@ -322,6 +329,7 @@ 07D7034919B8755A00C4EED2 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio.cpp; path = SourceFiles/audio.cpp; sourceTree = SOURCE_ROOT; }; 07D7034A19B8755A00C4EED2 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio.h; path = SourceFiles/audio.h; sourceTree = SOURCE_ROOT; }; 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_audio.cpp; path = GeneratedFiles/Debug/moc_audio.cpp; sourceTree = SOURCE_ROOT; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 07D7EABB1A597DD000838BA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABD1A597DD200838BA2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABE1A597DD300838BA2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; @@ -341,6 +349,8 @@ 07DB674C1AD07C9200A51329 /* sessionsbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sessionsbox.h; path = SourceFiles/boxes/sessionsbox.h; sourceTree = SOURCE_ROOT; }; 07DB674F1AD07CB800A51329 /* intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = intropwdcheck.cpp; path = SourceFiles/intro/intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 07DB67501AD07CB800A51329 /* intropwdcheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = intropwdcheck.h; path = SourceFiles/intro/intropwdcheck.h; sourceTree = SOURCE_ROOT; }; + 07DC429D1B5EA0E600B6B888 /* numbers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = numbers.h; path = SourceFiles/numbers.h; sourceTree = SOURCE_ROOT; }; + 07DC429F1B5EA15300B6B888 /* numbers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = numbers.cpp; path = GeneratedFiles/numbers.cpp; sourceTree = SOURCE_ROOT; }; 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = passcodewidget.cpp; path = SourceFiles/passcodewidget.cpp; sourceTree = SOURCE_ROOT; }; 07DE92A21AA4924400A18F6F /* passcodewidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = passcodewidget.h; path = SourceFiles/passcodewidget.h; sourceTree = SOURCE_ROOT; }; 07DE92A31AA4925B00A18F6F /* autolockbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = autolockbox.cpp; path = SourceFiles/boxes/autolockbox.cpp; sourceTree = SOURCE_ROOT; }; @@ -353,7 +363,7 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; 0CAA815FFFEDCD84808E11F5 /* logs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = logs.h; path = SourceFiles/logs.h; sourceTree = ""; }; @@ -362,92 +372,89 @@ 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpSession.cpp; path = SourceFiles/mtproto/mtpSession.cpp; sourceTree = ""; }; 0FC38EE7F29EF895925A2C49 /* style_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_core.h; path = SourceFiles/gui/style_core.h; sourceTree = ""; }; 1080B6D395843B8F76A2E45E /* moc_title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_title.cpp; path = GeneratedFiles/Debug/moc_title.cpp; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.4.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = contactsbox.h; path = SourceFiles/boxes/contactsbox.h; sourceTree = ""; }; 1292B92B4848460640F6A391 /* telegram.qrc */ = {isa = PBXFileReference; lastKnownFileType = text; name = telegram.qrc; path = SourceFiles/telegram.qrc; sourceTree = ""; }; 135FD3715BFDC50AD7B00E04 /* text.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cpp; path = SourceFiles/gui/text.cpp; sourceTree = ""; }; 143405635D04698F421A12EA /* aboutbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = aboutbox.h; path = SourceFiles/boxes/aboutbox.h; sourceTree = ""; }; 14437BFDCD58FF1742EF1B35 /* photocropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photocropbox.h; path = SourceFiles/boxes/photocropbox.h; sourceTree = ""; }; 152B8D1BCECEB7B0C77E073C /* intro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = intro.h; path = SourceFiles/intro/intro.h; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 19618554524B8D928F13940D /* emoji_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emoji_config.h; path = SourceFiles/gui/emoji_config.h; sourceTree = ""; }; 1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = ""; }; 1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introphone.cpp; path = GeneratedFiles/Debug/moc_introphone.cpp; sourceTree = ""; }; - 1C21DCD421D7B7E0462F1121 /* qqt7engine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qqt7engine; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqqt7engine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localimageloader.cpp; path = GeneratedFiles/Debug/moc_localimageloader.cpp; sourceTree = ""; }; 1DC02F674A7192FF8BE391A7 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = SourceFiles/types.h; sourceTree = ""; }; 1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = ""; }; 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_layerwidget.cpp; path = GeneratedFiles/Debug/moc_layerwidget.cpp; sourceTree = ""; }; 205259EEEE2BADA5E64741E3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 206B4F5CBD5354BCE19FF32F /* countries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countries.h; path = SourceFiles/countries.h; sourceTree = ""; }; 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatlabel.cpp; path = GeneratedFiles/Debug/moc_flatlabel.cpp; sourceTree = ""; }; 21F907AB8D19BD779147A085 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = /System/Library/Frameworks/AVFoundation.framework; sourceTree = ""; }; 220B97F8F62C720E6059A64B /* profilewidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profilewidget.h; path = SourceFiles/profilewidget.h; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; 24F7D3E789E91B10E422C116 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.h; path = SourceFiles/config.h; sourceTree = ""; }; 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = langloaderplain.h; path = SourceFiles/langloaderplain.h; sourceTree = ""; }; 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_contactsbox.cpp; path = GeneratedFiles/Debug/moc_contactsbox.cpp; sourceTree = ""; }; 26B83A58EE268598E703875D /* history.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = SourceFiles/history.cpp; sourceTree = ""; }; 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpCoreTypes.h; path = SourceFiles/mtproto/mtpCoreTypes.h; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = title.cpp; path = SourceFiles/title.cpp; sourceTree = ""; }; 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpDC.cpp; path = GeneratedFiles/Debug/moc_mtpDC.cpp; sourceTree = ""; }; 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_historywidget.cpp; path = GeneratedFiles/Debug/moc_historywidget.cpp; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; 2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = ""; }; 301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpDC.cpp; path = SourceFiles/mtproto/mtpDC.cpp; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; 34E1DF19219C52D7DB20224A /* flatlabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatlabel.h; path = SourceFiles/gui/flatlabel.h; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; 36BDA5D01BED543A92886669 /* Telegram.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Telegram.pro; sourceTree = ""; }; 36F718DC72345A84987DB0F6 /* flatbutton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatbutton.h; path = SourceFiles/gui/flatbutton.h; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 39C1ADF085370E033CB7E7E1 /* style_classes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_classes.h; path = GeneratedFiles/style_classes.h; sourceTree = ""; }; 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwidget.cpp; path = GeneratedFiles/Debug/moc_mainwidget.cpp; sourceTree = ""; }; 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dialogswidget.cpp; path = GeneratedFiles/Debug/moc_dialogswidget.cpp; sourceTree = ""; }; - 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.4.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.5.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sysbuttons.h; path = SourceFiles/sysbuttons.h; sourceTree = ""; }; 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_fileuploader.cpp; path = GeneratedFiles/Debug/moc_fileuploader.cpp; sourceTree = ""; }; 3E329D4547CC23585307FA32 /* countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countryinput.cpp; path = SourceFiles/gui/countryinput.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; 420A06A32B66D250142B4B6D /* style_core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_core.cpp; path = SourceFiles/gui/style_core.cpp; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; 4604687EBA85611C9E8A9CDF /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = SourceFiles/gui/button.h; sourceTree = ""; }; 46292F489228B60010794CE4 /* moc_button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_button.cpp; path = GeneratedFiles/Debug/moc_button.cpp; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_profilewidget.cpp; path = GeneratedFiles/Debug/moc_profilewidget.cpp; sourceTree = ""; }; 4AF15B5A0A43EB62D6DAF211 /* libexif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexif.a; path = "../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D1099F2D3696E8A0E17D37D /* mtpSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSession.h; path = SourceFiles/mtproto/mtpSession.h; sourceTree = ""; }; 4D504A849F15EB58E53A4E5F /* title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = title.h; path = SourceFiles/title.h; sourceTree = ""; }; 4D55B83DFDFE3D492CDBD27A /* button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = SourceFiles/gui/button.cpp; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatinput.h; path = SourceFiles/gui/flatinput.h; sourceTree = ""; }; - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.4.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatcheckbox.h; path = SourceFiles/gui/flatcheckbox.h; sourceTree = ""; }; 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = twidget.h; path = SourceFiles/gui/twidget.h; sourceTree = ""; }; 51355181C0E6689B0B764543 /* connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = connectionbox.cpp; path = SourceFiles/boxes/connectionbox.cpp; sourceTree = ""; }; 5271C394C1E7646D117CE67E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = SourceFiles/main.cpp; sourceTree = ""; }; 547CCADBD1CC5050167EF948 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = /System/Library/Frameworks/CoreMedia.framework; sourceTree = ""; }; 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpFileLoader.cpp; path = GeneratedFiles/Debug/moc_mtpFileLoader.cpp; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_twidget.cpp; path = GeneratedFiles/Debug/moc_twidget.cpp; sourceTree = ""; }; 55B4A93DD455EED91C899A8E /* dialogswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dialogswidget.h; path = SourceFiles/dialogswidget.h; sourceTree = ""; }; 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introsignup.cpp; path = GeneratedFiles/Debug/moc_introsignup.cpp; sourceTree = ""; }; @@ -455,100 +462,99 @@ 59E514973BA9BF6599252DDC /* flattextarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flattextarea.h; path = SourceFiles/gui/flattextarea.h; sourceTree = ""; }; 5A5431331A13AA7B07414240 /* stdafx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = SourceFiles/stdafx.cpp; sourceTree = ""; }; 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = localimageloader.cpp; path = SourceFiles/localimageloader.cpp; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = layerwidget.cpp; path = SourceFiles/layerwidget.cpp; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flattextarea.cpp; path = SourceFiles/gui/flattextarea.cpp; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpSession.cpp; path = GeneratedFiles/Debug/moc_mtpSession.cpp; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_downloadpathbox.cpp; path = GeneratedFiles/Debug/moc_downloadpathbox.cpp; sourceTree = ""; }; 6610564B876E47D289A596DB /* confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = confirmbox.cpp; path = SourceFiles/boxes/confirmbox.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.4.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.5.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/gui/countryinput.h; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; 6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/gui/images.cpp; sourceTree = ""; }; 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = ""; }; 6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; 6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = ""; }; 6D50D70712776D7ED3B00E5C /* mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtp.cpp; path = SourceFiles/mtproto/mtp.cpp; sourceTree = ""; }; 6E1859D714E4471E053D90C9 /* scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scrollarea.cpp; path = SourceFiles/gui/scrollarea.cpp; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6E8FD0ED1B60D43929944CD2 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = SourceFiles/gui/text.h; sourceTree = ""; }; 710C982FC773400941B3AFBC /* dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dropdown.cpp; path = SourceFiles/dropdown.cpp; sourceTree = ""; }; 723F90793B2C195E2CCB2233 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = pspecific_mac_p.mm; path = SourceFiles/pspecific_mac_p.mm; sourceTree = ""; }; 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = phoneinput.cpp; path = SourceFiles/gui/phoneinput.cpp; sourceTree = ""; }; 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = ""; }; 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = ""; }; 7D075A915E8739C1B6BC5F43 /* types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cpp; path = SourceFiles/types.cpp; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpScheme.h; path = SourceFiles/mtproto/mtpScheme.h; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addcontactbox.cpp; path = GeneratedFiles/Debug/moc_addcontactbox.cpp; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5MultimediaWidgets; path = "/usr/local/Qt-5.4.0/lib/libQt5MultimediaWidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; 83728F60A64483E0AA933D76 /* pspecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific.h; path = SourceFiles/pspecific.h; sourceTree = ""; }; 83A36F229E897566E011B79E /* scrollarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scrollarea.h; path = SourceFiles/gui/scrollarea.h; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 85FABD67716E36CD8B3CA4FA /* animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = animation.h; path = SourceFiles/gui/animation.h; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; 8880067F9BFD46108777E134 /* mtp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtp.h; path = SourceFiles/mtproto/mtp.h; sourceTree = ""; }; 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_scrollarea.cpp; path = GeneratedFiles/Debug/moc_scrollarea.cpp; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; 89F92B278CA31C393E245056 /* mtpRPC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpRPC.cpp; path = SourceFiles/mtproto/mtpRPC.cpp; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; 8A28F7789408AA839F48A5F2 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = SourceFiles/settings.cpp; sourceTree = ""; }; 8A9D926C08392F7A9BC83B0C /* fileuploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fileuploader.h; path = SourceFiles/fileuploader.h; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introcode.cpp; path = GeneratedFiles/Debug/moc_introcode.cpp; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = contactsbox.cpp; path = SourceFiles/boxes/contactsbox.cpp; sourceTree = ""; }; 8CCCACE96535180FEB557712 /* settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settingswidget.cpp; path = SourceFiles/settingswidget.cpp; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = downloadpathbox.cpp; path = SourceFiles/boxes/downloadpathbox.cpp; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; 8EB83A4D34226609E79A613A /* connectionbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = connectionbox.h; path = SourceFiles/boxes/connectionbox.h; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtp.cpp; path = GeneratedFiles/Debug/moc_mtp.cpp; sourceTree = ""; }; 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_settingswidget.cpp; path = GeneratedFiles/Debug/moc_settingswidget.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 963123025C466CB8DD9CF4AF /* mtpConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpConnection.h; path = SourceFiles/mtproto/mtpConnection.h; sourceTree = ""; }; 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpFileLoader.h; path = SourceFiles/mtproto/mtpFileLoader.h; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 974DB34EEB8F83B91614C0B0 /* logs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = logs.cpp; path = SourceFiles/logs.cpp; sourceTree = ""; }; 99B8D38F7F5858601230911E /* style_auto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_auto.cpp; path = GeneratedFiles/style_auto.cpp; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; - 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_aboutbox.cpp; path = GeneratedFiles/Debug/moc_aboutbox.cpp; sourceTree = ""; }; 9AB1479D7D63386FD2046620 /* flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatinput.cpp; path = SourceFiles/gui/flatinput.cpp; sourceTree = ""; }; 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileuploader.cpp; path = SourceFiles/fileuploader.cpp; sourceTree = ""; }; @@ -558,138 +564,135 @@ 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photosendbox.cpp; path = GeneratedFiles/Debug/moc_photosendbox.cpp; sourceTree = ""; }; 9EFD7CB36012BFC00CC79434 /* style_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_auto.h; path = GeneratedFiles/style_auto.h; sourceTree = ""; }; A0090709DE1B155085362C36 /* introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introcode.cpp; path = SourceFiles/intro/introcode.cpp; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; - A490341D0650372A5757B367 /* qtmedia_audioengine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmedia_audioengine; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqtmedia_audioengine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.4.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.5.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; A83D2C19F756D3371E5999A8 /* historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = historywidget.cpp; path = SourceFiles/historywidget.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; A9FF4818C6775109B3DBFA18 /* introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsignup.cpp; path = SourceFiles/intro/introsignup.cpp; sourceTree = ""; }; - AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.4.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.5.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dropdown.cpp; path = GeneratedFiles/Debug/moc_dropdown.cpp; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; AD0C395D671BC024083A5FC7 /* localimageloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = localimageloader.h; path = SourceFiles/localimageloader.h; sourceTree = ""; }; AD90723EF02EAD016FD49CC9 /* introsteps.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsteps.h; path = SourceFiles/intro/introsteps.h; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatcheckbox.cpp; path = SourceFiles/gui/flatcheckbox.cpp; sourceTree = ""; }; AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = langloaderplain.cpp; path = SourceFiles/langloaderplain.cpp; sourceTree = ""; }; AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photocropbox.cpp; path = GeneratedFiles/Debug/moc_photocropbox.cpp; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emoji_config.cpp; path = SourceFiles/gui/emoji_config.cpp; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; B3D42654F18B1FE49512C404 /* mtpDC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpDC.h; path = SourceFiles/mtproto/mtpDC.h; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpConnection.cpp; path = GeneratedFiles/Debug/moc_mtpConnection.cpp; sourceTree = ""; }; B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_phoneinput.cpp; path = GeneratedFiles/Debug/moc_phoneinput.cpp; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; B88236FC554B694F618D848C /* moc_sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sysbuttons.cpp; path = GeneratedFiles/Debug/moc_sysbuttons.cpp; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpConnection.cpp; path = SourceFiles/mtproto/mtpConnection.cpp; sourceTree = ""; }; B97D4DB97FE881648644211A /* downloadpathbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = downloadpathbox.h; path = SourceFiles/boxes/downloadpathbox.h; sourceTree = ""; }; BB1602EA641643DE565005B1 /* twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = twidget.cpp; path = SourceFiles/gui/twidget.cpp; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; BDAB6725B830DEE896DC0F55 /* boxshadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = boxshadow.h; path = SourceFiles/gui/boxshadow.h; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; BEF9DFDA6822604126A7E233 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C194EDD00F76216057D48A5C /* aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutbox.cpp; path = SourceFiles/boxes/aboutbox.cpp; sourceTree = ""; }; C19DF71B273A4843553518F2 /* app.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = app.h; path = SourceFiles/app.h; sourceTree = ""; }; C20F9DD8C7B031B8E20D5653 /* application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cpp; path = SourceFiles/application.cpp; sourceTree = ""; }; C34459FA465B57DF4DB80D12 /* introsteps.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsteps.cpp; path = SourceFiles/intro/introsteps.cpp; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C52030E4534894A117CA66CA /* qavfcamera */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfcamera; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqavfcamera$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; C63C6D083EBEB13A60256DF3 /* historywidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = historywidget.h; path = SourceFiles/historywidget.h; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/style.h; sourceTree = ""; }; C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = ""; }; CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = ""; }; CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; CF1690B68F3B278E78823DB9 /* history.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = history.h; path = SourceFiles/history.h; sourceTree = ""; }; CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profilewidget.cpp; path = SourceFiles/profilewidget.cpp; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flattextarea.cpp; path = GeneratedFiles/Debug/moc_flattextarea.cpp; sourceTree = ""; }; D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photosendbox.cpp; path = SourceFiles/boxes/photosendbox.cpp; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D3FE9C29B6A61D7C3C4B731B /* animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = animation.cpp; path = SourceFiles/gui/animation.cpp; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D6FF6676816C4E374D374060 /* qrc_telegram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram.cpp; path = GeneratedFiles/qrc_telegram.cpp; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DC23E0B79FF53F35BA8F76A1 /* introsignup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsignup.h; path = SourceFiles/intro/introsignup.h; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filedialog.cpp; path = SourceFiles/gui/filedialog.cpp; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; E181C525E21A16F2D4396CA7 /* moc_application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_application.cpp; path = GeneratedFiles/Debug/moc_application.cpp; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; E466873F01ABA1E55E914489 /* dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dialogswidget.cpp; path = SourceFiles/dialogswidget.cpp; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E908A6C86F93FA27DF70866C /* photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photocropbox.cpp; path = SourceFiles/boxes/photocropbox.cpp; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSessionImpl.h; path = SourceFiles/mtproto/mtpSessionImpl.h; sourceTree = ""; }; - EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfmediaplayer; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqavfmediaplayer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; EF1AD6A66D0C28A6A15E2C30 /* introphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introphone.h; path = SourceFiles/intro/introphone.h; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F1A04BDB750C2AE652797B04 /* flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatbutton.cpp; path = SourceFiles/gui/flatbutton.cpp; sourceTree = ""; }; F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = phoneinput.h; path = SourceFiles/gui/phoneinput.h; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; F26998DF735BCE5F975508ED /* CoreWLAN.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreWLAN.framework; path = /System/Library/Frameworks/CoreWLAN.framework; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pspecific_mac.cpp; path = SourceFiles/pspecific_mac.cpp; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; F80095A026AF9453E9C2B8BD /* settingswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settingswidget.h; path = SourceFiles/settingswidget.h; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FB61F72601D91BF3AC730D20 /* mtpRPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpRPC.h; path = SourceFiles/mtproto/mtpRPC.h; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; FE8FD20832B4C226E345CFBA /* mainwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwidget.h; path = SourceFiles/mainwidget.h; sourceTree = ""; }; FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_connectionbox.cpp; path = GeneratedFiles/Debug/moc_connectionbox.cpp; sourceTree = ""; }; FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; @@ -736,6 +739,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -768,6 +772,7 @@ 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */ = { isa = PBXGroup; children = ( + 07DC429F1B5EA15300B6B888 /* numbers.cpp */, 07080BCD1A43588C00741A51 /* lang_auto.cpp */, 07080BCE1A43588C00741A51 /* lang_auto.h */, 99B8D38F7F5858601230911E /* style_auto.cpp */, @@ -914,6 +919,7 @@ 07A69330199277BA0099CB9F /* mediaview.cpp */, 0732E4A7199E262300D50FE7 /* overviewwidget.cpp */, 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */, + 07B604301B46A0EC00CA29FE /* playerwidget.cpp */, CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */, 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */, 07BE850D1A2093C9008ACB9F /* localstorage.cpp */, @@ -950,8 +956,10 @@ 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */, 6C86B6E6AB1857B735B720D6 /* layerwidget.h */, 07A69331199277BA0099CB9F /* mediaview.h */, + 07DC429D1B5EA0E600B6B888 /* numbers.h */, 0732E4A8199E262300D50FE7 /* overviewwidget.h */, 07DE92A21AA4924400A18F6F /* passcodewidget.h */, + 07B604311B46A0EC00CA29FE /* playerwidget.h */, 220B97F8F62C720E6059A64B /* profilewidget.h */, AD0C395D671BC024083A5FC7 /* localimageloader.h */, 07BE850E1A2093C9008ACB9F /* localstorage.h */, @@ -976,127 +984,127 @@ isa = PBXGroup; children = ( 36BDA5D01BED543A92886669 /* Telegram.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, 370997172D3BAEED157B8E70 /* SourceFiles */, ); @@ -1106,6 +1114,7 @@ 801973D3334D0FCA849CF485 /* Debug */ = { isa = PBXGroup; children = ( + 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */, 07C759711B1F7E2800662169 /* moc_autoupdater.cpp */, 0710CA041B0B9404001B4272 /* moc_stickersetbox.cpp */, 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */, @@ -1220,6 +1229,7 @@ children = ( 07CAACD71AEA64F00058E508 /* AudioUnit.framework */, 07055CC3194EE85B0008DEF6 /* libcrypto.a */, + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, 4AF15B5A0A43EB62D6DAF211 /* libexif.a */, DFD7912080BC557230093752 /* ApplicationServices.framework */, @@ -1231,7 +1241,6 @@ 205259EEEE2BADA5E64741E3 /* Security.framework */, FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */, 9DFF62A901D70814B8A323D4 /* Carbon.framework */, - C52030E4534894A117CA66CA /* qavfcamera */, 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */, BEF9DFDA6822604126A7E233 /* CoreAudio.framework */, 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */, @@ -1239,14 +1248,8 @@ 547CCADBD1CC5050167EF948 /* CoreMedia.framework */, 723F90793B2C195E2CCB2233 /* AppKit.framework */, 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */, - EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */, - 1C21DCD421D7B7E0462F1121 /* qqt7engine */, - 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */, AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */, - A490341D0650372A5757B367 /* qtmedia_audioengine */, 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */, - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */, - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */, A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */, EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */, F26998DF735BCE5F975508ED /* CoreWLAN.framework */, @@ -1547,6 +1550,7 @@ 8F65F0D95B1F0CEB859F2FB3 /* boxshadow.cpp in Compile Sources */, D7EF8F129FCCE9AB3F3F081F /* button.cpp in Compile Sources */, B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */, + 07DC42A01B5EA15300B6B888 /* numbers.cpp in Compile Sources */, C03447C9A7D9FF73463B8BB5 /* countryinput.cpp in Compile Sources */, 07BE850F1A2093C9008ACB9F /* localstorage.cpp in Compile Sources */, CDB0266A8B7CB20A95266BCD /* emoji_config.cpp in Compile Sources */, @@ -1610,6 +1614,7 @@ 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */, 0755AEDE1AD12A80004D738A /* moc_intropwdcheck.cpp in Compile Sources */, 07DE92AA1AA4928200A18F6F /* moc_autolockbox.cpp in Compile Sources */, + 07B604351B46A20900CA29FE /* moc_playerwidget.cpp in Compile Sources */, 8F6F5D7F82036331E8C6DAE6 /* moc_mtpConnection.cpp in Compile Sources */, B780F9E21269259B90A1F32A /* moc_mtpDC.cpp in Compile Sources */, 07080BCF1A43588C00741A51 /* lang_auto.cpp in Compile Sources */, @@ -1638,6 +1643,7 @@ 60CB4898955209B665E7B07D /* moc_twidget.cpp in Compile Sources */, 7062978F12EEA525893A5E6F /* moc_aboutbox.cpp in Compile Sources */, E8B28580819B882A5964561A /* moc_addcontactbox.cpp in Compile Sources */, + 07B604321B46A0EC00CA29FE /* playerwidget.cpp in Compile Sources */, D6874C00733283846ACA9AB2 /* moc_confirmbox.cpp in Compile Sources */, ED2557A57C6782721DC494AF /* moc_connectionbox.cpp in Compile Sources */, 5FC914F652D1B16FDA8F0634 /* moc_contactsbox.cpp in Compile Sources */, @@ -1701,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1719,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.51; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1745,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.28; + DYLIB_CURRENT_VERSION = 0.8.51; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1766,8 +1772,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1775,15 +1781,14 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Release/; @@ -1791,13 +1796,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/mediaservice", - "/usr/local/Qt-5.4.0/plugins/audio", - "/usr/local/Qt-5.4.0/plugins/playlistformats", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1809,7 +1811,6 @@ "-W", "-fPIE", "-D_WITH_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1831,7 +1832,6 @@ "-W", "-fPIE", "-D_WITH_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1847,14 +1847,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/mediaservice", - "-L/usr/local/Qt-5.4.0/plugins/audio", - "-L/usr/local/Qt-5.4.0/plugins/playlistformats", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, @@ -1888,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.28; + DYLIB_CURRENT_VERSION = 0.8.51; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1909,8 +1906,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1918,15 +1915,14 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Debug/; @@ -1934,13 +1930,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/mediaservice", - "/usr/local/Qt-5.4.0/plugins/audio", - "/usr/local/Qt-5.4.0/plugins/playlistformats", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1953,7 +1946,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1974,7 +1966,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1989,14 +1980,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/mediaservice", - "-L/usr/local/Qt-5.4.0/plugins/audio", - "-L/usr/local/Qt-5.4.0/plugins/playlistformats", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 1798b6ab0..662fd8be5 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -1,21 +1,21 @@ ############################################################################# # Makefile for building: ../Mac/Debug/Telegram.app/Contents/MacOS/Telegram -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: Telegram.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = /usr/local/Qt-5.4.0/bin/uic +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = /usr/local/Qt-5.5.0/bin/uic LEX = flex LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -D_DEBUG -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f @@ -33,7 +33,7 @@ check: first compilers: GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp\ GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp\ - GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp\ + GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp\ GeneratedFiles/Debug/moc_passcodewidget.cpp\ GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp\ GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp\ @@ -85,7 +85,7 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/usercolor1.png \ SourceFiles/art/usercolor5.png \ SourceFiles/art/chatcolor2.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji.webp \ @@ -93,19 +93,19 @@ GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji_200x.webp \ SourceFiles/art/emoji_250x.webp \ SourceFiles/art/emoji_125x.webp - /usr/local/Qt-5.4.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp -compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: - -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp + -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ @@ -128,7 +128,7 @@ GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/includ SourceFiles/pspecific_wnd.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/application.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/audio.h \ @@ -136,7 +136,7 @@ GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/autoupdater.h \ @@ -144,22 +144,22 @@ GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp: SourceFiles/dialogswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp: SourceFiles/gui/twidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/dropdown.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp: SourceFiles/localimageloader.h \ SourceFiles/fileuploader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp: SourceFiles/history.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/boxshadow.h \ @@ -167,29 +167,32 @@ GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/twidget.h \ SourceFiles/passcodewidget.h \ SourceFiles/historywidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp: SourceFiles/gui/boxshadow.h \ SourceFiles/layerwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp: SourceFiles/mediaview.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp: SourceFiles/overviewwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp + +GeneratedFiles/Debug/moc_playerwidget.cpp: SourceFiles/playerwidget.h + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp: SourceFiles/passcodewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp: SourceFiles/localimageloader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp: SourceFiles/localstorage.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -213,7 +216,7 @@ GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/overviewwidget.h \ SourceFiles/profilewidget.h \ SourceFiles/mainwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ SourceFiles/gui/button.h \ @@ -231,7 +234,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ GeneratedFiles/style_auto.h \ SourceFiles/sysbuttons.h \ SourceFiles/settingswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/animation.h \ @@ -244,7 +247,7 @@ GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/passcodewidget.h \ SourceFiles/gui/twidget.h \ SourceFiles/sysbuttons.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/sysbuttons.h \ @@ -257,14 +260,14 @@ GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi SourceFiles/gui/button.h \ SourceFiles/gui/twidget.h \ SourceFiles/title.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -285,7 +288,7 @@ GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ SourceFiles/passcodewidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/window.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpConnection.h \ @@ -301,7 +304,7 @@ GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpFileLoader.h \ SourceFiles/mtproto/mtpSessionImpl.h \ SourceFiles/mtproto/mtp.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/types.h \ @@ -311,13 +314,13 @@ GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/mtproto/mtpPublicRSA.h \ SourceFiles/mtproto/mtpAuthKey.h \ SourceFiles/mtproto/mtpConnection.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp: SourceFiles/mtproto/mtpDC.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp: SourceFiles/mtproto/mtpFileLoader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpCoreTypes.h \ @@ -330,7 +333,7 @@ GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpDC.h \ SourceFiles/mtproto/mtpRPC.h \ SourceFiles/mtproto/mtpSession.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ @@ -338,16 +341,16 @@ GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/animation.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/button.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/contextmenu.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -361,7 +364,7 @@ GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/countrycodeinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/style.h \ @@ -383,7 +386,7 @@ GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/inclu SourceFiles/gui/flatcheckbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/gui/countryinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -399,13 +402,13 @@ GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatbutton.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/flatcheckbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/style.h \ @@ -418,13 +421,13 @@ GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flatinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp: SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatlabel.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QTextEdit \ SourceFiles/style.h \ @@ -437,7 +440,7 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flattextarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ @@ -451,7 +454,7 @@ GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/switcher.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -465,47 +468,47 @@ GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/phoneinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/scrollarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp: SourceFiles/gui/twidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/aboutbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp: SourceFiles/layerwidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/abstractbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/addcontactbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/autolockbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/backgroundbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/confirmbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -522,12 +525,12 @@ GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/connectionbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/contactsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -544,50 +547,50 @@ GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/downloadpathbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/emojibox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/languagebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/passcodebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/photocropbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/photosendbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/sessionsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/stickersetbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/usernamebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -604,7 +607,7 @@ GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/intro/intro.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -624,7 +627,7 @@ GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introcode.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -650,7 +653,7 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/introphone.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -676,7 +679,7 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/intropwdcheck.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -696,10 +699,10 @@ GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/includ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introsignup.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp: SourceFiles/pspecific_mac.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_source_make_all: compiler_moc_source_clean: diff --git a/Telegram/Version.sh b/Telegram/Version.sh index b405bce4c..497943c84 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 8028 0.8.28 1 -# AppVersion AppVersionStr DevChannel +echo 0.8 8051 0.8.51 0 +# AppVersionStrMajor AppVersion AppVersionStr DevChannel diff --git a/Telegram/_qt_5_4_0_patch.diff b/Telegram/_qt_5_4_0_patch.diff deleted file mode 100644 index 3d7210e5f..000000000 --- a/Telegram/_qt_5_4_0_patch.diff +++ /dev/null @@ -1,940 +0,0 @@ -diff --git a/qtbase/mkspecs/win32-msvc2013/qmake.conf b/qtbase/mkspecs/win32-msvc2013/qmake.conf -index 535904a..6d0e9b9 100644 ---- a/qtbase/mkspecs/win32-msvc2013/qmake.conf -+++ b/qtbase/mkspecs/win32-msvc2013/qmake.conf -@@ -25,9 +25,9 @@ QMAKE_YACCFLAGS = -d - QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t -FS - QMAKE_CFLAGS_WARN_ON = -W3 - QMAKE_CFLAGS_WARN_OFF = -W0 --QMAKE_CFLAGS_RELEASE = -O2 -MD -Zc:strictStrings --QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi -Zc:strictStrings --QMAKE_CFLAGS_DEBUG = -Zi -MDd -+QMAKE_CFLAGS_RELEASE = -O2 -MT -Zc:strictStrings -+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -Zc:strictStrings -+QMAKE_CFLAGS_DEBUG = -Zi -MTd - QMAKE_CFLAGS_YACC = - QMAKE_CFLAGS_LTCG = -GL - QMAKE_CFLAGS_MP = -MP -diff --git a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp -index 0ff4250..9ed555c 100644 ---- a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp -+++ b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp -@@ -1445,11 +1445,15 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) - plist_in_text = plist_in_text.replace("@TYPEINFO@", - (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") - ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); -- QFile plist_out_file("Info.plist"); -+ QString plist_dir; -+ if (!project->isEmpty("PLIST_DIR")) -+ plist_dir = project->first("PLIST_DIR").toQString(); -+ QString plist_in_filename = QFileInfo(plist_in_file).fileName(); -+ QFile plist_out_file(plist_dir + plist_in_filename); - if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { - QTextStream plist_out(&plist_out_file); - plist_out << plist_in_text; -- t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", "Info.plist") << ";\n"; -+ t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; - } - } - } -diff --git a/qtbase/qmake/generators/makefile.cpp b/qtbase/qmake/generators/makefile.cpp -index bf9a9d8..0216f5c 100644 ---- a/qtbase/qmake/generators/makefile.cpp -+++ b/qtbase/qmake/generators/makefile.cpp -@@ -206,7 +206,7 @@ MakefileGenerator::initOutPaths() - v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; - static const char * const dirs[] = { "OBJECTS_DIR", "DESTDIR", - "SUBLIBS_DIR", "DLLDESTDIR", -- "PRECOMPILED_DIR", 0 }; -+ "PRECOMPILED_DIR", "PLIST_DIR", 0 }; - for (int x = 0; dirs[x]; x++) { - const ProKey dkey(dirs[x]); - if (v[dkey].isEmpty()) -diff --git a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c -index 1987f27..6b36e4f 100644 ---- a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c -+++ b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c -@@ -101,7 +101,7 @@ for (p = string; length-- > 0; p++) - { - /* Normal UTF-16 code point. Neither high nor low surrogate. */ - } -- else if ((c & 0x0400) == 0) -+ else if ((c & 0xfc00) == 0xd800) - { - /* High surrogate. Must be a followed by a low surrogate. */ - if (length == 0) -diff --git a/qtbase/src/corelib/tools/qunicodetables.cpp b/qtbase/src/corelib/tools/qunicodetables.cpp -index 072e8ad..2bf3bfd 100644 ---- a/qtbase/src/corelib/tools/qunicodetables.cpp -+++ b/qtbase/src/corelib/tools/qunicodetables.cpp -@@ -5360,7 +5360,7 @@ static const Properties uc_properties[] = { - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, -- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 2 }, -+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, -diff --git a/qtbase/src/gui/image/qbmphandler.cpp b/qtbase/src/gui/image/qbmphandler.cpp -index 21c1a2f..f293ef9 100644 ---- a/qtbase/src/gui/image/qbmphandler.cpp -+++ b/qtbase/src/gui/image/qbmphandler.cpp -@@ -212,6 +212,9 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int - int blue_scale = 0; - int alpha_scale = 0; - -+ if (!d->isSequential()) -+ d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4 ? BMP_WIN : bi.biSize)); // goto start of colormap -+ - if (bi.biSize >= BMP_WIN4 || (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32))) { - if (d->read((char *)&red_mask, sizeof(red_mask)) != sizeof(red_mask)) - return false; -@@ -299,9 +302,6 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int - image.setDotsPerMeterX(bi.biXPelsPerMeter); - image.setDotsPerMeterY(bi.biYPelsPerMeter); - -- if (!d->isSequential()) -- d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4? BMP_WIN : bi.biSize)); // goto start of colormap -- - if (ncols > 0) { // read color table - uchar rgb[4]; - int rgb_len = t == BMP_OLD ? 3 : 4; -diff --git a/qtbase/src/gui/kernel/qplatformdialoghelper.h b/qtbase/src/gui/kernel/qplatformdialoghelper.h -index e0730cd..00fccad 100644 ---- a/qtbase/src/gui/kernel/qplatformdialoghelper.h -+++ b/qtbase/src/gui/kernel/qplatformdialoghelper.h -@@ -363,6 +363,7 @@ public: - virtual QUrl directory() const = 0; - virtual void selectFile(const QUrl &filename) = 0; - virtual QList selectedFiles() const = 0; -+ virtual QByteArray selectedRemoteContent() const { return QByteArray(); } - virtual void setFilter() = 0; - virtual void selectNameFilter(const QString &filter) = 0; - virtual QString selectedNameFilter() const = 0; -diff --git a/qtbase/src/gui/painting/qpaintengine_p.h b/qtbase/src/gui/painting/qpaintengine_p.h -index 312320c..5e82318 100644 ---- a/qtbase/src/gui/painting/qpaintengine_p.h -+++ b/qtbase/src/gui/painting/qpaintengine_p.h -@@ -79,8 +79,18 @@ public: - if (hasSystemTransform) { - if (systemTransform.type() <= QTransform::TxTranslate) - systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); -- else -- systemClip = systemTransform.map(systemClip); -+ else { -+ // Transform the system clip region back from device pixels to device-independent pixels before -+ // applying systemTransform, which already has transform from device-independent pixels to device pixels -+#ifdef Q_OS_MAC -+ QTransform scaleTransform; -+ const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); -+ scaleTransform.scale(invDevicePixelRatio, invDevicePixelRatio); -+ systemClip = systemTransform.map(scaleTransform.map(systemClip)); -+#else -+ systemClip = systemTransform.map(systemClip); -+#endif -+ } - } - - // Make sure we're inside the viewport. -diff --git a/qtbase/src/gui/text/qtextlayout.cpp b/qtbase/src/gui/text/qtextlayout.cpp -index 1ac50d3..3c88caa 100644 ---- a/qtbase/src/gui/text/qtextlayout.cpp -+++ b/qtbase/src/gui/text/qtextlayout.cpp -@@ -643,7 +643,10 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const - while (oldPos < len && !attributes[oldPos].graphemeBoundary) - oldPos++; - } else { -- if (oldPos < len && d->atWordSeparator(oldPos)) { -+ while (oldPos < len && d->atSpace(oldPos)) -+ oldPos++; -+ -+ if (oldPos < len && d->atWordSeparator(oldPos)) { - oldPos++; - while (oldPos < len && d->atWordSeparator(oldPos)) - oldPos++; -@@ -651,8 +654,6 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const - while (oldPos < len && !d->atSpace(oldPos) && !d->atWordSeparator(oldPos)) - oldPos++; - } -- while (oldPos < len && d->atSpace(oldPos)) -- oldPos++; - } - - return oldPos; -diff --git a/qtbase/src/gui/text/qtextlayout.h b/qtbase/src/gui/text/qtextlayout.h -index 1e0ab9b..47972d3 100644 ---- a/qtbase/src/gui/text/qtextlayout.h -+++ b/qtbase/src/gui/text/qtextlayout.h -@@ -186,6 +186,8 @@ private: - QRectF *brect, int tabstops, int* tabarray, int tabarraylen, - QPainter *painter); - QTextEngine *d; -+ -+ friend class TextBlock; - }; - - -diff --git a/qtbase/src/network/socket/qnativesocketengine_win.cpp b/qtbase/src/network/socket/qnativesocketengine_win.cpp -index f5943d6..f7787c3 100644 ---- a/qtbase/src/network/socket/qnativesocketengine_win.cpp -+++ b/qtbase/src/network/socket/qnativesocketengine_win.cpp -@@ -703,6 +703,12 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin - errorDetected = true; - break; - } -+ if (value == WSAENETUNREACH) { -+ setError(QAbstractSocket::NetworkError, NetworkUnreachableErrorString); -+ socketState = QAbstractSocket::UnconnectedState; -+ errorDetected = true; -+ break; -+ } - if (value == WSAEADDRNOTAVAIL) { - setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString); - socketState = QAbstractSocket::UnconnectedState; -diff --git a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp -index 43903ac..efa7014 100644 ---- a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp -+++ b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp -@@ -213,6 +213,78 @@ void QBasicFontDatabase::releaseHandle(void *handle) - - extern FT_Library qt_getFreetype(); - -+// copied from freetype with some modifications -+ -+#ifndef FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY -+#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG('i', 'g', 'p', 'f') -+#endif -+ -+#ifndef FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY -+#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG('i', 'g', 'p', 's') -+#endif -+ -+/* there's a Mac-specific extended implementation of FT_New_Face() */ -+/* in src/base/ftmac.c */ -+ -+#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON ) -+ -+/* documentation is in freetype.h */ -+ -+FT_Error __ft_New_Face(FT_Library library, const char* pathname, FT_Long face_index, FT_Face *aface) { -+ FT_Open_Args args; -+ -+ /* test for valid `library' and `aface' delayed to FT_Open_Face() */ -+ if (!pathname) -+ return FT_Err_Invalid_Argument; -+ -+ FT_Parameter params[2]; -+ params[0].tag = FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY; -+ params[0].data = 0; -+ params[1].tag = FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY; -+ params[1].data = 0; -+ args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; -+ args.pathname = (char*)pathname; -+ args.stream = NULL; -+ args.num_params = 2; -+ args.params = params; -+ -+ return FT_Open_Face(library, &args, face_index, aface); -+} -+ -+#else -+ -+FT_Error __ft_New_Face(FT_Library library, const char* pathname, FT_Long face_index, FT_Face *aface) { -+ return FT_New_Face(library, pathname, face_index, aface); -+} -+ -+#endif /* defined( FT_MACINTOSH ) && !defined( DARWIN_NO_CARBON ) */ -+ -+/* documentation is in freetype.h */ -+ -+FT_Error __ft_New_Memory_Face(FT_Library library, const FT_Byte* file_base, FT_Long file_size, FT_Long face_index, FT_Face *aface) { -+ FT_Open_Args args; -+ -+ /* test for valid `library' and `face' delayed to FT_Open_Face() */ -+ if (!file_base) -+ return FT_Err_Invalid_Argument; -+ -+ FT_Parameter params[2]; -+ params[0].tag = FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY; -+ params[0].data = 0; -+ params[1].tag = FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY; -+ params[1].data = 0; -+ args.flags = FT_OPEN_MEMORY | FT_OPEN_PARAMS; -+ args.memory_base = file_base; -+ args.memory_size = file_size; -+ args.stream = NULL; -+ args.num_params = 2; -+ args.params = params; -+ -+ return FT_Open_Face(library, &args, face_index, aface); -+} -+ -+// end -+ - QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file, QSupportedWritingSystems *supportedWritingSystems) - { - FT_Library library = qt_getFreetype(); -@@ -224,9 +296,9 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt - FT_Face face; - FT_Error error; - if (!fontData.isEmpty()) { -- error = FT_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); -+ error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); - } else { -- error = FT_New_Face(library, file.constData(), index, &face); -+ error = __ft_New_Face(library, file.constData(), index, &face); - } - if (error != FT_Err_Ok) { - qDebug() << "FT_New_Face failed with index" << index << ":" << hex << error; -diff --git a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp -index 5dec1d0..f4d6fcd 100644 ---- a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp -+++ b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp -@@ -341,6 +341,15 @@ static void populateFromPattern(FcPattern *pattern) - return; - - familyName = QString::fromUtf8((const char *)value); -+ if (familyName == QLatin1String("Open Sans")) { -+ FcChar8 *styl = 0; -+ if (FcPatternGetString(pattern, FC_STYLE, 0, &styl) == FcResultMatch) { -+ QString style = QString::fromUtf8(reinterpret_cast(styl)); -+ if (style == QLatin1String("Semibold")) { -+ familyName.append(QChar(QChar::Space)).append(style); -+ } -+ } -+ } - - slant_value = FC_SLANT_ROMAN; - weight_value = FC_WEIGHT_REGULAR; -@@ -742,6 +751,15 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, - FcChar8 *fam = 0; - if (FcPatternGetString(pattern, FC_FAMILY, 0, &fam) == FcResultMatch) { - QString family = QString::fromUtf8(reinterpret_cast(fam)); -+ if (family == QLatin1String("Open Sans")) { -+ FcChar8 *styl = 0; -+ if (FcPatternGetString(pattern, FC_STYLE, 0, &styl) == FcResultMatch) { -+ QString style = QString::fromUtf8(reinterpret_cast(styl)); -+ if (style == QLatin1String("Semibold")) { -+ family.append(QChar(QChar::Space)).append(style); -+ } -+ } -+ } - families << family; - } - populateFromPattern(pattern); -diff --git a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm -index 9f2ff10..fe87ca1 100644 ---- a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm -+++ b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm -@@ -257,6 +257,10 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) - - fd->foundryName = QStringLiteral("CoreText"); - fd->familyName = (CFStringRef) CTFontDescriptorCopyAttribute(font, kCTFontFamilyNameAttribute); -+ QCFString _displayName = (CFStringRef) CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute); -+ if (_displayName == QStringLiteral("Open Sans Semibold")) { -+ fd->familyName = _displayName; -+ } - fd->styleName = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontStyleNameAttribute); - fd->weight = QFont::Normal; - fd->style = QFont::StyleNormal; -diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm -index 9f7609f..5df1514 100644 ---- a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm -+++ b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm -@@ -216,7 +216,7 @@ static void cleanupCocoaApplicationDelegate() - if (reflectionDelegate) { - if ([reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)]) - return [reflectionDelegate applicationShouldTerminate:sender]; -- return NSTerminateNow; -+ //return NSTerminateNow; - } - - if ([self canQuit]) { -diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm -index e449fd3..7f7bd24 100644 ---- a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm -+++ b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm -@@ -102,7 +102,7 @@ QT_USE_NAMESPACE - QCocoaSystemTrayIcon *systray; - NSStatusItem *item; - QCocoaMenu *menu; -- bool menuVisible; -+ bool menuVisible, iconSelected; - QIcon icon; - QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; - } -@@ -202,13 +202,11 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) - - m_sys->item->icon = icon; - -- const bool menuVisible = m_sys->item->menu && m_sys->item->menuVisible; -- - // The reccomended maximum title bar icon height is 18 points - // (device independent pixels). The menu height on past and - // current OS X versions is 22 points. Provide some future-proofing - // by deriving the icon height from the menu height. -- const int padding = 4; -+ const int padding = 0; - const int menuHeight = [[[NSApplication sharedApplication] mainMenu] menuBarHeight]; - const int maxImageHeight = menuHeight - padding; - -@@ -218,7 +216,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) - // devicePixelRatio for the "best" screen on the system. - qreal devicePixelRatio = qApp->devicePixelRatio(); - const int maxPixmapHeight = maxImageHeight * devicePixelRatio; -- const QIcon::Mode mode = menuVisible ? QIcon::Selected : QIcon::Normal; -+ const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; - QSize selectedSize; - Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { - // Select a pixmap based on the height. We want the largest pixmap -@@ -381,6 +379,7 @@ QT_END_NAMESPACE - Q_UNUSED(notification); - down = NO; - -+ parent->iconSelected = false; - parent->systray->updateIcon(parent->icon); - parent->menuVisible = false; - -@@ -393,6 +392,7 @@ QT_END_NAMESPACE - int clickCount = [mouseEvent clickCount]; - [self setNeedsDisplay:YES]; - -+ parent->iconSelected = (clickCount != 2) && parent->menu; - parent->systray->updateIcon(parent->icon); - - if (clickCount == 2) { -@@ -411,6 +411,10 @@ QT_END_NAMESPACE - -(void)mouseUp:(NSEvent *)mouseEvent - { - Q_UNUSED(mouseEvent); -+ -+ parent->iconSelected = false; -+ parent->systray->updateIcon(parent->icon); -+ - [self menuTrackingDone:nil]; - } - -@@ -422,6 +426,10 @@ QT_END_NAMESPACE - -(void)rightMouseUp:(NSEvent *)mouseEvent - { - Q_UNUSED(mouseEvent); -+ -+ parent->iconSelected = false; -+ parent->systray->updateIcon(parent->icon); -+ - [self menuTrackingDone:nil]; - } - -@@ -437,7 +445,7 @@ QT_END_NAMESPACE - } - - -(void)drawRect:(NSRect)rect { -- [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:down]; -+ [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; - [super drawRect:rect]; - } - @end -diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm -index 6656212..486fda0 100644 ---- a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm -+++ b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm -@@ -175,7 +175,7 @@ static void selectNextKeyWindow(NSWindow *currentKeyWindow) - if (!self.window.delegate) - return; // Already detached, pending NSAppKitDefined event - -- if (pw && pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) { -+ if (pw && pw->frameStrutEventsEnabled() && pw->m_synchedWindowState != Qt::WindowMinimized && pw->m_isExposed && isMouseEvent(theEvent)) { - NSPoint loc = [theEvent locationInWindow]; - NSRect windowFrame = [self.window convertRectFromScreen:[self.window frame]]; - NSRect contentFrame = [[self.window contentView] frame]; -@@ -918,6 +918,14 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) - [m_nsWindow setRepresentedFilename: fi.exists() ? QCFString::toNSString(filePath) : @""]; - } - -+qreal _win_devicePixelRatio() { -+ qreal result = 1.0; -+ foreach (QScreen *screen, QGuiApplication::screens()) { -+ result = qMax(result, screen->devicePixelRatio()); -+ } -+ return result; -+} -+ - void QCocoaWindow::setWindowIcon(const QIcon &icon) - { - QCocoaAutoReleasePool pool; -@@ -933,7 +941,8 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon) - if (icon.isNull()) { - [iconButton setImage:nil]; - } else { -- QPixmap pixmap = icon.pixmap(QSize(22, 22)); -+ CGFloat hgt = 16. * _win_devicePixelRatio(); -+ QPixmap pixmap = icon.pixmap(QSize(hgt, hgt)); - NSImage *image = static_cast(qt_mac_create_nsimage(pixmap)); - [iconButton setImage:image]; - [image release]; -diff --git a/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/qtbase/src/plugins/platforms/cocoa/qnsview.mm -index 6993407..0357bf4 100644 ---- a/qtbase/src/plugins/platforms/cocoa/qnsview.mm -+++ b/qtbase/src/plugins/platforms/cocoa/qnsview.mm -@@ -1321,7 +1321,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) - #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 - if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { - // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. -- if (phase == NSEventPhaseMayBegin) -+ if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) - ph = Qt::ScrollBegin; - } else - #endif -@@ -1451,6 +1451,9 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) - && qtKey == Qt::Key_Period) { - [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; - return YES; -+ } else if ([nsevent modifierFlags] & NSControlKeyMask && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { -+ [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; -+ return YES; - } - } - return [super performKeyEquivalent:nsevent]; -diff --git a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -index f1f472b..97819dd 100644 ---- a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -+++ b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -@@ -710,6 +710,8 @@ public: - QList selectedFiles() const; - void setSelectedFiles(const QList &); - QString selectedFile() const; -+ void setSelectedRemoteContent(const QByteArray &); -+ QByteArray selectedRemoteContent() const; - - private: - class Data : public QSharedData { -@@ -717,6 +719,7 @@ private: - QUrl directory; - QString selectedNameFilter; - QList selectedFiles; -+ QByteArray selectedRemoteContent; - QMutex mutex; - }; - QExplicitlySharedDataPointer m_data; -@@ -770,6 +773,20 @@ inline void QWindowsFileDialogSharedData::setSelectedFiles(const QList &ur - m_data->selectedFiles = urls; - } - -+inline QByteArray QWindowsFileDialogSharedData::selectedRemoteContent() const -+{ -+ m_data->mutex.lock(); -+ const QByteArray result = m_data->selectedRemoteContent; -+ m_data->mutex.unlock(); -+ return result; -+} -+ -+inline void QWindowsFileDialogSharedData::setSelectedRemoteContent(const QByteArray &c) -+{ -+ QMutexLocker(&m_data->mutex); -+ m_data->selectedRemoteContent = c; -+} -+ - inline void QWindowsFileDialogSharedData::fromOptions(const QSharedPointer &o) - { - QMutexLocker (&m_data->mutex); -@@ -893,6 +910,7 @@ public: - // Return the result for tracking in OnFileOk(). Differs from selection for - // example by appended default suffixes, etc. - virtual QList dialogResult() const = 0; -+ virtual QByteArray dialogRemoteContent() const { return QByteArray(); } - - inline void onFolderChange(IShellItem *); - inline void onSelectionChange(); -@@ -1286,7 +1304,12 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel - - void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const - { -- m_fileDialog->SetFileName((wchar_t*)fileName.utf16()); -+ QString file = QDir::toNativeSeparators(fileName); -+ int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); -+ if (lastBackSlash >= 0) { -+ file = file.mid(lastBackSlash + 1); -+ } -+ m_fileDialog->SetFileName((wchar_t*)file.utf16());; - } - - // Return the index of the selected filter, accounting for QFileDialog -@@ -1356,6 +1379,7 @@ bool QWindowsNativeFileDialogBase::onFileOk() - { - // Store selected files as GetResults() returns invalid data after the dialog closes. - m_data.setSelectedFiles(dialogResult()); -+ m_data.setSelectedRemoteContent(dialogRemoteContent()); - return true; - } - -@@ -1484,6 +1508,7 @@ public: - QWindowsNativeFileDialogBase(data) {} - virtual QList selectedFiles() const; - virtual QList dialogResult() const; -+ virtual QByteArray dialogRemoteContent() const; - - private: - inline IFileOpenDialog *openFileDialog() const -@@ -1499,6 +1524,54 @@ QList QWindowsNativeOpenFileDialog::dialogResult() const - return result; - } - -+QByteArray QWindowsNativeOpenFileDialog::dialogRemoteContent() const { -+ QByteArray result; -+ IShellItemArray *items = 0; -+ if (FAILED(openFileDialog()->GetResults(&items)) || !items) -+ return result; -+ DWORD itemCount = 0; -+ if (FAILED(items->GetCount(&itemCount)) || !itemCount) -+ return result; -+ for (DWORD i = 0; i < itemCount; ++i) { -+ IShellItem *item = 0; -+ if (SUCCEEDED(items->GetItemAt(i, &item))) { -+ SFGAOF attributes = 0; -+ // Check whether it has a file system representation? -+ if (FAILED(item->GetAttributes(SFGAO_FILESYSTEM, &attributes)) || (attributes & SFGAO_FILESYSTEM)) { -+ LPWSTR name = 0; -+ if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, &name))) { -+ CoTaskMemFree(name); -+ continue; -+ } -+ } -+ if (FAILED(item->GetAttributes(SFGAO_STREAM, &attributes)) || !(attributes & SFGAO_STREAM)) -+ continue; -+ -+ IBindCtx *bind = 0; -+ if (FAILED(CreateBindCtx(0, &bind))) -+ continue; -+ -+ IStream *stream = 0; -+ if (FAILED(item->BindToHandler(bind, BHID_Stream, IID_IStream, reinterpret_cast(&stream)))) -+ continue; -+ -+ STATSTG stat = { 0 }; -+ if (FAILED(stream->Stat(&stat, STATFLAG_NONAME)) || !stat.cbSize.QuadPart) -+ continue; -+ -+ quint64 fullSize = stat.cbSize.QuadPart; -+ result.resize(fullSize); -+ ULONG read = 0; -+ HRESULT r = stream->Read(result.data(), fullSize, &read); -+ if (r == S_FALSE || r == S_OK) -+ return result; -+ -+ result.clear(); -+ } -+ } -+ return result; -+} -+ - QList QWindowsNativeOpenFileDialog::selectedFiles() const - { - QList result; -@@ -1562,6 +1635,7 @@ public: - virtual QUrl directory() const Q_DECL_OVERRIDE; - virtual void selectFile(const QUrl &filename) Q_DECL_OVERRIDE; - virtual QList selectedFiles() const Q_DECL_OVERRIDE; -+ virtual QByteArray selectedRemoteContent() const Q_DECL_OVERRIDE; - virtual void setFilter() Q_DECL_OVERRIDE; - virtual void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE; - virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; -@@ -1655,6 +1729,11 @@ QList QWindowsFileDialogHelper::selectedFiles() const - return m_data.selectedFiles(); - } - -+QByteArray QWindowsFileDialogHelper::selectedRemoteContent() const -+{ -+ return m_data.selectedRemoteContent(); -+} -+ - void QWindowsFileDialogHelper::setFilter() - { - qCDebug(lcQpaDialogs) << __FUNCTION__; -@@ -1945,6 +2024,7 @@ public: - virtual QUrl directory() const Q_DECL_OVERRIDE; - virtual void selectFile(const QUrl &url) Q_DECL_OVERRIDE; - virtual QList selectedFiles() const Q_DECL_OVERRIDE; -+ virtual QByteArray selectedRemoteContent() const Q_DECL_OVERRIDE; - virtual void setFilter() Q_DECL_OVERRIDE {} - virtual void selectNameFilter(const QString &) Q_DECL_OVERRIDE; - virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; -@@ -1988,6 +2068,11 @@ QList QWindowsXpFileDialogHelper::selectedFiles() const - return m_data.selectedFiles(); - } - -+QByteArray QWindowsXpFileDialogHelper::selectedRemoteContent() const -+{ -+ return m_data.selectedRemoteContent(); -+} -+ - void QWindowsXpFileDialogHelper::selectNameFilter(const QString &f) - { - m_data.setSelectedNameFilter(f); // Dialog cannot be updated at run-time. -diff --git a/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp b/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -index ff9ad18..3fd0848 100644 ---- a/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -+++ b/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -@@ -537,17 +537,16 @@ static inline int toKeyOrUnicode(int vk, int scancode, unsigned char *kbdBuffer, - Q_ASSERT(vk > 0 && vk < 256); - int code = 0; - QChar unicodeBuffer[5]; -- // While key combinations containing alt and ctrl might trigger the third assignment of a key -- // (for example "alt+ctrl+q" causes '@' on a German layout), ToUnicode often does not return the -- // wanted character if only the ctrl modifier is used. Thus we unset this modifier temporarily -- // if it is not used together with alt. -- const unsigned char controlState = kbdBuffer[VK_MENU] ? 0 : kbdBuffer[VK_CONTROL]; -- if (controlState) -- kbdBuffer[VK_CONTROL] = 0; -- int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -- if (controlState) -- kbdBuffer[VK_CONTROL] = controlState; -- if (res) -+ int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -+ // When Ctrl modifier is used ToUnicode does not return correct values. In order to assign the -+ // right key the control modifier is removed for just that function if the previous call failed. -+ if (res == 0 && kbdBuffer[VK_CONTROL]) { -+ const unsigned char controlState = kbdBuffer[VK_CONTROL]; -+ kbdBuffer[VK_CONTROL] = 0; -+ res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -+ kbdBuffer[VK_CONTROL] = controlState; -+ } -+ if (res) - code = unicodeBuffer[0].toUpper().unicode(); - - // Qt::Key_*'s are not encoded below 0x20, so try again, and DEL keys (0x7f) is encoded with a -@@ -833,7 +832,10 @@ bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, con - - const int qtKey = CmdTbl[cmd]; - sendExtendedPressRelease(receiver, qtKey, Qt::KeyboardModifier(state), 0, 0, 0); -- return true; -+ // QTBUG-43343: Make sure to return false if Qt does not handle the key, otherwise, -+ // the keys are not passed to the active media player. -+ const QKeySequence sequence(Qt::Modifier(state) + qtKey); -+ return QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(sequence); - #else - Q_UNREACHABLE(); - return false; -diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp -index 8a80729..16fda26 100644 ---- a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp -+++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp -@@ -943,7 +943,7 @@ void QWindowsWindow::destroyWindow() - // Clear any transient child relationships as Windows will otherwise destroy them (QTBUG-35499, QTBUG-36666) - if (QWindow *transientChild = findTransientChild(window())) - if (QWindowsWindow *tw = QWindowsWindow::baseWindowOf(transientChild)) -- tw->updateTransientParent(); -+ tw->clearTransientParent(); - QWindowsContext *context = QWindowsContext::instance(); - if (context->windowUnderMouse() == window()) - context->clearWindowUnderMouse(); -@@ -1144,11 +1144,24 @@ void QWindowsWindow::updateTransientParent() const - if (const QWindowsWindow *tw = QWindowsWindow::baseWindowOf(tp)) - if (!tw->testFlag(WithinDestroy)) // Prevent destruction by parent window (QTBUG-35499, QTBUG-36666) - newTransientParent = tw->handle(); -- if (newTransientParent != oldTransientParent) -+ if (newTransientParent && newTransientParent != oldTransientParent) - SetWindowLongPtr(m_data.hwnd, GWL_HWNDPARENT, (LONG_PTR)newTransientParent); - #endif // !Q_OS_WINCE - } - -+void QWindowsWindow::clearTransientParent() const -+{ -+#ifndef Q_OS_WINCE -+ if (window()->type() == Qt::Popup) -+ return; // QTBUG-34503, // a popup stays on top, no parent, see also WindowCreationData::fromWindow(). -+ // Update transient parent. -+ const HWND oldTransientParent = transientParentHwnd(m_data.hwnd); -+ HWND newTransientParent = 0; -+ if (newTransientParent != oldTransientParent) -+ SetWindowLongPtr(m_data.hwnd, GWL_HWNDPARENT, (LONG_PTR)newTransientParent); -+#endif // !Q_OS_WINCE -+} -+ - static inline bool testShowWithoutActivating(const QWindow *window) - { - // QWidget-attribute Qt::WA_ShowWithoutActivating . -diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/qtbase/src/plugins/platforms/windows/qwindowswindow.h -index 71debf2..4fa2e5d 100644 ---- a/qtbase/src/plugins/platforms/windows/qwindowswindow.h -+++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.h -@@ -268,6 +268,7 @@ private: - inline void setWindowState_sys(Qt::WindowState newState); - inline void setParent_sys(const QPlatformWindow *parent); - inline void updateTransientParent() const; -+ inline void clearTransientParent() const; - void destroyWindow(); - inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } - void setDropSiteEnabled(bool enabled); -diff --git a/qtbase/src/widgets/dialogs/qfiledialog.cpp b/qtbase/src/widgets/dialogs/qfiledialog.cpp -index 6065ad0..03fad7a 100644 ---- a/qtbase/src/widgets/dialogs/qfiledialog.cpp -+++ b/qtbase/src/widgets/dialogs/qfiledialog.cpp -@@ -1219,6 +1219,14 @@ QList QFileDialogPrivate::userSelectedFiles() const - return files; - } - -+QByteArray QFileDialogPrivate::userSelectedRemoteContent() const -+{ -+ if (nativeDialogInUse) -+ return selectedRemoteContent_sys(); -+ -+ return QByteArray(); -+} -+ - QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const - { - QStringList files; -@@ -1282,6 +1290,13 @@ QStringList QFileDialog::selectedFiles() const - return files; - } - -+QByteArray QFileDialog::selectedRemoteContent() const -+{ -+ Q_D(const QFileDialog); -+ -+ return d->userSelectedRemoteContent(); -+} -+ - /*! - Returns a list of urls containing the selected files in the dialog. - If no files are selected, or the mode is not ExistingFiles or -diff --git a/qtbase/src/widgets/dialogs/qfiledialog.h b/qtbase/src/widgets/dialogs/qfiledialog.h -index 70e498a..b13e8b2 100644 ---- a/qtbase/src/widgets/dialogs/qfiledialog.h -+++ b/qtbase/src/widgets/dialogs/qfiledialog.h -@@ -103,6 +103,7 @@ public: - - void selectFile(const QString &filename); - QStringList selectedFiles() const; -+ QByteArray selectedRemoteContent() const; - - void selectUrl(const QUrl &url); - QList selectedUrls() const; -diff --git a/qtbase/src/widgets/dialogs/qfiledialog_p.h b/qtbase/src/widgets/dialogs/qfiledialog_p.h -index cc2f481..cf70355 100644 ---- a/qtbase/src/widgets/dialogs/qfiledialog_p.h -+++ b/qtbase/src/widgets/dialogs/qfiledialog_p.h -@@ -123,6 +123,7 @@ public: - static QString initialSelection(const QUrl &path); - QStringList typedFiles() const; - QList userSelectedFiles() const; -+ QByteArray userSelectedRemoteContent() const; - QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const; - QList addDefaultSuffixToUrls(const QList &urlsToFix) const; - bool removeDirectory(const QString &path); -@@ -250,6 +251,7 @@ public: - QUrl directory_sys() const; - void selectFile_sys(const QUrl &filename); - QList selectedFiles_sys() const; -+ QByteArray selectedRemoteContent_sys() const; - void setFilter_sys(); - void selectNameFilter_sys(const QString &filter); - QString selectedNameFilter_sys() const; -@@ -387,6 +389,13 @@ inline QList QFileDialogPrivate::selectedFiles_sys() const - return QList(); - } - -+inline QByteArray QFileDialogPrivate::selectedRemoteContent_sys() const -+{ -+ if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) -+ return helper->selectedRemoteContent(); -+ return QByteArray(); -+} -+ - inline void QFileDialogPrivate::setFilter_sys() - { - if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) -diff --git a/qtbase/src/widgets/kernel/qwidget.cpp b/qtbase/src/widgets/kernel/qwidget.cpp -index 315d615..e99b1c3 100644 ---- a/qtbase/src/widgets/kernel/qwidget.cpp -+++ b/qtbase/src/widgets/kernel/qwidget.cpp -@@ -8674,7 +8674,7 @@ bool QWidget::event(QEvent *event) - case QEvent::KeyPress: { - QKeyEvent *k = (QKeyEvent *)event; - bool res = false; -- if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) { //### Add MetaModifier? -+ if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? - if (k->key() == Qt::Key_Backtab - || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier))) - res = focusNextPrevChild(false); -diff --git a/qtbase/src/widgets/util/qsystemtrayicon.cpp b/qtbase/src/widgets/util/qsystemtrayicon.cpp -index 7d04cab..53c2856 100644 ---- a/qtbase/src/widgets/util/qsystemtrayicon.cpp -+++ b/qtbase/src/widgets/util/qsystemtrayicon.cpp -@@ -710,7 +710,9 @@ void QSystemTrayIconPrivate::updateMenu_sys_qpa() - menu->setPlatformMenu(platformMenu); - } - qpa_sys->updateMenu(menu->platformMenu()); -- } -+ } else { -+ qpa_sys->updateMenu(0); -+ } - } - - void QSystemTrayIconPrivate::updateToolTip_sys_qpa() -diff --git a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp -index e6385ba..8e1543e 100644 ---- a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp -+++ b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp -@@ -1870,7 +1870,7 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) - - if (unknown && !isReadOnly()) { - QString t = event->text(); -- if (!t.isEmpty() && t.at(0).isPrint()) { -+ if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { - insert(t); - #ifndef QT_NO_COMPLETER - complete(event->key()); -diff --git a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp -index dfec6a1..a1be4a1 100644 ---- a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp -+++ b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp -@@ -1340,7 +1340,7 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) - process: - { - QString text = e->text(); -- if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t'))) { -+ if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { - if (overwriteMode - // no need to call deleteChar() if we have a selection, insertText - // does it already -diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -index ea0254d..93d9dc4 100644 ---- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -+++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -@@ -12,7 +12,6 @@ - // Authors: Vikas Arora (vikaas.arora@gmail.com) - // Jyrki Alakuijala (jyrki@google.com) - --#include - #include - #include "./alphai.h" - #include "./vp8li.h" -@@ -740,6 +739,7 @@ static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data, - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); -+ assert(pos < end); - assert(last_row <= height); - assert(Is8bOptimizable(hdr)); - -@@ -830,6 +830,7 @@ static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data, - (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); -+ assert(src < src_end); - assert(src_last <= src_end); - - while (!br->eos_ && src < src_last) { -@@ -1294,6 +1295,10 @@ int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) { - assert(dec->action_ == READ_DATA); - assert(last_row <= dec->height_); - -+ if (dec->last_pixel_ == dec->width_ * dec->height_) { -+ return 1; // Done -+ } -+ - // Decode (with special row processing). - return alph_dec->use_8b_decode ? - DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_, diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp b/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp deleted file mode 100644 index 2bf3bfdab..000000000 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp +++ /dev/null @@ -1,11084 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/* This file is autogenerated from the Unicode 6.2 database. Do not edit */ - -#include "qunicodetables_p.h" - -QT_BEGIN_NAMESPACE - -namespace QUnicodeTables { - -static const unsigned short uc_property_trie[] = { - // 0 - 0x11000 - - 6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480, - 6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736, - 6768, 6800, 6832, 6864, 6896, 6928, 6960, 6992, - 7024, 7056, 7088, 7120, 7152, 7184, 7216, 7248, - 7280, 7312, 7344, 7376, 7408, 7440, 7472, 7504, - 7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760, - 7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016, - 8048, 8080, 8112, 8144, 8176, 8208, 8240, 8272, - 8304, 8336, 8368, 8400, 8400, 8432, 8464, 8496, - 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752, - 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008, - 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9264, - 9296, 9328, 9360, 9392, 9424, 9456, 9488, 9520, - 9552, 9584, 9616, 9648, 9680, 9712, 9744, 9776, - 9808, 9840, 9872, 9904, 9936, 9968, 10000, 9904, - 10032, 10064, 10096, 10128, 10160, 10192, 10224, 9904, - - 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480, - 10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704, - 10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928, - 10960, 10768, 10992, 11024, 11056, 11088, 11088, 11120, - 11152, 11184, 11184, 11184, 11184, 11184, 11184, 11184, - 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, - 11184, 11184, 11184, 11216, 11248, 11280, 11280, 11312, - 11344, 11376, 11408, 11440, 11472, 11504, 11536, 11568, - 11600, 11632, 11664, 11696, 11728, 11760, 11792, 11824, - 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080, - 12112, 12144, 12176, 12208, 12240, 12272, 9904, 9904, - 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528, - 12560, 12592, 12624, 12656, 9904, 9904, 12688, 12720, - 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976, - 13008, 13008, 13008, 13008, 13040, 13008, 13008, 13072, - 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328, - - 13360, 13392, 13424, 13456, 13488, 13520, 13552, 13584, - 13616, 13648, 13680, 13712, 13744, 13776, 13808, 13840, - 13872, 13904, 13936, 13968, 14000, 14032, 14064, 14096, - 14128, 14160, 14192, 14224, 14256, 14288, 14320, 14352, - 14384, 14416, 14448, 14480, 14512, 14544, 14576, 14608, - 14384, 14384, 14384, 14384, 14640, 14672, 14704, 14736, - 14768, 14800, 14384, 14832, 14864, 14896, 14928, 14960, - 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216, - 15248, 15248, 15248, 15248, 15248, 15248, 15248, 15248, - 15280, 15280, 15280, 15280, 15312, 15344, 15376, 15408, - 15440, 15472, 15280, 15504, 15536, 15568, 15600, 15632, - 15664, 15696, 15728, 9904, 9904, 9904, 9904, 9904, - 15760, 15792, 15824, 15856, 15888, 15888, 15888, 15920, - 15952, 15984, 16016, 16048, 16080, 16112, 16112, 16144, - 16176, 16208, 9904, 9904, 16240, 16272, 16272, 16304, - 16336, 16336, 16336, 16336, 16336, 16336, 16368, 16400, - - 16432, 16464, 16496, 16528, 16560, 16592, 16624, 16656, - 16688, 16720, 16752, 16752, 16784, 16816, 16848, 16880, - 16912, 16944, 16976, 17008, 16944, 17040, 17072, 17104, - 17136, 17136, 17168, 17200, 17232, 17232, 17264, 17296, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17360, 17392, 17392, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17456, 17488, 17520, - - 17552, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17616, 17648, 17680, 17712, - 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, - 17776, 17808, 17840, 17872, 17904, 17936, 17936, 17968, - 18000, 18032, 18064, 18096, 18128, 18160, 9904, 18192, - 18224, 18256, 18288, 18320, 18352, 18384, 18416, 18448, - 18480, 18512, 18544, 18576, 18608, 18640, 18672, 9904, - 18704, 18736, 18768, 18800, 18832, 18864, 18896, 18928, - 18960, 18992, 9904, 9904, 9904, 9904, 19024, 19056, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19312, 19344, 19376, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19472, 19472, 19472, 19472, 19472, 19472, 19472, 19472, - 19504, 19536, 19568, 19600, 19632, 19632, 19664, 17520, - 19696, 19728, 19760, 19792, 19792, 19824, 19856, 19792, - 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792, - 19792, 19888, 19920, 19792, 19952, 19792, 19984, 20016, - 20048, 20080, 20112, 20144, 19792, 19792, 19792, 20176, - 20208, 20240, 20272, 20304, 20336, 20368, 20400, 20432, - - 20464, 20496, 20528, 9904, 20560, 20560, 20560, 20592, - 20624, 20656, 20688, 20720, 20752, 9904, 20784, 20816, - 9904, 9904, 9904, 9904, 20848, 20880, 20912, 9904, - 20944, 20976, 21008, 9904, 21040, 21072, 21104, 9904, - 21136, 21168, 21200, 21232, 21264, 21296, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 21328, 21360, 21392, 8400, 8400, 8400, 8400, 8400, - 21424, 21456, 8400, 8400, 21488, 21520, 8400, 8400, - 21552, 21584, 21616, 21648, 8400, 8400, 8400, 8400, - 21680, 21712, 21744, 21776, 8400, 8400, 8400, 8400, - 21808, 21808, 21840, 8400, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 21872, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, - - // 0x11000 - 0x110000 - - 21904, 22160, 22416, 22416, 22416, 22416, 22672, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22928, 22928, 22928, 23184, 23440, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 23696, 23696, 23952, 24208, 24464, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 24720, 24720, 24976, 22416, 22416, 22416, 22416, 25232, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 25488, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 25744, 26000, 26256, 26512, 26768, 27024, 27280, 27536, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 27792, 27792, 27792, 27792, 27792, 27792, 28048, 27792, - 28304, 28560, 28816, 29072, 29328, 29584, 29840, 30096, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30864, 31120, - 31120, 31120, 31120, 31120, 31120, 31120, 31120, 31120, - 31120, 31120, 31120, 31120, 31120, 31120, 31120, 31376, - 31632, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 32144, 32144, 32400, 31888, 31888, 31888, 31888, 32656, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 32656, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 32912, 33168, 33424, 33424, 33424, 33424, 33424, 33424, - 33424, 33424, 33424, 33424, 33424, 33424, 33424, 33424, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33936, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33936, - - - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 6, 7, - - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 14, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 9, - - 14, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 39, 40, 41, 42, 43, - - 42, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 39, 45, 46, 36, 0, - - 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - - 48, 49, 50, 12, 12, 12, 51, 14, - 52, 51, 53, 54, 36, 55, 51, 52, - 56, 57, 58, 59, 60, 61, 14, 62, - 52, 63, 53, 64, 65, 65, 65, 49, - - 66, 66, 66, 66, 66, 66, 38, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 38, 66, 66, 66, 66, 66, 66, 36, - 38, 66, 66, 66, 66, 66, 38, 67, - - 68, 68, 68, 68, 68, 68, 44, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 44, 68, 68, 68, 68, 68, 68, 36, - 44, 68, 68, 68, 68, 68, 44, 69, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 72, 73, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 72, 73, - 70, 71, 70, 71, 70, 71, 70, 71, - 74, 75, 76, 77, 70, 71, 70, 71, - 78, 70, 71, 70, 71, 70, 71, 76, - - 77, 72, 73, 70, 71, 70, 71, 70, - 71, 79, 72, 73, 70, 71, 70, 71, - 70, 71, 72, 73, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 72, 73, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 80, 70, 71, 70, 71, 70, 71, 81, - - 82, 83, 72, 73, 72, 73, 84, 72, - 73, 85, 85, 72, 73, 78, 86, 87, - 88, 72, 73, 85, 89, 90, 91, 92, - 72, 73, 93, 78, 91, 94, 95, 96, - - 70, 71, 72, 73, 72, 73, 97, 72, - 73, 97, 78, 78, 72, 73, 97, 70, - 71, 98, 98, 72, 73, 72, 73, 99, - 72, 73, 78, 100, 72, 73, 78, 101, - - 100, 100, 100, 100, 102, 103, 104, 102, - 103, 104, 102, 103, 104, 70, 71, 70, - 71, 70, 71, 70, 71, 70, 71, 70, - 71, 70, 71, 70, 71, 105, 70, 71, - - 70, 71, 70, 71, 72, 73, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 106, 102, 103, 104, 70, 71, 107, 108, - 109, 110, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 109, 110, 109, 110, 111, 112, 109, 110, - - 113, 114, 111, 112, 111, 112, 109, 110, - 109, 110, 109, 110, 109, 110, 109, 110, - 109, 110, 109, 110, 114, 114, 114, 115, - 115, 115, 116, 117, 118, 119, 120, 121, - - 121, 117, 122, 123, 124, 125, 126, 122, - 126, 122, 126, 122, 126, 122, 126, 122, - 127, 128, 129, 130, 131, 78, 132, 132, - 78, 133, 78, 134, 78, 78, 78, 78, - - 132, 78, 78, 135, 78, 136, 137, 78, - 138, 139, 78, 140, 78, 78, 78, 139, - 78, 141, 142, 78, 78, 143, 78, 78, - 78, 78, 78, 78, 78, 144, 78, 78, - - 145, 78, 78, 145, 78, 78, 78, 78, - 145, 146, 147, 147, 148, 78, 78, 78, - 78, 78, 149, 78, 100, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 150, 150, 150, 150, 150, 114, 114, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 152, 152, 153, 153, 153, 153, 153, - - 154, 154, 42, 42, 42, 42, 152, 152, - 155, 152, 152, 152, 155, 152, 152, 152, - 153, 153, 42, 42, 42, 42, 42, 156, - 52, 52, 52, 52, 52, 52, 42, 157, - - 151, 151, 151, 151, 151, 42, 42, 42, - 42, 42, 158, 158, 159, 160, 161, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - - 163, 163, 163, 163, 163, 164, 163, 163, - 163, 163, 163, 163, 163, 164, 164, 163, - 164, 163, 164, 163, 163, 165, 166, 166, - 166, 166, 165, 167, 166, 166, 166, 166, - - 166, 168, 168, 169, 169, 169, 169, 170, - 170, 166, 166, 166, 166, 169, 169, 166, - 169, 169, 166, 166, 171, 171, 171, 171, - 172, 166, 166, 166, 166, 164, 164, 164, - - 173, 173, 163, 173, 173, 174, 175, 176, - 176, 176, 175, 175, 175, 176, 176, 177, - 178, 178, 178, 179, 179, 179, 179, 178, - 180, 181, 181, 182, 183, 184, 184, 185, - - 186, 186, 187, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, - 189, 190, 189, 190, 191, 192, 189, 190, - 193, 193, 194, 195, 195, 195, 196, 193, - - 193, 193, 193, 193, 197, 198, 199, 200, - 201, 201, 201, 193, 202, 193, 203, 203, - 204, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, - - 205, 205, 193, 205, 205, 205, 205, 205, - 205, 205, 206, 206, 207, 208, 208, 208, - 209, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, - - 210, 210, 211, 210, 210, 210, 210, 210, - 210, 210, 212, 212, 213, 214, 214, 215, - 216, 217, 218, 219, 219, 220, 221, 222, - 223, 224, 225, 226, 225, 226, 225, 226, - - 225, 226, 227, 228, 227, 228, 227, 228, - 227, 228, 227, 228, 227, 228, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 236, 237, 239, 240, 240, 240, - - 241, 242, 243, 242, 243, 243, 243, 242, - 243, 243, 243, 243, 242, 241, 242, 243, - 244, 244, 244, 244, 244, 244, 244, 244, - 244, 245, 244, 244, 244, 244, 244, 244, - - 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, - 246, 246, 246, 246, 246, 246, 246, 246, - 246, 247, 246, 246, 246, 246, 246, 246, - - 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, - 248, 249, 250, 249, 250, 250, 250, 249, - 250, 250, 250, 250, 249, 248, 249, 250, - - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 253, 254, - 251, 252, 251, 252, 251, 252, 251, 252, - - 251, 252, 255, 256, 256, 164, 164, 257, - 258, 258, 259, 260, 261, 262, 261, 262, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - - 263, 253, 254, 251, 252, 259, 260, 251, - 252, 259, 260, 251, 252, 259, 260, 264, - 253, 254, 253, 254, 251, 252, 253, 254, - 251, 252, 253, 254, 253, 254, 253, 254, - - 251, 252, 253, 254, 253, 254, 253, 254, - 251, 252, 253, 254, 265, 266, 253, 254, - 253, 254, 253, 254, 253, 254, 267, 268, - 253, 254, 269, 270, 269, 270, 269, 270, - - 259, 260, 259, 260, 259, 260, 259, 260, - 259, 260, 259, 260, 259, 260, 259, 260, - 269, 270, 269, 270, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - - 271, 272, 271, 272, 273, 274, 275, 276, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, - - 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 193, - 193, 278, 279, 279, 280, 281, 280, 279, - - 193, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - - 282, 282, 282, 282, 282, 282, 282, 283, - 193, 284, 285, 193, 193, 193, 193, 286, - 287, 288, 289, 289, 289, 289, 288, 289, - 289, 289, 290, 288, 289, 289, 289, 289, - - 289, 289, 291, 288, 288, 288, 288, 288, - 289, 289, 288, 289, 289, 290, 292, 289, - 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, - - 309, 310, 311, 309, 289, 291, 312, 313, - 287, 287, 287, 287, 287, 287, 287, 287, - 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, - - 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 287, 287, 287, 287, 287, - 314, 314, 314, 315, 316, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 317, 317, 317, 317, 318, 319, 320, 320, - 321, 322, 322, 323, 19, 324, 325, 325, - 326, 326, 326, 326, 326, 326, 327, 327, - 328, 329, 330, 331, 332, 319, 333, 334, - - 335, 336, 337, 337, 337, 337, 338, 339, - 340, 339, 340, 340, 340, 340, 340, 339, - 339, 339, 339, 340, 340, 340, 340, 340, - 340, 340, 340, 341, 341, 341, 341, 341, - - 342, 340, 340, 340, 340, 340, 340, 340, - 339, 340, 340, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 351, 352, 353, 326, - 326, 354, 354, 354, 355, 354, 354, 356, - - 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 371, - 372, 339, 339, 339, 336, 373, 373, 373, - 374, 340, 340, 340, 340, 340, 340, 340, - - 340, 340, 340, 340, 340, 340, 340, 340, - 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 340, 340, 340, 340, 340, 340, - - 340, 340, 340, 340, 340, 340, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 340, - 375, 375, 340, 340, 340, 340, 340, 375, - - 337, 340, 338, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 340, 339, 340, 376, - 340, 340, 339, 337, 377, 339, 378, 378, - 378, 378, 378, 378, 378, 379, 380, 378, - - 378, 378, 378, 381, 378, 382, 382, 378, - 378, 380, 381, 378, 378, 381, 383, 383, - 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 375, 375, 375, 394, 394, 395, - - 396, 396, 396, 397, 397, 397, 397, 397, - 397, 397, 397, 397, 397, 397, 319, 398, - 399, 400, 401, 401, 401, 399, 399, 399, - 399, 399, 401, 401, 401, 401, 399, 401, - - 401, 401, 401, 401, 401, 401, 401, 401, - 399, 401, 399, 401, 399, 402, 402, 403, - 404, 405, 404, 404, 405, 404, 404, 405, - 405, 405, 404, 405, 405, 404, 405, 404, - - 404, 404, 405, 404, 405, 404, 405, 404, - 405, 404, 404, 319, 319, 403, 402, 402, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 407, 407, 407, 406, 406, 406, 406, - - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 407, 407, 406, 341, 341, - 341, 408, 341, 408, 408, 341, 341, 341, - 408, 408, 341, 341, 341, 341, 341, 341, - - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - - 409, 409, 409, 409, 409, 409, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, - 410, 411, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, - - 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 423, 423, 423, 423, 423, - 423, 423, 424, 423, 425, 425, 426, 427, - 428, 429, 430, 287, 287, 287, 287, 287, - - 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 432, 432, - 432, 432, 433, 432, 432, 432, 432, 432, - - 432, 432, 432, 432, 433, 432, 432, 432, - 433, 432, 432, 432, 432, 432, 287, 287, - 434, 434, 434, 434, 434, 434, 434, 434, - 434, 434, 434, 434, 434, 434, 434, 287, - - 435, 436, 436, 436, 436, 436, 435, 436, - 436, 435, 436, 436, 436, 436, 436, 435, - 436, 436, 436, 436, 435, 436, 437, 437, - 437, 438, 438, 438, 287, 287, 439, 287, - - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 440, 319, 440, 440, 440, 440, 440, 440, - 440, 440, 441, 441, 441, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 319, 319, 319, 319, 442, 442, 443, 442, - 442, 443, 442, 442, 442, 443, 443, 443, - 444, 445, 446, 442, 442, 442, 443, 442, - 442, 443, 443, 442, 442, 442, 442, 319, - - 447, 448, 448, 449, 450, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 452, 451, 451, 451, 451, 451, 451, - 451, 452, 451, 451, 452, 451, 451, 451, - 451, 451, 453, 454, 455, 451, 449, 449, - - 449, 448, 448, 448, 448, 448, 448, 448, - 448, 449, 449, 449, 449, 456, 457, 454, - 451, 164, 166, 458, 458, 447, 453, 453, - 459, 459, 459, 459, 459, 459, 459, 459, - - 451, 451, 448, 448, 460, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 474, 474, 474, 474, - 193, 475, 475, 476, 476, 477, 476, 476, - - 193, 478, 479, 479, 193, 480, 480, 480, - 480, 480, 480, 480, 480, 193, 193, 480, - 480, 193, 193, 480, 480, 480, 480, 480, - 480, 480, 480, 480, 480, 480, 480, 480, - - 480, 480, 480, 480, 480, 480, 480, 480, - 480, 193, 480, 480, 480, 480, 480, 480, - 480, 193, 480, 193, 193, 193, 480, 480, - 480, 480, 193, 193, 481, 482, 483, 479, - - 479, 478, 478, 478, 478, 193, 193, 479, - 479, 193, 193, 484, 484, 485, 486, 193, - 193, 193, 193, 193, 193, 193, 193, 483, - 193, 193, 193, 193, 487, 487, 193, 487, - - 480, 480, 478, 478, 193, 193, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, - 480, 480, 498, 498, 499, 499, 499, 499, - 499, 500, 501, 502, 193, 193, 193, 193, - - 193, 503, 504, 505, 193, 506, 506, 506, - 506, 506, 506, 193, 193, 193, 193, 506, - 506, 193, 193, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, - - 506, 506, 506, 506, 506, 506, 506, 506, - 506, 193, 506, 506, 506, 506, 506, 506, - 506, 193, 506, 507, 193, 506, 507, 193, - 506, 506, 193, 193, 508, 193, 509, 509, - - 509, 504, 504, 193, 193, 193, 193, 504, - 504, 193, 193, 504, 504, 510, 193, 193, - 193, 511, 193, 193, 193, 193, 193, 193, - 193, 507, 507, 507, 506, 193, 507, 193, - - 193, 193, 193, 193, 193, 193, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, - 504, 504, 506, 506, 506, 511, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 522, 522, 523, 193, 524, 524, 524, - 524, 524, 524, 524, 525, 524, 193, 524, - 524, 524, 193, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 524, - - 524, 524, 524, 524, 524, 524, 524, 524, - 524, 193, 524, 524, 524, 524, 524, 524, - 524, 193, 524, 524, 193, 524, 524, 524, - 524, 524, 193, 193, 526, 524, 523, 523, - - 523, 522, 522, 522, 522, 522, 193, 522, - 522, 523, 193, 523, 523, 527, 193, 193, - 524, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 524, 525, 528, 528, 193, 193, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, - 539, 540, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 541, 542, 542, 193, 543, 543, 543, - 543, 543, 543, 543, 543, 193, 193, 543, - 543, 193, 193, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, - - 543, 543, 543, 543, 543, 543, 543, 543, - 543, 193, 543, 543, 543, 543, 543, 543, - 543, 193, 543, 543, 193, 544, 543, 543, - 543, 543, 193, 193, 545, 543, 546, 541, - - 542, 541, 541, 541, 547, 193, 193, 542, - 548, 193, 193, 548, 548, 549, 193, 193, - 193, 193, 193, 193, 193, 193, 550, 546, - 193, 193, 193, 193, 551, 551, 193, 543, - - 543, 543, 547, 547, 193, 193, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, - 562, 544, 563, 563, 563, 563, 563, 563, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 564, 565, 193, 565, 565, 565, - 565, 565, 565, 193, 193, 193, 565, 565, - 565, 193, 565, 565, 566, 565, 193, 193, - 193, 565, 565, 193, 565, 193, 565, 565, - - 193, 193, 193, 565, 565, 193, 193, 193, - 565, 565, 565, 193, 193, 193, 565, 565, - 565, 565, 565, 565, 565, 565, 567, 565, - 565, 565, 193, 193, 193, 193, 568, 569, - - 564, 569, 569, 193, 193, 193, 569, 569, - 569, 193, 570, 570, 570, 571, 193, 193, - 572, 193, 193, 193, 193, 193, 193, 568, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, - 583, 583, 583, 584, 584, 584, 584, 584, - 584, 585, 584, 193, 193, 193, 193, 193, - - 193, 586, 586, 586, 193, 587, 587, 587, - 587, 587, 587, 587, 587, 193, 587, 587, - 587, 193, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, - - 587, 587, 587, 587, 587, 587, 587, 587, - 587, 193, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 193, 587, 587, 587, - 587, 587, 193, 193, 193, 588, 589, 589, - - 589, 586, 586, 586, 586, 193, 589, 589, - 590, 193, 589, 589, 589, 591, 193, 193, - 193, 193, 193, 193, 193, 592, 593, 193, - 588, 588, 193, 193, 193, 193, 193, 193, - - 587, 587, 594, 594, 193, 193, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, - 193, 193, 193, 193, 193, 193, 193, 193, - 605, 605, 605, 605, 605, 605, 605, 606, - - 193, 193, 607, 607, 193, 608, 608, 608, - 608, 608, 608, 608, 608, 193, 608, 608, - 608, 193, 608, 608, 608, 608, 608, 608, - 608, 608, 608, 608, 608, 608, 608, 608, - - 608, 608, 608, 608, 608, 608, 608, 608, - 608, 193, 608, 608, 608, 608, 608, 608, - 608, 608, 608, 608, 193, 608, 608, 608, - 608, 608, 193, 193, 609, 610, 607, 611, - - 612, 607, 613, 607, 607, 193, 611, 612, - 612, 193, 612, 612, 614, 615, 193, 193, - 193, 193, 193, 193, 193, 613, 613, 193, - 193, 193, 193, 193, 193, 193, 608, 193, - - 608, 608, 616, 616, 193, 193, 617, 618, - 619, 620, 621, 622, 623, 624, 625, 626, - 193, 627, 627, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 628, 628, 193, 629, 629, 629, - 629, 629, 629, 629, 629, 193, 629, 629, - 629, 193, 629, 629, 629, 629, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, - - 629, 629, 629, 629, 629, 629, 629, 629, - 629, 630, 629, 629, 629, 629, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, - 629, 629, 630, 193, 193, 631, 632, 628, - - 628, 633, 633, 633, 634, 193, 628, 628, - 628, 193, 635, 635, 635, 636, 630, 193, - 193, 193, 193, 193, 193, 193, 193, 632, - 193, 193, 193, 193, 193, 193, 193, 193, - - 629, 629, 634, 634, 193, 193, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 646, - 647, 647, 647, 647, 647, 647, 193, 193, - 193, 648, 631, 631, 631, 631, 631, 631, - - 193, 193, 649, 649, 193, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 193, - 193, 193, 650, 650, 650, 650, 650, 650, - - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 193, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 193, 650, 193, 193, - - 650, 650, 650, 650, 650, 650, 650, 193, - 193, 193, 651, 193, 193, 193, 193, 652, - 649, 649, 653, 653, 653, 193, 653, 193, - 649, 649, 654, 649, 654, 654, 654, 652, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 649, 649, 655, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 657, 656, 658, 657, 657, 657, 657, - 659, 659, 660, 193, 193, 193, 193, 12, - - 656, 656, 656, 656, 656, 656, 661, 657, - 662, 662, 662, 662, 657, 657, 657, 663, - 664, 665, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 674, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 675, 675, 193, 675, 193, 193, 675, - 675, 193, 675, 193, 193, 675, 193, 193, - 193, 193, 193, 193, 675, 675, 675, 675, - 193, 675, 675, 675, 675, 675, 675, 675, - - 193, 675, 675, 675, 193, 675, 193, 675, - 193, 193, 675, 675, 193, 675, 675, 675, - 675, 676, 675, 677, 676, 676, 676, 676, - 678, 678, 193, 676, 676, 675, 193, 193, - - 675, 675, 675, 675, 675, 193, 679, 193, - 680, 680, 680, 680, 676, 676, 193, 193, - 681, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 193, 193, 691, 691, 692, 692, - - 693, 694, 694, 694, 695, 696, 695, 695, - 697, 695, 695, 698, 699, 700, 700, 700, - 700, 700, 697, 701, 700, 701, 701, 701, - 702, 702, 701, 701, 701, 701, 701, 701, - - 703, 704, 705, 706, 707, 708, 709, 710, - 711, 712, 713, 713, 713, 713, 713, 713, - 713, 713, 713, 713, 714, 702, 701, 702, - 701, 715, 716, 717, 716, 717, 718, 718, - - 693, 693, 693, 719, 693, 693, 693, 693, - 193, 693, 693, 693, 693, 719, 693, 693, - 693, 693, 719, 693, 693, 693, 693, 719, - 693, 693, 693, 693, 719, 693, 693, 693, - - 693, 693, 693, 693, 693, 693, 693, 693, - 693, 719, 720, 721, 721, 193, 193, 193, - 193, 722, 723, 724, 725, 724, 724, 726, - 724, 726, 723, 723, 723, 723, 727, 728, - - 723, 724, 729, 729, 730, 698, 729, 729, - 693, 693, 693, 693, 731, 732, 732, 732, - 727, 727, 727, 724, 727, 727, 733, 727, - 193, 727, 727, 727, 727, 724, 727, 727, - - 727, 727, 724, 727, 727, 727, 727, 724, - 727, 727, 727, 727, 724, 727, 733, 733, - 733, 727, 727, 727, 727, 727, 727, 727, - 733, 724, 733, 733, 733, 193, 734, 734, - - 735, 735, 735, 735, 735, 735, 736, 735, - 735, 735, 735, 735, 735, 193, 737, 735, - 738, 738, 739, 740, 741, 742, 742, 742, - 742, 743, 743, 193, 193, 193, 193, 193, - - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - - 744, 744, 745, 744, 744, 744, 746, 744, - 745, 744, 744, 747, 748, 749, 750, 749, - 749, 751, 749, 752, 752, 752, 749, 753, - 748, 754, 755, 756, 756, 752, 752, 745, - - 757, 758, 759, 760, 761, 762, 763, 764, - 765, 766, 767, 767, 768, 768, 768, 768, - 744, 744, 744, 744, 744, 744, 751, 751, - 749, 749, 745, 745, 745, 745, 752, 752, - - 752, 745, 747, 747, 747, 745, 745, 747, - 747, 747, 747, 747, 747, 747, 745, 745, - 745, 752, 752, 752, 752, 745, 745, 745, - 745, 745, 745, 745, 745, 745, 745, 745, - - 745, 745, 752, 747, 756, 752, 752, 747, - 747, 747, 747, 747, 747, 769, 745, 747, - 770, 771, 772, 773, 774, 775, 776, 777, - 778, 779, 780, 780, 780, 781, 782, 782, - - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - - 783, 783, 783, 783, 783, 783, 193, 784, - 193, 193, 193, 193, 193, 784, 193, 193, - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, - - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 786, - 786, 787, 787, 788, 789, 790, 790, 790, - - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 792, 792, 792, 792, 792, 791, - - 793, 794, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 794, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - - 793, 793, 793, 795, 795, 795, 795, 795, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - - 796, 796, 796, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 798, 798, 798, 798, 798, 798, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 193, - 799, 193, 799, 799, 799, 799, 193, 193, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 193, - - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 193, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 800, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 193, 193, 801, 801, 802, - - 803, 804, 805, 806, 806, 806, 806, 805, - 805, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 816, 816, 816, 816, 816, - 816, 816, 816, 816, 816, 193, 193, 193, - - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 800, - 817, 817, 817, 817, 817, 817, 817, 817, - 817, 817, 193, 193, 193, 193, 193, 193, - - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 819, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 821, 822, 820, - 820, 820, 820, 820, 820, 820, 820, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 824, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 826, 827, 193, 193, 193, - - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 829, 829, 829, 830, 830, - 830, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 193, 831, 831, - 831, 831, 832, 832, 833, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 835, 835, 836, 837, 837, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 838, 838, 838, 838, 838, 838, 838, 838, - 838, 838, 838, 838, 838, 838, 838, 838, - 838, 838, 839, 839, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, 840, 193, 840, 840, - 840, 193, 841, 841, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 843, 843, 844, 843, - 843, 843, 843, 843, 843, 843, 844, 844, - - 844, 844, 844, 844, 844, 844, 843, 844, - 844, 843, 843, 843, 843, 843, 843, 843, - 843, 843, 845, 843, 846, 846, 847, 848, - 846, 849, 846, 850, 842, 851, 193, 193, - - 852, 853, 854, 855, 856, 857, 858, 859, - 860, 861, 193, 193, 193, 193, 193, 193, - 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 193, 193, 193, 193, 193, 193, - - 863, 863, 864, 865, 866, 867, 868, 869, - 870, 871, 872, 873, 873, 873, 874, 193, - 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 193, 193, 193, 193, 193, 193, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 886, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 193, 193, 193, 193, 193, 193, 193, 193, - - 887, 887, 887, 887, 887, 887, 887, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 888, 889, 193, 193, 193, 193, 193, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 193, 193, 193, - - 891, 891, 891, 892, 892, 892, 892, 891, - 891, 892, 892, 892, 193, 193, 193, 193, - 892, 892, 891, 892, 892, 892, 892, 892, - 892, 893, 894, 895, 193, 193, 193, 193, - - 896, 193, 193, 193, 897, 897, 898, 899, - 900, 901, 902, 903, 904, 905, 906, 907, - 908, 908, 908, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 908, - - 908, 908, 908, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 193, 193, - 908, 908, 908, 908, 908, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 910, 910, 193, 193, 193, 193, - 911, 911, 911, 911, 911, 912, 912, 912, - 911, 911, 912, 911, 911, 911, 911, 911, - - 911, 909, 909, 909, 909, 909, 909, 909, - 911, 911, 193, 193, 193, 193, 193, 193, - 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 193, 193, 193, 924, 924, - - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - - 926, 926, 926, 926, 926, 926, 926, 926, - 926, 926, 926, 926, 926, 926, 926, 926, - 926, 926, 926, 926, 926, 926, 926, 927, - 928, 929, 929, 930, 193, 193, 931, 931, - - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 933, 934, 933, - 934, 934, 934, 934, 934, 934, 934, 193, - - 935, 936, 934, 936, 936, 934, 934, 934, - 934, 934, 934, 934, 934, 933, 933, 933, - 933, 933, 933, 934, 934, 937, 937, 937, - 937, 937, 937, 937, 937, 193, 193, 938, - - 939, 940, 941, 942, 943, 944, 945, 946, - 947, 948, 193, 193, 193, 193, 193, 193, - 939, 940, 941, 942, 943, 944, 945, 946, - 947, 948, 193, 193, 193, 193, 193, 193, - - 949, 949, 949, 949, 949, 949, 949, 950, - 951, 951, 951, 951, 949, 949, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 952, 952, 952, 952, 953, 954, 955, 954, - 955, 954, 955, 954, 955, 954, 955, 954, - 954, 954, 955, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, - - 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 956, 957, 952, 952, - 952, 952, 952, 958, 952, 958, 953, 953, - - 958, 958, 952, 958, 959, 954, 954, 954, - 954, 954, 954, 954, 193, 193, 193, 193, - 960, 961, 962, 963, 964, 965, 966, 967, - 968, 969, 970, 970, 971, 972, 970, 970, - - 972, 973, 973, 973, 973, 973, 973, 973, - 973, 973, 973, 974, 975, 974, 974, 974, - 974, 974, 974, 974, 973, 973, 973, 973, - 973, 973, 973, 973, 973, 193, 193, 193, - - 976, 976, 977, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - - 978, 977, 976, 976, 976, 976, 977, 977, - 976, 976, 979, 980, 981, 981, 978, 978, - 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 992, 992, 992, 992, 992, 992, - - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - - 993, 993, 993, 993, 993, 993, 994, 995, - 996, 996, 995, 995, 995, 996, 995, 996, - 996, 996, 997, 997, 193, 193, 193, 193, - 193, 193, 193, 193, 998, 998, 998, 998, - - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - - 999, 999, 999, 999, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1000, 1001, 1001, 1001, 1001, - 1001, 1001, 1001, 1001, 1000, 1000, 1001, 1002, - 193, 193, 193, 1003, 1003, 1004, 1004, 1004, - - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, - 1013, 1014, 193, 193, 193, 999, 999, 999, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1025, 1025, 1025, 1025, 1025, - - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1026, 1026, 1026, 1026, 1026, 1026, 1027, 1027, - - 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, - 193, 193, 193, 193, 193, 193, 193, 193, - 1029, 1029, 1029, 1030, 1031, 1032, 1032, 1032, - 1032, 1032, 1029, 1029, 1032, 1032, 1032, 1032, - - 1029, 1033, 1031, 1031, 1031, 1031, 1031, 1031, - 1031, 1034, 1034, 1034, 1034, 1032, 1034, 1034, - 1034, 1034, 1033, 1035, 1036, 1037, 1037, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - - 114, 114, 114, 114, 114, 114, 1038, 1038, - 1038, 1038, 1038, 1039, 1040, 1040, 1040, 1041, - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1041, 1040, 1040, 1040, 1040, - - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1040, 1040, 1040, 1041, 1040, - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1040, 1040, 1042, 1042, 1042, - - 1042, 1042, 1040, 1040, 1040, 1040, 1042, 1042, - 1042, 1042, 1042, 114, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 1043, 1044, 115, 115, 115, 1045, 115, 115, - - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 1046, 1046, 1046, 1046, 1046, - - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, - - 182, 182, 181, 182, 1048, 1048, 1048, 1048, - 1048, 1048, 1049, 1050, 1050, 1051, 1052, 1053, - 1054, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 1055, 1032, 1048, 1049, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 1056, 1057, - 1058, 1059, 1060, 1061, 1062, 1062, 1063, 1062, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 1064, 1065, 1064, 1065, 1064, 1065, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1066, 1066, 1066, 1066, 1066, 1066, 193, 193, - 1067, 1067, 1067, 1067, 1067, 1067, 193, 193, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - - 1066, 1066, 1066, 1066, 1066, 1066, 193, 193, - 1067, 1067, 1067, 1067, 1067, 1067, 193, 193, - 1068, 1066, 1069, 1066, 1070, 1066, 1071, 1066, - 193, 1067, 193, 1067, 193, 1067, 193, 1067, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1072, 1073, 1074, 1075, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1083, 193, 193, - - 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, - 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, - 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, - 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, - - 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, - 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, - 1066, 1066, 1132, 1133, 1134, 193, 1135, 1136, - 1067, 1067, 1137, 1138, 1139, 197, 1140, 197, - - 197, 1141, 1142, 1143, 1144, 193, 1145, 1146, - 1147, 1148, 1147, 1148, 1149, 1141, 1141, 1141, - 1066, 1066, 1150, 1151, 193, 193, 1152, 1153, - 1067, 1067, 1154, 1155, 193, 1141, 1141, 1141, - - 1066, 1066, 1156, 1157, 1158, 1159, 1160, 1161, - 1067, 1067, 1162, 1163, 1164, 1141, 1165, 1165, - 193, 193, 1166, 1167, 1168, 193, 1169, 1170, - 1171, 1172, 1173, 1174, 1175, 1176, 197, 193, - - 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1179, - 1178, 1178, 1178, 1180, 1181, 1182, 1183, 1184, - 1185, 1186, 1185, 1187, 1188, 1189, 14, 1190, - 1191, 1192, 1193, 1194, 1194, 1195, 1193, 1194, - - 14, 14, 14, 14, 1196, 1197, 1197, 1198, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, - 13, 13, 13, 1207, 1207, 1208, 1209, 1209, - 14, 1210, 1211, 14, 1212, 1213, 1190, 43, - - 43, 14, 14, 14, 1214, 16, 1215, 1216, - 1217, 1217, 1218, 1218, 1218, 1218, 1219, 1219, - 1219, 1219, 1220, 1221, 1222, 1223, 1224, 1225, - 1224, 1224, 1224, 1224, 1223, 1224, 1224, 1226, - - 1227, 1228, 1228, 1228, 1229, 1230, 1231, 1232, - 1233, 1234, 1235, 1235, 1235, 1235, 1235, 1235, - 1236, 1237, 193, 193, 1238, 1239, 1240, 1241, - 1242, 1243, 1244, 1244, 1245, 1246, 1247, 151, - - 1236, 63, 58, 59, 1238, 1239, 1240, 1241, - 1242, 1243, 1244, 1244, 1245, 1246, 1247, 193, - 1046, 1046, 1046, 1046, 1046, 1248, 1248, 1248, - 1248, 1248, 1248, 1248, 1248, 193, 193, 193, - - 12, 12, 12, 12, 12, 12, 12, 50, - 1249, 12, 12, 1250, 1251, 1252, 1252, 1252, - 1253, 1253, 1254, 1254, 1254, 1254, 1255, 1256, - 1256, 1257, 1258, 1259, 1259, 1259, 1259, 1259, - - 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 164, 164, 171, 171, 164, 164, 164, 164, - 171, 171, 171, 164, 164, 1260, 1260, 1260, - - 1260, 164, 1261, 1261, 1262, 1263, 1263, 188, - 1264, 188, 1263, 1265, 1049, 1049, 1049, 1049, - 1050, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1266, 1266, 1267, 1268, 51, 1266, 1266, 1267, - 51, 1268, 1269, 1267, 1267, 1267, 1269, 1269, - 1267, 1267, 1267, 1269, 51, 1267, 1270, 51, - 36, 1267, 1267, 1267, 1267, 1267, 51, 51, - - 1266, 1266, 1266, 51, 1267, 51, 1271, 51, - 1267, 51, 1272, 1273, 1267, 1267, 1274, 1269, - 1267, 1267, 1275, 1267, 1269, 1276, 1276, 1276, - 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1282, - - 1283, 1220, 1220, 1220, 1220, 1282, 1281, 1281, - 1281, 1281, 1284, 1220, 1285, 1286, 1287, 1288, - 1289, 1289, 1289, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, - - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - - 1292, 1292, 1292, 111, 122, 1293, 1293, 1293, - 1293, 1289, 193, 193, 193, 193, 193, 193, - 36, 36, 36, 36, 36, 51, 51, 51, - 51, 51, 1294, 1294, 51, 51, 51, 51, - - 36, 51, 51, 36, 51, 51, 36, 51, - 51, 51, 51, 51, 51, 51, 1294, 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, 1295, 1294, 1294, - 51, 51, 36, 51, 36, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 36, 36, 36, 36, 1294, 36, 36, 36, - 1296, 1297, 1296, 1298, 1299, 1298, 36, 36, - 36, 36, 18, 57, 36, 1300, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 36, 36, 1294, 36, 1294, 36, - 36, 36, 36, 36, 1245, 1245, 36, 1245, - 1245, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 1301, 1302, 36, 36, - - 36, 1294, 36, 1303, 1294, 36, 36, 1294, - 36, 1294, 36, 36, 36, 36, 36, 36, - 36, 36, 1301, 1302, 1301, 1302, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - - 1294, 36, 1294, 36, 1301, 1302, 1301, 1302, - 1301, 1302, 1301, 1302, 36, 1294, 1304, 1305, - 1304, 1305, 1301, 1302, 1304, 1305, 1301, 1302, - 1304, 1305, 1301, 1302, 1301, 1302, 1301, 1302, - - 1304, 1305, 1301, 1302, 1304, 1305, 1301, 1302, - 1304, 1305, 1301, 1302, 36, 36, 36, 1301, - 1302, 1301, 1302, 36, 36, 36, 36, 36, - 1306, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 1301, 1302, 36, 36, 1307, 36, - 1308, 1309, 36, 1309, 1294, 1294, 1294, 1294, - 1301, 1302, 1301, 1302, 1301, 1302, 1301, 1302, - 36, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 1301, 1302, 1301, 1302, 1310, 36, 36, - 1301, 1302, 36, 36, 36, 36, 1301, 1302, - 1301, 1302, 1301, 1302, 1301, 1302, 1301, 1302, - - 1304, 1305, 1304, 1305, 1301, 1302, 1301, 1302, - 1301, 1302, 1304, 1305, 1304, 1305, 36, 36, - 1301, 1302, 1311, 1311, 1311, 1220, 1312, 1312, - 1220, 1220, 1313, 1313, 1313, 1314, 1314, 1220, - - 51, 1278, 51, 51, 51, 51, 51, 51, - 1315, 1316, 1315, 1316, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 1317, 1317, 51, 51, 51, 51, - - 36, 36, 51, 51, 51, 51, 51, 51, - 51, 1318, 1319, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1278, 1220, 1278, 1278, 1278, - - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1278, 1321, 1278, 1278, - 1278, 1278, 1278, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1322, - 1322, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1323, 1323, 1323, 1323, - - 1323, 1323, 1286, 1286, 1286, 1286, 1286, 1286, - 1324, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1326, 1326, 1326, 1326, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 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, 1278, 1278, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, - 1335, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 1327, 1328, 1329, 1330, - 1331, 1332, 1333, 1334, 1335, 65, 65, 65, - - 65, 65, 65, 65, 65, 65, 65, 65, - 63, 58, 59, 1238, 1239, 1240, 1241, 1242, - 1243, 1336, 1336, 1336, 1336, 1336, 1336, 1336, - 1336, 1336, 1336, 1336, 1337, 1337, 1337, 1337, - - 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 1337, 1337, 1337, 1338, 1338, - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - 1339, 1339, 1340, 1341, 1341, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1342, 1343, 1344, - 1345, 1346, 1347, 1348, 1349, 1350, 1341, 1351, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 36, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 36, 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, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1317, 1317, 1317, 1317, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 1352, 1352, 1284, 1284, - 1353, 1278, 1317, 1317, 1317, 1317, 1317, 1317, - - 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, 1317, 1317, 1317, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 1317, 51, 51, 51, 51, 51, 51, 36, - 1278, 1278, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1285, 1353, - - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1354, 1324, 1324, - - 1322, 1322, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1355, 1285, 1285, 1285, - 1285, 1285, 1286, 1354, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 1354, 1356, 1356, 1356, - - 1357, 1357, 1357, 1357, 1356, 1356, 1356, 1356, - 1356, 1324, 1324, 1324, 1324, 1356, 1325, 1356, - 1356, 1356, 1324, 1356, 1356, 1324, 1324, 1324, - 1356, 1356, 1324, 1324, 1356, 1324, 1324, 1356, - - 1356, 1356, 1325, 1324, 1325, 1325, 1325, 1325, - 1324, 1324, 1356, 1324, 1324, 1324, 1324, 1324, - 1324, 1356, 1356, 1356, 1356, 1356, 1324, 1356, - 1356, 1356, 1356, 1324, 1324, 1356, 1356, 1356, - - 193, 1317, 1317, 1317, 1317, 1325, 51, 51, - 1317, 1317, 1326, 1326, 1317, 1317, 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, - 1325, 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, 1325, 51, 1325, 51, - 51, 51, 51, 1325, 1325, 1325, 51, 1324, - 51, 51, 51, 1358, 1358, 1358, 1358, 1325, - - 1325, 51, 1359, 1359, 51, 51, 51, 51, - 1360, 1361, 1360, 1361, 1360, 1361, 1360, 1361, - 1360, 1361, 1360, 1361, 1360, 1361, 1362, 1363, - 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, - - 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, - 1370, 1371, 1362, 1363, 1364, 1365, 1366, 1367, - 1368, 1369, 1370, 1371, 51, 1325, 1325, 1325, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 1325, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 1325, - - 1372, 1372, 1372, 1373, 1374, 1375, 1376, 1323, - 1377, 1378, 1323, 1379, 1380, 1381, 1382, 1382, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1220, - - 1220, 1220, 1383, 1384, 1383, 1384, 1360, 1361, - 1360, 1361, 1360, 1361, 1385, 1386, 1385, 1386, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1360, 1361, 1360, 1361, 1360, - 1361, 1360, 1361, 1360, 1361, 1388, 1389, 1390, - 1391, 1360, 1361, 1360, 1361, 1360, 1361, 1360, - 1361, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1392, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1383, 1384, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1383, - 1384, 1383, 1384, 1220, 1383, 1384, 1220, 1220, - 1360, 1361, 1360, 1361, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1393, 1220, 1220, - 1383, 1384, 1220, 1220, 1360, 1361, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1283, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1283, 1283, 1283, 1220, - 1220, 1383, 1384, 1220, 1220, 1383, 1384, 1383, - - 1384, 1383, 1384, 1383, 1384, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1220, 1220, 1220, - 1220, 1383, 1384, 1383, 1384, 1383, 1384, 1383, - 1384, 1383, 1384, 1383, 1384, 1220, 1220, 1220, - - 1220, 1383, 1384, 1220, 1220, 1220, 1383, 1384, - 1383, 1384, 1383, 1384, 1383, 1384, 1220, 1383, - 1384, 1220, 1220, 1383, 1384, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1383, 1384, 1383, - - 1384, 1383, 1384, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1383, - 1384, 1383, 1384, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1394, 1220, 1395, 1220, - - 1220, 1220, 1220, 1396, 1397, 1396, 1220, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1383, - 1384, 1383, 1384, 1220, 1220, 1220, 1220, 1220, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1285, 1285, - 1285, 1285, 1285, 1285, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1354, 1354, 1354, 1354, 1354, - - 1286, 1286, 1286, 1286, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, - 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, - 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, - - 1380, 1380, 1380, 1380, 1380, 1354, 1354, 1380, - 1380, 1380, 1380, 1380, 1380, 193, 193, 193, - 1354, 1354, 1354, 1354, 1354, 1324, 1324, 1324, - 1324, 1324, 193, 193, 193, 193, 193, 193, - - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 193, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 193, - - 126, 122, 1400, 1401, 1402, 1403, 1404, 126, - 122, 126, 122, 126, 122, 1405, 1406, 1407, - 1408, 1062, 1064, 1065, 1409, 126, 122, 1409, - 1062, 1062, 1062, 1062, 1410, 1410, 1411, 1411, - - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - - 1412, 1413, 1412, 1413, 1414, 1415, 1415, 1415, - 1415, 1415, 1415, 1416, 1417, 1416, 1417, 1418, - 1418, 1418, 1419, 1420, 193, 193, 193, 193, - 193, 1421, 1422, 1422, 1422, 1423, 1421, 1422, - - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - - 1424, 1424, 1424, 1424, 1424, 1424, 193, 1425, - 193, 193, 193, 193, 193, 1425, 193, 193, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - - 1426, 1426, 1426, 1426, 1426, 1426, 1427, 1427, - 193, 193, 193, 193, 193, 193, 193, 1428, - 1429, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1430, - - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - - 1431, 1431, 1432, 1433, 1432, 1433, 1431, 1431, - 1431, 1432, 1433, 1431, 1432, 1433, 1224, 1224, - 1224, 1224, 1224, 1224, 1224, 1224, 1223, 1434, - 1435, 1436, 1437, 1438, 1432, 1433, 1438, 1438, - - 1439, 1440, 1385, 1386, 1385, 1386, 1385, 1386, - 1385, 1386, 1436, 1436, 1436, 1436, 1441, 1442, - 1436, 1443, 1444, 1445, 1445, 1444, 1444, 1444, - 1444, 1444, 1446, 1446, 193, 193, 193, 193, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 193, 1447, 1447, 1447, 1447, 1448, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1448, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, - 1449, 1449, 1449, 1449, 193, 193, 193, 193, - - 1178, 1450, 1451, 1452, 1317, 1453, 1454, 1455, - 16, 1215, 16, 1215, 16, 1215, 16, 1215, - 16, 1215, 1317, 1317, 16, 1215, 16, 1215, - 16, 1215, 16, 1215, 1456, 1193, 1457, 1457, - - 1317, 1455, 1455, 1455, 1455, 1455, 1455, 1455, - 1455, 1455, 1458, 1459, 165, 1460, 1461, 1461, - 1462, 1463, 1463, 1463, 1463, 1464, 1465, 1317, - 1466, 1466, 1466, 1467, 1468, 1469, 1449, 1317, - - 193, 1470, 1471, 1470, 1471, 1470, 1471, 1470, - 1471, 1470, 1471, 1471, 1472, 1471, 1472, 1471, - 1472, 1471, 1472, 1471, 1472, 1471, 1472, 1471, - 1472, 1471, 1472, 1471, 1472, 1471, 1472, 1471, - - 1472, 1471, 1472, 1470, 1471, 1472, 1471, 1472, - 1471, 1472, 1471, 1471, 1471, 1471, 1471, 1471, - 1472, 1472, 1471, 1472, 1472, 1471, 1472, 1472, - 1471, 1472, 1472, 1471, 1472, 1472, 1471, 1471, - - 1471, 1471, 1471, 1470, 1471, 1470, 1471, 1470, - 1471, 1471, 1471, 1471, 1471, 1471, 1470, 1471, - 1471, 1471, 1471, 1471, 1472, 1473, 1473, 193, - 193, 1474, 1474, 1475, 1475, 1476, 1477, 1478, - - 1479, 1480, 1481, 1480, 1481, 1480, 1481, 1480, - 1481, 1480, 1481, 1481, 1482, 1481, 1482, 1481, - 1482, 1481, 1482, 1481, 1482, 1481, 1482, 1481, - 1482, 1481, 1482, 1481, 1482, 1481, 1482, 1481, - - 1482, 1481, 1482, 1480, 1481, 1482, 1481, 1482, - 1481, 1482, 1481, 1481, 1481, 1481, 1481, 1481, - 1482, 1482, 1481, 1482, 1482, 1481, 1482, 1482, - 1481, 1482, 1482, 1481, 1482, 1482, 1481, 1481, - - 1481, 1481, 1481, 1480, 1481, 1480, 1481, 1480, - 1481, 1481, 1481, 1481, 1481, 1481, 1480, 1481, - 1481, 1481, 1481, 1481, 1482, 1480, 1480, 1482, - 1482, 1482, 1482, 1483, 1484, 1485, 1486, 1487, - - 193, 193, 193, 193, 193, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1489, 193, 193, - 193, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 193, - 1491, 1491, 1492, 1492, 1492, 1492, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1495, 1495, 1495, 193, 193, 193, 193, 193, - - 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, - 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1498, 1498, 193, - - 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, - 1492, 1492, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1499, 1499, 1499, 1499, - 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, - 1501, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1498, 1498, 1503, 1491, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1501, 1501, 1501, 1501, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 193, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1501, - 1501, 1501, 1501, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1501, 1501, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1501, - - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - - 1507, 1507, 1507, 1507, 1507, 1507, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1509, 1509, 1509, 1509, - - 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1511, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1513, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 193, 193, 193, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - - 1514, 1514, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1515, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - - 1514, 1515, 1514, 1514, 1514, 1515, 1514, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1517, 1517, 1517, 1517, 1517, 1517, 1518, 1519, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1521, 1522, 1523, 1524, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, - 1533, 1534, 1520, 1520, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - - 275, 276, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 1535, 257, - 1536, 1536, 1536, 1537, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1538, 257, 257, 1537, 1539, - - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 193, 193, 193, 193, 193, 193, 193, 1538, - - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - - 1540, 1540, 1540, 1540, 1540, 1540, 1541, 1541, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1542, 1542, 1543, 1544, 1545, 1545, 1545, 1544, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1547, - 1547, 1547, 1547, 1442, 1442, 1442, 1442, 1442, - - 1548, 1548, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1062, 1062, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1410, 1062, 1062, 1062, 1062, 1062, 1062, 1062, - 1062, 1064, 1065, 1064, 1065, 1549, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1442, 1550, 1550, 1064, 1065, 1551, 1552, 193, - 1553, 1554, 1555, 1556, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1553, 1554, 1553, 1554, 1553, 1554, 1553, 1554, - 1553, 1554, 1557, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1558, 1558, 1552, 1559, 1559, 1559, 1559, 1559, - - 1560, 1560, 1561, 1560, 1560, 1560, 1562, 1560, - 1560, 1560, 1560, 1561, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, - - 1560, 1560, 1560, 1563, 1563, 1561, 1561, 1563, - 1564, 1564, 1564, 1564, 193, 193, 193, 193, - 1500, 1500, 1500, 1500, 1500, 1500, 742, 742, - 1255, 1565, 193, 193, 193, 193, 193, 193, - - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1567, 1568, 1569, 1569, 1570, 1570, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1571, 1571, 1571, 1571, - 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, - - 1571, 1571, 1571, 1571, 1573, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 1574, 1574, - 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, - 1583, 1584, 193, 193, 193, 193, 193, 193, - - 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, - 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, - 1585, 1585, 475, 475, 475, 475, 475, 475, - 1586, 1586, 1586, 475, 193, 193, 193, 193, - - 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, - 1595, 1596, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - - 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, - 1598, 1598, 1598, 1599, 1599, 1599, 1600, 1601, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, - - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1603, - 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, - 1603, 1603, 1604, 1605, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1606, - - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 193, 193, 193, - - 1607, 1607, 1607, 1608, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1610, 1608, 1608, 1607, 1607, - 1607, 1607, 1608, 1608, 1607, 1608, 1608, 1608, - - 1611, 1612, 1612, 1612, 1612, 1612, 1612, 1613, - 1614, 1614, 1612, 1612, 1612, 1612, 193, 1615, - 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, - 1624, 1625, 193, 193, 193, 193, 1612, 1612, - - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1628, - 1628, 1627, 1627, 1628, 1628, 1627, 1627, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1626, 1626, 1626, 1627, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1627, 1628, 193, 193, - 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, - 1637, 1638, 193, 193, 1639, 1640, 1640, 1640, - - 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, - 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, - 1642, 1641, 1641, 1641, 1641, 1641, 1641, 1643, - 1643, 1643, 1641, 780, 193, 193, 193, 193, - - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1645, 1644, 1645, 1645, 1646, 1644, 1644, 1645, - 1645, 1644, 1644, 1644, 1644, 1644, 1645, 1645, - - 1644, 1645, 1644, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1644, 1644, 1647, 1648, 1648, - - 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, - 1649, 1649, 1649, 1650, 1651, 1651, 1650, 1650, - 1652, 1652, 1649, 1653, 1653, 1650, 1654, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1655, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 1655, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - - 1656, 1656, 1656, 1657, 1657, 1658, 1657, 1657, - 1658, 1657, 1657, 1659, 1657, 1660, 193, 193, - 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, - 1669, 1670, 193, 193, 193, 193, 193, 193, - - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, - - 795, 795, 795, 795, 795, 795, 795, 193, - 193, 193, 193, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 193, 193, 193, 193, - - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1507, 1507, - 1675, 1507, 1675, 1507, 1507, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1507, - - 1675, 1507, 1675, 1507, 1507, 1675, 1675, 1507, - 1507, 1507, 1675, 1675, 1675, 1675, 1676, 1676, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1678, 1678, 1678, 1506, 1506, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1506, 1506, 1506, 1506, 1506, 1506, - - 1680, 1681, 1682, 1683, 1684, 1685, 1685, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1686, 1687, 1688, 1689, 1690, - 193, 193, 193, 193, 193, 1691, 1692, 1693, - - 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, - 1694, 1695, 1693, 1693, 1693, 1693, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 287, - 1693, 1693, 1693, 1693, 1693, 287, 1693, 287, - - 1693, 1693, 287, 1693, 1693, 287, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1694, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1697, 1697, 1697, 1697, 1697, 1697, - 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, - - 1697, 1697, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1193, 1457, - - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 319, 319, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 319, 319, 319, 319, 319, 319, 319, 319, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1699, 1322, 319, 319, - - 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, - 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, - 1701, 1702, 1703, 1704, 1705, 1706, 1706, 1707, - 1708, 1709, 193, 193, 193, 193, 193, 193, - - 164, 164, 164, 164, 1050, 1050, 1050, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1710, 1711, 1711, 1712, 1712, 1713, 1714, 1713, - 1714, 1713, 1714, 1713, 1714, 1713, 1714, 1713, - - 1714, 1713, 1714, 1713, 1714, 1469, 1469, 1715, - 1716, 1710, 1710, 1710, 1710, 1712, 1712, 1712, - 1717, 1718, 1719, 193, 1720, 1721, 1722, 1722, - 1711, 1246, 1247, 1246, 1247, 1246, 1247, 1723, - - 1710, 1710, 1724, 1725, 1726, 1727, 1728, 193, - 1710, 1249, 1207, 1710, 193, 193, 193, 193, - 1696, 1696, 1696, 1729, 1696, 319, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 319, 319, 1730, - - 193, 1722, 1710, 1723, 1249, 1207, 1710, 1731, - 1246, 1247, 1710, 1724, 1717, 1725, 1719, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, - 1741, 1742, 1721, 1720, 1743, 1728, 1744, 1722, - - 1710, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1746, 1710, 1747, 1748, 1712, - - 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1746, 1728, 1747, 1728, 1750, - - 1751, 1752, 1246, 1247, 1753, 1754, 1755, 1756, - 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, - 1757, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1758, 1758, - - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 193, - - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 193, 193, 193, - - 1760, 1249, 1728, 1748, 1465, 1249, 1249, 193, - 1266, 1245, 1245, 1245, 1245, 1266, 1266, 193, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1761, 1761, 1761, 1762, 51, 1763, 1763, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 193, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 193, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 193, 1764, 1764, 193, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 193, 193, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 193, 193, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 193, 193, 193, 193, 193, - - 1765, 1766, 1765, 193, 193, 193, 193, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 193, 193, 193, 1768, - 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, - - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1770, 1770, 1770, - 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1770, 193, 193, 193, 193, 193, - 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1053, 193, 193, - - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 193, 193, 193, - - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 193, - - 1775, 1775, 1775, 1775, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, - - 1776, 1777, 1776, 1776, 1776, 1776, 1776, 1776, - 1776, 1776, 1777, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 193, 1779, - - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - - 1780, 1780, 1780, 1780, 193, 193, 193, 193, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1781, 1782, 1782, 1782, 1782, 1782, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - - 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1786, 1786, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 193, 193, - - 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, - 1797, 1798, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1799, 1799, 1799, 1799, 1799, 1799, 287, 287, - 1799, 287, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 287, 1799, - 1799, 287, 287, 287, 1799, 287, 287, 1799, - - 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1800, 287, 1801, - 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, - - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, - 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, - 1804, 1804, 1805, 1805, 287, 287, 287, 1806, - - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 287, 287, 287, 287, 287, 1808, - - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 287, 287, 287, 287, 287, 287, 1810, 1810, - - 1811, 1812, 1812, 1812, 287, 1812, 1812, 287, - 287, 287, 287, 287, 1812, 1813, 1812, 1814, - 1811, 1811, 1811, 1811, 287, 1811, 1811, 1811, - 287, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 287, 287, 287, 287, - 1814, 1815, 1813, 287, 287, 287, 287, 1816, - - 1817, 1818, 1819, 1820, 1821, 1821, 1821, 1821, - 287, 287, 287, 287, 287, 287, 287, 287, - 1822, 1822, 1822, 1822, 1822, 1822, 1823, 1823, - 1824, 287, 287, 287, 287, 287, 287, 287, - - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1826, 1826, 1827, - - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 287, 287, - 287, 1829, 1829, 1829, 1829, 1829, 1829, 1829, - - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 287, 287, - 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, - - 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, - 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, - 1832, 1832, 1832, 287, 287, 287, 287, 287, - 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, - - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, - 1843, 1844, 1844, 1844, 1844, 1844, 1844, 1844, - 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, - 1844, 1844, 1844, 1844, 1844, 1844, 1844, 287, - - 1845, 1846, 1845, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, - 1846, 1846, 1846, 1846, 1846, 1846, 1848, 1849, - 1849, 1850, 1850, 1850, 1850, 1850, 193, 193, - 193, 193, 1851, 1852, 1853, 1854, 1855, 1856, - 1857, 1858, 1859, 1860, 1860, 1860, 1860, 1860, - 1860, 1860, 1860, 1860, 1860, 1860, 1861, 1862, - 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1871, 1871, 1872, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1874, 1873, 1874, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1874, 1873, 1873, 1873, 1873, - 1872, 1872, 1872, 1871, 1871, 1871, 1871, 1872, - 1872, 1875, 1876, 1877, 1877, 1878, 1879, 1879, - 1879, 1879, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 193, 193, 193, 193, 193, 193, 193, - 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 193, 193, 193, 193, 193, 193, - - 1891, 1891, 1891, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1893, - 1894, 1894, 1894, 1894, 1895, 1894, 1896, 1896, - 1894, 1894, 1894, 1897, 1897, 193, 1898, 1899, - 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, - 1908, 1909, 1909, 1909, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1910, 1910, 1911, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1911, 1911, 1911, 1910, 1910, - 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1911, - 1913, 1912, 1912, 1912, 1912, 1914, 1914, 1915, - 1916, 193, 193, 193, 193, 193, 193, 193, - 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, - 1925, 1926, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1928, 1929, 1928, 1929, 1929, - 1928, 1928, 1928, 1928, 1928, 1928, 1930, 1931, - 193, 193, 193, 193, 193, 193, 193, 193, - 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, - 1940, 1941, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1944, 1944, 1944, 1944, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1946, 1946, 1946, 1947, 1947, 1947, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1947, 1945, 1945, 1945, 1946, 1947, - 1946, 1947, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1946, 1947, 1947, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1949, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1951, - 1951, 1951, 1951, 1952, 1952, 1952, 1952, 1952, - 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1953, 1954, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 193, - 193, 1288, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1956, 1956, - 1956, 1956, 1956, 1956, 1956, 1957, 1958, 1959, - 1959, 1959, 1955, 1955, 1955, 1960, 1957, 1957, - 1957, 1957, 1957, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1962, 1962, 1962, 1962, 1962, - 1962, 1962, 1962, 1955, 1955, 1963, 1963, 1963, - 1963, 1963, 1962, 1962, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1963, 1963, 1963, 1963, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1956, 1956, 1956, 1956, 1956, - 1956, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1964, 1964, 1964, 1771, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, - 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, - 1965, 1965, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 193, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 193, 1966, 1966, - 193, 193, 1966, 193, 193, 1966, 1966, 193, - 193, 1966, 1966, 1966, 1966, 193, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 193, 1967, 193, 1967, 1967, 1967, - 1967, 1968, 1967, 1967, 193, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1966, 1966, 193, 1966, - 1966, 1966, 1966, 193, 193, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 193, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 193, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 193, 1966, 1966, 1966, 1966, 193, - 1966, 1966, 1966, 1966, 1966, 193, 1966, 193, - 193, 193, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 193, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1280, 1280, 193, 193, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1969, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1970, 1967, 1967, 1967, 1967, - 1967, 1967, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1969, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1970, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1969, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1970, - 1967, 1967, 1967, 1967, 1967, 1967, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1969, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1970, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1969, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1970, 1967, 1967, 1967, 1967, - 1967, 1967, 1971, 1972, 193, 193, 1973, 1974, - 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1973, 1974, 1975, 1976, 1977, 1978, - 1979, 1980, 1981, 1982, 1973, 1974, 1975, 1976, - 1977, 1978, 1979, 1980, 1981, 1982, 1973, 1974, - 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 1983, 1983, 1983, 1983, 319, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 319, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 319, 1983, 319, 1983, 319, 319, 319, 319, - 319, 319, 1983, 319, 319, 319, 319, 1983, - 319, 1983, 319, 1983, 319, 1983, 1983, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 319, 1983, 319, 1983, 319, 1983, 319, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 319, 1983, 1983, 1983, 1983, 319, 1983, 319, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 319, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 319, 319, 319, 319, - 319, 1983, 1983, 1983, 319, 1983, 1983, 1983, - 1983, 1983, 319, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 1984, 1984, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1985, 1985, 1986, 1987, 1988, 1989, 1990, 1991, - 1992, 1993, 1994, 193, 193, 193, 193, 193, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 193, - 1996, 1995, 1996, 1996, 1996, 1996, 1996, 1996, - 1996, 1996, 1996, 1996, 1996, 1995, 1996, 1995, - 1996, 1996, 1995, 1996, 1996, 1996, 1995, 1996, - 1996, 1996, 1995, 1995, 1995, 1995, 1995, 1996, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 1998, 1998, 193, 193, 193, 193, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 742, 1997, 742, 742, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 742, 742, 742, 742, 1997, 1997, - 1995, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 1997, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - - 2000, 2001, 2001, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 2001, 2001, 2001, 2001, 2001, 2001, - 2001, 2001, 2001, 193, 193, 193, 193, 193, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 193, 193, 193, 193, 193, 193, 193, - 2001, 2001, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 193, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1325, 1325, 1326, - 1326, 1326, 1326, 1326, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 193, 1326, 1326, - 1326, 1326, 1326, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 1326, 193, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1325, 1326, 1325, 1326, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1325, - 1326, 1325, 1325, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 1326, 1326, 1326, 1326, 193, 193, 193, - - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 193, 193, - 2002, 2002, 2002, 2002, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1326, 1326, 1326, 1326, 1326, - - 2003, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 2003, 1326, 1326, 1326, 2003, 1326, 2003, - 1326, 2003, 1326, 2003, 1326, 1326, 1326, 2003, - 1326, 1326, 1326, 1326, 1326, 1326, 2003, 2003, - 1326, 1326, 1326, 1326, 2003, 1326, 2003, 2003, - 1326, 1326, 1326, 1326, 2003, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 2004, 2004, - - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 2004, 2004, - - 1230, 1961, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2004, 2004, -}; - -#define GET_PROP_INDEX(ucs4) \ - (ucs4 < 0x11000 \ - ? (uc_property_trie[uc_property_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ - : (uc_property_trie[uc_property_trie[((ucs4 - 0x11000)>>8) + 0x880] + (ucs4 & 0xff)])) - -#define GET_PROP_INDEX_UCS2(ucs2) \ - (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) - -static const Properties uc_properties[] = { - { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 5, 17, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 34, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, - { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 33, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 32, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 13, 3, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 13, 3, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 11, 8, 2 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 16, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 10, 8, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 17, 2 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 18, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 743, 743, 775, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 16, 13, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 19, 0, 0, 0, 1, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -232, -232, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 98, 98, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -121, 0, 0, -121, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -300, -300, -268, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 195, 195, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 210, 0, 0, 210, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 206, 0, 0, 206, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 205, 0, 0, 205, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 79, 0, 0, 79, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 202, 0, 0, 202, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 203, 0, 0, 203, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 207, 0, 0, 207, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 97, 97, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 211, 0, 0, 211, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 209, 0, 0, 209, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 213, 0, 0, 213, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 214, 0, 0, 214, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 218, 0, 0, 218, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 217, 0, 0, 217, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 219, 0, 0, 219, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 56, 56, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 2, 0, 1, 2, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 16, 0, 0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -2, -1, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -79, -79, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 109, 109, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -97, 0, 0, -97, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -56, 0, 0, -56, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 10795, 0, 0, 10795, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -163, 0, 0, -163, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 10792, 0, 0, 10792, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -195, 0, 0, -195, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 69, 0, 0, 69, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 71, 0, 0, 71, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10783, 10783, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10780, 10780, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10782, 10782, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -210, -210, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -206, -206, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -205, -205, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -202, -202, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -203, -203, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -207, -207, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 3, 3, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -209, -209, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -211, -211, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10743, 10743, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10749, 10749, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -213, -213, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -214, -214, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10727, 10727, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -218, -218, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -69, -69, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -217, -217, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -71, -71, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -219, -219, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 18, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 36 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 4, 4, 4, 21, 1 }, - { 0, 17, 240, 5, -1, 0, 0, 84, 84, 116, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 4 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 4 }, - { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 4 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 13, 0, 8, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 38, 0, 0, 38, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 12, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 37, 0, 0, 37, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 64, 0, 0, 64, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 63, 0, 0, 63, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -38, -38, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -37, -37, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -31, -31, 1, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -64, -64, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -63, -63, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 8, 0, 0, 8, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -62, -62, -30, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -57, -57, -25, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -47, -47, -15, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -54, -54, -22, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -8, -8, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -86, -86, -54, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, -48, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -60, 0, 0, -60, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -96, -96, -64, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 4 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 7, 80, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 15, 0, 0, 15, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -15, -15, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 6 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 65, 62, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 9, 6 }, - { 13, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 10, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 11, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 12, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 13, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 14, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 15, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 16, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 17, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 20, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 21, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 22, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 7 }, - { 0, 17, 23, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 7 }, - { 0, 17, 24, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 25, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 7 }, - { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 8, 13, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 7 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 3, 4, 4, 12, 8 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 4, 4, 12, 8 }, - { 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, - { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 8 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 10, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 11, 8, 8 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, - { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, - { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 33, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 34, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 }, - { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, - { 0, 17, 35, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, - { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 9 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 9 }, - { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 12, 9 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, - { 0, 17, 36, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 10 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 10 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 10 }, - { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 13, 11, 8, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 66 }, - { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 82 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 82 }, - { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 95 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 95 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 11 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 11 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 11 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 12 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 12 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 12 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 12 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 13 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 13 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 13 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 14 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 14 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 14 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 14 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 15 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 15 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 15 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 15 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 16 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 16 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 16 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 16 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 4, 4, 21, 17 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 18 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 18 }, - { 0, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 18 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 18 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 19 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 19 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 21, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 20 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 7, 4, 4, 21, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 21 }, - { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, - { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 21 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 21 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 22 }, - { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, - { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 8, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 0, 0, 0, 4, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, - { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 0, 23 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 1, 23 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 21, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 8, 8, 12, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 23 }, - { 0, 17, 129, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 130, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 4, 4, 4, 21, 23 }, - { 0, 17, 132, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 17, 23 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 23 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 30, 24 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17, 24 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 24 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 24 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 24 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 25 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 25 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 8, 8, 25, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 8, 8, 25, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 27 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 27 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 28 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 29 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 29 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 17, 30 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 30 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 30 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 1, 30 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 42 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 43 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 17, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 44 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 44 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 45 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 45 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 32 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 32 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 32 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 32 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 30, 32 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 33 }, - { 25, 10, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 33 }, - { 25, 10, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 4, 33 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 33 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 47 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 47 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 47 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 6, 47 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 4, 30, 56 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 30, 56 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 56 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 30, 56 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 55 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 55 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 55 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 30, 78 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 78 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 78 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 78 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 30, 78 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 62 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 8, 8, 12, 62 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 7, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 7, 4, 4, 21, 62 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 17, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 62 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 67 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 67 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 67 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 93 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 93 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 68 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 68 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 68 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 68 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 69 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 67 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 2 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 1 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 5 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, 5, 5, 0, 0, 1, 1, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 3814, 3814, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 214, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 115, 115, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 118, 118, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 124, 124, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -59, -59, -58, 0, 0, 0, 0, 2, 81, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -7615, 0, 0, -7615, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 8, 8, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -8, 0, 0, -8, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 127, 127, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 134, 134, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 138, 138, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 176, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 179, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 182, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 185, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 188, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 191, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 194, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 197, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 176, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 179, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 182, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 185, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 188, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 191, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 194, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 197, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 200, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 203, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 206, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 209, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 212, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 215, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 218, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 221, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 200, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 203, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 206, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 209, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 212, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 215, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 218, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 221, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 224, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 227, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 230, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 233, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 236, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 239, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 242, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 245, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 224, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 227, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 230, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 233, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 236, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 239, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 242, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 245, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 260, 257, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 248, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 266, 263, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 142, 142, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 297, 293, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 248, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -7205, -7205, -7173, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 272, 269, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 251, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 278, 275, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 145, 145, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 305, 301, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 251, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 148, 148, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 152, 152, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 155, 155, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 159, 159, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 166, 166, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 169, 169, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 284, 281, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 254, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 290, 287, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 173, 173, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 313, 309, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 254, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 4, 20, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 4, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 19, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 17, 2 }, - { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 5, 4, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5, 2 }, - { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 5, 17, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 22, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 12, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 4, 4, 12, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 }, - { 10, 19, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 20, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 21, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 22, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 3 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 6, 12, 3 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 10, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 9, 2 }, - { 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, - { 14, 0, 0, 0, -1, 0, -7517, 0, 0, -7517, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -8383, 0, 0, -8383, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -8262, 0, 0, -8262, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 3 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 28, 0, 0, 28, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 8, 6, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 7, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -28, -28, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 4, 0, 0, 0, -1, 0, 16, 0, 0, 16, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, -16, -16, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 12, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 1, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 14, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 26, 0, 0, 26, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, -26, -26, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 1, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 1, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 54 }, - { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 57 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 57 }, - { 14, 0, 0, 0, -1, 0, -10743, 0, 0, -10743, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -3814, 0, 0, -3814, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10727, 0, 0, -10727, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -10795, -10795, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -10792, -10792, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10780, 0, 0, -10780, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10749, 0, 0, -10749, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10783, 0, 0, -10783, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10782, 0, 0, -10782, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10815, 0, 0, -10815, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 0, 8, 6, 12, 46 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 46 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 46 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 46 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 46 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 25 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 58 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 58 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 58 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 17, 58 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 58 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 37 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 0, 14, 37 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 0, 17, 218, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 26 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 21, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 8, 14, 37 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 14, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 5, 34 }, - { 0, 17, 8, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 5, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 8, 14, 34 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 14, 35 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 5, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 8, 5, 35 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 26 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 14, 37 }, - { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 38 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 83 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 83 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 70 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 84 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 7, 0, 0, 7, 1, 0, 0, 1, 10, 0, 0, 8, 7, 12, 3 }, - { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 9, 0, 0, 9, 1, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 11, 0, 0, 11, 1, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 59 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 59 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 59 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 18, 65 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 65 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 71 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 71 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 71 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 71 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 72 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 72 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 72 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 73 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 73 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 73 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 85 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 85 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 77 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 77 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 77 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 77 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 77 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 79 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 86 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 86 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 86 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 11, 8, 8, 23, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 8, 8, 24, 26 }, - { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 31, 0 }, - { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 }, - { 15, 0, 0, 0, -1, 0, 0, 25, 22, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 31, 28, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 37, 34, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 44, 40, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 52, 48, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 59, 56, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 71, 68, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 77, 74, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 83, 80, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 89, 86, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 95, 92, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 }, - { 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 7, 8, 13, 7 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 7 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 8 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 10, 8 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 12, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 0, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 6, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 14, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 1, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 5, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 12, 11, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 6, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 22, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 0, 14, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 80, 0, 8, 7, 14, 3 }, - { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 14, 3 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 12, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 35 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 4, 4, 4, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 26 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 21, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 29, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 49 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 4 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 74 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 75 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 39 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 39 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 50 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 50 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 60 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 5, 0, 0, 8, 7, 12, 41 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 7, 0, 0, 8, 7, 12, 41 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 5, 0, 0, 8, 6, 12, 41 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 41 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 51 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 52 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 53 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 87 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 87 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 87 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 64 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 76 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 17, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 88 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 80 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 80 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 89 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 89 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 90 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 90 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 }, - { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 94 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 94 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 17, 94 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 8, 8, 12, 92 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 204, 4, 4, 4, 21, 92 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 92 }, - { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 3, 4, 4, 12, 92 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 101 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 204, 4, 4, 4, 21, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 4, 4, 21, 96 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 96 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 100 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 100 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 102 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 99 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 99 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 34 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 0, 12, 2 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 2 }, - { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 6, 12, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 8, 12, 8 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 8 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 8, 14, 37 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 } -}; - -Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) -{ - const int index = GET_PROP_INDEX(ucs4); - return uc_properties + index; -} - -Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) -{ - const int index = GET_PROP_INDEX_UCS2(ucs2); - return uc_properties + index; -} - -Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) -{ - return qGetProp(ucs4); -} - -Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) -{ - return qGetProp(ucs2); -} - -Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) -{ - return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass; -} - -Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) -{ - return (WordBreakClass)qGetProp(ucs4)->wordBreakClass; -} - -Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) -{ - return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass; -} - -Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) -{ - return (LineBreakClass)qGetProp(ucs4)->lineBreakClass; -} - - -static const ushort specialCaseMap[] = { - 0x0, // placeholder - 0x1, 0xa78d, - 0x1, 0xa7aa, - 0x1, 0xa77d, - 0x1, 0x1d79, - 0x1, 0x265, - 0x1, 0x266, - 0x2, 0x53, 0x73, - 0x2, 0x53, 0x53, - 0x2, 0x69, 0x307, - 0x2, 0x46, 0x66, - 0x2, 0x46, 0x46, - 0x2, 0x46, 0x69, - 0x2, 0x46, 0x49, - 0x2, 0x46, 0x6c, - 0x2, 0x46, 0x4c, - 0x3, 0x46, 0x66, 0x69, - 0x3, 0x46, 0x46, 0x49, - 0x3, 0x46, 0x66, 0x6c, - 0x3, 0x46, 0x46, 0x4c, - 0x2, 0x53, 0x74, - 0x2, 0x53, 0x54, - 0x2, 0x535, 0x582, - 0x2, 0x535, 0x552, - 0x2, 0x544, 0x576, - 0x2, 0x544, 0x546, - 0x2, 0x544, 0x565, - 0x2, 0x544, 0x535, - 0x2, 0x544, 0x56b, - 0x2, 0x544, 0x53b, - 0x2, 0x54e, 0x576, - 0x2, 0x54e, 0x546, - 0x2, 0x544, 0x56d, - 0x2, 0x544, 0x53d, - 0x2, 0x2bc, 0x4e, - 0x3, 0x399, 0x308, 0x301, - 0x3, 0x3a5, 0x308, 0x301, - 0x2, 0x4a, 0x30c, - 0x2, 0x48, 0x331, - 0x2, 0x54, 0x308, - 0x2, 0x57, 0x30a, - 0x2, 0x59, 0x30a, - 0x2, 0x41, 0x2be, - 0x2, 0x3a5, 0x313, - 0x3, 0x3a5, 0x313, 0x300, - 0x3, 0x3a5, 0x313, 0x301, - 0x3, 0x3a5, 0x313, 0x342, - 0x2, 0x391, 0x342, - 0x2, 0x397, 0x342, - 0x3, 0x399, 0x308, 0x300, - 0x2, 0x399, 0x342, - 0x3, 0x399, 0x308, 0x342, - 0x3, 0x3a5, 0x308, 0x300, - 0x2, 0x3a1, 0x313, - 0x2, 0x3a5, 0x342, - 0x3, 0x3a5, 0x308, 0x342, - 0x2, 0x3a9, 0x342, - 0x2, 0x1f08, 0x399, - 0x2, 0x1f09, 0x399, - 0x2, 0x1f0a, 0x399, - 0x2, 0x1f0b, 0x399, - 0x2, 0x1f0c, 0x399, - 0x2, 0x1f0d, 0x399, - 0x2, 0x1f0e, 0x399, - 0x2, 0x1f0f, 0x399, - 0x2, 0x1f28, 0x399, - 0x2, 0x1f29, 0x399, - 0x2, 0x1f2a, 0x399, - 0x2, 0x1f2b, 0x399, - 0x2, 0x1f2c, 0x399, - 0x2, 0x1f2d, 0x399, - 0x2, 0x1f2e, 0x399, - 0x2, 0x1f2f, 0x399, - 0x2, 0x1f68, 0x399, - 0x2, 0x1f69, 0x399, - 0x2, 0x1f6a, 0x399, - 0x2, 0x1f6b, 0x399, - 0x2, 0x1f6c, 0x399, - 0x2, 0x1f6d, 0x399, - 0x2, 0x1f6e, 0x399, - 0x2, 0x1f6f, 0x399, - 0x2, 0x391, 0x399, - 0x2, 0x397, 0x399, - 0x2, 0x3a9, 0x399, - 0x2, 0x1fba, 0x345, - 0x2, 0x1fba, 0x399, - 0x2, 0x386, 0x345, - 0x2, 0x386, 0x399, - 0x2, 0x1fca, 0x345, - 0x2, 0x1fca, 0x399, - 0x2, 0x389, 0x345, - 0x2, 0x389, 0x399, - 0x2, 0x1ffa, 0x345, - 0x2, 0x1ffa, 0x399, - 0x2, 0x38f, 0x345, - 0x2, 0x38f, 0x399, - 0x3, 0x391, 0x342, 0x345, - 0x3, 0x391, 0x342, 0x399, - 0x3, 0x397, 0x342, 0x345, - 0x3, 0x397, 0x342, 0x399, - 0x3, 0x3a9, 0x342, 0x345, - 0x3, 0x3a9, 0x342, 0x399 -}; - - -static const unsigned short uc_decomposition_trie[] = { - // 0 - 0x3400 - - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1564, 1580, 1596, 1612, 1628, 1644, - 1660, 1676, 1692, 1708, 1724, 1740, 1756, 1772, - 1548, 1548, 1788, 1804, 1820, 1836, 1852, 1868, - 1884, 1900, 1916, 1932, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1948, 1548, 1964, 1980, 1548, - 1548, 1548, 1548, 1548, 1996, 1548, 1548, 2012, - 2028, 2044, 2060, 2076, 2092, 2108, 1548, 2124, - 2140, 2156, 1548, 2172, 1548, 2188, 1548, 2204, - 1548, 1548, 1548, 1548, 2220, 2236, 2252, 2268, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 2284, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2300, 1548, 1548, 1548, 1548, 2316, - 1548, 1548, 1548, 1548, 2332, 2348, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2364, 2380, 1548, 2396, 1548, 1548, - 1548, 1548, 1548, 1548, 2412, 2428, 1548, 1548, - 1548, 1548, 1548, 2444, 1548, 2460, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2476, 2492, 1548, 1548, - 1548, 2508, 1548, 1548, 2524, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2540, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2556, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2572, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 2588, 1548, 1548, - 1548, 1548, 1548, 2604, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 2620, 1548, 2636, 1548, 1548, - 2652, 1548, 1548, 1548, 2668, 2684, 2700, 2716, - 2732, 2748, 2764, 2780, 1548, 1548, 1548, 1548, - - 1548, 1548, 2796, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 2812, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 2828, 2844, 1548, 2860, 2876, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2892, 2908, 2924, 2940, 2956, 2972, - 1548, 2988, 3004, 3020, 1548, 1548, 1548, 1548, - 3036, 3052, 3068, 3084, 3100, 3116, 3132, 3148, - 3164, 3180, 3196, 3212, 3228, 3244, 3260, 3276, - 3292, 3308, 3324, 3340, 3356, 3372, 3388, 3404, - 3420, 3436, 3452, 3468, 3484, 3500, 3516, 3532, - - 3548, 3564, 3580, 3596, 3612, 3628, 1548, 3644, - 3660, 3676, 3692, 1548, 1548, 1548, 1548, 1548, - 3708, 3724, 3740, 3756, 3772, 3788, 3804, 3820, - 3836, 3852, 3868, 1548, 3884, 1548, 1548, 1548, - 3900, 1548, 3916, 3932, 3948, 1548, 3964, 3980, - 3996, 1548, 4012, 1548, 1548, 1548, 4028, 1548, - 1548, 1548, 4044, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 4060, 4076, - 4092, 4108, 4124, 4140, 4156, 4172, 4188, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 4204, 1548, 1548, 1548, 1548, 1548, 1548, 4220, - 1548, 1548, 1548, 1548, 1548, 4236, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 4252, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 4268, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 4284, 1548, 1548, 1548, 1548, 1548, 4300, - 4316, 4332, 4348, 4364, 4380, 4396, 4412, 4428, - 4444, 4460, 4476, 4492, 4508, 4524, 1548, 1548, - - 4540, 1548, 1548, 4556, 4572, 4588, 4604, 4620, - 1548, 4636, 4652, 4668, 4684, 4700, 1548, 4716, - 1548, 1548, 1548, 4732, 4748, 4764, 4780, 4796, - 4812, 4828, 1548, 1548, 1548, 1548, 1548, 1548, - 4844, 4860, 4876, 4892, 4908, 4924, 4940, 4956, - 4972, 4988, 5004, 5020, 5036, 5052, 5068, 5084, - 5100, 5116, 5132, 5148, 5164, 5180, 5196, 5212, - 5228, 5244, 5260, 5276, 5292, 5308, 5324, 5340, - - // 0x3400 - 0x30000 - - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5612, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - - 5356, 5356, 5356, 5356, 5356, 5868, 6124, 6380, - 6636, 6892, 7148, 7404, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 7660, 7916, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 8172, 5356, 5356, - 8428, 8684, 8940, 9196, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 9452, 5356, 5356, 9708, 9964, 5356, - - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - - 5356, 5356, 5356, 5356, 10220, 10476, 10732, 5356, - 5356, 5356, 5356, 5356, - - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2, 0xffff, 0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0x7, - - 0xffff, 0xffff, 0xa, 0xc, 0xe, 0x11, 0xffff, 0xffff, - 0x13, 0x16, 0x18, 0xffff, 0x1a, 0x1e, 0x22, 0xffff, - - 0x26, 0x29, 0x2c, 0x2f, 0x32, 0x35, 0xffff, 0x38, - 0x3b, 0x3e, 0x41, 0x44, 0x47, 0x4a, 0x4d, 0x50, - - 0xffff, 0x53, 0x56, 0x59, 0x5c, 0x5f, 0x62, 0xffff, - 0xffff, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0xffff, 0xffff, - - 0x74, 0x77, 0x7a, 0x7d, 0x80, 0x83, 0xffff, 0x86, - 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9b, 0x9e, - - 0xffff, 0xa1, 0xa4, 0xa7, 0xaa, 0xad, 0xb0, 0xffff, - 0xffff, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xffff, 0xc2, - - 0xc5, 0xc8, 0xcb, 0xce, 0xd1, 0xd4, 0xd7, 0xda, - 0xdd, 0xe0, 0xe3, 0xe6, 0xe9, 0xec, 0xef, 0xf2, - - 0xffff, 0xffff, 0xf5, 0xf8, 0xfb, 0xfe, 0x101, 0x104, - 0x107, 0x10a, 0x10d, 0x110, 0x113, 0x116, 0x119, 0x11c, - - 0x11f, 0x122, 0x125, 0x128, 0x12b, 0x12e, 0xffff, 0xffff, - 0x131, 0x134, 0x137, 0x13a, 0x13d, 0x140, 0x143, 0x146, - - 0x149, 0xffff, 0x14c, 0x14f, 0x152, 0x155, 0x158, 0x15b, - 0xffff, 0x15e, 0x161, 0x164, 0x167, 0x16a, 0x16d, 0x170, - - 0x173, 0xffff, 0xffff, 0x176, 0x179, 0x17c, 0x17f, 0x182, - 0x185, 0x188, 0xffff, 0xffff, 0x18b, 0x18e, 0x191, 0x194, - - 0x197, 0x19a, 0xffff, 0xffff, 0x19d, 0x1a0, 0x1a3, 0x1a6, - 0x1a9, 0x1ac, 0x1af, 0x1b2, 0x1b5, 0x1b8, 0x1bb, 0x1be, - - 0x1c1, 0x1c4, 0x1c7, 0x1ca, 0x1cd, 0x1d0, 0xffff, 0xffff, - 0x1d3, 0x1d6, 0x1d9, 0x1dc, 0x1df, 0x1e2, 0x1e5, 0x1e8, - - 0x1eb, 0x1ee, 0x1f1, 0x1f4, 0x1f7, 0x1fa, 0x1fd, 0x200, - 0x203, 0x206, 0x209, 0x20c, 0x20f, 0x212, 0x215, 0x218, - - 0x21a, 0x21d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x220, - - 0x223, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x226, 0x229, 0x22c, 0x22f, - 0x232, 0x235, 0x238, 0x23b, 0x23e, 0x241, 0x244, 0x247, - - 0x24a, 0x24d, 0x250, 0x253, 0x256, 0x259, 0x25c, 0x25f, - 0x262, 0x265, 0x268, 0x26b, 0x26e, 0xffff, 0x271, 0x274, - - 0x277, 0x27a, 0x27d, 0x280, 0xffff, 0xffff, 0x283, 0x286, - 0x289, 0x28c, 0x28f, 0x292, 0x295, 0x298, 0x29b, 0x29e, - - 0x2a1, 0x2a4, 0x2a7, 0x2aa, 0x2ad, 0x2b0, 0xffff, 0xffff, - 0x2b3, 0x2b6, 0x2b9, 0x2bc, 0x2bf, 0x2c2, 0x2c5, 0x2c8, - - 0x2cb, 0x2ce, 0x2d1, 0x2d4, 0x2d7, 0x2da, 0x2dd, 0x2e0, - 0x2e3, 0x2e6, 0x2e9, 0x2ec, 0x2ef, 0x2f2, 0x2f5, 0x2f8, - - 0x2fb, 0x2fe, 0x301, 0x304, 0x307, 0x30a, 0x30d, 0x310, - 0x313, 0x316, 0x319, 0x31c, 0xffff, 0xffff, 0x31f, 0x322, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x325, 0x328, - 0x32b, 0x32e, 0x331, 0x334, 0x337, 0x33a, 0x33d, 0x340, - - 0x343, 0x346, 0x349, 0x34c, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x34f, 0x351, 0x353, 0x355, 0x357, 0x359, 0x35b, 0x35d, - 0x35f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x361, 0x364, 0x367, 0x36a, 0x36d, 0x370, 0xffff, 0xffff, - - 0x373, 0x375, 0x377, 0x379, 0x37b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x37d, 0x37f, 0xffff, 0x381, 0x383, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x386, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x388, 0xffff, 0xffff, 0xffff, 0x38b, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x38d, 0x390, 0x393, 0x396, - 0x398, 0x39b, 0x39e, 0xffff, 0x3a1, 0xffff, 0x3a4, 0x3a7, - - 0x3aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3ad, 0x3b0, 0x3b3, 0x3b6, 0x3b9, 0x3bc, - - 0x3bf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3c2, 0x3c5, 0x3c8, 0x3cb, 0x3ce, 0xffff, - - 0x3d1, 0x3d3, 0x3d5, 0x3d7, 0x3da, 0x3dd, 0x3df, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3e1, 0x3e3, 0x3e5, 0xffff, 0x3e7, 0x3e9, 0xffff, 0xffff, - 0xffff, 0x3eb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3ed, 0x3f0, 0xffff, 0x3f3, 0xffff, 0xffff, 0xffff, 0x3f6, - 0xffff, 0xffff, 0xffff, 0xffff, 0x3f9, 0x3fc, 0x3ff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x402, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x405, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x408, 0x40b, 0xffff, 0x40e, 0xffff, 0xffff, 0xffff, 0x411, - 0xffff, 0xffff, 0xffff, 0xffff, 0x414, 0x417, 0x41a, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x41d, 0x420, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x423, 0x426, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x429, 0x42c, 0x42f, 0x432, 0xffff, 0xffff, 0x435, 0x438, - 0xffff, 0xffff, 0x43b, 0x43e, 0x441, 0x444, 0x447, 0x44a, - - 0xffff, 0xffff, 0x44d, 0x450, 0x453, 0x456, 0x459, 0x45c, - 0xffff, 0xffff, 0x45f, 0x462, 0x465, 0x468, 0x46b, 0x46e, - - 0x471, 0x474, 0x477, 0x47a, 0x47d, 0x480, 0xffff, 0xffff, - 0x483, 0x486, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x489, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x48c, 0x48f, 0x492, 0x495, 0x498, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x49b, 0x49e, 0x4a1, - 0x4a4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x4a7, 0xffff, 0x4aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x4ad, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x4b0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x4b3, 0xffff, 0xffff, 0x4b6, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x4b9, 0x4bc, 0x4bf, 0x4c2, 0x4c5, 0x4c8, 0x4cb, 0x4ce, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x4d1, 0x4d4, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x4d7, 0x4da, 0xffff, 0x4dd, - - 0xffff, 0xffff, 0xffff, 0x4e0, 0xffff, 0xffff, 0x4e3, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x4e6, 0x4e9, 0x4ec, 0xffff, 0xffff, 0x4ef, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x4f2, 0xffff, 0xffff, 0x4f5, 0x4f8, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x4fb, 0x4fe, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x501, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x504, 0x507, 0x50a, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x50d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x510, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x513, - 0x516, 0xffff, 0x519, 0x51c, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x51f, 0x522, 0x525, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x528, 0xffff, 0x52b, 0x52e, 0x531, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x534, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x537, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x53a, 0x53d, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x540, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x542, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x545, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x548, 0xffff, 0xffff, 0xffff, 0xffff, 0x54b, - 0xffff, 0xffff, 0xffff, 0xffff, 0x54e, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x551, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x554, 0xffff, 0x557, 0x55a, 0x55d, - 0x560, 0x563, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x566, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x569, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x56c, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x56f, 0xffff, 0xffff, 0xffff, 0xffff, 0x572, - 0xffff, 0xffff, 0xffff, 0xffff, 0x575, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x578, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x57b, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x57e, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x580, 0xffff, - 0x583, 0xffff, 0x586, 0xffff, 0x589, 0xffff, 0x58c, 0xffff, - - 0xffff, 0xffff, 0x58f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x592, 0xffff, 0x595, 0xffff, 0xffff, - - 0x598, 0x59b, 0xffff, 0x59e, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x5a1, 0x5a3, 0x5a5, 0xffff, - - 0x5a7, 0x5a9, 0x5ab, 0x5ad, 0x5af, 0x5b1, 0x5b3, 0x5b5, - 0x5b7, 0x5b9, 0x5bb, 0xffff, 0x5bd, 0x5bf, 0x5c1, 0x5c3, - - 0x5c5, 0x5c7, 0x5c9, 0x5cb, 0x5cd, 0x5cf, 0x5d1, 0x5d3, - 0x5d5, 0x5d7, 0x5d9, 0x5db, 0x5dd, 0x5df, 0xffff, 0x5e1, - - 0x5e3, 0x5e5, 0x5e7, 0x5e9, 0x5eb, 0x5ed, 0x5ef, 0x5f1, - 0x5f3, 0x5f5, 0x5f7, 0x5f9, 0x5fb, 0x5fd, 0x5ff, 0x601, - - 0x603, 0x605, 0x607, 0x609, 0x60b, 0x60d, 0x60f, 0x611, - 0x613, 0x615, 0x617, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x619, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x61b, 0x61d, 0x61f, 0x621, 0x623, - - 0x625, 0x627, 0x629, 0x62b, 0x62d, 0x62f, 0x631, 0x633, - 0x635, 0x637, 0x639, 0x63b, 0x63d, 0x63f, 0x641, 0x643, - - 0x645, 0x647, 0x649, 0x64b, 0x64d, 0x64f, 0x651, 0x653, - 0x655, 0x657, 0x659, 0x65b, 0x65d, 0x65f, 0x661, 0x663, - - 0x665, 0x668, 0x66b, 0x66e, 0x671, 0x674, 0x677, 0x67a, - 0x67d, 0x680, 0x683, 0x686, 0x689, 0x68c, 0x68f, 0x692, - - 0x695, 0x698, 0x69b, 0x69e, 0x6a1, 0x6a4, 0x6a7, 0x6aa, - 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6bc, 0x6bf, 0x6c2, - - 0x6c5, 0x6c8, 0x6cb, 0x6ce, 0x6d1, 0x6d4, 0x6d7, 0x6da, - 0x6dd, 0x6e0, 0x6e3, 0x6e6, 0x6e9, 0x6ec, 0x6ef, 0x6f2, - - 0x6f5, 0x6f8, 0x6fb, 0x6fe, 0x701, 0x704, 0x707, 0x70a, - 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71c, 0x71f, 0x722, - - 0x725, 0x728, 0x72b, 0x72e, 0x731, 0x734, 0x737, 0x73a, - 0x73d, 0x740, 0x743, 0x746, 0x749, 0x74c, 0x74f, 0x752, - - 0x755, 0x758, 0x75b, 0x75e, 0x761, 0x764, 0x767, 0x76a, - 0x76d, 0x770, 0x773, 0x776, 0x779, 0x77c, 0x77f, 0x782, - - 0x785, 0x788, 0x78b, 0x78e, 0x791, 0x794, 0x797, 0x79a, - 0x79d, 0x7a0, 0x7a3, 0x7a6, 0x7a9, 0x7ac, 0x7af, 0x7b2, - - 0x7b5, 0x7b8, 0x7bb, 0x7be, 0x7c1, 0x7c4, 0x7c7, 0x7ca, - 0x7cd, 0x7d0, 0x7d3, 0x7d6, 0x7d9, 0x7dc, 0x7df, 0x7e2, - - 0x7e5, 0x7e8, 0x7eb, 0x7ee, 0x7f1, 0x7f4, 0x7f7, 0x7fa, - 0x7fd, 0x800, 0x803, 0x806, 0x809, 0x80c, 0x80f, 0x812, - - 0x815, 0x818, 0x81b, 0x81e, 0x821, 0x824, 0x827, 0x82a, - 0x82d, 0x830, 0x833, 0x836, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x839, 0x83c, 0x83f, 0x842, 0x845, 0x848, 0x84b, 0x84e, - 0x851, 0x854, 0x857, 0x85a, 0x85d, 0x860, 0x863, 0x866, - - 0x869, 0x86c, 0x86f, 0x872, 0x875, 0x878, 0x87b, 0x87e, - 0x881, 0x884, 0x887, 0x88a, 0x88d, 0x890, 0x893, 0x896, - - 0x899, 0x89c, 0x89f, 0x8a2, 0x8a5, 0x8a8, 0x8ab, 0x8ae, - 0x8b1, 0x8b4, 0x8b7, 0x8ba, 0x8bd, 0x8c0, 0x8c3, 0x8c6, - - 0x8c9, 0x8cc, 0x8cf, 0x8d2, 0x8d5, 0x8d8, 0x8db, 0x8de, - 0x8e1, 0x8e4, 0x8e7, 0x8ea, 0x8ed, 0x8f0, 0x8f3, 0x8f6, - - 0x8f9, 0x8fc, 0x8ff, 0x902, 0x905, 0x908, 0x90b, 0x90e, - 0x911, 0x914, 0x917, 0x91a, 0x91d, 0x920, 0x923, 0x926, - - 0x929, 0x92c, 0x92f, 0x932, 0x935, 0x938, 0x93b, 0x93e, - 0x941, 0x944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x947, 0x94a, 0x94d, 0x950, 0x953, 0x956, 0x959, 0x95c, - 0x95f, 0x962, 0x965, 0x968, 0x96b, 0x96e, 0x971, 0x974, - - 0x977, 0x97a, 0x97d, 0x980, 0x983, 0x986, 0xffff, 0xffff, - 0x989, 0x98c, 0x98f, 0x992, 0x995, 0x998, 0xffff, 0xffff, - - 0x99b, 0x99e, 0x9a1, 0x9a4, 0x9a7, 0x9aa, 0x9ad, 0x9b0, - 0x9b3, 0x9b6, 0x9b9, 0x9bc, 0x9bf, 0x9c2, 0x9c5, 0x9c8, - - 0x9cb, 0x9ce, 0x9d1, 0x9d4, 0x9d7, 0x9da, 0x9dd, 0x9e0, - 0x9e3, 0x9e6, 0x9e9, 0x9ec, 0x9ef, 0x9f2, 0x9f5, 0x9f8, - - 0x9fb, 0x9fe, 0xa01, 0xa04, 0xa07, 0xa0a, 0xffff, 0xffff, - 0xa0d, 0xa10, 0xa13, 0xa16, 0xa19, 0xa1c, 0xffff, 0xffff, - - 0xa1f, 0xa22, 0xa25, 0xa28, 0xa2b, 0xa2e, 0xa31, 0xa34, - 0xffff, 0xa37, 0xffff, 0xa3a, 0xffff, 0xa3d, 0xffff, 0xa40, - - 0xa43, 0xa46, 0xa49, 0xa4c, 0xa4f, 0xa52, 0xa55, 0xa58, - 0xa5b, 0xa5e, 0xa61, 0xa64, 0xa67, 0xa6a, 0xa6d, 0xa70, - - 0xa73, 0xa76, 0xa78, 0xa7b, 0xa7d, 0xa80, 0xa82, 0xa85, - 0xa87, 0xa8a, 0xa8c, 0xa8f, 0xa91, 0xa94, 0xffff, 0xffff, - - 0xa96, 0xa99, 0xa9c, 0xa9f, 0xaa2, 0xaa5, 0xaa8, 0xaab, - 0xaae, 0xab1, 0xab4, 0xab7, 0xaba, 0xabd, 0xac0, 0xac3, - - 0xac6, 0xac9, 0xacc, 0xacf, 0xad2, 0xad5, 0xad8, 0xadb, - 0xade, 0xae1, 0xae4, 0xae7, 0xaea, 0xaed, 0xaf0, 0xaf3, - - 0xaf6, 0xaf9, 0xafc, 0xaff, 0xb02, 0xb05, 0xb08, 0xb0b, - 0xb0e, 0xb11, 0xb14, 0xb17, 0xb1a, 0xb1d, 0xb20, 0xb23, - - 0xb26, 0xb29, 0xb2c, 0xb2f, 0xb32, 0xffff, 0xb35, 0xb38, - 0xb3b, 0xb3e, 0xb41, 0xb44, 0xb46, 0xb49, 0xb4c, 0xb4e, - - 0xb51, 0xb54, 0xb57, 0xb5a, 0xb5d, 0xffff, 0xb60, 0xb63, - 0xb66, 0xb69, 0xb6b, 0xb6e, 0xb70, 0xb73, 0xb76, 0xb79, - - 0xb7c, 0xb7f, 0xb82, 0xb85, 0xffff, 0xffff, 0xb87, 0xb8a, - 0xb8d, 0xb90, 0xb93, 0xb96, 0xffff, 0xb98, 0xb9b, 0xb9e, - - 0xba1, 0xba4, 0xba7, 0xbaa, 0xbac, 0xbaf, 0xbb2, 0xbb5, - 0xbb8, 0xbbb, 0xbbe, 0xbc1, 0xbc3, 0xbc6, 0xbc9, 0xbcb, - - 0xffff, 0xffff, 0xbcd, 0xbd0, 0xbd3, 0xffff, 0xbd6, 0xbd9, - 0xbdc, 0xbdf, 0xbe1, 0xbe4, 0xbe6, 0xbe9, 0xbeb, 0xffff, - - 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, - 0xbfe, 0xc00, 0xc02, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xc04, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc06, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xc09, 0xc0b, 0xc0e, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc12, - - 0xffff, 0xffff, 0xffff, 0xc14, 0xc17, 0xffff, 0xc1b, 0xc1e, - 0xffff, 0xffff, 0xffff, 0xffff, 0xc22, 0xffff, 0xc25, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc28, - 0xc2b, 0xc2e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc31, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc36, - - 0xc38, 0xc3a, 0xffff, 0xffff, 0xc3c, 0xc3e, 0xc40, 0xc42, - 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, - - 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, - 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xffff, - - 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, - 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xc8c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xc8f, 0xc93, 0xc97, 0xc99, 0xffff, 0xc9c, 0xca0, 0xca4, - 0xffff, 0xca6, 0xca9, 0xcab, 0xcad, 0xcaf, 0xcb1, 0xcb3, - - 0xcb5, 0xcb7, 0xcb9, 0xcbb, 0xffff, 0xcbd, 0xcbf, 0xffff, - 0xffff, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xffff, 0xffff, - - 0xccc, 0xccf, 0xcd3, 0xffff, 0xcd6, 0xffff, 0xcd8, 0xffff, - 0xcda, 0xffff, 0xcdc, 0xcde, 0xce0, 0xce2, 0xffff, 0xce4, - - 0xce6, 0xce8, 0xffff, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, - 0xcf4, 0xcf6, 0xffff, 0xcf8, 0xcfc, 0xcfe, 0xd00, 0xd02, - - 0xd04, 0xffff, 0xffff, 0xffff, 0xffff, 0xd06, 0xd08, 0xd0a, - 0xd0c, 0xd0e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xd10, 0xd14, 0xd18, 0xd1d, 0xd21, 0xd25, 0xd29, 0xd2d, - 0xd31, 0xd35, 0xd39, 0xd3d, 0xd41, 0xd45, 0xd49, 0xd4d, - - 0xd50, 0xd52, 0xd55, 0xd59, 0xd5c, 0xd5e, 0xd61, 0xd65, - 0xd6a, 0xd6d, 0xd6f, 0xd72, 0xd76, 0xd78, 0xd7a, 0xd7c, - - 0xd7e, 0xd80, 0xd83, 0xd87, 0xd8a, 0xd8c, 0xd8f, 0xd93, - 0xd98, 0xd9b, 0xd9d, 0xda0, 0xda4, 0xda6, 0xda8, 0xdaa, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xdac, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xdb0, 0xdb3, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb6, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb9, 0xdbc, 0xdbf, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xdc2, 0xffff, 0xffff, 0xffff, - 0xffff, 0xdc5, 0xffff, 0xffff, 0xdc8, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xdcb, 0xffff, 0xdce, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xdd1, 0xdd4, 0xffff, 0xdd8, - - 0xddb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xddf, 0xffff, 0xffff, 0xde2, 0xffff, 0xffff, 0xde5, - 0xffff, 0xde8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xdeb, 0xffff, 0xdee, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdf1, 0xdf4, 0xdf7, - - 0xdfa, 0xdfd, 0xffff, 0xffff, 0xe00, 0xe03, 0xffff, 0xffff, - 0xe06, 0xe09, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xe0c, 0xe0f, 0xffff, 0xffff, 0xe12, 0xe15, 0xffff, 0xffff, - 0xe18, 0xe1b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xe1e, 0xe21, 0xe24, 0xe27, - - 0xe2a, 0xe2d, 0xe30, 0xe33, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xe36, 0xe39, 0xe3c, 0xe3f, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xe42, 0xe44, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, - 0xe56, 0xe58, 0xe5b, 0xe5e, 0xe61, 0xe64, 0xe67, 0xe6a, - - 0xe6d, 0xe70, 0xe73, 0xe76, 0xe79, 0xe7d, 0xe81, 0xe85, - 0xe89, 0xe8d, 0xe91, 0xe95, 0xe99, 0xe9d, 0xea2, 0xea7, - - 0xeac, 0xeb1, 0xeb6, 0xebb, 0xec0, 0xec5, 0xeca, 0xecf, - 0xed4, 0xed7, 0xeda, 0xedd, 0xee0, 0xee3, 0xee6, 0xee9, - - 0xeec, 0xeef, 0xef3, 0xef7, 0xefb, 0xeff, 0xf03, 0xf07, - 0xf0b, 0xf0f, 0xf13, 0xf17, 0xf1b, 0xf1f, 0xf23, 0xf27, - - 0xf2b, 0xf2f, 0xf33, 0xf37, 0xf3b, 0xf3f, 0xf43, 0xf47, - 0xf4b, 0xf4f, 0xf53, 0xf57, 0xf5b, 0xf5f, 0xf63, 0xf67, - - 0xf6b, 0xf6f, 0xf73, 0xf77, 0xf7b, 0xf7f, 0xf83, 0xf85, - 0xf87, 0xf89, 0xf8b, 0xf8d, 0xf8f, 0xf91, 0xf93, 0xf95, - - 0xf97, 0xf99, 0xf9b, 0xf9d, 0xf9f, 0xfa1, 0xfa3, 0xfa5, - 0xfa7, 0xfa9, 0xfab, 0xfad, 0xfaf, 0xfb1, 0xfb3, 0xfb5, - - 0xfb7, 0xfb9, 0xfbb, 0xfbd, 0xfbf, 0xfc1, 0xfc3, 0xfc5, - 0xfc7, 0xfc9, 0xfcb, 0xfcd, 0xfcf, 0xfd1, 0xfd3, 0xfd5, - - 0xfd7, 0xfd9, 0xfdb, 0xfdd, 0xfdf, 0xfe1, 0xfe3, 0xfe5, - 0xfe7, 0xfe9, 0xfeb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xfed, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xff2, 0xff6, 0xff9, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffd, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x1000, 0x1002, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1004, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1006, - - 0xffff, 0xffff, 0xffff, 0x1008, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x100a, 0x100c, 0x100e, 0x1010, 0x1012, 0x1014, 0x1016, 0x1018, - 0x101a, 0x101c, 0x101e, 0x1020, 0x1022, 0x1024, 0x1026, 0x1028, - - 0x102a, 0x102c, 0x102e, 0x1030, 0x1032, 0x1034, 0x1036, 0x1038, - 0x103a, 0x103c, 0x103e, 0x1040, 0x1042, 0x1044, 0x1046, 0x1048, - - 0x104a, 0x104c, 0x104e, 0x1050, 0x1052, 0x1054, 0x1056, 0x1058, - 0x105a, 0x105c, 0x105e, 0x1060, 0x1062, 0x1064, 0x1066, 0x1068, - - 0x106a, 0x106c, 0x106e, 0x1070, 0x1072, 0x1074, 0x1076, 0x1078, - 0x107a, 0x107c, 0x107e, 0x1080, 0x1082, 0x1084, 0x1086, 0x1088, - - 0x108a, 0x108c, 0x108e, 0x1090, 0x1092, 0x1094, 0x1096, 0x1098, - 0x109a, 0x109c, 0x109e, 0x10a0, 0x10a2, 0x10a4, 0x10a6, 0x10a8, - - 0x10aa, 0x10ac, 0x10ae, 0x10b0, 0x10b2, 0x10b4, 0x10b6, 0x10b8, - 0x10ba, 0x10bc, 0x10be, 0x10c0, 0x10c2, 0x10c4, 0x10c6, 0x10c8, - - 0x10ca, 0x10cc, 0x10ce, 0x10d0, 0x10d2, 0x10d4, 0x10d6, 0x10d8, - 0x10da, 0x10dc, 0x10de, 0x10e0, 0x10e2, 0x10e4, 0x10e6, 0x10e8, - - 0x10ea, 0x10ec, 0x10ee, 0x10f0, 0x10f2, 0x10f4, 0x10f6, 0x10f8, - 0x10fa, 0x10fc, 0x10fe, 0x1100, 0x1102, 0x1104, 0x1106, 0x1108, - - 0x110a, 0x110c, 0x110e, 0x1110, 0x1112, 0x1114, 0x1116, 0x1118, - 0x111a, 0x111c, 0x111e, 0x1120, 0x1122, 0x1124, 0x1126, 0x1128, - - 0x112a, 0x112c, 0x112e, 0x1130, 0x1132, 0x1134, 0x1136, 0x1138, - 0x113a, 0x113c, 0x113e, 0x1140, 0x1142, 0x1144, 0x1146, 0x1148, - - 0x114a, 0x114c, 0x114e, 0x1150, 0x1152, 0x1154, 0x1156, 0x1158, - 0x115a, 0x115c, 0x115e, 0x1160, 0x1162, 0x1164, 0x1166, 0x1168, - - 0x116a, 0x116c, 0x116e, 0x1170, 0x1172, 0x1174, 0x1176, 0x1178, - 0x117a, 0x117c, 0x117e, 0x1180, 0x1182, 0x1184, 0x1186, 0x1188, - - 0x118a, 0x118c, 0x118e, 0x1190, 0x1192, 0x1194, 0x1196, 0x1198, - 0x119a, 0x119c, 0x119e, 0x11a0, 0x11a2, 0x11a4, 0x11a6, 0x11a8, - - 0x11aa, 0x11ac, 0x11ae, 0x11b0, 0x11b2, 0x11b4, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x11b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x11b8, 0xffff, - 0x11ba, 0x11bc, 0x11be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x11c0, 0xffff, 0x11c3, 0xffff, - - 0x11c6, 0xffff, 0x11c9, 0xffff, 0x11cc, 0xffff, 0x11cf, 0xffff, - 0x11d2, 0xffff, 0x11d5, 0xffff, 0x11d8, 0xffff, 0x11db, 0xffff, - - 0x11de, 0xffff, 0x11e1, 0xffff, 0xffff, 0x11e4, 0xffff, 0x11e7, - 0xffff, 0x11ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x11ed, 0x11f0, 0xffff, 0x11f3, 0x11f6, 0xffff, 0x11f9, 0x11fc, - 0xffff, 0x11ff, 0x1202, 0xffff, 0x1205, 0x1208, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x120b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x120e, 0x1211, 0xffff, 0x1214, 0x1217, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x121a, 0xffff, 0x121d, 0xffff, - - 0x1220, 0xffff, 0x1223, 0xffff, 0x1226, 0xffff, 0x1229, 0xffff, - 0x122c, 0xffff, 0x122f, 0xffff, 0x1232, 0xffff, 0x1235, 0xffff, - - 0x1238, 0xffff, 0x123b, 0xffff, 0xffff, 0x123e, 0xffff, 0x1241, - 0xffff, 0x1244, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x1247, 0x124a, 0xffff, 0x124d, 0x1250, 0xffff, 0x1253, 0x1256, - 0xffff, 0x1259, 0x125c, 0xffff, 0x125f, 0x1262, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x1265, 0xffff, 0xffff, 0x1268, - 0x126b, 0x126e, 0x1271, 0xffff, 0xffff, 0xffff, 0x1274, 0x1277, - - 0xffff, 0x127a, 0x127c, 0x127e, 0x1280, 0x1282, 0x1284, 0x1286, - 0x1288, 0x128a, 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1296, - - 0x1298, 0x129a, 0x129c, 0x129e, 0x12a0, 0x12a2, 0x12a4, 0x12a6, - 0x12a8, 0x12aa, 0x12ac, 0x12ae, 0x12b0, 0x12b2, 0x12b4, 0x12b6, - - 0x12b8, 0x12ba, 0x12bc, 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, - 0x12c8, 0x12ca, 0x12cc, 0x12ce, 0x12d0, 0x12d2, 0x12d4, 0x12d6, - - 0x12d8, 0x12da, 0x12dc, 0x12de, 0x12e0, 0x12e2, 0x12e4, 0x12e6, - 0x12e8, 0x12ea, 0x12ec, 0x12ee, 0x12f0, 0x12f2, 0x12f4, 0x12f6, - - 0x12f8, 0x12fa, 0x12fc, 0x12fe, 0x1300, 0x1302, 0x1304, 0x1306, - 0x1308, 0x130a, 0x130c, 0x130e, 0x1310, 0x1312, 0x1314, 0x1316, - - 0x1318, 0x131a, 0x131c, 0x131e, 0x1320, 0x1322, 0x1324, 0x1326, - 0x1328, 0x132a, 0x132c, 0x132e, 0x1330, 0x1332, 0x1334, 0xffff, - - 0xffff, 0xffff, 0x1336, 0x1338, 0x133a, 0x133c, 0x133e, 0x1340, - 0x1342, 0x1344, 0x1346, 0x1348, 0x134a, 0x134c, 0x134e, 0x1350, - - 0x1352, 0x1356, 0x135a, 0x135e, 0x1362, 0x1366, 0x136a, 0x136e, - 0x1372, 0x1376, 0x137a, 0x137e, 0x1382, 0x1386, 0x138a, 0x138f, - - 0x1394, 0x1399, 0x139e, 0x13a3, 0x13a8, 0x13ad, 0x13b2, 0x13b7, - 0x13bc, 0x13c1, 0x13c6, 0x13cb, 0x13d0, 0x13d5, 0x13dd, 0xffff, - - 0x13e4, 0x13e8, 0x13ec, 0x13f0, 0x13f4, 0x13f8, 0x13fc, 0x1400, - 0x1404, 0x1408, 0x140c, 0x1410, 0x1414, 0x1418, 0x141c, 0x1420, - - 0x1424, 0x1428, 0x142c, 0x1430, 0x1434, 0x1438, 0x143c, 0x1440, - 0x1444, 0x1448, 0x144c, 0x1450, 0x1454, 0x1458, 0x145c, 0x1460, - - 0x1464, 0x1468, 0x146c, 0x1470, 0x1474, 0x1476, 0x1478, 0x147a, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x147c, 0x1480, 0x1483, 0x1486, 0x1489, 0x148c, 0x148f, 0x1492, - 0x1495, 0x1498, 0x149b, 0x149e, 0x14a1, 0x14a4, 0x14a7, 0x14aa, - - 0x14ad, 0x14af, 0x14b1, 0x14b3, 0x14b5, 0x14b7, 0x14b9, 0x14bb, - 0x14bd, 0x14bf, 0x14c1, 0x14c3, 0x14c5, 0x14c7, 0x14c9, 0x14cc, - - 0x14cf, 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, - 0x14e7, 0x14ea, 0x14ed, 0x14f0, 0x14f3, 0x14f9, 0x14fe, 0xffff, - - 0x1501, 0x1503, 0x1505, 0x1507, 0x1509, 0x150b, 0x150d, 0x150f, - 0x1511, 0x1513, 0x1515, 0x1517, 0x1519, 0x151b, 0x151d, 0x151f, - - 0x1521, 0x1523, 0x1525, 0x1527, 0x1529, 0x152b, 0x152d, 0x152f, - 0x1531, 0x1533, 0x1535, 0x1537, 0x1539, 0x153b, 0x153d, 0x153f, - - 0x1541, 0x1543, 0x1545, 0x1547, 0x1549, 0x154b, 0x154d, 0x154f, - 0x1551, 0x1553, 0x1555, 0x1557, 0x1559, 0x155b, 0x155d, 0x155f, - - 0x1561, 0x1563, 0x1566, 0x1569, 0x156c, 0x156f, 0x1572, 0x1575, - 0x1578, 0x157b, 0x157e, 0x1581, 0x1584, 0x1587, 0x158a, 0x158d, - - 0x1590, 0x1593, 0x1596, 0x1599, 0x159c, 0x159f, 0x15a2, 0x15a5, - 0x15a8, 0x15ab, 0x15af, 0x15b3, 0x15b7, 0x15ba, 0x15be, 0x15c1, - - 0x15c5, 0x15c7, 0x15c9, 0x15cb, 0x15cd, 0x15cf, 0x15d1, 0x15d3, - 0x15d5, 0x15d7, 0x15d9, 0x15db, 0x15dd, 0x15df, 0x15e1, 0x15e3, - - 0x15e5, 0x15e7, 0x15e9, 0x15eb, 0x15ed, 0x15ef, 0x15f1, 0x15f3, - 0x15f5, 0x15f7, 0x15f9, 0x15fb, 0x15fd, 0x15ff, 0x1601, 0x1603, - - 0x1605, 0x1607, 0x1609, 0x160b, 0x160d, 0x160f, 0x1611, 0x1613, - 0x1615, 0x1617, 0x1619, 0x161b, 0x161d, 0x161f, 0x1621, 0xffff, - - 0x1623, 0x1628, 0x162d, 0x1632, 0x1636, 0x163b, 0x163f, 0x1643, - 0x1649, 0x164e, 0x1652, 0x1656, 0x165a, 0x165f, 0x1664, 0x1668, - - 0x166c, 0x166f, 0x1673, 0x1678, 0x167d, 0x1680, 0x1686, 0x168d, - 0x1693, 0x1697, 0x169d, 0x16a3, 0x16a8, 0x16ac, 0x16b0, 0x16b4, - - 0x16b9, 0x16bf, 0x16c4, 0x16c8, 0x16cc, 0x16d0, 0x16d3, 0x16d6, - 0x16d9, 0x16dc, 0x16e0, 0x16e4, 0x16ea, 0x16ee, 0x16f3, 0x16f9, - - 0x16fd, 0x1700, 0x1703, 0x1709, 0x170e, 0x1714, 0x1718, 0x171e, - 0x1721, 0x1725, 0x1729, 0x172d, 0x1731, 0x1735, 0x173a, 0x173e, - - 0x1741, 0x1745, 0x1749, 0x174d, 0x1752, 0x1756, 0x175a, 0x175e, - 0x1764, 0x1769, 0x176c, 0x1772, 0x1775, 0x177a, 0x177f, 0x1783, - - 0x1787, 0x178b, 0x1790, 0x1793, 0x1797, 0x179c, 0x179f, 0x17a5, - 0x17a9, 0x17ac, 0x17af, 0x17b2, 0x17b5, 0x17b8, 0x17bb, 0x17be, - - 0x17c1, 0x17c4, 0x17c7, 0x17cb, 0x17cf, 0x17d3, 0x17d7, 0x17db, - 0x17df, 0x17e3, 0x17e7, 0x17eb, 0x17ef, 0x17f3, 0x17f7, 0x17fb, - - 0x17ff, 0x1803, 0x1807, 0x180a, 0x180d, 0x1811, 0x1814, 0x1817, - 0x181a, 0x181e, 0x1822, 0x1825, 0x1828, 0x182b, 0x182e, 0x1831, - - 0x1836, 0x1839, 0x183c, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, - 0x184e, 0x1852, 0x1857, 0x185a, 0x185d, 0x1860, 0x1863, 0x1866, - - 0x1869, 0x186c, 0x1870, 0x1874, 0x1878, 0x187c, 0x187f, 0x1882, - 0x1885, 0x1888, 0x188b, 0x188e, 0x1891, 0x1894, 0x1897, 0x189a, - - 0x189e, 0x18a2, 0x18a5, 0x18a9, 0x18ad, 0x18b1, 0x18b4, 0x18b8, - 0x18bc, 0x18c1, 0x18c4, 0x18c8, 0x18cc, 0x18d0, 0x18d4, 0x18da, - - 0x18e1, 0x18e4, 0x18e7, 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, - 0x18f9, 0x18fc, 0x18ff, 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, - - 0x1911, 0x1914, 0x1917, 0x191c, 0x191f, 0x1922, 0x1925, 0x192a, - 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, 0x1940, 0x1943, - - 0x1946, 0x1949, 0x194c, 0x1950, 0x1953, 0x1956, 0x195a, 0x195e, - 0x1961, 0x1966, 0x196a, 0x196d, 0x1970, 0x1973, 0x1976, 0x197a, - - 0x197e, 0x1981, 0x1984, 0x1987, 0x198a, 0x198d, 0x1990, 0x1993, - 0x1996, 0x1999, 0x199d, 0x19a1, 0x19a5, 0x19a9, 0x19ad, 0x19b1, - - 0x19b5, 0x19b9, 0x19bd, 0x19c1, 0x19c5, 0x19c9, 0x19cd, 0x19d1, - 0x19d5, 0x19d9, 0x19dd, 0x19e1, 0x19e5, 0x19e9, 0x19ed, 0x19f1, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x19f5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x19f7, 0x19f9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x19fb, 0x19fd, 0x19ff, 0x1a01, 0x1a03, 0x1a05, 0x1a07, 0x1a09, - 0x1a0b, 0x1a0d, 0x1a0f, 0x1a11, 0x1a13, 0x1a15, 0x1a17, 0x1a19, - 0x1a1b, 0x1a1d, 0x1a1f, 0x1a21, 0x1a23, 0x1a25, 0x1a27, 0x1a29, - 0x1a2b, 0x1a2d, 0x1a2f, 0x1a31, 0x1a33, 0x1a35, 0x1a37, 0x1a39, - 0x1a3b, 0x1a3d, 0x1a3f, 0x1a41, 0x1a43, 0x1a45, 0x1a47, 0x1a49, - 0x1a4b, 0x1a4d, 0x1a4f, 0x1a51, 0x1a53, 0x1a55, 0x1a57, 0x1a59, - 0x1a5b, 0x1a5d, 0x1a5f, 0x1a61, 0x1a63, 0x1a65, 0x1a67, 0x1a69, - 0x1a6b, 0x1a6d, 0x1a6f, 0x1a71, 0x1a73, 0x1a75, 0x1a77, 0x1a79, - 0x1a7b, 0x1a7d, 0x1a7f, 0x1a81, 0x1a83, 0x1a85, 0x1a87, 0x1a89, - 0x1a8b, 0x1a8d, 0x1a8f, 0x1a91, 0x1a93, 0x1a95, 0x1a97, 0x1a99, - 0x1a9b, 0x1a9d, 0x1a9f, 0x1aa1, 0x1aa3, 0x1aa5, 0x1aa7, 0x1aa9, - 0x1aab, 0x1aad, 0x1aaf, 0x1ab1, 0x1ab3, 0x1ab5, 0x1ab7, 0x1ab9, - 0x1abb, 0x1abd, 0x1abf, 0x1ac1, 0x1ac3, 0x1ac5, 0x1ac7, 0x1ac9, - 0x1acb, 0x1acd, 0x1acf, 0x1ad1, 0x1ad3, 0x1ad5, 0x1ad7, 0x1ad9, - 0x1adb, 0x1add, 0x1adf, 0x1ae1, 0x1ae3, 0x1ae5, 0x1ae7, 0x1ae9, - 0x1aeb, 0x1aed, 0x1aef, 0x1af1, 0x1af3, 0x1af5, 0x1af7, 0x1af9, - 0x1afb, 0x1afd, 0x1aff, 0x1b01, 0x1b03, 0x1b05, 0x1b07, 0x1b09, - 0x1b0b, 0x1b0d, 0x1b0f, 0x1b11, 0x1b13, 0x1b15, 0x1b17, 0x1b19, - 0x1b1b, 0x1b1d, 0x1b1f, 0x1b21, 0x1b23, 0x1b25, 0x1b27, 0x1b29, - 0x1b2b, 0x1b2d, 0x1b2f, 0x1b31, 0x1b33, 0x1b35, 0x1b37, 0x1b39, - 0x1b3b, 0x1b3d, 0x1b3f, 0x1b41, 0x1b43, 0x1b45, 0x1b47, 0x1b49, - 0x1b4b, 0x1b4d, 0x1b4f, 0x1b51, 0x1b53, 0x1b55, 0x1b57, 0x1b59, - 0x1b5b, 0x1b5d, 0x1b5f, 0x1b61, 0x1b63, 0x1b65, 0x1b67, 0x1b69, - 0x1b6b, 0x1b6d, 0x1b6f, 0x1b71, 0x1b73, 0x1b75, 0x1b77, 0x1b79, - 0x1b7b, 0x1b7d, 0x1b7f, 0x1b81, 0x1b83, 0x1b85, 0x1b87, 0x1b89, - 0x1b8b, 0x1b8d, 0x1b8f, 0x1b91, 0x1b93, 0x1b95, 0x1b97, 0x1b99, - 0x1b9b, 0x1b9d, 0x1b9f, 0x1ba1, 0x1ba3, 0x1ba5, 0x1ba7, 0x1ba9, - 0x1bab, 0x1bad, 0x1baf, 0x1bb1, 0x1bb3, 0x1bb5, 0x1bb7, 0x1bb9, - 0x1bbb, 0x1bbd, 0x1bbf, 0x1bc1, 0x1bc3, 0x1bc5, 0x1bc7, 0x1bc9, - 0x1bcb, 0x1bcd, 0x1bcf, 0x1bd1, 0x1bd3, 0x1bd5, 0x1bd7, 0x1bd9, - 0x1bdb, 0x1bdd, 0x1bdf, 0x1be1, 0x1be3, 0x1be5, 0x1be7, 0x1be9, - 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3, 0x1bf5, 0x1bf7, 0x1bf9, - - 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03, 0x1c05, 0x1c07, 0x1c09, - 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13, 0x1c15, 0xffff, 0xffff, - 0x1c17, 0xffff, 0x1c19, 0xffff, 0xffff, 0x1c1b, 0x1c1d, 0x1c1f, - 0x1c21, 0x1c23, 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0xffff, - 0x1c2f, 0xffff, 0x1c31, 0xffff, 0xffff, 0x1c33, 0x1c35, 0xffff, - 0xffff, 0xffff, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41, - 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51, - 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61, - 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c71, - 0x1c73, 0x1c75, 0x1c77, 0x1c79, 0x1c7b, 0x1c7d, 0x1c7f, 0x1c81, - 0x1c83, 0x1c85, 0x1c87, 0x1c89, 0x1c8b, 0x1c8d, 0x1c8f, 0x1c91, - 0x1c93, 0x1c95, 0x1c97, 0x1c99, 0x1c9b, 0x1c9d, 0x1c9f, 0x1ca1, - 0x1ca3, 0x1ca5, 0x1ca7, 0x1ca9, 0x1cab, 0x1cad, 0x1caf, 0x1cb1, - 0x1cb3, 0x1cb5, 0x1cb7, 0x1cb9, 0x1cbb, 0x1cbe, 0xffff, 0xffff, - 0x1cc0, 0x1cc2, 0x1cc4, 0x1cc6, 0x1cc8, 0x1cca, 0x1ccc, 0x1cce, - 0x1cd0, 0x1cd2, 0x1cd4, 0x1cd6, 0x1cd8, 0x1cda, 0x1cdc, 0x1cde, - 0x1ce0, 0x1ce2, 0x1ce4, 0x1ce6, 0x1ce8, 0x1cea, 0x1cec, 0x1cee, - 0x1cf0, 0x1cf2, 0x1cf4, 0x1cf6, 0x1cf8, 0x1cfa, 0x1cfc, 0x1cfe, - 0x1d00, 0x1d02, 0x1d04, 0x1d06, 0x1d08, 0x1d0a, 0x1d0c, 0x1d0e, - 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c, 0x1d1e, - 0x1d20, 0x1d22, 0x1d24, 0x1d26, 0x1d28, 0x1d2a, 0x1d2c, 0x1d2e, - 0x1d30, 0x1d32, 0x1d34, 0x1d36, 0x1d38, 0x1d3a, 0x1d3c, 0x1d3e, - 0x1d40, 0x1d42, 0x1d44, 0x1d46, 0x1d48, 0x1d4a, 0x1d4c, 0x1d4e, - 0x1d50, 0x1d52, 0x1d54, 0x1d56, 0x1d58, 0x1d5a, 0x1d5c, 0x1d5e, - 0x1d60, 0x1d62, 0x1d64, 0x1d66, 0x1d68, 0x1d6a, 0x1d6c, 0x1d6e, - 0x1d70, 0x1d72, 0x1d74, 0x1d76, 0x1d78, 0x1d7a, 0x1d7c, 0x1d7e, - 0x1d81, 0x1d84, 0x1d87, 0x1d89, 0x1d8b, 0x1d8d, 0x1d90, 0x1d93, - 0x1d96, 0x1d98, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x1d9a, 0x1d9d, 0x1da0, 0x1da3, 0x1da7, 0x1dab, 0x1dae, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x1db1, 0x1db4, 0x1db7, 0x1dba, 0x1dbd, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dc0, 0xffff, 0x1dc3, - 0x1dc6, 0x1dc8, 0x1dca, 0x1dcc, 0x1dce, 0x1dd0, 0x1dd2, 0x1dd4, - 0x1dd6, 0x1dd8, 0x1dda, 0x1ddd, 0x1de0, 0x1de3, 0x1de6, 0x1de9, - 0x1dec, 0x1def, 0x1df2, 0x1df5, 0x1df8, 0x1dfb, 0x1dfe, 0xffff, - 0x1e01, 0x1e04, 0x1e07, 0x1e0a, 0x1e0d, 0xffff, 0x1e10, 0xffff, - 0x1e13, 0x1e16, 0xffff, 0x1e19, 0x1e1c, 0xffff, 0x1e1f, 0x1e22, - 0x1e25, 0x1e28, 0x1e2b, 0x1e2e, 0x1e31, 0x1e34, 0x1e37, 0x1e3a, - 0x1e3d, 0x1e3f, 0x1e41, 0x1e43, 0x1e45, 0x1e47, 0x1e49, 0x1e4b, - 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, 0x1e59, 0x1e5b, - 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, 0x1e69, 0x1e6b, - 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, 0x1e79, 0x1e7b, - 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, 0x1e89, 0x1e8b, - 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0x1e97, 0x1e99, 0x1e9b, - 0x1e9d, 0x1e9f, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, - 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, 0x1eb9, 0x1ebb, - 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ec9, 0x1ecb, - 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, 0x1edb, - 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, 0x1ee9, 0x1eeb, - 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1efb, - 0x1efd, 0x1eff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x1f01, 0x1f03, 0x1f05, 0x1f07, 0x1f09, - 0x1f0b, 0x1f0d, 0x1f0f, 0x1f11, 0x1f13, 0x1f15, 0x1f17, 0x1f19, - 0x1f1b, 0x1f1d, 0x1f1f, 0x1f21, 0x1f23, 0x1f25, 0x1f27, 0x1f29, - 0x1f2b, 0x1f2d, 0x1f2f, 0x1f32, 0x1f35, 0x1f38, 0x1f3b, 0x1f3e, - 0x1f41, 0x1f44, 0x1f47, 0x1f4a, 0x1f4d, 0x1f50, 0x1f53, 0x1f56, - 0x1f59, 0x1f5c, 0x1f5f, 0x1f62, 0x1f65, 0x1f67, 0x1f69, 0x1f6b, - - 0x1f6d, 0x1f70, 0x1f73, 0x1f76, 0x1f79, 0x1f7c, 0x1f7f, 0x1f82, - 0x1f85, 0x1f88, 0x1f8b, 0x1f8e, 0x1f91, 0x1f94, 0x1f97, 0x1f9a, - 0x1f9d, 0x1fa0, 0x1fa3, 0x1fa6, 0x1fa9, 0x1fac, 0x1faf, 0x1fb2, - 0x1fb5, 0x1fb8, 0x1fbb, 0x1fbe, 0x1fc1, 0x1fc4, 0x1fc7, 0x1fca, - 0x1fcd, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fd9, 0x1fdc, 0x1fdf, 0x1fe2, - 0x1fe5, 0x1fe8, 0x1feb, 0x1fee, 0x1ff1, 0x1ff4, 0x1ff7, 0x1ffa, - 0x1ffd, 0x2000, 0x2003, 0x2006, 0x2009, 0x200c, 0x200f, 0x2012, - 0x2015, 0x2018, 0x201b, 0x201e, 0x2021, 0x2024, 0x2027, 0x202a, - 0x202d, 0x2030, 0x2033, 0x2036, 0x2039, 0x203c, 0x203f, 0x2042, - 0x2045, 0x2048, 0x204b, 0x204e, 0x2051, 0x2054, 0x2057, 0x205a, - 0x205d, 0x2060, 0x2063, 0x2066, 0x2069, 0x206c, 0x206f, 0x2072, - 0x2075, 0x2078, 0x207b, 0x207e, 0x2081, 0x2084, 0x2087, 0x208b, - 0x208f, 0x2093, 0x2097, 0x209b, 0x209f, 0x20a2, 0x20a5, 0x20a8, - 0x20ab, 0x20ae, 0x20b1, 0x20b4, 0x20b7, 0x20ba, 0x20bd, 0x20c0, - 0x20c3, 0x20c6, 0x20c9, 0x20cc, 0x20cf, 0x20d2, 0x20d5, 0x20d8, - 0x20db, 0x20de, 0x20e1, 0x20e4, 0x20e7, 0x20ea, 0x20ed, 0x20f0, - 0x20f3, 0x20f6, 0x20f9, 0x20fc, 0x20ff, 0x2102, 0x2105, 0x2108, - 0x210b, 0x210e, 0x2111, 0x2114, 0x2117, 0x211a, 0x211d, 0x2120, - 0x2123, 0x2126, 0x2129, 0x212c, 0x212f, 0x2132, 0x2135, 0x2138, - 0x213b, 0x213e, 0x2141, 0x2144, 0x2147, 0x214a, 0x214d, 0x2150, - 0x2153, 0x2156, 0x2159, 0x215c, 0x215f, 0x2162, 0x2165, 0x2168, - 0x216b, 0x216e, 0x2171, 0x2174, 0x2177, 0x217a, 0x217d, 0x2180, - 0x2183, 0x2186, 0x2189, 0x218c, 0x218f, 0x2192, 0x2195, 0x2198, - 0x219b, 0x219e, 0x21a1, 0x21a4, 0x21a7, 0x21aa, 0x21ad, 0x21b0, - 0x21b3, 0x21b6, 0x21b9, 0x21bc, 0x21bf, 0x21c2, 0x21c5, 0x21c8, - 0x21cb, 0x21ce, 0x21d1, 0x21d4, 0x21d7, 0x21da, 0x21dd, 0x21e0, - 0x21e3, 0x21e6, 0x21e9, 0x21ec, 0x21ef, 0x21f2, 0x21f5, 0x21f8, - 0x21fb, 0x21fe, 0x2201, 0x2204, 0x2207, 0x220a, 0x220d, 0x2210, - 0x2213, 0x2216, 0x2219, 0x221c, 0x221f, 0x2222, 0x2225, 0x2228, - 0x222b, 0x222e, 0x2231, 0x2234, 0x2237, 0x223a, 0x223d, 0x2240, - 0x2243, 0x2246, 0x2249, 0x224d, 0x2251, 0x2255, 0x2258, 0x225b, - 0x225e, 0x2261, 0x2264, 0x2267, 0x226a, 0x226d, 0x2270, 0x2273, - - 0x2276, 0x2279, 0x227c, 0x227f, 0x2282, 0x2285, 0x2288, 0x228b, - 0x228e, 0x2291, 0x2294, 0x2297, 0x229a, 0x229d, 0x22a0, 0x22a3, - 0x22a6, 0x22a9, 0x22ac, 0x22af, 0x22b2, 0x22b5, 0x22b8, 0x22bb, - 0x22be, 0x22c1, 0x22c4, 0x22c7, 0x22ca, 0x22cd, 0x22d0, 0x22d3, - 0x22d6, 0x22d9, 0x22dc, 0x22df, 0x22e2, 0x22e5, 0x22e8, 0x22eb, - 0x22ee, 0x22f1, 0x22f4, 0x22f7, 0x22fa, 0x22fd, 0x2300, 0x2303, - 0x2306, 0x2309, 0x230c, 0x230f, 0x2312, 0x2315, 0x2318, 0x231b, - 0x231e, 0x2321, 0x2324, 0x2327, 0x232a, 0x232d, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2330, 0x2334, 0x2338, 0x233c, 0x2340, 0x2344, 0x2348, 0x234c, - 0x2350, 0x2354, 0x2358, 0x235c, 0x2360, 0x2364, 0x2368, 0x236c, - 0x2370, 0x2374, 0x2378, 0x237c, 0x2380, 0x2384, 0x2388, 0x238c, - 0x2390, 0x2394, 0x2398, 0x239c, 0x23a0, 0x23a4, 0x23a8, 0x23ac, - 0x23b0, 0x23b4, 0x23b8, 0x23bc, 0x23c0, 0x23c4, 0x23c8, 0x23cc, - 0x23d0, 0x23d4, 0x23d8, 0x23dc, 0x23e0, 0x23e4, 0x23e8, 0x23ec, - 0x23f0, 0x23f4, 0x23f8, 0x23fc, 0x2400, 0x2404, 0x2408, 0x240c, - 0x2410, 0x2414, 0x2418, 0x241c, 0x2420, 0x2424, 0x2428, 0x242c, - 0xffff, 0xffff, 0x2430, 0x2434, 0x2438, 0x243c, 0x2440, 0x2444, - 0x2448, 0x244c, 0x2450, 0x2454, 0x2458, 0x245c, 0x2460, 0x2464, - 0x2468, 0x246c, 0x2470, 0x2474, 0x2478, 0x247c, 0x2480, 0x2484, - 0x2488, 0x248c, 0x2490, 0x2494, 0x2498, 0x249c, 0x24a0, 0x24a4, - 0x24a8, 0x24ac, 0x24b0, 0x24b4, 0x24b8, 0x24bc, 0x24c0, 0x24c4, - 0x24c8, 0x24cc, 0x24d0, 0x24d4, 0x24d8, 0x24dc, 0x24e0, 0x24e4, - 0x24e8, 0x24ec, 0x24f0, 0x24f4, 0x24f8, 0x24fc, 0x2500, 0x2504, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2508, 0x250c, 0x2510, 0x2515, 0x251a, 0x251f, 0x2524, 0x2529, - 0x252e, 0x2533, 0x2537, 0x254a, 0x2553, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2558, 0x255a, 0x255c, 0x255e, 0x2560, 0x2562, 0x2564, 0x2566, - 0x2568, 0x256a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x256c, 0x256e, 0x2570, 0x2572, 0x2574, 0x2576, 0x2578, 0x257a, - 0x257c, 0x257e, 0x2580, 0x2582, 0x2584, 0x2586, 0x2588, 0x258a, - 0x258c, 0x258e, 0x2590, 0x2592, 0x2594, 0xffff, 0xffff, 0x2596, - 0x2598, 0x259a, 0x259c, 0x259e, 0x25a0, 0x25a2, 0x25a4, 0x25a6, - 0x25a8, 0x25aa, 0x25ac, 0xffff, 0x25ae, 0x25b0, 0x25b2, 0x25b4, - 0x25b6, 0x25b8, 0x25ba, 0x25bc, 0x25be, 0x25c0, 0x25c2, 0x25c4, - 0x25c6, 0x25c8, 0x25ca, 0x25cc, 0x25ce, 0x25d0, 0x25d2, 0xffff, - 0x25d4, 0x25d6, 0x25d8, 0x25da, 0xffff, 0xffff, 0xffff, 0xffff, - 0x25dc, 0x25df, 0x25e2, 0xffff, 0x25e5, 0xffff, 0x25e8, 0x25eb, - 0x25ee, 0x25f1, 0x25f4, 0x25f7, 0x25fa, 0x25fd, 0x2600, 0x2603, - 0x2606, 0x2608, 0x260a, 0x260c, 0x260e, 0x2610, 0x2612, 0x2614, - 0x2616, 0x2618, 0x261a, 0x261c, 0x261e, 0x2620, 0x2622, 0x2624, - 0x2626, 0x2628, 0x262a, 0x262c, 0x262e, 0x2630, 0x2632, 0x2634, - 0x2636, 0x2638, 0x263a, 0x263c, 0x263e, 0x2640, 0x2642, 0x2644, - 0x2646, 0x2648, 0x264a, 0x264c, 0x264e, 0x2650, 0x2652, 0x2654, - 0x2656, 0x2658, 0x265a, 0x265c, 0x265e, 0x2660, 0x2662, 0x2664, - 0x2666, 0x2668, 0x266a, 0x266c, 0x266e, 0x2670, 0x2672, 0x2674, - 0x2676, 0x2678, 0x267a, 0x267c, 0x267e, 0x2680, 0x2682, 0x2684, - 0x2686, 0x2688, 0x268a, 0x268c, 0x268e, 0x2690, 0x2692, 0x2694, - 0x2696, 0x2698, 0x269a, 0x269c, 0x269e, 0x26a0, 0x26a2, 0x26a4, - 0x26a6, 0x26a8, 0x26aa, 0x26ac, 0x26ae, 0x26b0, 0x26b2, 0x26b4, - 0x26b6, 0x26b8, 0x26ba, 0x26bc, 0x26be, 0x26c0, 0x26c2, 0x26c4, - 0x26c6, 0x26c8, 0x26ca, 0x26cc, 0x26ce, 0x26d0, 0x26d2, 0x26d4, - 0x26d6, 0x26d8, 0x26da, 0x26dc, 0x26de, 0x26e0, 0x26e2, 0x26e4, - 0x26e6, 0x26e8, 0x26ea, 0x26ec, 0x26ee, 0x26f0, 0x26f3, 0x26f6, - 0x26f9, 0x26fc, 0x26ff, 0x2702, 0x2705, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x2708, 0x270a, 0x270c, 0x270e, 0x2710, 0x2712, 0x2714, - 0x2716, 0x2718, 0x271a, 0x271c, 0x271e, 0x2720, 0x2722, 0x2724, - 0x2726, 0x2728, 0x272a, 0x272c, 0x272e, 0x2730, 0x2732, 0x2734, - 0x2736, 0x2738, 0x273a, 0x273c, 0x273e, 0x2740, 0x2742, 0x2744, - 0x2746, 0x2748, 0x274a, 0x274c, 0x274e, 0x2750, 0x2752, 0x2754, - 0x2756, 0x2758, 0x275a, 0x275c, 0x275e, 0x2760, 0x2762, 0x2764, - 0x2766, 0x2768, 0x276a, 0x276c, 0x276e, 0x2770, 0x2772, 0x2774, - 0x2776, 0x2778, 0x277a, 0x277c, 0x277e, 0x2780, 0x2782, 0x2784, - 0x2786, 0x2788, 0x278a, 0x278c, 0x278e, 0x2790, 0x2792, 0x2794, - 0x2796, 0x2798, 0x279a, 0x279c, 0x279e, 0x27a0, 0x27a2, 0x27a4, - 0x27a6, 0x27a8, 0x27aa, 0x27ac, 0x27ae, 0x27b0, 0x27b2, 0x27b4, - 0x27b6, 0x27b8, 0x27ba, 0x27bc, 0x27be, 0x27c0, 0x27c2, 0x27c4, - 0x27c6, 0x27c8, 0x27ca, 0x27cc, 0x27ce, 0x27d0, 0x27d2, 0x27d4, - 0x27d6, 0x27d8, 0x27da, 0x27dc, 0x27de, 0x27e0, 0x27e2, 0x27e4, - 0x27e6, 0x27e8, 0x27ea, 0x27ec, 0x27ee, 0x27f0, 0x27f2, 0x27f4, - 0x27f6, 0x27f8, 0x27fa, 0x27fc, 0x27fe, 0x2800, 0x2802, 0x2804, - 0x2806, 0x2808, 0x280a, 0x280c, 0x280e, 0x2810, 0x2812, 0x2814, - 0x2816, 0x2818, 0x281a, 0x281c, 0x281e, 0x2820, 0x2822, 0x2824, - 0x2826, 0x2828, 0x282a, 0x282c, 0x282e, 0x2830, 0x2832, 0x2834, - 0x2836, 0x2838, 0x283a, 0x283c, 0x283e, 0x2840, 0x2842, 0x2844, - 0x2846, 0x2848, 0x284a, 0x284c, 0x284e, 0x2850, 0x2852, 0x2854, - 0x2856, 0x2858, 0x285a, 0x285c, 0x285e, 0x2860, 0x2862, 0x2864, - 0x2866, 0x2868, 0x286a, 0x286c, 0x286e, 0x2870, 0x2872, 0x2874, - 0x2876, 0x2878, 0x287a, 0x287c, 0x287e, 0x2880, 0x2882, 0xffff, - 0xffff, 0xffff, 0x2884, 0x2886, 0x2888, 0x288a, 0x288c, 0x288e, - 0xffff, 0xffff, 0x2890, 0x2892, 0x2894, 0x2896, 0x2898, 0x289a, - 0xffff, 0xffff, 0x289c, 0x289e, 0x28a0, 0x28a2, 0x28a4, 0x28a6, - 0xffff, 0xffff, 0x28a8, 0x28aa, 0x28ac, 0xffff, 0xffff, 0xffff, - 0x28ae, 0x28b0, 0x28b2, 0x28b4, 0x28b6, 0x28b8, 0x28ba, 0xffff, - 0x28bc, 0x28be, 0x28c0, 0x28c2, 0x28c4, 0x28c6, 0x28c8, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x28ca, 0xffff, 0x28cf, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x28d4, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28d9, 0x28de, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28e3, 0x28e8, - 0x28ed, 0x28f2, 0x28f7, 0x28fc, 0x2901, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x2906, 0x290b, 0x2910, 0x2915, 0x291a, - 0x291f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x2924, 0x2926, 0x2928, 0x292a, 0x292c, 0x292e, 0x2930, 0x2932, - 0x2934, 0x2936, 0x2938, 0x293a, 0x293c, 0x293e, 0x2940, 0x2942, - 0x2944, 0x2946, 0x2948, 0x294a, 0x294c, 0x294e, 0x2950, 0x2952, - 0x2954, 0x2956, 0x2958, 0x295a, 0x295c, 0x295e, 0x2960, 0x2962, - 0x2964, 0x2966, 0x2968, 0x296a, 0x296c, 0x296e, 0x2970, 0x2972, - 0x2974, 0x2976, 0x2978, 0x297a, 0x297c, 0x297e, 0x2980, 0x2982, - 0x2984, 0x2986, 0x2988, 0x298a, 0x298c, 0x298e, 0x2990, 0x2992, - 0x2994, 0x2996, 0x2998, 0x299a, 0x299c, 0x299e, 0x29a0, 0x29a2, - 0x29a4, 0x29a6, 0x29a8, 0x29aa, 0x29ac, 0x29ae, 0x29b0, 0x29b2, - 0x29b4, 0x29b6, 0x29b8, 0x29ba, 0x29bc, 0x29be, 0x29c0, 0x29c2, - 0x29c4, 0x29c6, 0x29c8, 0x29ca, 0x29cc, 0xffff, 0x29ce, 0x29d0, - 0x29d2, 0x29d4, 0x29d6, 0x29d8, 0x29da, 0x29dc, 0x29de, 0x29e0, - 0x29e2, 0x29e4, 0x29e6, 0x29e8, 0x29ea, 0x29ec, 0x29ee, 0x29f0, - 0x29f2, 0x29f4, 0x29f6, 0x29f8, 0x29fa, 0x29fc, 0x29fe, 0x2a00, - 0x2a02, 0x2a04, 0x2a06, 0x2a08, 0x2a0a, 0x2a0c, 0x2a0e, 0x2a10, - 0x2a12, 0x2a14, 0x2a16, 0x2a18, 0x2a1a, 0x2a1c, 0x2a1e, 0x2a20, - 0x2a22, 0x2a24, 0x2a26, 0x2a28, 0x2a2a, 0x2a2c, 0x2a2e, 0x2a30, - 0x2a32, 0x2a34, 0x2a36, 0x2a38, 0x2a3a, 0x2a3c, 0x2a3e, 0x2a40, - 0x2a42, 0x2a44, 0x2a46, 0x2a48, 0x2a4a, 0x2a4c, 0x2a4e, 0x2a50, - 0x2a52, 0x2a54, 0x2a56, 0x2a58, 0x2a5a, 0xffff, 0x2a5c, 0x2a5e, - 0xffff, 0xffff, 0x2a60, 0xffff, 0xffff, 0x2a62, 0x2a64, 0xffff, - 0xffff, 0x2a66, 0x2a68, 0x2a6a, 0x2a6c, 0xffff, 0x2a6e, 0x2a70, - 0x2a72, 0x2a74, 0x2a76, 0x2a78, 0x2a7a, 0x2a7c, 0x2a7e, 0x2a80, - 0x2a82, 0x2a84, 0xffff, 0x2a86, 0xffff, 0x2a88, 0x2a8a, 0x2a8c, - 0x2a8e, 0x2a90, 0x2a92, 0x2a94, 0xffff, 0x2a96, 0x2a98, 0x2a9a, - 0x2a9c, 0x2a9e, 0x2aa0, 0x2aa2, 0x2aa4, 0x2aa6, 0x2aa8, 0x2aaa, - 0x2aac, 0x2aae, 0x2ab0, 0x2ab2, 0x2ab4, 0x2ab6, 0x2ab8, 0x2aba, - 0x2abc, 0x2abe, 0x2ac0, 0x2ac2, 0x2ac4, 0x2ac6, 0x2ac8, 0x2aca, - 0x2acc, 0x2ace, 0x2ad0, 0x2ad2, 0x2ad4, 0x2ad6, 0x2ad8, 0x2ada, - 0x2adc, 0x2ade, 0x2ae0, 0x2ae2, 0x2ae4, 0x2ae6, 0x2ae8, 0x2aea, - 0x2aec, 0x2aee, 0x2af0, 0x2af2, 0x2af4, 0x2af6, 0x2af8, 0x2afa, - 0x2afc, 0x2afe, 0x2b00, 0x2b02, 0x2b04, 0x2b06, 0x2b08, 0x2b0a, - - 0x2b0c, 0x2b0e, 0x2b10, 0x2b12, 0x2b14, 0x2b16, 0xffff, 0x2b18, - 0x2b1a, 0x2b1c, 0x2b1e, 0xffff, 0xffff, 0x2b20, 0x2b22, 0x2b24, - 0x2b26, 0x2b28, 0x2b2a, 0x2b2c, 0x2b2e, 0xffff, 0x2b30, 0x2b32, - 0x2b34, 0x2b36, 0x2b38, 0x2b3a, 0x2b3c, 0xffff, 0x2b3e, 0x2b40, - 0x2b42, 0x2b44, 0x2b46, 0x2b48, 0x2b4a, 0x2b4c, 0x2b4e, 0x2b50, - 0x2b52, 0x2b54, 0x2b56, 0x2b58, 0x2b5a, 0x2b5c, 0x2b5e, 0x2b60, - 0x2b62, 0x2b64, 0x2b66, 0x2b68, 0x2b6a, 0x2b6c, 0x2b6e, 0x2b70, - 0x2b72, 0x2b74, 0xffff, 0x2b76, 0x2b78, 0x2b7a, 0x2b7c, 0xffff, - 0x2b7e, 0x2b80, 0x2b82, 0x2b84, 0x2b86, 0xffff, 0x2b88, 0xffff, - 0xffff, 0xffff, 0x2b8a, 0x2b8c, 0x2b8e, 0x2b90, 0x2b92, 0x2b94, - 0x2b96, 0xffff, 0x2b98, 0x2b9a, 0x2b9c, 0x2b9e, 0x2ba0, 0x2ba2, - 0x2ba4, 0x2ba6, 0x2ba8, 0x2baa, 0x2bac, 0x2bae, 0x2bb0, 0x2bb2, - 0x2bb4, 0x2bb6, 0x2bb8, 0x2bba, 0x2bbc, 0x2bbe, 0x2bc0, 0x2bc2, - 0x2bc4, 0x2bc6, 0x2bc8, 0x2bca, 0x2bcc, 0x2bce, 0x2bd0, 0x2bd2, - 0x2bd4, 0x2bd6, 0x2bd8, 0x2bda, 0x2bdc, 0x2bde, 0x2be0, 0x2be2, - 0x2be4, 0x2be6, 0x2be8, 0x2bea, 0x2bec, 0x2bee, 0x2bf0, 0x2bf2, - 0x2bf4, 0x2bf6, 0x2bf8, 0x2bfa, 0x2bfc, 0x2bfe, 0x2c00, 0x2c02, - 0x2c04, 0x2c06, 0x2c08, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c12, - 0x2c14, 0x2c16, 0x2c18, 0x2c1a, 0x2c1c, 0x2c1e, 0x2c20, 0x2c22, - 0x2c24, 0x2c26, 0x2c28, 0x2c2a, 0x2c2c, 0x2c2e, 0x2c30, 0x2c32, - 0x2c34, 0x2c36, 0x2c38, 0x2c3a, 0x2c3c, 0x2c3e, 0x2c40, 0x2c42, - 0x2c44, 0x2c46, 0x2c48, 0x2c4a, 0x2c4c, 0x2c4e, 0x2c50, 0x2c52, - 0x2c54, 0x2c56, 0x2c58, 0x2c5a, 0x2c5c, 0x2c5e, 0x2c60, 0x2c62, - 0x2c64, 0x2c66, 0x2c68, 0x2c6a, 0x2c6c, 0x2c6e, 0x2c70, 0x2c72, - 0x2c74, 0x2c76, 0x2c78, 0x2c7a, 0x2c7c, 0x2c7e, 0x2c80, 0x2c82, - 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, - 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, - 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, - 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, - 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, - 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, - 0x2ce4, 0x2ce6, 0x2ce8, 0x2cea, 0x2cec, 0x2cee, 0x2cf0, 0x2cf2, - - 0x2cf4, 0x2cf6, 0x2cf8, 0x2cfa, 0x2cfc, 0x2cfe, 0x2d00, 0x2d02, - 0x2d04, 0x2d06, 0x2d08, 0x2d0a, 0x2d0c, 0x2d0e, 0x2d10, 0x2d12, - 0x2d14, 0x2d16, 0x2d18, 0x2d1a, 0x2d1c, 0x2d1e, 0x2d20, 0x2d22, - 0x2d24, 0x2d26, 0x2d28, 0x2d2a, 0x2d2c, 0x2d2e, 0x2d30, 0x2d32, - 0x2d34, 0x2d36, 0x2d38, 0x2d3a, 0x2d3c, 0x2d3e, 0x2d40, 0x2d42, - 0x2d44, 0x2d46, 0x2d48, 0x2d4a, 0x2d4c, 0x2d4e, 0x2d50, 0x2d52, - 0x2d54, 0x2d56, 0x2d58, 0x2d5a, 0x2d5c, 0x2d5e, 0x2d60, 0x2d62, - 0x2d64, 0x2d66, 0x2d68, 0x2d6a, 0x2d6c, 0x2d6e, 0x2d70, 0x2d72, - 0x2d74, 0x2d76, 0x2d78, 0x2d7a, 0x2d7c, 0x2d7e, 0x2d80, 0x2d82, - 0x2d84, 0x2d86, 0x2d88, 0x2d8a, 0x2d8c, 0x2d8e, 0x2d90, 0x2d92, - 0x2d94, 0x2d96, 0x2d98, 0x2d9a, 0x2d9c, 0x2d9e, 0x2da0, 0x2da2, - 0x2da4, 0x2da6, 0x2da8, 0x2daa, 0x2dac, 0x2dae, 0x2db0, 0x2db2, - 0x2db4, 0x2db6, 0x2db8, 0x2dba, 0x2dbc, 0x2dbe, 0x2dc0, 0x2dc2, - 0x2dc4, 0x2dc6, 0x2dc8, 0x2dca, 0x2dcc, 0x2dce, 0x2dd0, 0x2dd2, - 0x2dd4, 0x2dd6, 0x2dd8, 0x2dda, 0x2ddc, 0x2dde, 0x2de0, 0x2de2, - 0x2de4, 0x2de6, 0x2de8, 0x2dea, 0x2dec, 0x2dee, 0x2df0, 0x2df2, - 0x2df4, 0x2df6, 0x2df8, 0x2dfa, 0x2dfc, 0x2dfe, 0x2e00, 0x2e02, - 0x2e04, 0x2e06, 0x2e08, 0x2e0a, 0x2e0c, 0x2e0e, 0x2e10, 0x2e12, - 0x2e14, 0x2e16, 0x2e18, 0x2e1a, 0x2e1c, 0x2e1e, 0x2e20, 0x2e22, - 0x2e24, 0x2e26, 0x2e28, 0x2e2a, 0x2e2c, 0x2e2e, 0x2e30, 0x2e32, - 0x2e34, 0x2e36, 0x2e38, 0x2e3a, 0x2e3c, 0x2e3e, 0xffff, 0xffff, - 0x2e40, 0x2e42, 0x2e44, 0x2e46, 0x2e48, 0x2e4a, 0x2e4c, 0x2e4e, - 0x2e50, 0x2e52, 0x2e54, 0x2e56, 0x2e58, 0x2e5a, 0x2e5c, 0x2e5e, - 0x2e60, 0x2e62, 0x2e64, 0x2e66, 0x2e68, 0x2e6a, 0x2e6c, 0x2e6e, - 0x2e70, 0x2e72, 0x2e74, 0x2e76, 0x2e78, 0x2e7a, 0x2e7c, 0x2e7e, - 0x2e80, 0x2e82, 0x2e84, 0x2e86, 0x2e88, 0x2e8a, 0x2e8c, 0x2e8e, - 0x2e90, 0x2e92, 0x2e94, 0x2e96, 0x2e98, 0x2e9a, 0x2e9c, 0x2e9e, - 0x2ea0, 0x2ea2, 0x2ea4, 0x2ea6, 0x2ea8, 0x2eaa, 0x2eac, 0x2eae, - 0x2eb0, 0x2eb2, 0x2eb4, 0x2eb6, 0x2eb8, 0x2eba, 0x2ebc, 0x2ebe, - 0x2ec0, 0x2ec2, 0x2ec4, 0x2ec6, 0x2ec8, 0x2eca, 0x2ecc, 0x2ece, - 0x2ed0, 0x2ed2, 0x2ed4, 0x2ed6, 0x2ed8, 0x2eda, 0x2edc, 0x2ede, - 0x2ee0, 0x2ee2, 0x2ee4, 0x2ee6, 0x2ee8, 0x2eea, 0x2eec, 0x2eee, - - 0x2ef0, 0x2ef2, 0x2ef4, 0x2ef6, 0x2ef8, 0x2efa, 0x2efc, 0x2efe, - 0x2f00, 0x2f02, 0x2f04, 0x2f06, 0x2f08, 0x2f0a, 0x2f0c, 0x2f0e, - 0x2f10, 0x2f12, 0x2f14, 0x2f16, 0x2f18, 0x2f1a, 0x2f1c, 0x2f1e, - 0x2f20, 0x2f22, 0x2f24, 0x2f26, 0x2f28, 0x2f2a, 0x2f2c, 0x2f2e, - 0x2f30, 0x2f32, 0x2f34, 0x2f36, 0x2f38, 0x2f3a, 0x2f3c, 0x2f3e, - 0x2f40, 0x2f42, 0x2f44, 0x2f46, 0x2f48, 0x2f4a, 0x2f4c, 0x2f4e, - 0x2f50, 0x2f52, 0x2f54, 0x2f56, 0x2f58, 0x2f5a, 0x2f5c, 0x2f5e, - 0x2f60, 0x2f62, 0x2f64, 0x2f66, 0x2f68, 0x2f6a, 0x2f6c, 0x2f6e, - 0x2f70, 0x2f72, 0x2f74, 0x2f76, 0x2f78, 0x2f7a, 0x2f7c, 0x2f7e, - 0x2f80, 0x2f82, 0x2f84, 0x2f86, 0x2f88, 0x2f8a, 0x2f8c, 0x2f8e, - 0x2f90, 0x2f92, 0x2f94, 0x2f96, 0x2f98, 0x2f9a, 0x2f9c, 0x2f9e, - 0x2fa0, 0x2fa2, 0x2fa4, 0x2fa6, 0x2fa8, 0x2faa, 0x2fac, 0x2fae, - 0x2fb0, 0x2fb2, 0x2fb4, 0x2fb6, 0x2fb8, 0x2fba, 0x2fbc, 0x2fbe, - 0x2fc0, 0x2fc2, 0x2fc4, 0x2fc6, 0x2fc8, 0x2fca, 0x2fcc, 0x2fce, - 0x2fd0, 0x2fd2, 0x2fd4, 0x2fd6, 0x2fd8, 0x2fda, 0x2fdc, 0x2fde, - 0x2fe0, 0x2fe2, 0x2fe4, 0x2fe6, 0x2fe8, 0x2fea, 0x2fec, 0x2fee, - 0x2ff0, 0x2ff2, 0x2ff4, 0x2ff6, 0x2ff8, 0x2ffa, 0x2ffc, 0x2ffe, - 0x3000, 0x3002, 0x3004, 0x3006, 0x3008, 0x300a, 0x300c, 0x300e, - 0x3010, 0x3012, 0x3014, 0x3016, 0x3018, 0x301a, 0x301c, 0x301e, - 0x3020, 0x3022, 0x3024, 0x3026, 0x3028, 0x302a, 0x302c, 0x302e, - 0x3030, 0x3032, 0x3034, 0x3036, 0x3038, 0x303a, 0x303c, 0x303e, - 0x3040, 0x3042, 0x3044, 0x3046, 0x3048, 0x304a, 0x304c, 0x304e, - 0x3050, 0x3052, 0x3054, 0x3056, 0x3058, 0x305a, 0x305c, 0x305e, - 0x3060, 0x3062, 0x3064, 0x3066, 0x3068, 0x306a, 0x306c, 0x306e, - 0x3070, 0x3072, 0x3074, 0x3076, 0x3078, 0x307a, 0x307c, 0x307e, - 0x3080, 0x3082, 0x3084, 0x3086, 0xffff, 0xffff, 0x3088, 0x308a, - 0x308c, 0x308e, 0x3090, 0x3092, 0x3094, 0x3096, 0x3098, 0x309a, - 0x309c, 0x309e, 0x30a0, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, - 0x30ac, 0x30ae, 0x30b0, 0x30b2, 0x30b4, 0x30b6, 0x30b8, 0x30ba, - 0x30bc, 0x30be, 0x30c0, 0x30c2, 0x30c4, 0x30c6, 0x30c8, 0x30ca, - 0x30cc, 0x30ce, 0x30d0, 0x30d2, 0x30d4, 0x30d6, 0x30d8, 0x30da, - 0x30dc, 0x30de, 0x30e0, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30ea, - - 0x30ec, 0x30ee, 0x30f0, 0x30f2, 0xffff, 0x30f4, 0x30f6, 0x30f8, - 0x30fa, 0x30fc, 0x30fe, 0x3100, 0x3102, 0x3104, 0x3106, 0x3108, - 0x310a, 0x310c, 0x310e, 0x3110, 0x3112, 0x3114, 0x3116, 0x3118, - 0x311a, 0x311c, 0x311e, 0x3120, 0x3122, 0x3124, 0x3126, 0x3128, - 0xffff, 0x312a, 0x312c, 0xffff, 0x312e, 0xffff, 0xffff, 0x3130, - 0xffff, 0x3132, 0x3134, 0x3136, 0x3138, 0x313a, 0x313c, 0x313e, - 0x3140, 0x3142, 0x3144, 0xffff, 0x3146, 0x3148, 0x314a, 0x314c, - 0xffff, 0x314e, 0xffff, 0x3150, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3152, 0xffff, 0xffff, 0xffff, 0xffff, 0x3154, - 0xffff, 0x3156, 0xffff, 0x3158, 0xffff, 0x315a, 0x315c, 0x315e, - 0xffff, 0x3160, 0x3162, 0xffff, 0x3164, 0xffff, 0xffff, 0x3166, - 0xffff, 0x3168, 0xffff, 0x316a, 0xffff, 0x316c, 0xffff, 0x316e, - 0xffff, 0x3170, 0x3172, 0xffff, 0x3174, 0xffff, 0xffff, 0x3176, - 0x3178, 0x317a, 0x317c, 0xffff, 0x317e, 0x3180, 0x3182, 0x3184, - 0x3186, 0x3188, 0x318a, 0xffff, 0x318c, 0x318e, 0x3190, 0x3192, - 0xffff, 0x3194, 0x3196, 0x3198, 0x319a, 0xffff, 0x319c, 0xffff, - 0x319e, 0x31a0, 0x31a2, 0x31a4, 0x31a6, 0x31a8, 0x31aa, 0x31ac, - 0x31ae, 0x31b0, 0xffff, 0x31b2, 0x31b4, 0x31b6, 0x31b8, 0x31ba, - 0x31bc, 0x31be, 0x31c0, 0x31c2, 0x31c4, 0x31c6, 0x31c8, 0x31ca, - 0x31cc, 0x31ce, 0x31d0, 0x31d2, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x31d4, 0x31d6, 0x31d8, 0xffff, 0x31da, 0x31dc, 0x31de, - 0x31e0, 0x31e2, 0xffff, 0x31e4, 0x31e6, 0x31e8, 0x31ea, 0x31ec, - 0x31ee, 0x31f0, 0x31f2, 0x31f4, 0x31f6, 0x31f8, 0x31fa, 0x31fc, - 0x31fe, 0x3200, 0x3202, 0x3204, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3206, 0x3209, 0x320c, 0x320f, 0x3212, 0x3215, 0x3218, 0x321b, - 0x321e, 0x3221, 0x3224, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x3227, 0x322b, 0x322f, 0x3233, 0x3237, 0x323b, 0x323f, 0x3243, - 0x3247, 0x324b, 0x324f, 0x3253, 0x3257, 0x325b, 0x325f, 0x3263, - 0x3267, 0x326b, 0x326f, 0x3273, 0x3277, 0x327b, 0x327f, 0x3283, - 0x3287, 0x328b, 0x328f, 0x3293, 0x3295, 0x3297, 0x329a, 0xffff, - 0x329d, 0x329f, 0x32a1, 0x32a3, 0x32a5, 0x32a7, 0x32a9, 0x32ab, - 0x32ad, 0x32af, 0x32b1, 0x32b3, 0x32b5, 0x32b7, 0x32b9, 0x32bb, - 0x32bd, 0x32bf, 0x32c1, 0x32c3, 0x32c5, 0x32c7, 0x32c9, 0x32cb, - 0x32cd, 0x32cf, 0x32d1, 0x32d4, 0x32d7, 0x32da, 0x32dd, 0x32e1, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x32e4, 0x32e7, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x32ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x32ed, 0x32f0, 0x32f3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x32f5, 0x32f7, 0x32f9, 0x32fb, 0x32fd, 0x32ff, 0x3301, 0x3303, - 0x3305, 0x3307, 0x3309, 0x330b, 0x330d, 0x330f, 0x3311, 0x3313, - 0x3315, 0x3317, 0x3319, 0x331b, 0x331d, 0x331f, 0x3321, 0x3323, - 0x3325, 0x3327, 0x3329, 0x332b, 0x332d, 0x332f, 0x3331, 0x3333, - 0x3335, 0x3337, 0x3339, 0x333b, 0x333d, 0x333f, 0x3341, 0x3343, - 0x3345, 0x3347, 0x3349, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x334b, 0x334f, 0x3353, 0x3357, 0x335b, 0x335f, 0x3363, 0x3367, - 0x336b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x336f, 0x3371, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3373, 0x3375, 0x3377, 0x3379, 0x337c, 0x337e, 0x3380, 0x3382, - 0x3384, 0x3386, 0x3388, 0x338a, 0x338c, 0x338e, 0x3391, 0x3393, - 0x3395, 0x3397, 0x3399, 0x339c, 0x339e, 0x33a0, 0x33a2, 0x33a5, - 0x33a7, 0x33a9, 0x33ab, 0x33ad, 0x33af, 0x33b2, 0x33b4, 0x33b6, - 0x33b8, 0x33ba, 0x33bc, 0x33be, 0x33c0, 0x33c2, 0x33c4, 0x33c6, - 0x33c8, 0x33ca, 0x33cc, 0x33ce, 0x33d0, 0x33d2, 0x33d4, 0x33d6, - 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e0, 0x33e3, 0x33e5, 0x33e7, - 0x33e9, 0x33ec, 0x33ee, 0x33f0, 0x33f2, 0x33f4, 0x33f6, 0x33f8, - 0x33fa, 0x33fc, 0x33fe, 0x3400, 0x3402, 0x3404, 0x3406, 0x3408, - 0x340a, 0x340c, 0x340e, 0x3410, 0x3412, 0x3414, 0x3416, 0x3418, - 0x341a, 0x341c, 0x341e, 0x3420, 0x3422, 0x3424, 0x3426, 0x3428, - 0x342a, 0x342c, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437, 0x3439, - 0x343b, 0x343e, 0x3441, 0x3443, 0x3445, 0x3447, 0x3449, 0x344b, - 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3458, 0x345a, 0x345c, - 0x345e, 0x3460, 0x3463, 0x3465, 0x3467, 0x3469, 0x346b, 0x346d, - 0x346f, 0x3471, 0x3473, 0x3475, 0x3478, 0x347a, 0x347d, 0x347f, - 0x3481, 0x3483, 0x3485, 0x3487, 0x3489, 0x348b, 0x348d, 0x348f, - 0x3491, 0x3493, 0x3496, 0x3498, 0x349a, 0x349c, 0x349e, 0x34a0, - 0x34a3, 0x34a5, 0x34a8, 0x34ab, 0x34ad, 0x34af, 0x34b1, 0x34b3, - 0x34b6, 0x34b9, 0x34bb, 0x34bd, 0x34bf, 0x34c1, 0x34c3, 0x34c5, - 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf, 0x34d2, 0x34d4, 0x34d6, - 0x34d8, 0x34da, 0x34dc, 0x34de, 0x34e0, 0x34e2, 0x34e4, 0x34e6, - 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4, 0x34f6, - 0x34f8, 0x34fb, 0x34fd, 0x34ff, 0x3501, 0x3503, 0x3505, 0x3508, - 0x350a, 0x350c, 0x350e, 0x3510, 0x3512, 0x3514, 0x3516, 0x3518, - 0x351a, 0x351c, 0x351e, 0x3521, 0x3523, 0x3525, 0x3527, 0x3529, - 0x352b, 0x352d, 0x352f, 0x3531, 0x3533, 0x3535, 0x3537, 0x3539, - 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3548, 0x354a, - 0x354c, 0x354e, 0x3550, 0x3552, 0x3555, 0x3557, 0x3559, 0x355b, - 0x355d, 0x355f, 0x3561, 0x3563, 0x3565, 0x3568, 0x356a, 0x356c, - 0x356e, 0x3571, 0x3573, 0x3575, 0x3577, 0x3579, 0x357b, 0x357d, - 0x3580, 0x3583, 0x3586, 0x3588, 0x358b, 0x358d, 0x358f, 0x3591, - - 0x3593, 0x3595, 0x3597, 0x3599, 0x359b, 0x359d, 0x359f, 0x35a2, - 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac, 0x35ae, 0x35b1, 0x35b3, - 0x35b5, 0x35b8, 0x35bb, 0x35bd, 0x35bf, 0x35c1, 0x35c3, 0x35c5, - 0x35c7, 0x35c9, 0x35cb, 0x35cd, 0x35d0, 0x35d2, 0x35d5, 0x35d7, - 0x35da, 0x35dc, 0x35de, 0x35e0, 0x35e3, 0x35e5, 0x35e7, 0x35ea, - 0x35ed, 0x35ef, 0x35f1, 0x35f3, 0x35f5, 0x35f7, 0x35f9, 0x35fb, - 0x35fd, 0x35ff, 0x3601, 0x3603, 0x3605, 0x3607, 0x360a, 0x360c, - 0x360f, 0x3611, 0x3614, 0x3616, 0x3619, 0x361c, 0x361f, 0x3621, - 0x3623, 0x3625, 0x3628, 0x362b, 0x362e, 0x3631, 0x3633, 0x3635, - 0x3637, 0x3639, 0x363b, 0x363d, 0x363f, 0x3641, 0x3644, 0x3646, - 0x3648, 0x364a, 0x364c, 0x364f, 0x3651, 0x3654, 0x3657, 0x3659, - 0x365b, 0x365d, 0x365f, 0x3661, 0x3663, 0x3666, 0x3669, 0x366c, - 0x366e, 0x3670, 0x3673, 0x3675, 0x3677, 0x3679, 0x367c, 0x367e, - 0x3680, 0x3682, 0x3684, 0x3686, 0x3689, 0x368b, 0x368d, 0x368f, - 0x3691, 0x3693, 0x3695, 0x3698, 0x369b, 0x369d, 0x36a0, 0x36a2, - 0x36a5, 0x36a7, 0x36a9, 0x36ab, 0x36ae, 0x36b1, 0x36b3, 0x36b6, - 0x36b8, 0x36bb, 0x36bd, 0x36bf, 0x36c1, 0x36c3, 0x36c5, 0x36c7, - 0x36ca, 0x36cd, 0x36d0, 0x36d3, 0x36d5, 0x36d7, 0x36d9, 0x36db, - 0x36dd, 0x36df, 0x36e1, 0x36e3, 0x36e5, 0x36e7, 0x36e9, 0x36eb, - 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, 0x36f8, 0x36fa, 0x36fc, - 0x36fe, 0x3700, 0x3702, 0x3704, 0x3706, 0x3709, 0x370c, 0x370f, - 0x3711, 0x3713, 0x3715, 0x3717, 0x371a, 0x371c, 0x371f, 0x3721, - 0x3723, 0x3726, 0x3729, 0x372b, 0x372d, 0x372f, 0x3731, 0x3733, - 0x3735, 0x3737, 0x3739, 0x373b, 0x373d, 0x373f, 0x3741, 0x3743, - 0x3745, 0x3747, 0x3749, 0x374b, 0x374d, 0x374f, 0x3752, 0x3754, - 0x3756, 0x3758, 0x375a, 0x375c, 0x375f, 0x3762, 0x3764, 0x3766, - 0x3768, 0x376a, 0x376c, 0x376e, 0x3771, 0x3773, 0x3775, 0x3777, - 0x3779, 0x377c, 0x377f, 0x3781, 0x3783, 0x3785, 0x3788, 0x378a, - 0x378c, 0x378f, 0x3792, 0x3794, 0x3796, 0x3798, 0x379b, 0x379d, - 0x379f, 0x37a1, 0x37a3, 0x37a5, 0x37a7, 0x37a9, 0x37ac, 0x37ae, - 0x37b0, 0x37b2, 0x37b5, 0x37b7, 0x37b9, 0x37bb, 0x37bd, 0x37c0, - 0x37c3, 0x37c5, 0x37c7, 0x37c9, 0x37cc, 0x37ce, 0x37d1, 0x37d3, - - 0x37d5, 0x37d7, 0x37da, 0x37dc, 0x37de, 0x37e0, 0x37e2, 0x37e4, - 0x37e6, 0x37e8, 0x37eb, 0x37ed, 0x37ef, 0x37f1, 0x37f3, 0x37f5, - 0x37f7, 0x37fa, 0x37fc, 0x37ff, 0x3802, 0x3805, 0x3807, 0x3809, - 0x380b, 0x380d, 0x380f, 0x3811, 0x3813, 0x3815, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -#define GET_DECOMPOSITION_INDEX(ucs4) \ - (ucs4 < 0x3400 \ - ? (uc_decomposition_trie[uc_decomposition_trie[ucs4>>4] + (ucs4 & 0xf)]) \ - : (ucs4 < 0x30000\ - ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)]\ - : 0xffff)) - -static const unsigned short uc_decomposition_map[] = { - 0x103, 0x20, 0x210, 0x20, 0x308, 0x109, 0x61, 0x210, - 0x20, 0x304, 0x109, 0x32, 0x109, 0x33, 0x210, 0x20, - 0x301, 0x110, 0x3bc, 0x210, 0x20, 0x327, 0x109, 0x31, - 0x109, 0x6f, 0x311, 0x31, 0x2044, 0x34, 0x311, 0x31, - 0x2044, 0x32, 0x311, 0x33, 0x2044, 0x34, 0x201, 0x41, - 0x300, 0x201, 0x41, 0x301, 0x201, 0x41, 0x302, 0x201, - 0x41, 0x303, 0x201, 0x41, 0x308, 0x201, 0x41, 0x30a, - 0x201, 0x43, 0x327, 0x201, 0x45, 0x300, 0x201, 0x45, - 0x301, 0x201, 0x45, 0x302, 0x201, 0x45, 0x308, 0x201, - 0x49, 0x300, 0x201, 0x49, 0x301, 0x201, 0x49, 0x302, - 0x201, 0x49, 0x308, 0x201, 0x4e, 0x303, 0x201, 0x4f, - 0x300, 0x201, 0x4f, 0x301, 0x201, 0x4f, 0x302, 0x201, - 0x4f, 0x303, 0x201, 0x4f, 0x308, 0x201, 0x55, 0x300, - 0x201, 0x55, 0x301, 0x201, 0x55, 0x302, 0x201, 0x55, - 0x308, 0x201, 0x59, 0x301, 0x201, 0x61, 0x300, 0x201, - 0x61, 0x301, 0x201, 0x61, 0x302, 0x201, 0x61, 0x303, - 0x201, 0x61, 0x308, 0x201, 0x61, 0x30a, 0x201, 0x63, - 0x327, 0x201, 0x65, 0x300, 0x201, 0x65, 0x301, 0x201, - 0x65, 0x302, 0x201, 0x65, 0x308, 0x201, 0x69, 0x300, - 0x201, 0x69, 0x301, 0x201, 0x69, 0x302, 0x201, 0x69, - 0x308, 0x201, 0x6e, 0x303, 0x201, 0x6f, 0x300, 0x201, - 0x6f, 0x301, 0x201, 0x6f, 0x302, 0x201, 0x6f, 0x303, - 0x201, 0x6f, 0x308, 0x201, 0x75, 0x300, 0x201, 0x75, - 0x301, 0x201, 0x75, 0x302, 0x201, 0x75, 0x308, 0x201, - 0x79, 0x301, 0x201, 0x79, 0x308, 0x201, 0x41, 0x304, - 0x201, 0x61, 0x304, 0x201, 0x41, 0x306, 0x201, 0x61, - 0x306, 0x201, 0x41, 0x328, 0x201, 0x61, 0x328, 0x201, - 0x43, 0x301, 0x201, 0x63, 0x301, 0x201, 0x43, 0x302, - 0x201, 0x63, 0x302, 0x201, 0x43, 0x307, 0x201, 0x63, - 0x307, 0x201, 0x43, 0x30c, 0x201, 0x63, 0x30c, 0x201, - 0x44, 0x30c, 0x201, 0x64, 0x30c, 0x201, 0x45, 0x304, - 0x201, 0x65, 0x304, 0x201, 0x45, 0x306, 0x201, 0x65, - 0x306, 0x201, 0x45, 0x307, 0x201, 0x65, 0x307, 0x201, - 0x45, 0x328, 0x201, 0x65, 0x328, 0x201, 0x45, 0x30c, - 0x201, 0x65, 0x30c, 0x201, 0x47, 0x302, 0x201, 0x67, - 0x302, 0x201, 0x47, 0x306, 0x201, 0x67, 0x306, 0x201, - 0x47, 0x307, 0x201, 0x67, 0x307, 0x201, 0x47, 0x327, - 0x201, 0x67, 0x327, 0x201, 0x48, 0x302, 0x201, 0x68, - 0x302, 0x201, 0x49, 0x303, 0x201, 0x69, 0x303, 0x201, - 0x49, 0x304, 0x201, 0x69, 0x304, 0x201, 0x49, 0x306, - 0x201, 0x69, 0x306, 0x201, 0x49, 0x328, 0x201, 0x69, - 0x328, 0x201, 0x49, 0x307, 0x210, 0x49, 0x4a, 0x210, - 0x69, 0x6a, 0x201, 0x4a, 0x302, 0x201, 0x6a, 0x302, - 0x201, 0x4b, 0x327, 0x201, 0x6b, 0x327, 0x201, 0x4c, - 0x301, 0x201, 0x6c, 0x301, 0x201, 0x4c, 0x327, 0x201, - 0x6c, 0x327, 0x201, 0x4c, 0x30c, 0x201, 0x6c, 0x30c, - 0x210, 0x4c, 0xb7, 0x210, 0x6c, 0xb7, 0x201, 0x4e, - 0x301, 0x201, 0x6e, 0x301, 0x201, 0x4e, 0x327, 0x201, - 0x6e, 0x327, 0x201, 0x4e, 0x30c, 0x201, 0x6e, 0x30c, - 0x210, 0x2bc, 0x6e, 0x201, 0x4f, 0x304, 0x201, 0x6f, - 0x304, 0x201, 0x4f, 0x306, 0x201, 0x6f, 0x306, 0x201, - 0x4f, 0x30b, 0x201, 0x6f, 0x30b, 0x201, 0x52, 0x301, - 0x201, 0x72, 0x301, 0x201, 0x52, 0x327, 0x201, 0x72, - 0x327, 0x201, 0x52, 0x30c, 0x201, 0x72, 0x30c, 0x201, - 0x53, 0x301, 0x201, 0x73, 0x301, 0x201, 0x53, 0x302, - 0x201, 0x73, 0x302, 0x201, 0x53, 0x327, 0x201, 0x73, - 0x327, 0x201, 0x53, 0x30c, 0x201, 0x73, 0x30c, 0x201, - 0x54, 0x327, 0x201, 0x74, 0x327, 0x201, 0x54, 0x30c, - 0x201, 0x74, 0x30c, 0x201, 0x55, 0x303, 0x201, 0x75, - 0x303, 0x201, 0x55, 0x304, 0x201, 0x75, 0x304, 0x201, - 0x55, 0x306, 0x201, 0x75, 0x306, 0x201, 0x55, 0x30a, - 0x201, 0x75, 0x30a, 0x201, 0x55, 0x30b, 0x201, 0x75, - 0x30b, 0x201, 0x55, 0x328, 0x201, 0x75, 0x328, 0x201, - 0x57, 0x302, 0x201, 0x77, 0x302, 0x201, 0x59, 0x302, - 0x201, 0x79, 0x302, 0x201, 0x59, 0x308, 0x201, 0x5a, - 0x301, 0x201, 0x7a, 0x301, 0x201, 0x5a, 0x307, 0x201, - 0x7a, 0x307, 0x201, 0x5a, 0x30c, 0x201, 0x7a, 0x30c, - 0x110, 0x73, 0x201, 0x4f, 0x31b, 0x201, 0x6f, 0x31b, - 0x201, 0x55, 0x31b, 0x201, 0x75, 0x31b, 0x210, 0x44, - 0x17d, 0x210, 0x44, 0x17e, 0x210, 0x64, 0x17e, 0x210, - 0x4c, 0x4a, 0x210, 0x4c, 0x6a, 0x210, 0x6c, 0x6a, - 0x210, 0x4e, 0x4a, 0x210, 0x4e, 0x6a, 0x210, 0x6e, - 0x6a, 0x201, 0x41, 0x30c, 0x201, 0x61, 0x30c, 0x201, - 0x49, 0x30c, 0x201, 0x69, 0x30c, 0x201, 0x4f, 0x30c, - 0x201, 0x6f, 0x30c, 0x201, 0x55, 0x30c, 0x201, 0x75, - 0x30c, 0x201, 0xdc, 0x304, 0x201, 0xfc, 0x304, 0x201, - 0xdc, 0x301, 0x201, 0xfc, 0x301, 0x201, 0xdc, 0x30c, - 0x201, 0xfc, 0x30c, 0x201, 0xdc, 0x300, 0x201, 0xfc, - 0x300, 0x201, 0xc4, 0x304, 0x201, 0xe4, 0x304, 0x201, - 0x226, 0x304, 0x201, 0x227, 0x304, 0x201, 0xc6, 0x304, - 0x201, 0xe6, 0x304, 0x201, 0x47, 0x30c, 0x201, 0x67, - 0x30c, 0x201, 0x4b, 0x30c, 0x201, 0x6b, 0x30c, 0x201, - 0x4f, 0x328, 0x201, 0x6f, 0x328, 0x201, 0x1ea, 0x304, - 0x201, 0x1eb, 0x304, 0x201, 0x1b7, 0x30c, 0x201, 0x292, - 0x30c, 0x201, 0x6a, 0x30c, 0x210, 0x44, 0x5a, 0x210, - 0x44, 0x7a, 0x210, 0x64, 0x7a, 0x201, 0x47, 0x301, - 0x201, 0x67, 0x301, 0x201, 0x4e, 0x300, 0x201, 0x6e, - 0x300, 0x201, 0xc5, 0x301, 0x201, 0xe5, 0x301, 0x201, - 0xc6, 0x301, 0x201, 0xe6, 0x301, 0x201, 0xd8, 0x301, - 0x201, 0xf8, 0x301, 0x201, 0x41, 0x30f, 0x201, 0x61, - 0x30f, 0x201, 0x41, 0x311, 0x201, 0x61, 0x311, 0x201, - 0x45, 0x30f, 0x201, 0x65, 0x30f, 0x201, 0x45, 0x311, - 0x201, 0x65, 0x311, 0x201, 0x49, 0x30f, 0x201, 0x69, - 0x30f, 0x201, 0x49, 0x311, 0x201, 0x69, 0x311, 0x201, - 0x4f, 0x30f, 0x201, 0x6f, 0x30f, 0x201, 0x4f, 0x311, - 0x201, 0x6f, 0x311, 0x201, 0x52, 0x30f, 0x201, 0x72, - 0x30f, 0x201, 0x52, 0x311, 0x201, 0x72, 0x311, 0x201, - 0x55, 0x30f, 0x201, 0x75, 0x30f, 0x201, 0x55, 0x311, - 0x201, 0x75, 0x311, 0x201, 0x53, 0x326, 0x201, 0x73, - 0x326, 0x201, 0x54, 0x326, 0x201, 0x74, 0x326, 0x201, - 0x48, 0x30c, 0x201, 0x68, 0x30c, 0x201, 0x41, 0x307, - 0x201, 0x61, 0x307, 0x201, 0x45, 0x327, 0x201, 0x65, - 0x327, 0x201, 0xd6, 0x304, 0x201, 0xf6, 0x304, 0x201, - 0xd5, 0x304, 0x201, 0xf5, 0x304, 0x201, 0x4f, 0x307, - 0x201, 0x6f, 0x307, 0x201, 0x22e, 0x304, 0x201, 0x22f, - 0x304, 0x201, 0x59, 0x304, 0x201, 0x79, 0x304, 0x109, - 0x68, 0x109, 0x266, 0x109, 0x6a, 0x109, 0x72, 0x109, - 0x279, 0x109, 0x27b, 0x109, 0x281, 0x109, 0x77, 0x109, - 0x79, 0x210, 0x20, 0x306, 0x210, 0x20, 0x307, 0x210, - 0x20, 0x30a, 0x210, 0x20, 0x328, 0x210, 0x20, 0x303, - 0x210, 0x20, 0x30b, 0x109, 0x263, 0x109, 0x6c, 0x109, - 0x73, 0x109, 0x78, 0x109, 0x295, 0x101, 0x300, 0x101, - 0x301, 0x101, 0x313, 0x201, 0x308, 0x301, 0x101, 0x2b9, - 0x210, 0x20, 0x345, 0x101, 0x3b, 0x210, 0x20, 0x301, - 0x201, 0xa8, 0x301, 0x201, 0x391, 0x301, 0x101, 0xb7, - 0x201, 0x395, 0x301, 0x201, 0x397, 0x301, 0x201, 0x399, - 0x301, 0x201, 0x39f, 0x301, 0x201, 0x3a5, 0x301, 0x201, - 0x3a9, 0x301, 0x201, 0x3ca, 0x301, 0x201, 0x399, 0x308, - 0x201, 0x3a5, 0x308, 0x201, 0x3b1, 0x301, 0x201, 0x3b5, - 0x301, 0x201, 0x3b7, 0x301, 0x201, 0x3b9, 0x301, 0x201, - 0x3cb, 0x301, 0x201, 0x3b9, 0x308, 0x201, 0x3c5, 0x308, - 0x201, 0x3bf, 0x301, 0x201, 0x3c5, 0x301, 0x201, 0x3c9, - 0x301, 0x110, 0x3b2, 0x110, 0x3b8, 0x110, 0x3a5, 0x201, - 0x3d2, 0x301, 0x201, 0x3d2, 0x308, 0x110, 0x3c6, 0x110, - 0x3c0, 0x110, 0x3ba, 0x110, 0x3c1, 0x110, 0x3c2, 0x110, - 0x398, 0x110, 0x3b5, 0x110, 0x3a3, 0x201, 0x415, 0x300, - 0x201, 0x415, 0x308, 0x201, 0x413, 0x301, 0x201, 0x406, - 0x308, 0x201, 0x41a, 0x301, 0x201, 0x418, 0x300, 0x201, - 0x423, 0x306, 0x201, 0x418, 0x306, 0x201, 0x438, 0x306, - 0x201, 0x435, 0x300, 0x201, 0x435, 0x308, 0x201, 0x433, - 0x301, 0x201, 0x456, 0x308, 0x201, 0x43a, 0x301, 0x201, - 0x438, 0x300, 0x201, 0x443, 0x306, 0x201, 0x474, 0x30f, - 0x201, 0x475, 0x30f, 0x201, 0x416, 0x306, 0x201, 0x436, - 0x306, 0x201, 0x410, 0x306, 0x201, 0x430, 0x306, 0x201, - 0x410, 0x308, 0x201, 0x430, 0x308, 0x201, 0x415, 0x306, - 0x201, 0x435, 0x306, 0x201, 0x4d8, 0x308, 0x201, 0x4d9, - 0x308, 0x201, 0x416, 0x308, 0x201, 0x436, 0x308, 0x201, - 0x417, 0x308, 0x201, 0x437, 0x308, 0x201, 0x418, 0x304, - 0x201, 0x438, 0x304, 0x201, 0x418, 0x308, 0x201, 0x438, - 0x308, 0x201, 0x41e, 0x308, 0x201, 0x43e, 0x308, 0x201, - 0x4e8, 0x308, 0x201, 0x4e9, 0x308, 0x201, 0x42d, 0x308, - 0x201, 0x44d, 0x308, 0x201, 0x423, 0x304, 0x201, 0x443, - 0x304, 0x201, 0x423, 0x308, 0x201, 0x443, 0x308, 0x201, - 0x423, 0x30b, 0x201, 0x443, 0x30b, 0x201, 0x427, 0x308, - 0x201, 0x447, 0x308, 0x201, 0x42b, 0x308, 0x201, 0x44b, - 0x308, 0x210, 0x565, 0x582, 0x201, 0x627, 0x653, 0x201, - 0x627, 0x654, 0x201, 0x648, 0x654, 0x201, 0x627, 0x655, - 0x201, 0x64a, 0x654, 0x210, 0x627, 0x674, 0x210, 0x648, - 0x674, 0x210, 0x6c7, 0x674, 0x210, 0x64a, 0x674, 0x201, - 0x6d5, 0x654, 0x201, 0x6c1, 0x654, 0x201, 0x6d2, 0x654, - 0x201, 0x928, 0x93c, 0x201, 0x930, 0x93c, 0x201, 0x933, - 0x93c, 0x201, 0x915, 0x93c, 0x201, 0x916, 0x93c, 0x201, - 0x917, 0x93c, 0x201, 0x91c, 0x93c, 0x201, 0x921, 0x93c, - 0x201, 0x922, 0x93c, 0x201, 0x92b, 0x93c, 0x201, 0x92f, - 0x93c, 0x201, 0x9c7, 0x9be, 0x201, 0x9c7, 0x9d7, 0x201, - 0x9a1, 0x9bc, 0x201, 0x9a2, 0x9bc, 0x201, 0x9af, 0x9bc, - 0x201, 0xa32, 0xa3c, 0x201, 0xa38, 0xa3c, 0x201, 0xa16, - 0xa3c, 0x201, 0xa17, 0xa3c, 0x201, 0xa1c, 0xa3c, 0x201, - 0xa2b, 0xa3c, 0x201, 0xb47, 0xb56, 0x201, 0xb47, 0xb3e, - 0x201, 0xb47, 0xb57, 0x201, 0xb21, 0xb3c, 0x201, 0xb22, - 0xb3c, 0x201, 0xb92, 0xbd7, 0x201, 0xbc6, 0xbbe, 0x201, - 0xbc7, 0xbbe, 0x201, 0xbc6, 0xbd7, 0x201, 0xc46, 0xc56, - 0x201, 0xcbf, 0xcd5, 0x201, 0xcc6, 0xcd5, 0x201, 0xcc6, - 0xcd6, 0x201, 0xcc6, 0xcc2, 0x201, 0xcca, 0xcd5, 0x201, - 0xd46, 0xd3e, 0x201, 0xd47, 0xd3e, 0x201, 0xd46, 0xd57, - 0x201, 0xdd9, 0xdca, 0x201, 0xdd9, 0xdcf, 0x201, 0xddc, - 0xdca, 0x201, 0xdd9, 0xddf, 0x210, 0xe4d, 0xe32, 0x210, - 0xecd, 0xeb2, 0x210, 0xeab, 0xe99, 0x210, 0xeab, 0xea1, - 0x103, 0xf0b, 0x201, 0xf42, 0xfb7, 0x201, 0xf4c, 0xfb7, - 0x201, 0xf51, 0xfb7, 0x201, 0xf56, 0xfb7, 0x201, 0xf5b, - 0xfb7, 0x201, 0xf40, 0xfb5, 0x201, 0xf71, 0xf72, 0x201, - 0xf71, 0xf74, 0x201, 0xfb2, 0xf80, 0x210, 0xfb2, 0xf81, - 0x201, 0xfb3, 0xf80, 0x210, 0xfb3, 0xf81, 0x201, 0xf71, - 0xf80, 0x201, 0xf92, 0xfb7, 0x201, 0xf9c, 0xfb7, 0x201, - 0xfa1, 0xfb7, 0x201, 0xfa6, 0xfb7, 0x201, 0xfab, 0xfb7, - 0x201, 0xf90, 0xfb5, 0x201, 0x1025, 0x102e, 0x109, 0x10dc, - 0x201, 0x1b05, 0x1b35, 0x201, 0x1b07, 0x1b35, 0x201, 0x1b09, - 0x1b35, 0x201, 0x1b0b, 0x1b35, 0x201, 0x1b0d, 0x1b35, 0x201, - 0x1b11, 0x1b35, 0x201, 0x1b3a, 0x1b35, 0x201, 0x1b3c, 0x1b35, - 0x201, 0x1b3e, 0x1b35, 0x201, 0x1b3f, 0x1b35, 0x201, 0x1b42, - 0x1b35, 0x109, 0x41, 0x109, 0xc6, 0x109, 0x42, 0x109, - 0x44, 0x109, 0x45, 0x109, 0x18e, 0x109, 0x47, 0x109, - 0x48, 0x109, 0x49, 0x109, 0x4a, 0x109, 0x4b, 0x109, - 0x4c, 0x109, 0x4d, 0x109, 0x4e, 0x109, 0x4f, 0x109, - 0x222, 0x109, 0x50, 0x109, 0x52, 0x109, 0x54, 0x109, - 0x55, 0x109, 0x57, 0x109, 0x61, 0x109, 0x250, 0x109, - 0x251, 0x109, 0x1d02, 0x109, 0x62, 0x109, 0x64, 0x109, - 0x65, 0x109, 0x259, 0x109, 0x25b, 0x109, 0x25c, 0x109, - 0x67, 0x109, 0x6b, 0x109, 0x6d, 0x109, 0x14b, 0x109, - 0x6f, 0x109, 0x254, 0x109, 0x1d16, 0x109, 0x1d17, 0x109, - 0x70, 0x109, 0x74, 0x109, 0x75, 0x109, 0x1d1d, 0x109, - 0x26f, 0x109, 0x76, 0x109, 0x1d25, 0x109, 0x3b2, 0x109, - 0x3b3, 0x109, 0x3b4, 0x109, 0x3c6, 0x109, 0x3c7, 0x10a, - 0x69, 0x10a, 0x72, 0x10a, 0x75, 0x10a, 0x76, 0x10a, - 0x3b2, 0x10a, 0x3b3, 0x10a, 0x3c1, 0x10a, 0x3c6, 0x10a, - 0x3c7, 0x109, 0x43d, 0x109, 0x252, 0x109, 0x63, 0x109, - 0x255, 0x109, 0xf0, 0x109, 0x25c, 0x109, 0x66, 0x109, - 0x25f, 0x109, 0x261, 0x109, 0x265, 0x109, 0x268, 0x109, - 0x269, 0x109, 0x26a, 0x109, 0x1d7b, 0x109, 0x29d, 0x109, - 0x26d, 0x109, 0x1d85, 0x109, 0x29f, 0x109, 0x271, 0x109, - 0x270, 0x109, 0x272, 0x109, 0x273, 0x109, 0x274, 0x109, - 0x275, 0x109, 0x278, 0x109, 0x282, 0x109, 0x283, 0x109, - 0x1ab, 0x109, 0x289, 0x109, 0x28a, 0x109, 0x1d1c, 0x109, - 0x28b, 0x109, 0x28c, 0x109, 0x7a, 0x109, 0x290, 0x109, - 0x291, 0x109, 0x292, 0x109, 0x3b8, 0x201, 0x41, 0x325, - 0x201, 0x61, 0x325, 0x201, 0x42, 0x307, 0x201, 0x62, - 0x307, 0x201, 0x42, 0x323, 0x201, 0x62, 0x323, 0x201, - 0x42, 0x331, 0x201, 0x62, 0x331, 0x201, 0xc7, 0x301, - 0x201, 0xe7, 0x301, 0x201, 0x44, 0x307, 0x201, 0x64, - 0x307, 0x201, 0x44, 0x323, 0x201, 0x64, 0x323, 0x201, - 0x44, 0x331, 0x201, 0x64, 0x331, 0x201, 0x44, 0x327, - 0x201, 0x64, 0x327, 0x201, 0x44, 0x32d, 0x201, 0x64, - 0x32d, 0x201, 0x112, 0x300, 0x201, 0x113, 0x300, 0x201, - 0x112, 0x301, 0x201, 0x113, 0x301, 0x201, 0x45, 0x32d, - 0x201, 0x65, 0x32d, 0x201, 0x45, 0x330, 0x201, 0x65, - 0x330, 0x201, 0x228, 0x306, 0x201, 0x229, 0x306, 0x201, - 0x46, 0x307, 0x201, 0x66, 0x307, 0x201, 0x47, 0x304, - 0x201, 0x67, 0x304, 0x201, 0x48, 0x307, 0x201, 0x68, - 0x307, 0x201, 0x48, 0x323, 0x201, 0x68, 0x323, 0x201, - 0x48, 0x308, 0x201, 0x68, 0x308, 0x201, 0x48, 0x327, - 0x201, 0x68, 0x327, 0x201, 0x48, 0x32e, 0x201, 0x68, - 0x32e, 0x201, 0x49, 0x330, 0x201, 0x69, 0x330, 0x201, - 0xcf, 0x301, 0x201, 0xef, 0x301, 0x201, 0x4b, 0x301, - 0x201, 0x6b, 0x301, 0x201, 0x4b, 0x323, 0x201, 0x6b, - 0x323, 0x201, 0x4b, 0x331, 0x201, 0x6b, 0x331, 0x201, - 0x4c, 0x323, 0x201, 0x6c, 0x323, 0x201, 0x1e36, 0x304, - 0x201, 0x1e37, 0x304, 0x201, 0x4c, 0x331, 0x201, 0x6c, - 0x331, 0x201, 0x4c, 0x32d, 0x201, 0x6c, 0x32d, 0x201, - 0x4d, 0x301, 0x201, 0x6d, 0x301, 0x201, 0x4d, 0x307, - 0x201, 0x6d, 0x307, 0x201, 0x4d, 0x323, 0x201, 0x6d, - 0x323, 0x201, 0x4e, 0x307, 0x201, 0x6e, 0x307, 0x201, - 0x4e, 0x323, 0x201, 0x6e, 0x323, 0x201, 0x4e, 0x331, - 0x201, 0x6e, 0x331, 0x201, 0x4e, 0x32d, 0x201, 0x6e, - 0x32d, 0x201, 0xd5, 0x301, 0x201, 0xf5, 0x301, 0x201, - 0xd5, 0x308, 0x201, 0xf5, 0x308, 0x201, 0x14c, 0x300, - 0x201, 0x14d, 0x300, 0x201, 0x14c, 0x301, 0x201, 0x14d, - 0x301, 0x201, 0x50, 0x301, 0x201, 0x70, 0x301, 0x201, - 0x50, 0x307, 0x201, 0x70, 0x307, 0x201, 0x52, 0x307, - 0x201, 0x72, 0x307, 0x201, 0x52, 0x323, 0x201, 0x72, - 0x323, 0x201, 0x1e5a, 0x304, 0x201, 0x1e5b, 0x304, 0x201, - 0x52, 0x331, 0x201, 0x72, 0x331, 0x201, 0x53, 0x307, - 0x201, 0x73, 0x307, 0x201, 0x53, 0x323, 0x201, 0x73, - 0x323, 0x201, 0x15a, 0x307, 0x201, 0x15b, 0x307, 0x201, - 0x160, 0x307, 0x201, 0x161, 0x307, 0x201, 0x1e62, 0x307, - 0x201, 0x1e63, 0x307, 0x201, 0x54, 0x307, 0x201, 0x74, - 0x307, 0x201, 0x54, 0x323, 0x201, 0x74, 0x323, 0x201, - 0x54, 0x331, 0x201, 0x74, 0x331, 0x201, 0x54, 0x32d, - 0x201, 0x74, 0x32d, 0x201, 0x55, 0x324, 0x201, 0x75, - 0x324, 0x201, 0x55, 0x330, 0x201, 0x75, 0x330, 0x201, - 0x55, 0x32d, 0x201, 0x75, 0x32d, 0x201, 0x168, 0x301, - 0x201, 0x169, 0x301, 0x201, 0x16a, 0x308, 0x201, 0x16b, - 0x308, 0x201, 0x56, 0x303, 0x201, 0x76, 0x303, 0x201, - 0x56, 0x323, 0x201, 0x76, 0x323, 0x201, 0x57, 0x300, - 0x201, 0x77, 0x300, 0x201, 0x57, 0x301, 0x201, 0x77, - 0x301, 0x201, 0x57, 0x308, 0x201, 0x77, 0x308, 0x201, - 0x57, 0x307, 0x201, 0x77, 0x307, 0x201, 0x57, 0x323, - 0x201, 0x77, 0x323, 0x201, 0x58, 0x307, 0x201, 0x78, - 0x307, 0x201, 0x58, 0x308, 0x201, 0x78, 0x308, 0x201, - 0x59, 0x307, 0x201, 0x79, 0x307, 0x201, 0x5a, 0x302, - 0x201, 0x7a, 0x302, 0x201, 0x5a, 0x323, 0x201, 0x7a, - 0x323, 0x201, 0x5a, 0x331, 0x201, 0x7a, 0x331, 0x201, - 0x68, 0x331, 0x201, 0x74, 0x308, 0x201, 0x77, 0x30a, - 0x201, 0x79, 0x30a, 0x210, 0x61, 0x2be, 0x201, 0x17f, - 0x307, 0x201, 0x41, 0x323, 0x201, 0x61, 0x323, 0x201, - 0x41, 0x309, 0x201, 0x61, 0x309, 0x201, 0xc2, 0x301, - 0x201, 0xe2, 0x301, 0x201, 0xc2, 0x300, 0x201, 0xe2, - 0x300, 0x201, 0xc2, 0x309, 0x201, 0xe2, 0x309, 0x201, - 0xc2, 0x303, 0x201, 0xe2, 0x303, 0x201, 0x1ea0, 0x302, - 0x201, 0x1ea1, 0x302, 0x201, 0x102, 0x301, 0x201, 0x103, - 0x301, 0x201, 0x102, 0x300, 0x201, 0x103, 0x300, 0x201, - 0x102, 0x309, 0x201, 0x103, 0x309, 0x201, 0x102, 0x303, - 0x201, 0x103, 0x303, 0x201, 0x1ea0, 0x306, 0x201, 0x1ea1, - 0x306, 0x201, 0x45, 0x323, 0x201, 0x65, 0x323, 0x201, - 0x45, 0x309, 0x201, 0x65, 0x309, 0x201, 0x45, 0x303, - 0x201, 0x65, 0x303, 0x201, 0xca, 0x301, 0x201, 0xea, - 0x301, 0x201, 0xca, 0x300, 0x201, 0xea, 0x300, 0x201, - 0xca, 0x309, 0x201, 0xea, 0x309, 0x201, 0xca, 0x303, - 0x201, 0xea, 0x303, 0x201, 0x1eb8, 0x302, 0x201, 0x1eb9, - 0x302, 0x201, 0x49, 0x309, 0x201, 0x69, 0x309, 0x201, - 0x49, 0x323, 0x201, 0x69, 0x323, 0x201, 0x4f, 0x323, - 0x201, 0x6f, 0x323, 0x201, 0x4f, 0x309, 0x201, 0x6f, - 0x309, 0x201, 0xd4, 0x301, 0x201, 0xf4, 0x301, 0x201, - 0xd4, 0x300, 0x201, 0xf4, 0x300, 0x201, 0xd4, 0x309, - 0x201, 0xf4, 0x309, 0x201, 0xd4, 0x303, 0x201, 0xf4, - 0x303, 0x201, 0x1ecc, 0x302, 0x201, 0x1ecd, 0x302, 0x201, - 0x1a0, 0x301, 0x201, 0x1a1, 0x301, 0x201, 0x1a0, 0x300, - 0x201, 0x1a1, 0x300, 0x201, 0x1a0, 0x309, 0x201, 0x1a1, - 0x309, 0x201, 0x1a0, 0x303, 0x201, 0x1a1, 0x303, 0x201, - 0x1a0, 0x323, 0x201, 0x1a1, 0x323, 0x201, 0x55, 0x323, - 0x201, 0x75, 0x323, 0x201, 0x55, 0x309, 0x201, 0x75, - 0x309, 0x201, 0x1af, 0x301, 0x201, 0x1b0, 0x301, 0x201, - 0x1af, 0x300, 0x201, 0x1b0, 0x300, 0x201, 0x1af, 0x309, - 0x201, 0x1b0, 0x309, 0x201, 0x1af, 0x303, 0x201, 0x1b0, - 0x303, 0x201, 0x1af, 0x323, 0x201, 0x1b0, 0x323, 0x201, - 0x59, 0x300, 0x201, 0x79, 0x300, 0x201, 0x59, 0x323, - 0x201, 0x79, 0x323, 0x201, 0x59, 0x309, 0x201, 0x79, - 0x309, 0x201, 0x59, 0x303, 0x201, 0x79, 0x303, 0x201, - 0x3b1, 0x313, 0x201, 0x3b1, 0x314, 0x201, 0x1f00, 0x300, - 0x201, 0x1f01, 0x300, 0x201, 0x1f00, 0x301, 0x201, 0x1f01, - 0x301, 0x201, 0x1f00, 0x342, 0x201, 0x1f01, 0x342, 0x201, - 0x391, 0x313, 0x201, 0x391, 0x314, 0x201, 0x1f08, 0x300, - 0x201, 0x1f09, 0x300, 0x201, 0x1f08, 0x301, 0x201, 0x1f09, - 0x301, 0x201, 0x1f08, 0x342, 0x201, 0x1f09, 0x342, 0x201, - 0x3b5, 0x313, 0x201, 0x3b5, 0x314, 0x201, 0x1f10, 0x300, - 0x201, 0x1f11, 0x300, 0x201, 0x1f10, 0x301, 0x201, 0x1f11, - 0x301, 0x201, 0x395, 0x313, 0x201, 0x395, 0x314, 0x201, - 0x1f18, 0x300, 0x201, 0x1f19, 0x300, 0x201, 0x1f18, 0x301, - 0x201, 0x1f19, 0x301, 0x201, 0x3b7, 0x313, 0x201, 0x3b7, - 0x314, 0x201, 0x1f20, 0x300, 0x201, 0x1f21, 0x300, 0x201, - 0x1f20, 0x301, 0x201, 0x1f21, 0x301, 0x201, 0x1f20, 0x342, - 0x201, 0x1f21, 0x342, 0x201, 0x397, 0x313, 0x201, 0x397, - 0x314, 0x201, 0x1f28, 0x300, 0x201, 0x1f29, 0x300, 0x201, - 0x1f28, 0x301, 0x201, 0x1f29, 0x301, 0x201, 0x1f28, 0x342, - 0x201, 0x1f29, 0x342, 0x201, 0x3b9, 0x313, 0x201, 0x3b9, - 0x314, 0x201, 0x1f30, 0x300, 0x201, 0x1f31, 0x300, 0x201, - 0x1f30, 0x301, 0x201, 0x1f31, 0x301, 0x201, 0x1f30, 0x342, - 0x201, 0x1f31, 0x342, 0x201, 0x399, 0x313, 0x201, 0x399, - 0x314, 0x201, 0x1f38, 0x300, 0x201, 0x1f39, 0x300, 0x201, - 0x1f38, 0x301, 0x201, 0x1f39, 0x301, 0x201, 0x1f38, 0x342, - 0x201, 0x1f39, 0x342, 0x201, 0x3bf, 0x313, 0x201, 0x3bf, - 0x314, 0x201, 0x1f40, 0x300, 0x201, 0x1f41, 0x300, 0x201, - 0x1f40, 0x301, 0x201, 0x1f41, 0x301, 0x201, 0x39f, 0x313, - 0x201, 0x39f, 0x314, 0x201, 0x1f48, 0x300, 0x201, 0x1f49, - 0x300, 0x201, 0x1f48, 0x301, 0x201, 0x1f49, 0x301, 0x201, - 0x3c5, 0x313, 0x201, 0x3c5, 0x314, 0x201, 0x1f50, 0x300, - 0x201, 0x1f51, 0x300, 0x201, 0x1f50, 0x301, 0x201, 0x1f51, - 0x301, 0x201, 0x1f50, 0x342, 0x201, 0x1f51, 0x342, 0x201, - 0x3a5, 0x314, 0x201, 0x1f59, 0x300, 0x201, 0x1f59, 0x301, - 0x201, 0x1f59, 0x342, 0x201, 0x3c9, 0x313, 0x201, 0x3c9, - 0x314, 0x201, 0x1f60, 0x300, 0x201, 0x1f61, 0x300, 0x201, - 0x1f60, 0x301, 0x201, 0x1f61, 0x301, 0x201, 0x1f60, 0x342, - 0x201, 0x1f61, 0x342, 0x201, 0x3a9, 0x313, 0x201, 0x3a9, - 0x314, 0x201, 0x1f68, 0x300, 0x201, 0x1f69, 0x300, 0x201, - 0x1f68, 0x301, 0x201, 0x1f69, 0x301, 0x201, 0x1f68, 0x342, - 0x201, 0x1f69, 0x342, 0x201, 0x3b1, 0x300, 0x101, 0x3ac, - 0x201, 0x3b5, 0x300, 0x101, 0x3ad, 0x201, 0x3b7, 0x300, - 0x101, 0x3ae, 0x201, 0x3b9, 0x300, 0x101, 0x3af, 0x201, - 0x3bf, 0x300, 0x101, 0x3cc, 0x201, 0x3c5, 0x300, 0x101, - 0x3cd, 0x201, 0x3c9, 0x300, 0x101, 0x3ce, 0x201, 0x1f00, - 0x345, 0x201, 0x1f01, 0x345, 0x201, 0x1f02, 0x345, 0x201, - 0x1f03, 0x345, 0x201, 0x1f04, 0x345, 0x201, 0x1f05, 0x345, - 0x201, 0x1f06, 0x345, 0x201, 0x1f07, 0x345, 0x201, 0x1f08, - 0x345, 0x201, 0x1f09, 0x345, 0x201, 0x1f0a, 0x345, 0x201, - 0x1f0b, 0x345, 0x201, 0x1f0c, 0x345, 0x201, 0x1f0d, 0x345, - 0x201, 0x1f0e, 0x345, 0x201, 0x1f0f, 0x345, 0x201, 0x1f20, - 0x345, 0x201, 0x1f21, 0x345, 0x201, 0x1f22, 0x345, 0x201, - 0x1f23, 0x345, 0x201, 0x1f24, 0x345, 0x201, 0x1f25, 0x345, - 0x201, 0x1f26, 0x345, 0x201, 0x1f27, 0x345, 0x201, 0x1f28, - 0x345, 0x201, 0x1f29, 0x345, 0x201, 0x1f2a, 0x345, 0x201, - 0x1f2b, 0x345, 0x201, 0x1f2c, 0x345, 0x201, 0x1f2d, 0x345, - 0x201, 0x1f2e, 0x345, 0x201, 0x1f2f, 0x345, 0x201, 0x1f60, - 0x345, 0x201, 0x1f61, 0x345, 0x201, 0x1f62, 0x345, 0x201, - 0x1f63, 0x345, 0x201, 0x1f64, 0x345, 0x201, 0x1f65, 0x345, - 0x201, 0x1f66, 0x345, 0x201, 0x1f67, 0x345, 0x201, 0x1f68, - 0x345, 0x201, 0x1f69, 0x345, 0x201, 0x1f6a, 0x345, 0x201, - 0x1f6b, 0x345, 0x201, 0x1f6c, 0x345, 0x201, 0x1f6d, 0x345, - 0x201, 0x1f6e, 0x345, 0x201, 0x1f6f, 0x345, 0x201, 0x3b1, - 0x306, 0x201, 0x3b1, 0x304, 0x201, 0x1f70, 0x345, 0x201, - 0x3b1, 0x345, 0x201, 0x3ac, 0x345, 0x201, 0x3b1, 0x342, - 0x201, 0x1fb6, 0x345, 0x201, 0x391, 0x306, 0x201, 0x391, - 0x304, 0x201, 0x391, 0x300, 0x101, 0x386, 0x201, 0x391, - 0x345, 0x210, 0x20, 0x313, 0x101, 0x3b9, 0x210, 0x20, - 0x313, 0x210, 0x20, 0x342, 0x201, 0xa8, 0x342, 0x201, - 0x1f74, 0x345, 0x201, 0x3b7, 0x345, 0x201, 0x3ae, 0x345, - 0x201, 0x3b7, 0x342, 0x201, 0x1fc6, 0x345, 0x201, 0x395, - 0x300, 0x101, 0x388, 0x201, 0x397, 0x300, 0x101, 0x389, - 0x201, 0x397, 0x345, 0x201, 0x1fbf, 0x300, 0x201, 0x1fbf, - 0x301, 0x201, 0x1fbf, 0x342, 0x201, 0x3b9, 0x306, 0x201, - 0x3b9, 0x304, 0x201, 0x3ca, 0x300, 0x101, 0x390, 0x201, - 0x3b9, 0x342, 0x201, 0x3ca, 0x342, 0x201, 0x399, 0x306, - 0x201, 0x399, 0x304, 0x201, 0x399, 0x300, 0x101, 0x38a, - 0x201, 0x1ffe, 0x300, 0x201, 0x1ffe, 0x301, 0x201, 0x1ffe, - 0x342, 0x201, 0x3c5, 0x306, 0x201, 0x3c5, 0x304, 0x201, - 0x3cb, 0x300, 0x101, 0x3b0, 0x201, 0x3c1, 0x313, 0x201, - 0x3c1, 0x314, 0x201, 0x3c5, 0x342, 0x201, 0x3cb, 0x342, - 0x201, 0x3a5, 0x306, 0x201, 0x3a5, 0x304, 0x201, 0x3a5, - 0x300, 0x101, 0x38e, 0x201, 0x3a1, 0x314, 0x201, 0xa8, - 0x300, 0x101, 0x385, 0x101, 0x60, 0x201, 0x1f7c, 0x345, - 0x201, 0x3c9, 0x345, 0x201, 0x3ce, 0x345, 0x201, 0x3c9, - 0x342, 0x201, 0x1ff6, 0x345, 0x201, 0x39f, 0x300, 0x101, - 0x38c, 0x201, 0x3a9, 0x300, 0x101, 0x38f, 0x201, 0x3a9, - 0x345, 0x101, 0xb4, 0x210, 0x20, 0x314, 0x101, 0x2002, - 0x101, 0x2003, 0x110, 0x20, 0x110, 0x20, 0x110, 0x20, - 0x110, 0x20, 0x110, 0x20, 0x103, 0x20, 0x110, 0x20, - 0x110, 0x20, 0x110, 0x20, 0x103, 0x2010, 0x210, 0x20, - 0x333, 0x110, 0x2e, 0x210, 0x2e, 0x2e, 0x310, 0x2e, - 0x2e, 0x2e, 0x103, 0x20, 0x210, 0x2032, 0x2032, 0x310, - 0x2032, 0x2032, 0x2032, 0x210, 0x2035, 0x2035, 0x310, 0x2035, - 0x2035, 0x2035, 0x210, 0x21, 0x21, 0x210, 0x20, 0x305, - 0x210, 0x3f, 0x3f, 0x210, 0x3f, 0x21, 0x210, 0x21, - 0x3f, 0x410, 0x2032, 0x2032, 0x2032, 0x2032, 0x110, 0x20, - 0x109, 0x30, 0x109, 0x69, 0x109, 0x34, 0x109, 0x35, - 0x109, 0x36, 0x109, 0x37, 0x109, 0x38, 0x109, 0x39, - 0x109, 0x2b, 0x109, 0x2212, 0x109, 0x3d, 0x109, 0x28, - 0x109, 0x29, 0x109, 0x6e, 0x10a, 0x30, 0x10a, 0x31, - 0x10a, 0x32, 0x10a, 0x33, 0x10a, 0x34, 0x10a, 0x35, - 0x10a, 0x36, 0x10a, 0x37, 0x10a, 0x38, 0x10a, 0x39, - 0x10a, 0x2b, 0x10a, 0x2212, 0x10a, 0x3d, 0x10a, 0x28, - 0x10a, 0x29, 0x10a, 0x61, 0x10a, 0x65, 0x10a, 0x6f, - 0x10a, 0x78, 0x10a, 0x259, 0x10a, 0x68, 0x10a, 0x6b, - 0x10a, 0x6c, 0x10a, 0x6d, 0x10a, 0x6e, 0x10a, 0x70, - 0x10a, 0x73, 0x10a, 0x74, 0x210, 0x52, 0x73, 0x310, - 0x61, 0x2f, 0x63, 0x310, 0x61, 0x2f, 0x73, 0x102, - 0x43, 0x210, 0xb0, 0x43, 0x310, 0x63, 0x2f, 0x6f, - 0x310, 0x63, 0x2f, 0x75, 0x110, 0x190, 0x210, 0xb0, - 0x46, 0x102, 0x67, 0x102, 0x48, 0x102, 0x48, 0x102, - 0x48, 0x102, 0x68, 0x102, 0x127, 0x102, 0x49, 0x102, - 0x49, 0x102, 0x4c, 0x102, 0x6c, 0x102, 0x4e, 0x210, - 0x4e, 0x6f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x52, 0x102, 0x52, 0x209, 0x53, 0x4d, 0x310, - 0x54, 0x45, 0x4c, 0x209, 0x54, 0x4d, 0x102, 0x5a, - 0x101, 0x3a9, 0x102, 0x5a, 0x101, 0x4b, 0x101, 0xc5, - 0x102, 0x42, 0x102, 0x43, 0x102, 0x65, 0x102, 0x45, - 0x102, 0x46, 0x102, 0x4d, 0x102, 0x6f, 0x110, 0x5d0, - 0x110, 0x5d1, 0x110, 0x5d2, 0x110, 0x5d3, 0x102, 0x69, - 0x310, 0x46, 0x41, 0x58, 0x102, 0x3c0, 0x102, 0x3b3, - 0x102, 0x393, 0x102, 0x3a0, 0x102, 0x2211, 0x102, 0x44, - 0x102, 0x64, 0x102, 0x65, 0x102, 0x69, 0x102, 0x6a, - 0x311, 0x31, 0x2044, 0x37, 0x311, 0x31, 0x2044, 0x39, - 0x411, 0x31, 0x2044, 0x31, 0x30, 0x311, 0x31, 0x2044, - 0x33, 0x311, 0x32, 0x2044, 0x33, 0x311, 0x31, 0x2044, - 0x35, 0x311, 0x32, 0x2044, 0x35, 0x311, 0x33, 0x2044, - 0x35, 0x311, 0x34, 0x2044, 0x35, 0x311, 0x31, 0x2044, - 0x36, 0x311, 0x35, 0x2044, 0x36, 0x311, 0x31, 0x2044, - 0x38, 0x311, 0x33, 0x2044, 0x38, 0x311, 0x35, 0x2044, - 0x38, 0x311, 0x37, 0x2044, 0x38, 0x211, 0x31, 0x2044, - 0x110, 0x49, 0x210, 0x49, 0x49, 0x310, 0x49, 0x49, - 0x49, 0x210, 0x49, 0x56, 0x110, 0x56, 0x210, 0x56, - 0x49, 0x310, 0x56, 0x49, 0x49, 0x410, 0x56, 0x49, - 0x49, 0x49, 0x210, 0x49, 0x58, 0x110, 0x58, 0x210, - 0x58, 0x49, 0x310, 0x58, 0x49, 0x49, 0x110, 0x4c, - 0x110, 0x43, 0x110, 0x44, 0x110, 0x4d, 0x110, 0x69, - 0x210, 0x69, 0x69, 0x310, 0x69, 0x69, 0x69, 0x210, - 0x69, 0x76, 0x110, 0x76, 0x210, 0x76, 0x69, 0x310, - 0x76, 0x69, 0x69, 0x410, 0x76, 0x69, 0x69, 0x69, - 0x210, 0x69, 0x78, 0x110, 0x78, 0x210, 0x78, 0x69, - 0x310, 0x78, 0x69, 0x69, 0x110, 0x6c, 0x110, 0x63, - 0x110, 0x64, 0x110, 0x6d, 0x311, 0x30, 0x2044, 0x33, - 0x201, 0x2190, 0x338, 0x201, 0x2192, 0x338, 0x201, 0x2194, - 0x338, 0x201, 0x21d0, 0x338, 0x201, 0x21d4, 0x338, 0x201, - 0x21d2, 0x338, 0x201, 0x2203, 0x338, 0x201, 0x2208, 0x338, - 0x201, 0x220b, 0x338, 0x201, 0x2223, 0x338, 0x201, 0x2225, - 0x338, 0x210, 0x222b, 0x222b, 0x310, 0x222b, 0x222b, 0x222b, - 0x210, 0x222e, 0x222e, 0x310, 0x222e, 0x222e, 0x222e, 0x201, - 0x223c, 0x338, 0x201, 0x2243, 0x338, 0x201, 0x2245, 0x338, - 0x201, 0x2248, 0x338, 0x201, 0x3d, 0x338, 0x201, 0x2261, - 0x338, 0x201, 0x224d, 0x338, 0x201, 0x3c, 0x338, 0x201, - 0x3e, 0x338, 0x201, 0x2264, 0x338, 0x201, 0x2265, 0x338, - 0x201, 0x2272, 0x338, 0x201, 0x2273, 0x338, 0x201, 0x2276, - 0x338, 0x201, 0x2277, 0x338, 0x201, 0x227a, 0x338, 0x201, - 0x227b, 0x338, 0x201, 0x2282, 0x338, 0x201, 0x2283, 0x338, - 0x201, 0x2286, 0x338, 0x201, 0x2287, 0x338, 0x201, 0x22a2, - 0x338, 0x201, 0x22a8, 0x338, 0x201, 0x22a9, 0x338, 0x201, - 0x22ab, 0x338, 0x201, 0x227c, 0x338, 0x201, 0x227d, 0x338, - 0x201, 0x2291, 0x338, 0x201, 0x2292, 0x338, 0x201, 0x22b2, - 0x338, 0x201, 0x22b3, 0x338, 0x201, 0x22b4, 0x338, 0x201, - 0x22b5, 0x338, 0x101, 0x3008, 0x101, 0x3009, 0x108, 0x31, - 0x108, 0x32, 0x108, 0x33, 0x108, 0x34, 0x108, 0x35, - 0x108, 0x36, 0x108, 0x37, 0x108, 0x38, 0x108, 0x39, - 0x208, 0x31, 0x30, 0x208, 0x31, 0x31, 0x208, 0x31, - 0x32, 0x208, 0x31, 0x33, 0x208, 0x31, 0x34, 0x208, - 0x31, 0x35, 0x208, 0x31, 0x36, 0x208, 0x31, 0x37, - 0x208, 0x31, 0x38, 0x208, 0x31, 0x39, 0x208, 0x32, - 0x30, 0x310, 0x28, 0x31, 0x29, 0x310, 0x28, 0x32, - 0x29, 0x310, 0x28, 0x33, 0x29, 0x310, 0x28, 0x34, - 0x29, 0x310, 0x28, 0x35, 0x29, 0x310, 0x28, 0x36, - 0x29, 0x310, 0x28, 0x37, 0x29, 0x310, 0x28, 0x38, - 0x29, 0x310, 0x28, 0x39, 0x29, 0x410, 0x28, 0x31, - 0x30, 0x29, 0x410, 0x28, 0x31, 0x31, 0x29, 0x410, - 0x28, 0x31, 0x32, 0x29, 0x410, 0x28, 0x31, 0x33, - 0x29, 0x410, 0x28, 0x31, 0x34, 0x29, 0x410, 0x28, - 0x31, 0x35, 0x29, 0x410, 0x28, 0x31, 0x36, 0x29, - 0x410, 0x28, 0x31, 0x37, 0x29, 0x410, 0x28, 0x31, - 0x38, 0x29, 0x410, 0x28, 0x31, 0x39, 0x29, 0x410, - 0x28, 0x32, 0x30, 0x29, 0x210, 0x31, 0x2e, 0x210, - 0x32, 0x2e, 0x210, 0x33, 0x2e, 0x210, 0x34, 0x2e, - 0x210, 0x35, 0x2e, 0x210, 0x36, 0x2e, 0x210, 0x37, - 0x2e, 0x210, 0x38, 0x2e, 0x210, 0x39, 0x2e, 0x310, - 0x31, 0x30, 0x2e, 0x310, 0x31, 0x31, 0x2e, 0x310, - 0x31, 0x32, 0x2e, 0x310, 0x31, 0x33, 0x2e, 0x310, - 0x31, 0x34, 0x2e, 0x310, 0x31, 0x35, 0x2e, 0x310, - 0x31, 0x36, 0x2e, 0x310, 0x31, 0x37, 0x2e, 0x310, - 0x31, 0x38, 0x2e, 0x310, 0x31, 0x39, 0x2e, 0x310, - 0x32, 0x30, 0x2e, 0x310, 0x28, 0x61, 0x29, 0x310, - 0x28, 0x62, 0x29, 0x310, 0x28, 0x63, 0x29, 0x310, - 0x28, 0x64, 0x29, 0x310, 0x28, 0x65, 0x29, 0x310, - 0x28, 0x66, 0x29, 0x310, 0x28, 0x67, 0x29, 0x310, - 0x28, 0x68, 0x29, 0x310, 0x28, 0x69, 0x29, 0x310, - 0x28, 0x6a, 0x29, 0x310, 0x28, 0x6b, 0x29, 0x310, - 0x28, 0x6c, 0x29, 0x310, 0x28, 0x6d, 0x29, 0x310, - 0x28, 0x6e, 0x29, 0x310, 0x28, 0x6f, 0x29, 0x310, - 0x28, 0x70, 0x29, 0x310, 0x28, 0x71, 0x29, 0x310, - 0x28, 0x72, 0x29, 0x310, 0x28, 0x73, 0x29, 0x310, - 0x28, 0x74, 0x29, 0x310, 0x28, 0x75, 0x29, 0x310, - 0x28, 0x76, 0x29, 0x310, 0x28, 0x77, 0x29, 0x310, - 0x28, 0x78, 0x29, 0x310, 0x28, 0x79, 0x29, 0x310, - 0x28, 0x7a, 0x29, 0x108, 0x41, 0x108, 0x42, 0x108, - 0x43, 0x108, 0x44, 0x108, 0x45, 0x108, 0x46, 0x108, - 0x47, 0x108, 0x48, 0x108, 0x49, 0x108, 0x4a, 0x108, - 0x4b, 0x108, 0x4c, 0x108, 0x4d, 0x108, 0x4e, 0x108, - 0x4f, 0x108, 0x50, 0x108, 0x51, 0x108, 0x52, 0x108, - 0x53, 0x108, 0x54, 0x108, 0x55, 0x108, 0x56, 0x108, - 0x57, 0x108, 0x58, 0x108, 0x59, 0x108, 0x5a, 0x108, - 0x61, 0x108, 0x62, 0x108, 0x63, 0x108, 0x64, 0x108, - 0x65, 0x108, 0x66, 0x108, 0x67, 0x108, 0x68, 0x108, - 0x69, 0x108, 0x6a, 0x108, 0x6b, 0x108, 0x6c, 0x108, - 0x6d, 0x108, 0x6e, 0x108, 0x6f, 0x108, 0x70, 0x108, - 0x71, 0x108, 0x72, 0x108, 0x73, 0x108, 0x74, 0x108, - 0x75, 0x108, 0x76, 0x108, 0x77, 0x108, 0x78, 0x108, - 0x79, 0x108, 0x7a, 0x108, 0x30, 0x410, 0x222b, 0x222b, - 0x222b, 0x222b, 0x310, 0x3a, 0x3a, 0x3d, 0x210, 0x3d, - 0x3d, 0x310, 0x3d, 0x3d, 0x3d, 0x201, 0x2add, 0x338, - 0x10a, 0x6a, 0x109, 0x56, 0x109, 0x2d61, 0x110, 0x6bcd, - 0x110, 0x9f9f, 0x110, 0x4e00, 0x110, 0x4e28, 0x110, 0x4e36, - 0x110, 0x4e3f, 0x110, 0x4e59, 0x110, 0x4e85, 0x110, 0x4e8c, - 0x110, 0x4ea0, 0x110, 0x4eba, 0x110, 0x513f, 0x110, 0x5165, - 0x110, 0x516b, 0x110, 0x5182, 0x110, 0x5196, 0x110, 0x51ab, - 0x110, 0x51e0, 0x110, 0x51f5, 0x110, 0x5200, 0x110, 0x529b, - 0x110, 0x52f9, 0x110, 0x5315, 0x110, 0x531a, 0x110, 0x5338, - 0x110, 0x5341, 0x110, 0x535c, 0x110, 0x5369, 0x110, 0x5382, - 0x110, 0x53b6, 0x110, 0x53c8, 0x110, 0x53e3, 0x110, 0x56d7, - 0x110, 0x571f, 0x110, 0x58eb, 0x110, 0x5902, 0x110, 0x590a, - 0x110, 0x5915, 0x110, 0x5927, 0x110, 0x5973, 0x110, 0x5b50, - 0x110, 0x5b80, 0x110, 0x5bf8, 0x110, 0x5c0f, 0x110, 0x5c22, - 0x110, 0x5c38, 0x110, 0x5c6e, 0x110, 0x5c71, 0x110, 0x5ddb, - 0x110, 0x5de5, 0x110, 0x5df1, 0x110, 0x5dfe, 0x110, 0x5e72, - 0x110, 0x5e7a, 0x110, 0x5e7f, 0x110, 0x5ef4, 0x110, 0x5efe, - 0x110, 0x5f0b, 0x110, 0x5f13, 0x110, 0x5f50, 0x110, 0x5f61, - 0x110, 0x5f73, 0x110, 0x5fc3, 0x110, 0x6208, 0x110, 0x6236, - 0x110, 0x624b, 0x110, 0x652f, 0x110, 0x6534, 0x110, 0x6587, - 0x110, 0x6597, 0x110, 0x65a4, 0x110, 0x65b9, 0x110, 0x65e0, - 0x110, 0x65e5, 0x110, 0x66f0, 0x110, 0x6708, 0x110, 0x6728, - 0x110, 0x6b20, 0x110, 0x6b62, 0x110, 0x6b79, 0x110, 0x6bb3, - 0x110, 0x6bcb, 0x110, 0x6bd4, 0x110, 0x6bdb, 0x110, 0x6c0f, - 0x110, 0x6c14, 0x110, 0x6c34, 0x110, 0x706b, 0x110, 0x722a, - 0x110, 0x7236, 0x110, 0x723b, 0x110, 0x723f, 0x110, 0x7247, - 0x110, 0x7259, 0x110, 0x725b, 0x110, 0x72ac, 0x110, 0x7384, - 0x110, 0x7389, 0x110, 0x74dc, 0x110, 0x74e6, 0x110, 0x7518, - 0x110, 0x751f, 0x110, 0x7528, 0x110, 0x7530, 0x110, 0x758b, - 0x110, 0x7592, 0x110, 0x7676, 0x110, 0x767d, 0x110, 0x76ae, - 0x110, 0x76bf, 0x110, 0x76ee, 0x110, 0x77db, 0x110, 0x77e2, - 0x110, 0x77f3, 0x110, 0x793a, 0x110, 0x79b8, 0x110, 0x79be, - 0x110, 0x7a74, 0x110, 0x7acb, 0x110, 0x7af9, 0x110, 0x7c73, - 0x110, 0x7cf8, 0x110, 0x7f36, 0x110, 0x7f51, 0x110, 0x7f8a, - 0x110, 0x7fbd, 0x110, 0x8001, 0x110, 0x800c, 0x110, 0x8012, - 0x110, 0x8033, 0x110, 0x807f, 0x110, 0x8089, 0x110, 0x81e3, - 0x110, 0x81ea, 0x110, 0x81f3, 0x110, 0x81fc, 0x110, 0x820c, - 0x110, 0x821b, 0x110, 0x821f, 0x110, 0x826e, 0x110, 0x8272, - 0x110, 0x8278, 0x110, 0x864d, 0x110, 0x866b, 0x110, 0x8840, - 0x110, 0x884c, 0x110, 0x8863, 0x110, 0x897e, 0x110, 0x898b, - 0x110, 0x89d2, 0x110, 0x8a00, 0x110, 0x8c37, 0x110, 0x8c46, - 0x110, 0x8c55, 0x110, 0x8c78, 0x110, 0x8c9d, 0x110, 0x8d64, - 0x110, 0x8d70, 0x110, 0x8db3, 0x110, 0x8eab, 0x110, 0x8eca, - 0x110, 0x8f9b, 0x110, 0x8fb0, 0x110, 0x8fb5, 0x110, 0x9091, - 0x110, 0x9149, 0x110, 0x91c6, 0x110, 0x91cc, 0x110, 0x91d1, - 0x110, 0x9577, 0x110, 0x9580, 0x110, 0x961c, 0x110, 0x96b6, - 0x110, 0x96b9, 0x110, 0x96e8, 0x110, 0x9751, 0x110, 0x975e, - 0x110, 0x9762, 0x110, 0x9769, 0x110, 0x97cb, 0x110, 0x97ed, - 0x110, 0x97f3, 0x110, 0x9801, 0x110, 0x98a8, 0x110, 0x98db, - 0x110, 0x98df, 0x110, 0x9996, 0x110, 0x9999, 0x110, 0x99ac, - 0x110, 0x9aa8, 0x110, 0x9ad8, 0x110, 0x9adf, 0x110, 0x9b25, - 0x110, 0x9b2f, 0x110, 0x9b32, 0x110, 0x9b3c, 0x110, 0x9b5a, - 0x110, 0x9ce5, 0x110, 0x9e75, 0x110, 0x9e7f, 0x110, 0x9ea5, - 0x110, 0x9ebb, 0x110, 0x9ec3, 0x110, 0x9ecd, 0x110, 0x9ed1, - 0x110, 0x9ef9, 0x110, 0x9efd, 0x110, 0x9f0e, 0x110, 0x9f13, - 0x110, 0x9f20, 0x110, 0x9f3b, 0x110, 0x9f4a, 0x110, 0x9f52, - 0x110, 0x9f8d, 0x110, 0x9f9c, 0x110, 0x9fa0, 0x10c, 0x20, - 0x110, 0x3012, 0x110, 0x5341, 0x110, 0x5344, 0x110, 0x5345, - 0x201, 0x304b, 0x3099, 0x201, 0x304d, 0x3099, 0x201, 0x304f, - 0x3099, 0x201, 0x3051, 0x3099, 0x201, 0x3053, 0x3099, 0x201, - 0x3055, 0x3099, 0x201, 0x3057, 0x3099, 0x201, 0x3059, 0x3099, - 0x201, 0x305b, 0x3099, 0x201, 0x305d, 0x3099, 0x201, 0x305f, - 0x3099, 0x201, 0x3061, 0x3099, 0x201, 0x3064, 0x3099, 0x201, - 0x3066, 0x3099, 0x201, 0x3068, 0x3099, 0x201, 0x306f, 0x3099, - 0x201, 0x306f, 0x309a, 0x201, 0x3072, 0x3099, 0x201, 0x3072, - 0x309a, 0x201, 0x3075, 0x3099, 0x201, 0x3075, 0x309a, 0x201, - 0x3078, 0x3099, 0x201, 0x3078, 0x309a, 0x201, 0x307b, 0x3099, - 0x201, 0x307b, 0x309a, 0x201, 0x3046, 0x3099, 0x210, 0x20, - 0x3099, 0x210, 0x20, 0x309a, 0x201, 0x309d, 0x3099, 0x20b, - 0x3088, 0x308a, 0x201, 0x30ab, 0x3099, 0x201, 0x30ad, 0x3099, - 0x201, 0x30af, 0x3099, 0x201, 0x30b1, 0x3099, 0x201, 0x30b3, - 0x3099, 0x201, 0x30b5, 0x3099, 0x201, 0x30b7, 0x3099, 0x201, - 0x30b9, 0x3099, 0x201, 0x30bb, 0x3099, 0x201, 0x30bd, 0x3099, - 0x201, 0x30bf, 0x3099, 0x201, 0x30c1, 0x3099, 0x201, 0x30c4, - 0x3099, 0x201, 0x30c6, 0x3099, 0x201, 0x30c8, 0x3099, 0x201, - 0x30cf, 0x3099, 0x201, 0x30cf, 0x309a, 0x201, 0x30d2, 0x3099, - 0x201, 0x30d2, 0x309a, 0x201, 0x30d5, 0x3099, 0x201, 0x30d5, - 0x309a, 0x201, 0x30d8, 0x3099, 0x201, 0x30d8, 0x309a, 0x201, - 0x30db, 0x3099, 0x201, 0x30db, 0x309a, 0x201, 0x30a6, 0x3099, - 0x201, 0x30ef, 0x3099, 0x201, 0x30f0, 0x3099, 0x201, 0x30f1, - 0x3099, 0x201, 0x30f2, 0x3099, 0x201, 0x30fd, 0x3099, 0x20b, - 0x30b3, 0x30c8, 0x110, 0x1100, 0x110, 0x1101, 0x110, 0x11aa, - 0x110, 0x1102, 0x110, 0x11ac, 0x110, 0x11ad, 0x110, 0x1103, - 0x110, 0x1104, 0x110, 0x1105, 0x110, 0x11b0, 0x110, 0x11b1, - 0x110, 0x11b2, 0x110, 0x11b3, 0x110, 0x11b4, 0x110, 0x11b5, - 0x110, 0x111a, 0x110, 0x1106, 0x110, 0x1107, 0x110, 0x1108, - 0x110, 0x1121, 0x110, 0x1109, 0x110, 0x110a, 0x110, 0x110b, - 0x110, 0x110c, 0x110, 0x110d, 0x110, 0x110e, 0x110, 0x110f, - 0x110, 0x1110, 0x110, 0x1111, 0x110, 0x1112, 0x110, 0x1161, - 0x110, 0x1162, 0x110, 0x1163, 0x110, 0x1164, 0x110, 0x1165, - 0x110, 0x1166, 0x110, 0x1167, 0x110, 0x1168, 0x110, 0x1169, - 0x110, 0x116a, 0x110, 0x116b, 0x110, 0x116c, 0x110, 0x116d, - 0x110, 0x116e, 0x110, 0x116f, 0x110, 0x1170, 0x110, 0x1171, - 0x110, 0x1172, 0x110, 0x1173, 0x110, 0x1174, 0x110, 0x1175, - 0x110, 0x1160, 0x110, 0x1114, 0x110, 0x1115, 0x110, 0x11c7, - 0x110, 0x11c8, 0x110, 0x11cc, 0x110, 0x11ce, 0x110, 0x11d3, - 0x110, 0x11d7, 0x110, 0x11d9, 0x110, 0x111c, 0x110, 0x11dd, - 0x110, 0x11df, 0x110, 0x111d, 0x110, 0x111e, 0x110, 0x1120, - 0x110, 0x1122, 0x110, 0x1123, 0x110, 0x1127, 0x110, 0x1129, - 0x110, 0x112b, 0x110, 0x112c, 0x110, 0x112d, 0x110, 0x112e, - 0x110, 0x112f, 0x110, 0x1132, 0x110, 0x1136, 0x110, 0x1140, - 0x110, 0x1147, 0x110, 0x114c, 0x110, 0x11f1, 0x110, 0x11f2, - 0x110, 0x1157, 0x110, 0x1158, 0x110, 0x1159, 0x110, 0x1184, - 0x110, 0x1185, 0x110, 0x1188, 0x110, 0x1191, 0x110, 0x1192, - 0x110, 0x1194, 0x110, 0x119e, 0x110, 0x11a1, 0x109, 0x4e00, - 0x109, 0x4e8c, 0x109, 0x4e09, 0x109, 0x56db, 0x109, 0x4e0a, - 0x109, 0x4e2d, 0x109, 0x4e0b, 0x109, 0x7532, 0x109, 0x4e59, - 0x109, 0x4e19, 0x109, 0x4e01, 0x109, 0x5929, 0x109, 0x5730, - 0x109, 0x4eba, 0x310, 0x28, 0x1100, 0x29, 0x310, 0x28, - 0x1102, 0x29, 0x310, 0x28, 0x1103, 0x29, 0x310, 0x28, - 0x1105, 0x29, 0x310, 0x28, 0x1106, 0x29, 0x310, 0x28, - 0x1107, 0x29, 0x310, 0x28, 0x1109, 0x29, 0x310, 0x28, - 0x110b, 0x29, 0x310, 0x28, 0x110c, 0x29, 0x310, 0x28, - 0x110e, 0x29, 0x310, 0x28, 0x110f, 0x29, 0x310, 0x28, - 0x1110, 0x29, 0x310, 0x28, 0x1111, 0x29, 0x310, 0x28, - 0x1112, 0x29, 0x410, 0x28, 0x1100, 0x1161, 0x29, 0x410, - 0x28, 0x1102, 0x1161, 0x29, 0x410, 0x28, 0x1103, 0x1161, - 0x29, 0x410, 0x28, 0x1105, 0x1161, 0x29, 0x410, 0x28, - 0x1106, 0x1161, 0x29, 0x410, 0x28, 0x1107, 0x1161, 0x29, - 0x410, 0x28, 0x1109, 0x1161, 0x29, 0x410, 0x28, 0x110b, - 0x1161, 0x29, 0x410, 0x28, 0x110c, 0x1161, 0x29, 0x410, - 0x28, 0x110e, 0x1161, 0x29, 0x410, 0x28, 0x110f, 0x1161, - 0x29, 0x410, 0x28, 0x1110, 0x1161, 0x29, 0x410, 0x28, - 0x1111, 0x1161, 0x29, 0x410, 0x28, 0x1112, 0x1161, 0x29, - 0x410, 0x28, 0x110c, 0x116e, 0x29, 0x710, 0x28, 0x110b, - 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x610, 0x28, 0x110b, - 0x1169, 0x1112, 0x116e, 0x29, 0x310, 0x28, 0x4e00, 0x29, - 0x310, 0x28, 0x4e8c, 0x29, 0x310, 0x28, 0x4e09, 0x29, - 0x310, 0x28, 0x56db, 0x29, 0x310, 0x28, 0x4e94, 0x29, - 0x310, 0x28, 0x516d, 0x29, 0x310, 0x28, 0x4e03, 0x29, - 0x310, 0x28, 0x516b, 0x29, 0x310, 0x28, 0x4e5d, 0x29, - 0x310, 0x28, 0x5341, 0x29, 0x310, 0x28, 0x6708, 0x29, - 0x310, 0x28, 0x706b, 0x29, 0x310, 0x28, 0x6c34, 0x29, - 0x310, 0x28, 0x6728, 0x29, 0x310, 0x28, 0x91d1, 0x29, - 0x310, 0x28, 0x571f, 0x29, 0x310, 0x28, 0x65e5, 0x29, - 0x310, 0x28, 0x682a, 0x29, 0x310, 0x28, 0x6709, 0x29, - 0x310, 0x28, 0x793e, 0x29, 0x310, 0x28, 0x540d, 0x29, - 0x310, 0x28, 0x7279, 0x29, 0x310, 0x28, 0x8ca1, 0x29, - 0x310, 0x28, 0x795d, 0x29, 0x310, 0x28, 0x52b4, 0x29, - 0x310, 0x28, 0x4ee3, 0x29, 0x310, 0x28, 0x547c, 0x29, - 0x310, 0x28, 0x5b66, 0x29, 0x310, 0x28, 0x76e3, 0x29, - 0x310, 0x28, 0x4f01, 0x29, 0x310, 0x28, 0x8cc7, 0x29, - 0x310, 0x28, 0x5354, 0x29, 0x310, 0x28, 0x796d, 0x29, - 0x310, 0x28, 0x4f11, 0x29, 0x310, 0x28, 0x81ea, 0x29, - 0x310, 0x28, 0x81f3, 0x29, 0x108, 0x554f, 0x108, 0x5e7c, - 0x108, 0x6587, 0x108, 0x7b8f, 0x30f, 0x50, 0x54, 0x45, - 0x208, 0x32, 0x31, 0x208, 0x32, 0x32, 0x208, 0x32, - 0x33, 0x208, 0x32, 0x34, 0x208, 0x32, 0x35, 0x208, - 0x32, 0x36, 0x208, 0x32, 0x37, 0x208, 0x32, 0x38, - 0x208, 0x32, 0x39, 0x208, 0x33, 0x30, 0x208, 0x33, - 0x31, 0x208, 0x33, 0x32, 0x208, 0x33, 0x33, 0x208, - 0x33, 0x34, 0x208, 0x33, 0x35, 0x108, 0x1100, 0x108, - 0x1102, 0x108, 0x1103, 0x108, 0x1105, 0x108, 0x1106, 0x108, - 0x1107, 0x108, 0x1109, 0x108, 0x110b, 0x108, 0x110c, 0x108, - 0x110e, 0x108, 0x110f, 0x108, 0x1110, 0x108, 0x1111, 0x108, - 0x1112, 0x208, 0x1100, 0x1161, 0x208, 0x1102, 0x1161, 0x208, - 0x1103, 0x1161, 0x208, 0x1105, 0x1161, 0x208, 0x1106, 0x1161, - 0x208, 0x1107, 0x1161, 0x208, 0x1109, 0x1161, 0x208, 0x110b, - 0x1161, 0x208, 0x110c, 0x1161, 0x208, 0x110e, 0x1161, 0x208, - 0x110f, 0x1161, 0x208, 0x1110, 0x1161, 0x208, 0x1111, 0x1161, - 0x208, 0x1112, 0x1161, 0x508, 0x110e, 0x1161, 0x11b7, 0x1100, - 0x1169, 0x408, 0x110c, 0x116e, 0x110b, 0x1174, 0x208, 0x110b, - 0x116e, 0x108, 0x4e00, 0x108, 0x4e8c, 0x108, 0x4e09, 0x108, - 0x56db, 0x108, 0x4e94, 0x108, 0x516d, 0x108, 0x4e03, 0x108, - 0x516b, 0x108, 0x4e5d, 0x108, 0x5341, 0x108, 0x6708, 0x108, - 0x706b, 0x108, 0x6c34, 0x108, 0x6728, 0x108, 0x91d1, 0x108, - 0x571f, 0x108, 0x65e5, 0x108, 0x682a, 0x108, 0x6709, 0x108, - 0x793e, 0x108, 0x540d, 0x108, 0x7279, 0x108, 0x8ca1, 0x108, - 0x795d, 0x108, 0x52b4, 0x108, 0x79d8, 0x108, 0x7537, 0x108, - 0x5973, 0x108, 0x9069, 0x108, 0x512a, 0x108, 0x5370, 0x108, - 0x6ce8, 0x108, 0x9805, 0x108, 0x4f11, 0x108, 0x5199, 0x108, - 0x6b63, 0x108, 0x4e0a, 0x108, 0x4e2d, 0x108, 0x4e0b, 0x108, - 0x5de6, 0x108, 0x53f3, 0x108, 0x533b, 0x108, 0x5b97, 0x108, - 0x5b66, 0x108, 0x76e3, 0x108, 0x4f01, 0x108, 0x8cc7, 0x108, - 0x5354, 0x108, 0x591c, 0x208, 0x33, 0x36, 0x208, 0x33, - 0x37, 0x208, 0x33, 0x38, 0x208, 0x33, 0x39, 0x208, - 0x34, 0x30, 0x208, 0x34, 0x31, 0x208, 0x34, 0x32, - 0x208, 0x34, 0x33, 0x208, 0x34, 0x34, 0x208, 0x34, - 0x35, 0x208, 0x34, 0x36, 0x208, 0x34, 0x37, 0x208, - 0x34, 0x38, 0x208, 0x34, 0x39, 0x208, 0x35, 0x30, - 0x210, 0x31, 0x6708, 0x210, 0x32, 0x6708, 0x210, 0x33, - 0x6708, 0x210, 0x34, 0x6708, 0x210, 0x35, 0x6708, 0x210, - 0x36, 0x6708, 0x210, 0x37, 0x6708, 0x210, 0x38, 0x6708, - 0x210, 0x39, 0x6708, 0x310, 0x31, 0x30, 0x6708, 0x310, - 0x31, 0x31, 0x6708, 0x310, 0x31, 0x32, 0x6708, 0x20f, - 0x48, 0x67, 0x30f, 0x65, 0x72, 0x67, 0x20f, 0x65, - 0x56, 0x30f, 0x4c, 0x54, 0x44, 0x108, 0x30a2, 0x108, - 0x30a4, 0x108, 0x30a6, 0x108, 0x30a8, 0x108, 0x30aa, 0x108, - 0x30ab, 0x108, 0x30ad, 0x108, 0x30af, 0x108, 0x30b1, 0x108, - 0x30b3, 0x108, 0x30b5, 0x108, 0x30b7, 0x108, 0x30b9, 0x108, - 0x30bb, 0x108, 0x30bd, 0x108, 0x30bf, 0x108, 0x30c1, 0x108, - 0x30c4, 0x108, 0x30c6, 0x108, 0x30c8, 0x108, 0x30ca, 0x108, - 0x30cb, 0x108, 0x30cc, 0x108, 0x30cd, 0x108, 0x30ce, 0x108, - 0x30cf, 0x108, 0x30d2, 0x108, 0x30d5, 0x108, 0x30d8, 0x108, - 0x30db, 0x108, 0x30de, 0x108, 0x30df, 0x108, 0x30e0, 0x108, - 0x30e1, 0x108, 0x30e2, 0x108, 0x30e4, 0x108, 0x30e6, 0x108, - 0x30e8, 0x108, 0x30e9, 0x108, 0x30ea, 0x108, 0x30eb, 0x108, - 0x30ec, 0x108, 0x30ed, 0x108, 0x30ef, 0x108, 0x30f0, 0x108, - 0x30f1, 0x108, 0x30f2, 0x40f, 0x30a2, 0x30d1, 0x30fc, 0x30c8, - 0x40f, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x40f, 0x30a2, 0x30f3, - 0x30da, 0x30a2, 0x30f, 0x30a2, 0x30fc, 0x30eb, 0x40f, 0x30a4, - 0x30cb, 0x30f3, 0x30b0, 0x30f, 0x30a4, 0x30f3, 0x30c1, 0x30f, - 0x30a6, 0x30a9, 0x30f3, 0x50f, 0x30a8, 0x30b9, 0x30af, 0x30fc, - 0x30c9, 0x40f, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x30f, 0x30aa, - 0x30f3, 0x30b9, 0x30f, 0x30aa, 0x30fc, 0x30e0, 0x30f, 0x30ab, - 0x30a4, 0x30ea, 0x40f, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x40f, - 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30f, 0x30ac, 0x30ed, 0x30f3, - 0x30f, 0x30ac, 0x30f3, 0x30de, 0x20f, 0x30ae, 0x30ac, 0x30f, - 0x30ae, 0x30cb, 0x30fc, 0x40f, 0x30ad, 0x30e5, 0x30ea, 0x30fc, - 0x40f, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x20f, 0x30ad, 0x30ed, - 0x50f, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x60f, 0x30ad, - 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x50f, 0x30ad, 0x30ed, - 0x30ef, 0x30c3, 0x30c8, 0x30f, 0x30b0, 0x30e9, 0x30e0, 0x50f, - 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x50f, 0x30af, 0x30eb, - 0x30bc, 0x30a4, 0x30ed, 0x40f, 0x30af, 0x30ed, 0x30fc, 0x30cd, - 0x30f, 0x30b1, 0x30fc, 0x30b9, 0x30f, 0x30b3, 0x30eb, 0x30ca, - 0x30f, 0x30b3, 0x30fc, 0x30dd, 0x40f, 0x30b5, 0x30a4, 0x30af, - 0x30eb, 0x50f, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x40f, - 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30f, 0x30bb, 0x30f3, 0x30c1, - 0x30f, 0x30bb, 0x30f3, 0x30c8, 0x30f, 0x30c0, 0x30fc, 0x30b9, - 0x20f, 0x30c7, 0x30b7, 0x20f, 0x30c9, 0x30eb, 0x20f, 0x30c8, - 0x30f3, 0x20f, 0x30ca, 0x30ce, 0x30f, 0x30ce, 0x30c3, 0x30c8, - 0x30f, 0x30cf, 0x30a4, 0x30c4, 0x50f, 0x30d1, 0x30fc, 0x30bb, - 0x30f3, 0x30c8, 0x30f, 0x30d1, 0x30fc, 0x30c4, 0x40f, 0x30d0, - 0x30fc, 0x30ec, 0x30eb, 0x50f, 0x30d4, 0x30a2, 0x30b9, 0x30c8, - 0x30eb, 0x30f, 0x30d4, 0x30af, 0x30eb, 0x20f, 0x30d4, 0x30b3, - 0x20f, 0x30d3, 0x30eb, 0x50f, 0x30d5, 0x30a1, 0x30e9, 0x30c3, - 0x30c9, 0x40f, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x50f, 0x30d6, - 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30f, 0x30d5, 0x30e9, 0x30f3, - 0x50f, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x20f, 0x30da, - 0x30bd, 0x30f, 0x30da, 0x30cb, 0x30d2, 0x30f, 0x30d8, 0x30eb, - 0x30c4, 0x30f, 0x30da, 0x30f3, 0x30b9, 0x30f, 0x30da, 0x30fc, - 0x30b8, 0x30f, 0x30d9, 0x30fc, 0x30bf, 0x40f, 0x30dd, 0x30a4, - 0x30f3, 0x30c8, 0x30f, 0x30dc, 0x30eb, 0x30c8, 0x20f, 0x30db, - 0x30f3, 0x30f, 0x30dd, 0x30f3, 0x30c9, 0x30f, 0x30db, 0x30fc, - 0x30eb, 0x30f, 0x30db, 0x30fc, 0x30f3, 0x40f, 0x30de, 0x30a4, - 0x30af, 0x30ed, 0x30f, 0x30de, 0x30a4, 0x30eb, 0x30f, 0x30de, - 0x30c3, 0x30cf, 0x30f, 0x30de, 0x30eb, 0x30af, 0x50f, 0x30de, - 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x40f, 0x30df, 0x30af, 0x30ed, - 0x30f3, 0x20f, 0x30df, 0x30ea, 0x50f, 0x30df, 0x30ea, 0x30d0, - 0x30fc, 0x30eb, 0x20f, 0x30e1, 0x30ac, 0x40f, 0x30e1, 0x30ac, - 0x30c8, 0x30f3, 0x40f, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30f, - 0x30e4, 0x30fc, 0x30c9, 0x30f, 0x30e4, 0x30fc, 0x30eb, 0x30f, - 0x30e6, 0x30a2, 0x30f3, 0x40f, 0x30ea, 0x30c3, 0x30c8, 0x30eb, - 0x20f, 0x30ea, 0x30e9, 0x30f, 0x30eb, 0x30d4, 0x30fc, 0x40f, - 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x20f, 0x30ec, 0x30e0, 0x50f, - 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30f, 0x30ef, 0x30c3, - 0x30c8, 0x210, 0x30, 0x70b9, 0x210, 0x31, 0x70b9, 0x210, - 0x32, 0x70b9, 0x210, 0x33, 0x70b9, 0x210, 0x34, 0x70b9, - 0x210, 0x35, 0x70b9, 0x210, 0x36, 0x70b9, 0x210, 0x37, - 0x70b9, 0x210, 0x38, 0x70b9, 0x210, 0x39, 0x70b9, 0x310, - 0x31, 0x30, 0x70b9, 0x310, 0x31, 0x31, 0x70b9, 0x310, - 0x31, 0x32, 0x70b9, 0x310, 0x31, 0x33, 0x70b9, 0x310, - 0x31, 0x34, 0x70b9, 0x310, 0x31, 0x35, 0x70b9, 0x310, - 0x31, 0x36, 0x70b9, 0x310, 0x31, 0x37, 0x70b9, 0x310, - 0x31, 0x38, 0x70b9, 0x310, 0x31, 0x39, 0x70b9, 0x310, - 0x32, 0x30, 0x70b9, 0x310, 0x32, 0x31, 0x70b9, 0x310, - 0x32, 0x32, 0x70b9, 0x310, 0x32, 0x33, 0x70b9, 0x310, - 0x32, 0x34, 0x70b9, 0x30f, 0x68, 0x50, 0x61, 0x20f, - 0x64, 0x61, 0x20f, 0x41, 0x55, 0x30f, 0x62, 0x61, - 0x72, 0x20f, 0x6f, 0x56, 0x20f, 0x70, 0x63, 0x20f, - 0x64, 0x6d, 0x30f, 0x64, 0x6d, 0xb2, 0x30f, 0x64, - 0x6d, 0xb3, 0x20f, 0x49, 0x55, 0x20f, 0x5e73, 0x6210, - 0x20f, 0x662d, 0x548c, 0x20f, 0x5927, 0x6b63, 0x20f, 0x660e, - 0x6cbb, 0x40f, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x20f, 0x70, - 0x41, 0x20f, 0x6e, 0x41, 0x20f, 0x3bc, 0x41, 0x20f, - 0x6d, 0x41, 0x20f, 0x6b, 0x41, 0x20f, 0x4b, 0x42, - 0x20f, 0x4d, 0x42, 0x20f, 0x47, 0x42, 0x30f, 0x63, - 0x61, 0x6c, 0x40f, 0x6b, 0x63, 0x61, 0x6c, 0x20f, - 0x70, 0x46, 0x20f, 0x6e, 0x46, 0x20f, 0x3bc, 0x46, - 0x20f, 0x3bc, 0x67, 0x20f, 0x6d, 0x67, 0x20f, 0x6b, - 0x67, 0x20f, 0x48, 0x7a, 0x30f, 0x6b, 0x48, 0x7a, - 0x30f, 0x4d, 0x48, 0x7a, 0x30f, 0x47, 0x48, 0x7a, - 0x30f, 0x54, 0x48, 0x7a, 0x20f, 0x3bc, 0x2113, 0x20f, - 0x6d, 0x2113, 0x20f, 0x64, 0x2113, 0x20f, 0x6b, 0x2113, - 0x20f, 0x66, 0x6d, 0x20f, 0x6e, 0x6d, 0x20f, 0x3bc, - 0x6d, 0x20f, 0x6d, 0x6d, 0x20f, 0x63, 0x6d, 0x20f, - 0x6b, 0x6d, 0x30f, 0x6d, 0x6d, 0xb2, 0x30f, 0x63, - 0x6d, 0xb2, 0x20f, 0x6d, 0xb2, 0x30f, 0x6b, 0x6d, - 0xb2, 0x30f, 0x6d, 0x6d, 0xb3, 0x30f, 0x63, 0x6d, - 0xb3, 0x20f, 0x6d, 0xb3, 0x30f, 0x6b, 0x6d, 0xb3, - 0x30f, 0x6d, 0x2215, 0x73, 0x40f, 0x6d, 0x2215, 0x73, - 0xb2, 0x20f, 0x50, 0x61, 0x30f, 0x6b, 0x50, 0x61, - 0x30f, 0x4d, 0x50, 0x61, 0x30f, 0x47, 0x50, 0x61, - 0x30f, 0x72, 0x61, 0x64, 0x50f, 0x72, 0x61, 0x64, - 0x2215, 0x73, 0x60f, 0x72, 0x61, 0x64, 0x2215, 0x73, - 0xb2, 0x20f, 0x70, 0x73, 0x20f, 0x6e, 0x73, 0x20f, - 0x3bc, 0x73, 0x20f, 0x6d, 0x73, 0x20f, 0x70, 0x56, - 0x20f, 0x6e, 0x56, 0x20f, 0x3bc, 0x56, 0x20f, 0x6d, - 0x56, 0x20f, 0x6b, 0x56, 0x20f, 0x4d, 0x56, 0x20f, - 0x70, 0x57, 0x20f, 0x6e, 0x57, 0x20f, 0x3bc, 0x57, - 0x20f, 0x6d, 0x57, 0x20f, 0x6b, 0x57, 0x20f, 0x4d, - 0x57, 0x20f, 0x6b, 0x3a9, 0x20f, 0x4d, 0x3a9, 0x40f, - 0x61, 0x2e, 0x6d, 0x2e, 0x20f, 0x42, 0x71, 0x20f, - 0x63, 0x63, 0x20f, 0x63, 0x64, 0x40f, 0x43, 0x2215, - 0x6b, 0x67, 0x30f, 0x43, 0x6f, 0x2e, 0x20f, 0x64, - 0x42, 0x20f, 0x47, 0x79, 0x20f, 0x68, 0x61, 0x20f, - 0x48, 0x50, 0x20f, 0x69, 0x6e, 0x20f, 0x4b, 0x4b, - 0x20f, 0x4b, 0x4d, 0x20f, 0x6b, 0x74, 0x20f, 0x6c, - 0x6d, 0x20f, 0x6c, 0x6e, 0x30f, 0x6c, 0x6f, 0x67, - 0x20f, 0x6c, 0x78, 0x20f, 0x6d, 0x62, 0x30f, 0x6d, - 0x69, 0x6c, 0x30f, 0x6d, 0x6f, 0x6c, 0x20f, 0x50, - 0x48, 0x40f, 0x70, 0x2e, 0x6d, 0x2e, 0x30f, 0x50, - 0x50, 0x4d, 0x20f, 0x50, 0x52, 0x20f, 0x73, 0x72, - 0x20f, 0x53, 0x76, 0x20f, 0x57, 0x62, 0x30f, 0x56, - 0x2215, 0x6d, 0x30f, 0x41, 0x2215, 0x6d, 0x210, 0x31, - 0x65e5, 0x210, 0x32, 0x65e5, 0x210, 0x33, 0x65e5, 0x210, - 0x34, 0x65e5, 0x210, 0x35, 0x65e5, 0x210, 0x36, 0x65e5, - 0x210, 0x37, 0x65e5, 0x210, 0x38, 0x65e5, 0x210, 0x39, - 0x65e5, 0x310, 0x31, 0x30, 0x65e5, 0x310, 0x31, 0x31, - 0x65e5, 0x310, 0x31, 0x32, 0x65e5, 0x310, 0x31, 0x33, - 0x65e5, 0x310, 0x31, 0x34, 0x65e5, 0x310, 0x31, 0x35, - 0x65e5, 0x310, 0x31, 0x36, 0x65e5, 0x310, 0x31, 0x37, - 0x65e5, 0x310, 0x31, 0x38, 0x65e5, 0x310, 0x31, 0x39, - 0x65e5, 0x310, 0x32, 0x30, 0x65e5, 0x310, 0x32, 0x31, - 0x65e5, 0x310, 0x32, 0x32, 0x65e5, 0x310, 0x32, 0x33, - 0x65e5, 0x310, 0x32, 0x34, 0x65e5, 0x310, 0x32, 0x35, - 0x65e5, 0x310, 0x32, 0x36, 0x65e5, 0x310, 0x32, 0x37, - 0x65e5, 0x310, 0x32, 0x38, 0x65e5, 0x310, 0x32, 0x39, - 0x65e5, 0x310, 0x33, 0x30, 0x65e5, 0x310, 0x33, 0x31, - 0x65e5, 0x30f, 0x67, 0x61, 0x6c, 0x109, 0xa76f, 0x109, - 0x126, 0x109, 0x153, 0x101, 0x8c48, 0x101, 0x66f4, 0x101, - 0x8eca, 0x101, 0x8cc8, 0x101, 0x6ed1, 0x101, 0x4e32, 0x101, - 0x53e5, 0x101, 0x9f9c, 0x101, 0x9f9c, 0x101, 0x5951, 0x101, - 0x91d1, 0x101, 0x5587, 0x101, 0x5948, 0x101, 0x61f6, 0x101, - 0x7669, 0x101, 0x7f85, 0x101, 0x863f, 0x101, 0x87ba, 0x101, - 0x88f8, 0x101, 0x908f, 0x101, 0x6a02, 0x101, 0x6d1b, 0x101, - 0x70d9, 0x101, 0x73de, 0x101, 0x843d, 0x101, 0x916a, 0x101, - 0x99f1, 0x101, 0x4e82, 0x101, 0x5375, 0x101, 0x6b04, 0x101, - 0x721b, 0x101, 0x862d, 0x101, 0x9e1e, 0x101, 0x5d50, 0x101, - 0x6feb, 0x101, 0x85cd, 0x101, 0x8964, 0x101, 0x62c9, 0x101, - 0x81d8, 0x101, 0x881f, 0x101, 0x5eca, 0x101, 0x6717, 0x101, - 0x6d6a, 0x101, 0x72fc, 0x101, 0x90ce, 0x101, 0x4f86, 0x101, - 0x51b7, 0x101, 0x52de, 0x101, 0x64c4, 0x101, 0x6ad3, 0x101, - 0x7210, 0x101, 0x76e7, 0x101, 0x8001, 0x101, 0x8606, 0x101, - 0x865c, 0x101, 0x8def, 0x101, 0x9732, 0x101, 0x9b6f, 0x101, - 0x9dfa, 0x101, 0x788c, 0x101, 0x797f, 0x101, 0x7da0, 0x101, - 0x83c9, 0x101, 0x9304, 0x101, 0x9e7f, 0x101, 0x8ad6, 0x101, - 0x58df, 0x101, 0x5f04, 0x101, 0x7c60, 0x101, 0x807e, 0x101, - 0x7262, 0x101, 0x78ca, 0x101, 0x8cc2, 0x101, 0x96f7, 0x101, - 0x58d8, 0x101, 0x5c62, 0x101, 0x6a13, 0x101, 0x6dda, 0x101, - 0x6f0f, 0x101, 0x7d2f, 0x101, 0x7e37, 0x101, 0x964b, 0x101, - 0x52d2, 0x101, 0x808b, 0x101, 0x51dc, 0x101, 0x51cc, 0x101, - 0x7a1c, 0x101, 0x7dbe, 0x101, 0x83f1, 0x101, 0x9675, 0x101, - 0x8b80, 0x101, 0x62cf, 0x101, 0x6a02, 0x101, 0x8afe, 0x101, - 0x4e39, 0x101, 0x5be7, 0x101, 0x6012, 0x101, 0x7387, 0x101, - 0x7570, 0x101, 0x5317, 0x101, 0x78fb, 0x101, 0x4fbf, 0x101, - 0x5fa9, 0x101, 0x4e0d, 0x101, 0x6ccc, 0x101, 0x6578, 0x101, - 0x7d22, 0x101, 0x53c3, 0x101, 0x585e, 0x101, 0x7701, 0x101, - 0x8449, 0x101, 0x8aaa, 0x101, 0x6bba, 0x101, 0x8fb0, 0x101, - 0x6c88, 0x101, 0x62fe, 0x101, 0x82e5, 0x101, 0x63a0, 0x101, - 0x7565, 0x101, 0x4eae, 0x101, 0x5169, 0x101, 0x51c9, 0x101, - 0x6881, 0x101, 0x7ce7, 0x101, 0x826f, 0x101, 0x8ad2, 0x101, - 0x91cf, 0x101, 0x52f5, 0x101, 0x5442, 0x101, 0x5973, 0x101, - 0x5eec, 0x101, 0x65c5, 0x101, 0x6ffe, 0x101, 0x792a, 0x101, - 0x95ad, 0x101, 0x9a6a, 0x101, 0x9e97, 0x101, 0x9ece, 0x101, - 0x529b, 0x101, 0x66c6, 0x101, 0x6b77, 0x101, 0x8f62, 0x101, - 0x5e74, 0x101, 0x6190, 0x101, 0x6200, 0x101, 0x649a, 0x101, - 0x6f23, 0x101, 0x7149, 0x101, 0x7489, 0x101, 0x79ca, 0x101, - 0x7df4, 0x101, 0x806f, 0x101, 0x8f26, 0x101, 0x84ee, 0x101, - 0x9023, 0x101, 0x934a, 0x101, 0x5217, 0x101, 0x52a3, 0x101, - 0x54bd, 0x101, 0x70c8, 0x101, 0x88c2, 0x101, 0x8aaa, 0x101, - 0x5ec9, 0x101, 0x5ff5, 0x101, 0x637b, 0x101, 0x6bae, 0x101, - 0x7c3e, 0x101, 0x7375, 0x101, 0x4ee4, 0x101, 0x56f9, 0x101, - 0x5be7, 0x101, 0x5dba, 0x101, 0x601c, 0x101, 0x73b2, 0x101, - 0x7469, 0x101, 0x7f9a, 0x101, 0x8046, 0x101, 0x9234, 0x101, - 0x96f6, 0x101, 0x9748, 0x101, 0x9818, 0x101, 0x4f8b, 0x101, - 0x79ae, 0x101, 0x91b4, 0x101, 0x96b8, 0x101, 0x60e1, 0x101, - 0x4e86, 0x101, 0x50da, 0x101, 0x5bee, 0x101, 0x5c3f, 0x101, - 0x6599, 0x101, 0x6a02, 0x101, 0x71ce, 0x101, 0x7642, 0x101, - 0x84fc, 0x101, 0x907c, 0x101, 0x9f8d, 0x101, 0x6688, 0x101, - 0x962e, 0x101, 0x5289, 0x101, 0x677b, 0x101, 0x67f3, 0x101, - 0x6d41, 0x101, 0x6e9c, 0x101, 0x7409, 0x101, 0x7559, 0x101, - 0x786b, 0x101, 0x7d10, 0x101, 0x985e, 0x101, 0x516d, 0x101, - 0x622e, 0x101, 0x9678, 0x101, 0x502b, 0x101, 0x5d19, 0x101, - 0x6dea, 0x101, 0x8f2a, 0x101, 0x5f8b, 0x101, 0x6144, 0x101, - 0x6817, 0x101, 0x7387, 0x101, 0x9686, 0x101, 0x5229, 0x101, - 0x540f, 0x101, 0x5c65, 0x101, 0x6613, 0x101, 0x674e, 0x101, - 0x68a8, 0x101, 0x6ce5, 0x101, 0x7406, 0x101, 0x75e2, 0x101, - 0x7f79, 0x101, 0x88cf, 0x101, 0x88e1, 0x101, 0x91cc, 0x101, - 0x96e2, 0x101, 0x533f, 0x101, 0x6eba, 0x101, 0x541d, 0x101, - 0x71d0, 0x101, 0x7498, 0x101, 0x85fa, 0x101, 0x96a3, 0x101, - 0x9c57, 0x101, 0x9e9f, 0x101, 0x6797, 0x101, 0x6dcb, 0x101, - 0x81e8, 0x101, 0x7acb, 0x101, 0x7b20, 0x101, 0x7c92, 0x101, - 0x72c0, 0x101, 0x7099, 0x101, 0x8b58, 0x101, 0x4ec0, 0x101, - 0x8336, 0x101, 0x523a, 0x101, 0x5207, 0x101, 0x5ea6, 0x101, - 0x62d3, 0x101, 0x7cd6, 0x101, 0x5b85, 0x101, 0x6d1e, 0x101, - 0x66b4, 0x101, 0x8f3b, 0x101, 0x884c, 0x101, 0x964d, 0x101, - 0x898b, 0x101, 0x5ed3, 0x101, 0x5140, 0x101, 0x55c0, 0x101, - 0x585a, 0x101, 0x6674, 0x101, 0x51de, 0x101, 0x732a, 0x101, - 0x76ca, 0x101, 0x793c, 0x101, 0x795e, 0x101, 0x7965, 0x101, - 0x798f, 0x101, 0x9756, 0x101, 0x7cbe, 0x101, 0x7fbd, 0x101, - 0x8612, 0x101, 0x8af8, 0x101, 0x9038, 0x101, 0x90fd, 0x101, - 0x98ef, 0x101, 0x98fc, 0x101, 0x9928, 0x101, 0x9db4, 0x101, - 0x90de, 0x101, 0x96b7, 0x101, 0x4fae, 0x101, 0x50e7, 0x101, - 0x514d, 0x101, 0x52c9, 0x101, 0x52e4, 0x101, 0x5351, 0x101, - 0x559d, 0x101, 0x5606, 0x101, 0x5668, 0x101, 0x5840, 0x101, - 0x58a8, 0x101, 0x5c64, 0x101, 0x5c6e, 0x101, 0x6094, 0x101, - 0x6168, 0x101, 0x618e, 0x101, 0x61f2, 0x101, 0x654f, 0x101, - 0x65e2, 0x101, 0x6691, 0x101, 0x6885, 0x101, 0x6d77, 0x101, - 0x6e1a, 0x101, 0x6f22, 0x101, 0x716e, 0x101, 0x722b, 0x101, - 0x7422, 0x101, 0x7891, 0x101, 0x793e, 0x101, 0x7949, 0x101, - 0x7948, 0x101, 0x7950, 0x101, 0x7956, 0x101, 0x795d, 0x101, - 0x798d, 0x101, 0x798e, 0x101, 0x7a40, 0x101, 0x7a81, 0x101, - 0x7bc0, 0x101, 0x7df4, 0x101, 0x7e09, 0x101, 0x7e41, 0x101, - 0x7f72, 0x101, 0x8005, 0x101, 0x81ed, 0x101, 0x8279, 0x101, - 0x8279, 0x101, 0x8457, 0x101, 0x8910, 0x101, 0x8996, 0x101, - 0x8b01, 0x101, 0x8b39, 0x101, 0x8cd3, 0x101, 0x8d08, 0x101, - 0x8fb6, 0x101, 0x9038, 0x101, 0x96e3, 0x101, 0x97ff, 0x101, - 0x983b, 0x101, 0x6075, 0x201, 0xd850, 0xdeee, 0x101, 0x8218, - 0x101, 0x4e26, 0x101, 0x51b5, 0x101, 0x5168, 0x101, 0x4f80, - 0x101, 0x5145, 0x101, 0x5180, 0x101, 0x52c7, 0x101, 0x52fa, - 0x101, 0x559d, 0x101, 0x5555, 0x101, 0x5599, 0x101, 0x55e2, - 0x101, 0x585a, 0x101, 0x58b3, 0x101, 0x5944, 0x101, 0x5954, - 0x101, 0x5a62, 0x101, 0x5b28, 0x101, 0x5ed2, 0x101, 0x5ed9, - 0x101, 0x5f69, 0x101, 0x5fad, 0x101, 0x60d8, 0x101, 0x614e, - 0x101, 0x6108, 0x101, 0x618e, 0x101, 0x6160, 0x101, 0x61f2, - 0x101, 0x6234, 0x101, 0x63c4, 0x101, 0x641c, 0x101, 0x6452, - 0x101, 0x6556, 0x101, 0x6674, 0x101, 0x6717, 0x101, 0x671b, - 0x101, 0x6756, 0x101, 0x6b79, 0x101, 0x6bba, 0x101, 0x6d41, - 0x101, 0x6edb, 0x101, 0x6ecb, 0x101, 0x6f22, 0x101, 0x701e, - 0x101, 0x716e, 0x101, 0x77a7, 0x101, 0x7235, 0x101, 0x72af, - 0x101, 0x732a, 0x101, 0x7471, 0x101, 0x7506, 0x101, 0x753b, - 0x101, 0x761d, 0x101, 0x761f, 0x101, 0x76ca, 0x101, 0x76db, - 0x101, 0x76f4, 0x101, 0x774a, 0x101, 0x7740, 0x101, 0x78cc, - 0x101, 0x7ab1, 0x101, 0x7bc0, 0x101, 0x7c7b, 0x101, 0x7d5b, - 0x101, 0x7df4, 0x101, 0x7f3e, 0x101, 0x8005, 0x101, 0x8352, - 0x101, 0x83ef, 0x101, 0x8779, 0x101, 0x8941, 0x101, 0x8986, - 0x101, 0x8996, 0x101, 0x8abf, 0x101, 0x8af8, 0x101, 0x8acb, - 0x101, 0x8b01, 0x101, 0x8afe, 0x101, 0x8aed, 0x101, 0x8b39, - 0x101, 0x8b8a, 0x101, 0x8d08, 0x101, 0x8f38, 0x101, 0x9072, - 0x101, 0x9199, 0x101, 0x9276, 0x101, 0x967c, 0x101, 0x96e3, - 0x101, 0x9756, 0x101, 0x97db, 0x101, 0x97ff, 0x101, 0x980b, - 0x101, 0x983b, 0x101, 0x9b12, 0x101, 0x9f9c, 0x201, 0xd84a, - 0xdc4a, 0x201, 0xd84a, 0xdc44, 0x201, 0xd84c, 0xdfd5, 0x101, - 0x3b9d, 0x101, 0x4018, 0x101, 0x4039, 0x201, 0xd854, 0xde49, - 0x201, 0xd857, 0xdcd0, 0x201, 0xd85f, 0xded3, 0x101, 0x9f43, - 0x101, 0x9f8e, 0x210, 0x66, 0x66, 0x210, 0x66, 0x69, - 0x210, 0x66, 0x6c, 0x310, 0x66, 0x66, 0x69, 0x310, - 0x66, 0x66, 0x6c, 0x210, 0x17f, 0x74, 0x210, 0x73, - 0x74, 0x210, 0x574, 0x576, 0x210, 0x574, 0x565, 0x210, - 0x574, 0x56b, 0x210, 0x57e, 0x576, 0x210, 0x574, 0x56d, - 0x201, 0x5d9, 0x5b4, 0x201, 0x5f2, 0x5b7, 0x102, 0x5e2, - 0x102, 0x5d0, 0x102, 0x5d3, 0x102, 0x5d4, 0x102, 0x5db, - 0x102, 0x5dc, 0x102, 0x5dd, 0x102, 0x5e8, 0x102, 0x5ea, - 0x102, 0x2b, 0x201, 0x5e9, 0x5c1, 0x201, 0x5e9, 0x5c2, - 0x201, 0xfb49, 0x5c1, 0x201, 0xfb49, 0x5c2, 0x201, 0x5d0, - 0x5b7, 0x201, 0x5d0, 0x5b8, 0x201, 0x5d0, 0x5bc, 0x201, - 0x5d1, 0x5bc, 0x201, 0x5d2, 0x5bc, 0x201, 0x5d3, 0x5bc, - 0x201, 0x5d4, 0x5bc, 0x201, 0x5d5, 0x5bc, 0x201, 0x5d6, - 0x5bc, 0x201, 0x5d8, 0x5bc, 0x201, 0x5d9, 0x5bc, 0x201, - 0x5da, 0x5bc, 0x201, 0x5db, 0x5bc, 0x201, 0x5dc, 0x5bc, - 0x201, 0x5de, 0x5bc, 0x201, 0x5e0, 0x5bc, 0x201, 0x5e1, - 0x5bc, 0x201, 0x5e3, 0x5bc, 0x201, 0x5e4, 0x5bc, 0x201, - 0x5e6, 0x5bc, 0x201, 0x5e7, 0x5bc, 0x201, 0x5e8, 0x5bc, - 0x201, 0x5e9, 0x5bc, 0x201, 0x5ea, 0x5bc, 0x201, 0x5d5, - 0x5b9, 0x201, 0x5d1, 0x5bf, 0x201, 0x5db, 0x5bf, 0x201, - 0x5e4, 0x5bf, 0x210, 0x5d0, 0x5dc, 0x107, 0x671, 0x106, - 0x671, 0x107, 0x67b, 0x106, 0x67b, 0x104, 0x67b, 0x105, - 0x67b, 0x107, 0x67e, 0x106, 0x67e, 0x104, 0x67e, 0x105, - 0x67e, 0x107, 0x680, 0x106, 0x680, 0x104, 0x680, 0x105, - 0x680, 0x107, 0x67a, 0x106, 0x67a, 0x104, 0x67a, 0x105, - 0x67a, 0x107, 0x67f, 0x106, 0x67f, 0x104, 0x67f, 0x105, - 0x67f, 0x107, 0x679, 0x106, 0x679, 0x104, 0x679, 0x105, - 0x679, 0x107, 0x6a4, 0x106, 0x6a4, 0x104, 0x6a4, 0x105, - 0x6a4, 0x107, 0x6a6, 0x106, 0x6a6, 0x104, 0x6a6, 0x105, - 0x6a6, 0x107, 0x684, 0x106, 0x684, 0x104, 0x684, 0x105, - 0x684, 0x107, 0x683, 0x106, 0x683, 0x104, 0x683, 0x105, - 0x683, 0x107, 0x686, 0x106, 0x686, 0x104, 0x686, 0x105, - 0x686, 0x107, 0x687, 0x106, 0x687, 0x104, 0x687, 0x105, - 0x687, 0x107, 0x68d, 0x106, 0x68d, 0x107, 0x68c, 0x106, - 0x68c, 0x107, 0x68e, 0x106, 0x68e, 0x107, 0x688, 0x106, - 0x688, 0x107, 0x698, 0x106, 0x698, 0x107, 0x691, 0x106, - 0x691, 0x107, 0x6a9, 0x106, 0x6a9, 0x104, 0x6a9, 0x105, - 0x6a9, 0x107, 0x6af, 0x106, 0x6af, 0x104, 0x6af, 0x105, - 0x6af, 0x107, 0x6b3, 0x106, 0x6b3, 0x104, 0x6b3, 0x105, - 0x6b3, 0x107, 0x6b1, 0x106, 0x6b1, 0x104, 0x6b1, 0x105, - 0x6b1, 0x107, 0x6ba, 0x106, 0x6ba, 0x107, 0x6bb, 0x106, - 0x6bb, 0x104, 0x6bb, 0x105, 0x6bb, 0x107, 0x6c0, 0x106, - 0x6c0, 0x107, 0x6c1, 0x106, 0x6c1, 0x104, 0x6c1, 0x105, - 0x6c1, 0x107, 0x6be, 0x106, 0x6be, 0x104, 0x6be, 0x105, - 0x6be, 0x107, 0x6d2, 0x106, 0x6d2, 0x107, 0x6d3, 0x106, - 0x6d3, 0x107, 0x6ad, 0x106, 0x6ad, 0x104, 0x6ad, 0x105, - 0x6ad, 0x107, 0x6c7, 0x106, 0x6c7, 0x107, 0x6c6, 0x106, - 0x6c6, 0x107, 0x6c8, 0x106, 0x6c8, 0x107, 0x677, 0x107, - 0x6cb, 0x106, 0x6cb, 0x107, 0x6c5, 0x106, 0x6c5, 0x107, - 0x6c9, 0x106, 0x6c9, 0x107, 0x6d0, 0x106, 0x6d0, 0x104, - 0x6d0, 0x105, 0x6d0, 0x104, 0x649, 0x105, 0x649, 0x207, - 0x626, 0x627, 0x206, 0x626, 0x627, 0x207, 0x626, 0x6d5, - 0x206, 0x626, 0x6d5, 0x207, 0x626, 0x648, 0x206, 0x626, - 0x648, 0x207, 0x626, 0x6c7, 0x206, 0x626, 0x6c7, 0x207, - 0x626, 0x6c6, 0x206, 0x626, 0x6c6, 0x207, 0x626, 0x6c8, - 0x206, 0x626, 0x6c8, 0x207, 0x626, 0x6d0, 0x206, 0x626, - 0x6d0, 0x204, 0x626, 0x6d0, 0x207, 0x626, 0x649, 0x206, - 0x626, 0x649, 0x204, 0x626, 0x649, 0x107, 0x6cc, 0x106, - 0x6cc, 0x104, 0x6cc, 0x105, 0x6cc, 0x207, 0x626, 0x62c, - 0x207, 0x626, 0x62d, 0x207, 0x626, 0x645, 0x207, 0x626, - 0x649, 0x207, 0x626, 0x64a, 0x207, 0x628, 0x62c, 0x207, - 0x628, 0x62d, 0x207, 0x628, 0x62e, 0x207, 0x628, 0x645, - 0x207, 0x628, 0x649, 0x207, 0x628, 0x64a, 0x207, 0x62a, - 0x62c, 0x207, 0x62a, 0x62d, 0x207, 0x62a, 0x62e, 0x207, - 0x62a, 0x645, 0x207, 0x62a, 0x649, 0x207, 0x62a, 0x64a, - 0x207, 0x62b, 0x62c, 0x207, 0x62b, 0x645, 0x207, 0x62b, - 0x649, 0x207, 0x62b, 0x64a, 0x207, 0x62c, 0x62d, 0x207, - 0x62c, 0x645, 0x207, 0x62d, 0x62c, 0x207, 0x62d, 0x645, - 0x207, 0x62e, 0x62c, 0x207, 0x62e, 0x62d, 0x207, 0x62e, - 0x645, 0x207, 0x633, 0x62c, 0x207, 0x633, 0x62d, 0x207, - 0x633, 0x62e, 0x207, 0x633, 0x645, 0x207, 0x635, 0x62d, - 0x207, 0x635, 0x645, 0x207, 0x636, 0x62c, 0x207, 0x636, - 0x62d, 0x207, 0x636, 0x62e, 0x207, 0x636, 0x645, 0x207, - 0x637, 0x62d, 0x207, 0x637, 0x645, 0x207, 0x638, 0x645, - 0x207, 0x639, 0x62c, 0x207, 0x639, 0x645, 0x207, 0x63a, - 0x62c, 0x207, 0x63a, 0x645, 0x207, 0x641, 0x62c, 0x207, - 0x641, 0x62d, 0x207, 0x641, 0x62e, 0x207, 0x641, 0x645, - 0x207, 0x641, 0x649, 0x207, 0x641, 0x64a, 0x207, 0x642, - 0x62d, 0x207, 0x642, 0x645, 0x207, 0x642, 0x649, 0x207, - 0x642, 0x64a, 0x207, 0x643, 0x627, 0x207, 0x643, 0x62c, - 0x207, 0x643, 0x62d, 0x207, 0x643, 0x62e, 0x207, 0x643, - 0x644, 0x207, 0x643, 0x645, 0x207, 0x643, 0x649, 0x207, - 0x643, 0x64a, 0x207, 0x644, 0x62c, 0x207, 0x644, 0x62d, - 0x207, 0x644, 0x62e, 0x207, 0x644, 0x645, 0x207, 0x644, - 0x649, 0x207, 0x644, 0x64a, 0x207, 0x645, 0x62c, 0x207, - 0x645, 0x62d, 0x207, 0x645, 0x62e, 0x207, 0x645, 0x645, - 0x207, 0x645, 0x649, 0x207, 0x645, 0x64a, 0x207, 0x646, - 0x62c, 0x207, 0x646, 0x62d, 0x207, 0x646, 0x62e, 0x207, - 0x646, 0x645, 0x207, 0x646, 0x649, 0x207, 0x646, 0x64a, - 0x207, 0x647, 0x62c, 0x207, 0x647, 0x645, 0x207, 0x647, - 0x649, 0x207, 0x647, 0x64a, 0x207, 0x64a, 0x62c, 0x207, - 0x64a, 0x62d, 0x207, 0x64a, 0x62e, 0x207, 0x64a, 0x645, - 0x207, 0x64a, 0x649, 0x207, 0x64a, 0x64a, 0x207, 0x630, - 0x670, 0x207, 0x631, 0x670, 0x207, 0x649, 0x670, 0x307, - 0x20, 0x64c, 0x651, 0x307, 0x20, 0x64d, 0x651, 0x307, - 0x20, 0x64e, 0x651, 0x307, 0x20, 0x64f, 0x651, 0x307, - 0x20, 0x650, 0x651, 0x307, 0x20, 0x651, 0x670, 0x206, - 0x626, 0x631, 0x206, 0x626, 0x632, 0x206, 0x626, 0x645, - 0x206, 0x626, 0x646, 0x206, 0x626, 0x649, 0x206, 0x626, - 0x64a, 0x206, 0x628, 0x631, 0x206, 0x628, 0x632, 0x206, - 0x628, 0x645, 0x206, 0x628, 0x646, 0x206, 0x628, 0x649, - 0x206, 0x628, 0x64a, 0x206, 0x62a, 0x631, 0x206, 0x62a, - 0x632, 0x206, 0x62a, 0x645, 0x206, 0x62a, 0x646, 0x206, - 0x62a, 0x649, 0x206, 0x62a, 0x64a, 0x206, 0x62b, 0x631, - 0x206, 0x62b, 0x632, 0x206, 0x62b, 0x645, 0x206, 0x62b, - 0x646, 0x206, 0x62b, 0x649, 0x206, 0x62b, 0x64a, 0x206, - 0x641, 0x649, 0x206, 0x641, 0x64a, 0x206, 0x642, 0x649, - 0x206, 0x642, 0x64a, 0x206, 0x643, 0x627, 0x206, 0x643, - 0x644, 0x206, 0x643, 0x645, 0x206, 0x643, 0x649, 0x206, - 0x643, 0x64a, 0x206, 0x644, 0x645, 0x206, 0x644, 0x649, - 0x206, 0x644, 0x64a, 0x206, 0x645, 0x627, 0x206, 0x645, - 0x645, 0x206, 0x646, 0x631, 0x206, 0x646, 0x632, 0x206, - 0x646, 0x645, 0x206, 0x646, 0x646, 0x206, 0x646, 0x649, - 0x206, 0x646, 0x64a, 0x206, 0x649, 0x670, 0x206, 0x64a, - 0x631, 0x206, 0x64a, 0x632, 0x206, 0x64a, 0x645, 0x206, - 0x64a, 0x646, 0x206, 0x64a, 0x649, 0x206, 0x64a, 0x64a, - 0x204, 0x626, 0x62c, 0x204, 0x626, 0x62d, 0x204, 0x626, - 0x62e, 0x204, 0x626, 0x645, 0x204, 0x626, 0x647, 0x204, - 0x628, 0x62c, 0x204, 0x628, 0x62d, 0x204, 0x628, 0x62e, - 0x204, 0x628, 0x645, 0x204, 0x628, 0x647, 0x204, 0x62a, - 0x62c, 0x204, 0x62a, 0x62d, 0x204, 0x62a, 0x62e, 0x204, - 0x62a, 0x645, 0x204, 0x62a, 0x647, 0x204, 0x62b, 0x645, - 0x204, 0x62c, 0x62d, 0x204, 0x62c, 0x645, 0x204, 0x62d, - 0x62c, 0x204, 0x62d, 0x645, 0x204, 0x62e, 0x62c, 0x204, - 0x62e, 0x645, 0x204, 0x633, 0x62c, 0x204, 0x633, 0x62d, - 0x204, 0x633, 0x62e, 0x204, 0x633, 0x645, 0x204, 0x635, - 0x62d, 0x204, 0x635, 0x62e, 0x204, 0x635, 0x645, 0x204, - 0x636, 0x62c, 0x204, 0x636, 0x62d, 0x204, 0x636, 0x62e, - 0x204, 0x636, 0x645, 0x204, 0x637, 0x62d, 0x204, 0x638, - 0x645, 0x204, 0x639, 0x62c, 0x204, 0x639, 0x645, 0x204, - 0x63a, 0x62c, 0x204, 0x63a, 0x645, 0x204, 0x641, 0x62c, - 0x204, 0x641, 0x62d, 0x204, 0x641, 0x62e, 0x204, 0x641, - 0x645, 0x204, 0x642, 0x62d, 0x204, 0x642, 0x645, 0x204, - 0x643, 0x62c, 0x204, 0x643, 0x62d, 0x204, 0x643, 0x62e, - 0x204, 0x643, 0x644, 0x204, 0x643, 0x645, 0x204, 0x644, - 0x62c, 0x204, 0x644, 0x62d, 0x204, 0x644, 0x62e, 0x204, - 0x644, 0x645, 0x204, 0x644, 0x647, 0x204, 0x645, 0x62c, - 0x204, 0x645, 0x62d, 0x204, 0x645, 0x62e, 0x204, 0x645, - 0x645, 0x204, 0x646, 0x62c, 0x204, 0x646, 0x62d, 0x204, - 0x646, 0x62e, 0x204, 0x646, 0x645, 0x204, 0x646, 0x647, - 0x204, 0x647, 0x62c, 0x204, 0x647, 0x645, 0x204, 0x647, - 0x670, 0x204, 0x64a, 0x62c, 0x204, 0x64a, 0x62d, 0x204, - 0x64a, 0x62e, 0x204, 0x64a, 0x645, 0x204, 0x64a, 0x647, - 0x205, 0x626, 0x645, 0x205, 0x626, 0x647, 0x205, 0x628, - 0x645, 0x205, 0x628, 0x647, 0x205, 0x62a, 0x645, 0x205, - 0x62a, 0x647, 0x205, 0x62b, 0x645, 0x205, 0x62b, 0x647, - 0x205, 0x633, 0x645, 0x205, 0x633, 0x647, 0x205, 0x634, - 0x645, 0x205, 0x634, 0x647, 0x205, 0x643, 0x644, 0x205, - 0x643, 0x645, 0x205, 0x644, 0x645, 0x205, 0x646, 0x645, - 0x205, 0x646, 0x647, 0x205, 0x64a, 0x645, 0x205, 0x64a, - 0x647, 0x305, 0x640, 0x64e, 0x651, 0x305, 0x640, 0x64f, - 0x651, 0x305, 0x640, 0x650, 0x651, 0x207, 0x637, 0x649, - 0x207, 0x637, 0x64a, 0x207, 0x639, 0x649, 0x207, 0x639, - 0x64a, 0x207, 0x63a, 0x649, 0x207, 0x63a, 0x64a, 0x207, - 0x633, 0x649, 0x207, 0x633, 0x64a, 0x207, 0x634, 0x649, - 0x207, 0x634, 0x64a, 0x207, 0x62d, 0x649, 0x207, 0x62d, - 0x64a, 0x207, 0x62c, 0x649, 0x207, 0x62c, 0x64a, 0x207, - 0x62e, 0x649, 0x207, 0x62e, 0x64a, 0x207, 0x635, 0x649, - 0x207, 0x635, 0x64a, 0x207, 0x636, 0x649, 0x207, 0x636, - 0x64a, 0x207, 0x634, 0x62c, 0x207, 0x634, 0x62d, 0x207, - 0x634, 0x62e, 0x207, 0x634, 0x645, 0x207, 0x634, 0x631, - 0x207, 0x633, 0x631, 0x207, 0x635, 0x631, 0x207, 0x636, - 0x631, 0x206, 0x637, 0x649, 0x206, 0x637, 0x64a, 0x206, - 0x639, 0x649, 0x206, 0x639, 0x64a, 0x206, 0x63a, 0x649, - 0x206, 0x63a, 0x64a, 0x206, 0x633, 0x649, 0x206, 0x633, - 0x64a, 0x206, 0x634, 0x649, 0x206, 0x634, 0x64a, 0x206, - 0x62d, 0x649, 0x206, 0x62d, 0x64a, 0x206, 0x62c, 0x649, - 0x206, 0x62c, 0x64a, 0x206, 0x62e, 0x649, 0x206, 0x62e, - 0x64a, 0x206, 0x635, 0x649, 0x206, 0x635, 0x64a, 0x206, - 0x636, 0x649, 0x206, 0x636, 0x64a, 0x206, 0x634, 0x62c, - 0x206, 0x634, 0x62d, 0x206, 0x634, 0x62e, 0x206, 0x634, - 0x645, 0x206, 0x634, 0x631, 0x206, 0x633, 0x631, 0x206, - 0x635, 0x631, 0x206, 0x636, 0x631, 0x204, 0x634, 0x62c, - 0x204, 0x634, 0x62d, 0x204, 0x634, 0x62e, 0x204, 0x634, - 0x645, 0x204, 0x633, 0x647, 0x204, 0x634, 0x647, 0x204, - 0x637, 0x645, 0x205, 0x633, 0x62c, 0x205, 0x633, 0x62d, - 0x205, 0x633, 0x62e, 0x205, 0x634, 0x62c, 0x205, 0x634, - 0x62d, 0x205, 0x634, 0x62e, 0x205, 0x637, 0x645, 0x205, - 0x638, 0x645, 0x206, 0x627, 0x64b, 0x207, 0x627, 0x64b, - 0x304, 0x62a, 0x62c, 0x645, 0x306, 0x62a, 0x62d, 0x62c, - 0x304, 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d, 0x645, - 0x304, 0x62a, 0x62e, 0x645, 0x304, 0x62a, 0x645, 0x62c, - 0x304, 0x62a, 0x645, 0x62d, 0x304, 0x62a, 0x645, 0x62e, - 0x306, 0x62c, 0x645, 0x62d, 0x304, 0x62c, 0x645, 0x62d, - 0x306, 0x62d, 0x645, 0x64a, 0x306, 0x62d, 0x645, 0x649, - 0x304, 0x633, 0x62d, 0x62c, 0x304, 0x633, 0x62c, 0x62d, - 0x306, 0x633, 0x62c, 0x649, 0x306, 0x633, 0x645, 0x62d, - 0x304, 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645, 0x62c, - 0x306, 0x633, 0x645, 0x645, 0x304, 0x633, 0x645, 0x645, - 0x306, 0x635, 0x62d, 0x62d, 0x304, 0x635, 0x62d, 0x62d, - 0x306, 0x635, 0x645, 0x645, 0x306, 0x634, 0x62d, 0x645, - 0x304, 0x634, 0x62d, 0x645, 0x306, 0x634, 0x62c, 0x64a, - 0x306, 0x634, 0x645, 0x62e, 0x304, 0x634, 0x645, 0x62e, - 0x306, 0x634, 0x645, 0x645, 0x304, 0x634, 0x645, 0x645, - 0x306, 0x636, 0x62d, 0x649, 0x306, 0x636, 0x62e, 0x645, - 0x304, 0x636, 0x62e, 0x645, 0x306, 0x637, 0x645, 0x62d, - 0x304, 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645, 0x645, - 0x306, 0x637, 0x645, 0x64a, 0x306, 0x639, 0x62c, 0x645, - 0x306, 0x639, 0x645, 0x645, 0x304, 0x639, 0x645, 0x645, - 0x306, 0x639, 0x645, 0x649, 0x306, 0x63a, 0x645, 0x645, - 0x306, 0x63a, 0x645, 0x64a, 0x306, 0x63a, 0x645, 0x649, - 0x306, 0x641, 0x62e, 0x645, 0x304, 0x641, 0x62e, 0x645, - 0x306, 0x642, 0x645, 0x62d, 0x306, 0x642, 0x645, 0x645, - 0x306, 0x644, 0x62d, 0x645, 0x306, 0x644, 0x62d, 0x64a, - 0x306, 0x644, 0x62d, 0x649, 0x304, 0x644, 0x62c, 0x62c, - 0x306, 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62e, 0x645, - 0x304, 0x644, 0x62e, 0x645, 0x306, 0x644, 0x645, 0x62d, - 0x304, 0x644, 0x645, 0x62d, 0x304, 0x645, 0x62d, 0x62c, - 0x304, 0x645, 0x62d, 0x645, 0x306, 0x645, 0x62d, 0x64a, - 0x304, 0x645, 0x62c, 0x62d, 0x304, 0x645, 0x62c, 0x645, - 0x304, 0x645, 0x62e, 0x62c, 0x304, 0x645, 0x62e, 0x645, - 0x304, 0x645, 0x62c, 0x62e, 0x304, 0x647, 0x645, 0x62c, - 0x304, 0x647, 0x645, 0x645, 0x304, 0x646, 0x62d, 0x645, - 0x306, 0x646, 0x62d, 0x649, 0x306, 0x646, 0x62c, 0x645, - 0x304, 0x646, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x649, - 0x306, 0x646, 0x645, 0x64a, 0x306, 0x646, 0x645, 0x649, - 0x306, 0x64a, 0x645, 0x645, 0x304, 0x64a, 0x645, 0x645, - 0x306, 0x628, 0x62e, 0x64a, 0x306, 0x62a, 0x62c, 0x64a, - 0x306, 0x62a, 0x62c, 0x649, 0x306, 0x62a, 0x62e, 0x64a, - 0x306, 0x62a, 0x62e, 0x649, 0x306, 0x62a, 0x645, 0x64a, - 0x306, 0x62a, 0x645, 0x649, 0x306, 0x62c, 0x645, 0x64a, - 0x306, 0x62c, 0x62d, 0x649, 0x306, 0x62c, 0x645, 0x649, - 0x306, 0x633, 0x62e, 0x649, 0x306, 0x635, 0x62d, 0x64a, - 0x306, 0x634, 0x62d, 0x64a, 0x306, 0x636, 0x62d, 0x64a, - 0x306, 0x644, 0x62c, 0x64a, 0x306, 0x644, 0x645, 0x64a, - 0x306, 0x64a, 0x62d, 0x64a, 0x306, 0x64a, 0x62c, 0x64a, - 0x306, 0x64a, 0x645, 0x64a, 0x306, 0x645, 0x645, 0x64a, - 0x306, 0x642, 0x645, 0x64a, 0x306, 0x646, 0x62d, 0x64a, - 0x304, 0x642, 0x645, 0x62d, 0x304, 0x644, 0x62d, 0x645, - 0x306, 0x639, 0x645, 0x64a, 0x306, 0x643, 0x645, 0x64a, - 0x304, 0x646, 0x62c, 0x62d, 0x306, 0x645, 0x62e, 0x64a, - 0x304, 0x644, 0x62c, 0x645, 0x306, 0x643, 0x645, 0x645, - 0x306, 0x644, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x62d, - 0x306, 0x62c, 0x62d, 0x64a, 0x306, 0x62d, 0x62c, 0x64a, - 0x306, 0x645, 0x62c, 0x64a, 0x306, 0x641, 0x645, 0x64a, - 0x306, 0x628, 0x62d, 0x64a, 0x304, 0x643, 0x645, 0x645, - 0x304, 0x639, 0x62c, 0x645, 0x304, 0x635, 0x645, 0x645, - 0x306, 0x633, 0x62e, 0x64a, 0x306, 0x646, 0x62c, 0x64a, - 0x307, 0x635, 0x644, 0x6d2, 0x307, 0x642, 0x644, 0x6d2, - 0x407, 0x627, 0x644, 0x644, 0x647, 0x407, 0x627, 0x643, - 0x628, 0x631, 0x407, 0x645, 0x62d, 0x645, 0x62f, 0x407, - 0x635, 0x644, 0x639, 0x645, 0x407, 0x631, 0x633, 0x648, - 0x644, 0x407, 0x639, 0x644, 0x64a, 0x647, 0x407, 0x648, - 0x633, 0x644, 0x645, 0x307, 0x635, 0x644, 0x649, 0x1207, - 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, - 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, - 0x644, 0x645, 0x807, 0x62c, 0x644, 0x20, 0x62c, 0x644, - 0x627, 0x644, 0x647, 0x407, 0x631, 0x6cc, 0x627, 0x644, - 0x10b, 0x2c, 0x10b, 0x3001, 0x10b, 0x3002, 0x10b, 0x3a, - 0x10b, 0x3b, 0x10b, 0x21, 0x10b, 0x3f, 0x10b, 0x3016, - 0x10b, 0x3017, 0x10b, 0x2026, 0x10b, 0x2025, 0x10b, 0x2014, - 0x10b, 0x2013, 0x10b, 0x5f, 0x10b, 0x5f, 0x10b, 0x28, - 0x10b, 0x29, 0x10b, 0x7b, 0x10b, 0x7d, 0x10b, 0x3014, - 0x10b, 0x3015, 0x10b, 0x3010, 0x10b, 0x3011, 0x10b, 0x300a, - 0x10b, 0x300b, 0x10b, 0x3008, 0x10b, 0x3009, 0x10b, 0x300c, - 0x10b, 0x300d, 0x10b, 0x300e, 0x10b, 0x300f, 0x10b, 0x5b, - 0x10b, 0x5d, 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x203e, - 0x110, 0x203e, 0x110, 0x5f, 0x110, 0x5f, 0x110, 0x5f, - 0x10e, 0x2c, 0x10e, 0x3001, 0x10e, 0x2e, 0x10e, 0x3b, - 0x10e, 0x3a, 0x10e, 0x3f, 0x10e, 0x21, 0x10e, 0x2014, - 0x10e, 0x28, 0x10e, 0x29, 0x10e, 0x7b, 0x10e, 0x7d, - 0x10e, 0x3014, 0x10e, 0x3015, 0x10e, 0x23, 0x10e, 0x26, - 0x10e, 0x2a, 0x10e, 0x2b, 0x10e, 0x2d, 0x10e, 0x3c, - 0x10e, 0x3e, 0x10e, 0x3d, 0x10e, 0x5c, 0x10e, 0x24, - 0x10e, 0x25, 0x10e, 0x40, 0x207, 0x20, 0x64b, 0x205, - 0x640, 0x64b, 0x207, 0x20, 0x64c, 0x207, 0x20, 0x64d, - 0x207, 0x20, 0x64e, 0x205, 0x640, 0x64e, 0x207, 0x20, - 0x64f, 0x205, 0x640, 0x64f, 0x207, 0x20, 0x650, 0x205, - 0x640, 0x650, 0x207, 0x20, 0x651, 0x205, 0x640, 0x651, - 0x207, 0x20, 0x652, 0x205, 0x640, 0x652, 0x107, 0x621, - 0x107, 0x622, 0x106, 0x622, 0x107, 0x623, 0x106, 0x623, - 0x107, 0x624, 0x106, 0x624, 0x107, 0x625, 0x106, 0x625, - 0x107, 0x626, 0x106, 0x626, 0x104, 0x626, 0x105, 0x626, - 0x107, 0x627, 0x106, 0x627, 0x107, 0x628, 0x106, 0x628, - 0x104, 0x628, 0x105, 0x628, 0x107, 0x629, 0x106, 0x629, - 0x107, 0x62a, 0x106, 0x62a, 0x104, 0x62a, 0x105, 0x62a, - 0x107, 0x62b, 0x106, 0x62b, 0x104, 0x62b, 0x105, 0x62b, - 0x107, 0x62c, 0x106, 0x62c, 0x104, 0x62c, 0x105, 0x62c, - 0x107, 0x62d, 0x106, 0x62d, 0x104, 0x62d, 0x105, 0x62d, - 0x107, 0x62e, 0x106, 0x62e, 0x104, 0x62e, 0x105, 0x62e, - 0x107, 0x62f, 0x106, 0x62f, 0x107, 0x630, 0x106, 0x630, - 0x107, 0x631, 0x106, 0x631, 0x107, 0x632, 0x106, 0x632, - 0x107, 0x633, 0x106, 0x633, 0x104, 0x633, 0x105, 0x633, - 0x107, 0x634, 0x106, 0x634, 0x104, 0x634, 0x105, 0x634, - 0x107, 0x635, 0x106, 0x635, 0x104, 0x635, 0x105, 0x635, - 0x107, 0x636, 0x106, 0x636, 0x104, 0x636, 0x105, 0x636, - 0x107, 0x637, 0x106, 0x637, 0x104, 0x637, 0x105, 0x637, - 0x107, 0x638, 0x106, 0x638, 0x104, 0x638, 0x105, 0x638, - 0x107, 0x639, 0x106, 0x639, 0x104, 0x639, 0x105, 0x639, - 0x107, 0x63a, 0x106, 0x63a, 0x104, 0x63a, 0x105, 0x63a, - 0x107, 0x641, 0x106, 0x641, 0x104, 0x641, 0x105, 0x641, - 0x107, 0x642, 0x106, 0x642, 0x104, 0x642, 0x105, 0x642, - 0x107, 0x643, 0x106, 0x643, 0x104, 0x643, 0x105, 0x643, - 0x107, 0x644, 0x106, 0x644, 0x104, 0x644, 0x105, 0x644, - 0x107, 0x645, 0x106, 0x645, 0x104, 0x645, 0x105, 0x645, - 0x107, 0x646, 0x106, 0x646, 0x104, 0x646, 0x105, 0x646, - 0x107, 0x647, 0x106, 0x647, 0x104, 0x647, 0x105, 0x647, - 0x107, 0x648, 0x106, 0x648, 0x107, 0x649, 0x106, 0x649, - 0x107, 0x64a, 0x106, 0x64a, 0x104, 0x64a, 0x105, 0x64a, - 0x207, 0x644, 0x622, 0x206, 0x644, 0x622, 0x207, 0x644, - 0x623, 0x206, 0x644, 0x623, 0x207, 0x644, 0x625, 0x206, - 0x644, 0x625, 0x207, 0x644, 0x627, 0x206, 0x644, 0x627, - 0x10c, 0x21, 0x10c, 0x22, 0x10c, 0x23, 0x10c, 0x24, - 0x10c, 0x25, 0x10c, 0x26, 0x10c, 0x27, 0x10c, 0x28, - 0x10c, 0x29, 0x10c, 0x2a, 0x10c, 0x2b, 0x10c, 0x2c, - 0x10c, 0x2d, 0x10c, 0x2e, 0x10c, 0x2f, 0x10c, 0x30, - 0x10c, 0x31, 0x10c, 0x32, 0x10c, 0x33, 0x10c, 0x34, - 0x10c, 0x35, 0x10c, 0x36, 0x10c, 0x37, 0x10c, 0x38, - 0x10c, 0x39, 0x10c, 0x3a, 0x10c, 0x3b, 0x10c, 0x3c, - 0x10c, 0x3d, 0x10c, 0x3e, 0x10c, 0x3f, 0x10c, 0x40, - 0x10c, 0x41, 0x10c, 0x42, 0x10c, 0x43, 0x10c, 0x44, - 0x10c, 0x45, 0x10c, 0x46, 0x10c, 0x47, 0x10c, 0x48, - 0x10c, 0x49, 0x10c, 0x4a, 0x10c, 0x4b, 0x10c, 0x4c, - 0x10c, 0x4d, 0x10c, 0x4e, 0x10c, 0x4f, 0x10c, 0x50, - 0x10c, 0x51, 0x10c, 0x52, 0x10c, 0x53, 0x10c, 0x54, - 0x10c, 0x55, 0x10c, 0x56, 0x10c, 0x57, 0x10c, 0x58, - 0x10c, 0x59, 0x10c, 0x5a, 0x10c, 0x5b, 0x10c, 0x5c, - 0x10c, 0x5d, 0x10c, 0x5e, 0x10c, 0x5f, 0x10c, 0x60, - 0x10c, 0x61, 0x10c, 0x62, 0x10c, 0x63, 0x10c, 0x64, - 0x10c, 0x65, 0x10c, 0x66, 0x10c, 0x67, 0x10c, 0x68, - 0x10c, 0x69, 0x10c, 0x6a, 0x10c, 0x6b, 0x10c, 0x6c, - 0x10c, 0x6d, 0x10c, 0x6e, 0x10c, 0x6f, 0x10c, 0x70, - 0x10c, 0x71, 0x10c, 0x72, 0x10c, 0x73, 0x10c, 0x74, - 0x10c, 0x75, 0x10c, 0x76, 0x10c, 0x77, 0x10c, 0x78, - 0x10c, 0x79, 0x10c, 0x7a, 0x10c, 0x7b, 0x10c, 0x7c, - 0x10c, 0x7d, 0x10c, 0x7e, 0x10c, 0x2985, 0x10c, 0x2986, - 0x10d, 0x3002, 0x10d, 0x300c, 0x10d, 0x300d, 0x10d, 0x3001, - 0x10d, 0x30fb, 0x10d, 0x30f2, 0x10d, 0x30a1, 0x10d, 0x30a3, - 0x10d, 0x30a5, 0x10d, 0x30a7, 0x10d, 0x30a9, 0x10d, 0x30e3, - 0x10d, 0x30e5, 0x10d, 0x30e7, 0x10d, 0x30c3, 0x10d, 0x30fc, - 0x10d, 0x30a2, 0x10d, 0x30a4, 0x10d, 0x30a6, 0x10d, 0x30a8, - 0x10d, 0x30aa, 0x10d, 0x30ab, 0x10d, 0x30ad, 0x10d, 0x30af, - 0x10d, 0x30b1, 0x10d, 0x30b3, 0x10d, 0x30b5, 0x10d, 0x30b7, - 0x10d, 0x30b9, 0x10d, 0x30bb, 0x10d, 0x30bd, 0x10d, 0x30bf, - 0x10d, 0x30c1, 0x10d, 0x30c4, 0x10d, 0x30c6, 0x10d, 0x30c8, - 0x10d, 0x30ca, 0x10d, 0x30cb, 0x10d, 0x30cc, 0x10d, 0x30cd, - 0x10d, 0x30ce, 0x10d, 0x30cf, 0x10d, 0x30d2, 0x10d, 0x30d5, - 0x10d, 0x30d8, 0x10d, 0x30db, 0x10d, 0x30de, 0x10d, 0x30df, - 0x10d, 0x30e0, 0x10d, 0x30e1, 0x10d, 0x30e2, 0x10d, 0x30e4, - 0x10d, 0x30e6, 0x10d, 0x30e8, 0x10d, 0x30e9, 0x10d, 0x30ea, - 0x10d, 0x30eb, 0x10d, 0x30ec, 0x10d, 0x30ed, 0x10d, 0x30ef, - 0x10d, 0x30f3, 0x10d, 0x3099, 0x10d, 0x309a, 0x10d, 0x3164, - 0x10d, 0x3131, 0x10d, 0x3132, 0x10d, 0x3133, 0x10d, 0x3134, - 0x10d, 0x3135, 0x10d, 0x3136, 0x10d, 0x3137, 0x10d, 0x3138, - 0x10d, 0x3139, 0x10d, 0x313a, 0x10d, 0x313b, 0x10d, 0x313c, - 0x10d, 0x313d, 0x10d, 0x313e, 0x10d, 0x313f, 0x10d, 0x3140, - 0x10d, 0x3141, 0x10d, 0x3142, 0x10d, 0x3143, 0x10d, 0x3144, - 0x10d, 0x3145, 0x10d, 0x3146, 0x10d, 0x3147, 0x10d, 0x3148, - 0x10d, 0x3149, 0x10d, 0x314a, 0x10d, 0x314b, 0x10d, 0x314c, - 0x10d, 0x314d, 0x10d, 0x314e, 0x10d, 0x314f, 0x10d, 0x3150, - 0x10d, 0x3151, 0x10d, 0x3152, 0x10d, 0x3153, 0x10d, 0x3154, - 0x10d, 0x3155, 0x10d, 0x3156, 0x10d, 0x3157, 0x10d, 0x3158, - 0x10d, 0x3159, 0x10d, 0x315a, 0x10d, 0x315b, 0x10d, 0x315c, - 0x10d, 0x315d, 0x10d, 0x315e, 0x10d, 0x315f, 0x10d, 0x3160, - 0x10d, 0x3161, 0x10d, 0x3162, 0x10d, 0x3163, 0x10c, 0xa2, - 0x10c, 0xa3, 0x10c, 0xac, 0x10c, 0xaf, 0x10c, 0xa6, - 0x10c, 0xa5, 0x10c, 0x20a9, 0x10d, 0x2502, 0x10d, 0x2190, - 0x10d, 0x2191, 0x10d, 0x2192, 0x10d, 0x2193, 0x10d, 0x25a0, - 0x10d, 0x25cb, 0x401, 0xd804, 0xdc99, 0xd804, 0xdcba, 0x401, - 0xd804, 0xdc9b, 0xd804, 0xdcba, 0x401, 0xd804, 0xdca5, 0xd804, - 0xdcba, 0x401, 0xd804, 0xdd31, 0xd804, 0xdd27, 0x401, 0xd804, - 0xdd32, 0xd804, 0xdd27, 0x401, 0xd834, 0xdd57, 0xd834, 0xdd65, - 0x401, 0xd834, 0xdd58, 0xd834, 0xdd65, 0x401, 0xd834, 0xdd5f, - 0xd834, 0xdd6e, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6f, 0x401, - 0xd834, 0xdd5f, 0xd834, 0xdd70, 0x401, 0xd834, 0xdd5f, 0xd834, - 0xdd71, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd72, 0x401, 0xd834, - 0xddb9, 0xd834, 0xdd65, 0x401, 0xd834, 0xddba, 0xd834, 0xdd65, - 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbc, - 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6f, 0x401, - 0xd834, 0xddbc, 0xd834, 0xdd6f, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, - 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, - 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, - 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, - 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, - 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, - 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, - 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x43, 0x102, 0x44, - 0x102, 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x53, - 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, - 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x66, - 0x102, 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, - 0x102, 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, - 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, - 0x102, 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, - 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x44, - 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x49, - 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, - 0x102, 0x4f, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, - 0x102, 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x131, 0x102, 0x237, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, - 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, - 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, - 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, - 0x102, 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, - 0x102, 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, - 0x102, 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, - 0x102, 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, - 0x102, 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, - 0x102, 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, - 0x102, 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, - 0x102, 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, - 0x102, 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, - 0x102, 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, - 0x102, 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, - 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, - 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, - 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, - 0x102, 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, - 0x102, 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, - 0x102, 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, - 0x102, 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, - 0x102, 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, - 0x102, 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, - 0x102, 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, - 0x102, 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, - 0x102, 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, - 0x102, 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, - 0x102, 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x3dc, 0x102, 0x3dd, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, - 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, - 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, - 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, - 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x627, 0x102, 0x628, - 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, - 0x102, 0x62d, 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, - 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, - 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, - 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, 0x62b, - 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, 0x638, - 0x102, 0x63a, 0x102, 0x66e, 0x102, 0x6ba, 0x102, 0x6a1, - 0x102, 0x66f, 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, - 0x102, 0x62d, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x644, - 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, - 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, - 0x102, 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, - 0x102, 0x63a, 0x102, 0x62c, 0x102, 0x62d, 0x102, 0x64a, - 0x102, 0x644, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62e, - 0x102, 0x636, 0x102, 0x63a, 0x102, 0x6ba, 0x102, 0x66f, - 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, 0x62d, - 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x645, - 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62a, - 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, 0x638, - 0x102, 0x63a, 0x102, 0x66e, 0x102, 0x6a1, 0x102, 0x627, - 0x102, 0x628, 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x647, - 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, 0x637, - 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, - 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, - 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, - 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, - 0x102, 0x638, 0x102, 0x63a, 0x102, 0x628, 0x102, 0x62c, - 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, - 0x102, 0x637, 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, - 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, - 0x102, 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, - 0x102, 0x636, 0x102, 0x638, 0x102, 0x63a, 0x210, 0x30, - 0x2e, 0x210, 0x30, 0x2c, 0x210, 0x31, 0x2c, 0x210, - 0x32, 0x2c, 0x210, 0x33, 0x2c, 0x210, 0x34, 0x2c, - 0x210, 0x35, 0x2c, 0x210, 0x36, 0x2c, 0x210, 0x37, - 0x2c, 0x210, 0x38, 0x2c, 0x210, 0x39, 0x2c, 0x310, - 0x28, 0x41, 0x29, 0x310, 0x28, 0x42, 0x29, 0x310, - 0x28, 0x43, 0x29, 0x310, 0x28, 0x44, 0x29, 0x310, - 0x28, 0x45, 0x29, 0x310, 0x28, 0x46, 0x29, 0x310, - 0x28, 0x47, 0x29, 0x310, 0x28, 0x48, 0x29, 0x310, - 0x28, 0x49, 0x29, 0x310, 0x28, 0x4a, 0x29, 0x310, - 0x28, 0x4b, 0x29, 0x310, 0x28, 0x4c, 0x29, 0x310, - 0x28, 0x4d, 0x29, 0x310, 0x28, 0x4e, 0x29, 0x310, - 0x28, 0x4f, 0x29, 0x310, 0x28, 0x50, 0x29, 0x310, - 0x28, 0x51, 0x29, 0x310, 0x28, 0x52, 0x29, 0x310, - 0x28, 0x53, 0x29, 0x310, 0x28, 0x54, 0x29, 0x310, - 0x28, 0x55, 0x29, 0x310, 0x28, 0x56, 0x29, 0x310, - 0x28, 0x57, 0x29, 0x310, 0x28, 0x58, 0x29, 0x310, - 0x28, 0x59, 0x29, 0x310, 0x28, 0x5a, 0x29, 0x310, - 0x3014, 0x53, 0x3015, 0x108, 0x43, 0x108, 0x52, 0x208, - 0x43, 0x44, 0x208, 0x57, 0x5a, 0x10f, 0x41, 0x10f, - 0x42, 0x10f, 0x43, 0x10f, 0x44, 0x10f, 0x45, 0x10f, - 0x46, 0x10f, 0x47, 0x10f, 0x48, 0x10f, 0x49, 0x10f, - 0x4a, 0x10f, 0x4b, 0x10f, 0x4c, 0x10f, 0x4d, 0x10f, - 0x4e, 0x10f, 0x4f, 0x10f, 0x50, 0x10f, 0x51, 0x10f, - 0x52, 0x10f, 0x53, 0x10f, 0x54, 0x10f, 0x55, 0x10f, - 0x56, 0x10f, 0x57, 0x10f, 0x58, 0x10f, 0x59, 0x10f, - 0x5a, 0x20f, 0x48, 0x56, 0x20f, 0x4d, 0x56, 0x20f, - 0x53, 0x44, 0x20f, 0x53, 0x53, 0x30f, 0x50, 0x50, - 0x56, 0x20f, 0x57, 0x43, 0x209, 0x4d, 0x43, 0x209, - 0x4d, 0x44, 0x20f, 0x44, 0x4a, 0x20f, 0x307b, 0x304b, - 0x20f, 0x30b3, 0x30b3, 0x10f, 0x30b5, 0x10f, 0x624b, 0x10f, - 0x5b57, 0x10f, 0x53cc, 0x10f, 0x30c7, 0x10f, 0x4e8c, 0x10f, - 0x591a, 0x10f, 0x89e3, 0x10f, 0x5929, 0x10f, 0x4ea4, 0x10f, - 0x6620, 0x10f, 0x7121, 0x10f, 0x6599, 0x10f, 0x524d, 0x10f, - 0x5f8c, 0x10f, 0x518d, 0x10f, 0x65b0, 0x10f, 0x521d, 0x10f, - 0x7d42, 0x10f, 0x751f, 0x10f, 0x8ca9, 0x10f, 0x58f0, 0x10f, - 0x5439, 0x10f, 0x6f14, 0x10f, 0x6295, 0x10f, 0x6355, 0x10f, - 0x4e00, 0x10f, 0x4e09, 0x10f, 0x904a, 0x10f, 0x5de6, 0x10f, - 0x4e2d, 0x10f, 0x53f3, 0x10f, 0x6307, 0x10f, 0x8d70, 0x10f, - 0x6253, 0x10f, 0x7981, 0x10f, 0x7a7a, 0x10f, 0x5408, 0x10f, - 0x6e80, 0x10f, 0x6709, 0x10f, 0x6708, 0x10f, 0x7533, 0x10f, - 0x5272, 0x10f, 0x55b6, 0x310, 0x3014, 0x672c, 0x3015, 0x310, - 0x3014, 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015, 0x310, - 0x3014, 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015, 0x310, - 0x3014, 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015, 0x310, - 0x3014, 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015, 0x108, - 0x5f97, 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38, 0x101, - 0x4e41, 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101, 0x4fae, - 0x101, 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101, 0x5099, - 0x101, 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201, 0xd841, - 0xde3a, 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164, 0x101, - 0x5177, 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101, 0x5167, - 0x101, 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197, 0x101, - 0x51a4, 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5, 0x201, - 0xd864, 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101, 0x34df, - 0x101, 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101, 0x5277, - 0x101, 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101, 0x52e4, - 0x101, 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101, 0x5317, - 0x101, 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101, 0x5373, - 0x101, 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101, 0x537f, - 0x201, 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca, 0x101, - 0x53df, 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101, 0x53f1, - 0x101, 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101, 0x5448, - 0x101, 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101, 0x5510, - 0x101, 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101, 0x5584, - 0x101, 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101, 0x55c2, - 0x101, 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101, 0x5651, - 0x101, 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101, 0x57ce, - 0x101, 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101, 0x5832, - 0x101, 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4, 0x101, - 0x58f2, 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a, 0x101, - 0x5922, 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201, 0xd845, - 0xdeea, 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27, 0x101, - 0x59d8, 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc, 0x101, - 0x5b08, 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846, 0xddc8, - 0x101, 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101, 0x5bf3, - 0x201, 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06, 0x101, - 0x5f53, 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60, 0x101, - 0x5c6e, 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847, 0xdde4, - 0x101, 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e, 0x101, - 0x5d6b, 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2, 0x101, - 0x382f, 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d, 0x101, - 0x5e69, 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101, 0x387c, - 0x101, 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101, 0x5eca, - 0x201, 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848, 0xdf31, - 0x201, 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22, 0x101, - 0x5f22, 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201, 0xd858, - 0xddda, 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3, 0x101, - 0x5f9a, 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9, 0x101, - 0x6081, 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094, 0x201, - 0xd849, 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101, 0x614c, - 0x101, 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101, 0x618e, - 0x101, 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101, 0x61de, - 0x101, 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101, 0x621b, - 0x101, 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101, 0x6350, - 0x201, 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc, 0x101, - 0x6368, 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a, 0xdff1, - 0x101, 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101, 0x3a2e, - 0x101, 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101, 0x6477, - 0x101, 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201, 0xd84c, - 0xdc0a, 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649, 0x101, - 0x3b19, 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4, 0x101, - 0x5192, 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c, 0x101, - 0x80ad, 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b, 0x101, - 0x6721, 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c, 0xdfc3, - 0x101, 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101, 0x6852, - 0x101, 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e, 0x101, - 0x681f, 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942, 0x101, - 0x69a3, 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d, 0xdea3, - 0x101, 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201, 0xd84e, - 0xdca7, 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72, 0x101, - 0x6b9f, 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e, 0xde8d, - 0x201, 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101, 0x6c4e, - 0x201, 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd, 0x101, - 0x6c67, 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77, 0x101, - 0x6d41, 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85, 0x201, - 0xd84f, 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101, 0x6e6e, - 0x101, 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201, 0xd84f, - 0xded1, 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f, 0xdf5e, - 0x201, 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039, 0x101, - 0x701e, 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a, 0x101, - 0x707d, 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841, 0xdd25, - 0x101, 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c, 0x201, - 0xd850, 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101, 0x7250, - 0x201, 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295, 0x201, - 0xd851, 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a, 0x101, - 0x738b, 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8, 0x101, - 0x3eb8, 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471, 0x101, - 0x7485, 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524, 0x201, - 0xd853, 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92, 0x101, - 0x7570, 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201, 0xd853, - 0xdfa1, 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44, 0x101, - 0x3ffc, 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854, 0xdcf3, - 0x201, 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201, 0xd854, - 0xdd33, 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f, 0x101, - 0x774a, 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046, 0x101, - 0x4096, 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101, 0x788c, - 0x101, 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26, 0x101, - 0x7956, 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5, 0x101, - 0x798f, 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40, 0x101, - 0x7a4a, 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201, 0xd856, - 0xdea7, 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101, 0x4202, - 0x201, 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9, 0x101, - 0x4227, 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101, 0x42a0, - 0x101, 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201, 0xd857, - 0xdf86, 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7, 0x101, - 0x7e02, 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858, 0xde28, - 0x201, 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858, 0xded9, - 0x101, 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95, 0x101, - 0x7ffa, 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201, 0xd859, - 0xdd23, 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101, 0x8070, - 0x201, 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2, 0x101, - 0x8103, 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5, 0x201, - 0xd859, 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c, 0xdf93, - 0x201, 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204, 0x101, - 0x8f9e, 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b, 0x101, - 0x829d, 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3, 0x101, - 0x82bd, 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101, 0x82e5, - 0x101, 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101, 0x8323, - 0x101, 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101, 0x8353, - 0x101, 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201, 0xd85b, - 0xdc36, 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5, 0x101, - 0x452b, 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516, 0x201, - 0xd85c, 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c, 0x101, - 0x455d, 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201, 0xd85c, - 0xdcd2, 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c, 0x101, - 0x8667, 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688, 0x101, - 0x870e, 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728, 0x101, - 0x876b, 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1, 0x101, - 0x8801, 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863, 0x201, - 0xd85d, 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101, 0x4635, - 0x101, 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae, 0x201, - 0xd85e, 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101, 0x8aa0, - 0x101, 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201, 0xd85f, - 0xdca8, 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b, 0x101, - 0x8d77, 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04, 0x101, - 0x8dcb, 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842, 0xdcde, - 0x101, 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2, 0x201, - 0xd861, 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101, 0x9111, - 0x201, 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238, 0x101, - 0x92d7, 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9, 0x101, - 0x9415, 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101, 0x4995, - 0x101, 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6, 0x101, - 0x96c3, 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864, 0xdd45, - 0x201, 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76, 0x101, - 0x97e0, 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201, 0xd865, - 0xdc96, 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829, 0x201, - 0xd865, 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101, 0x9929, - 0x101, 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101, 0x4bce, - 0x201, 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40, 0x101, - 0x9cfd, 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67, 0x201, - 0xd868, 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05, 0x201, - 0xd868, 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb, 0x101, - 0x4d56, 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05, 0x101, - 0x9f0f, 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869, 0xde00 -}; - -static const unsigned short uc_ligature_trie[] = { - // 0 - 0x3100 - - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 663, 695, 727, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 759, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 791, 631, 631, 631, 823, 855, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 887, 919, 631, 631, 951, 983, 631, - 631, 631, 1015, 631, 631, 631, 1047, 631, - 631, 1079, 1111, 631, 631, 631, 1143, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 1175, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 1207, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 631, 631, 631, 1239, 631, 631, 631, - - // 0x3100 - 0x12000 - - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1527, - 1783, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, - - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x0, 0xa9, 0x194, 0x1d5, 0x20e, 0xffff, 0x267, 0x2a8, - 0x305, 0x372, 0x3a3, 0x3b0, 0x3bd, 0xffff, 0xffff, 0x408, - 0xffff, 0x425, 0xffff, 0x43e, 0x45b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x47c, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x485, 0x4da, 0x4df, 0x4e4, 0x4ed, - 0x51a, 0xffff, 0xffff, 0xffff, 0xffff, 0x52f, 0x548, 0xffff, - 0x54d, 0x55a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x57d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x5d6, 0xffff, 0xffff, 0x611, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x690, 0x693, 0x6a0, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x6a3, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6aa, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6ad, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b0, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b3, 0x6b6, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b9, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6be, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c3, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x6c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c9, 0x6d0, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d3, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d8, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x6db, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e0, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e3, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e6, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e9, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x700, 0x761, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x776, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x783, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -#define GET_LIGATURE_INDEX(ucs4) \ - (ucs4 < 0x3100 \ - ? (uc_ligature_trie[uc_ligature_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ - : (ucs4 < 0x12000\ - ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)]\ - : 0xffff)) - -static const unsigned short uc_ligature_map[] = { - 0x54, 0x41, 0xc0, 0x45, 0xc8, 0x49, 0xcc, 0x4e, - 0x1f8, 0x4f, 0xd2, 0x55, 0xd9, 0x57, 0x1e80, 0x59, - 0x1ef2, 0x61, 0xe0, 0x65, 0xe8, 0x69, 0xec, 0x6e, - 0x1f9, 0x6f, 0xf2, 0x75, 0xf9, 0x77, 0x1e81, 0x79, - 0x1ef3, 0xa8, 0x1fed, 0xc2, 0x1ea6, 0xca, 0x1ec0, 0xd4, - 0x1ed2, 0xdc, 0x1db, 0xe2, 0x1ea7, 0xea, 0x1ec1, 0xf4, - 0x1ed3, 0xfc, 0x1dc, 0x102, 0x1eb0, 0x103, 0x1eb1, 0x112, - 0x1e14, 0x113, 0x1e15, 0x14c, 0x1e50, 0x14d, 0x1e51, 0x1a0, - 0x1edc, 0x1a1, 0x1edd, 0x1af, 0x1eea, 0x1b0, 0x1eeb, 0x391, - 0x1fba, 0x395, 0x1fc8, 0x397, 0x1fca, 0x399, 0x1fda, 0x39f, - 0x1ff8, 0x3a5, 0x1fea, 0x3a9, 0x1ffa, 0x3b1, 0x1f70, 0x3b5, - 0x1f72, 0x3b7, 0x1f74, 0x3b9, 0x1f76, 0x3bf, 0x1f78, 0x3c5, - 0x1f7a, 0x3c9, 0x1f7c, 0x3ca, 0x1fd2, 0x3cb, 0x1fe2, 0x415, - 0x400, 0x418, 0x40d, 0x435, 0x450, 0x438, 0x45d, 0x1f00, - 0x1f02, 0x1f01, 0x1f03, 0x1f08, 0x1f0a, 0x1f09, 0x1f0b, 0x1f10, - 0x1f12, 0x1f11, 0x1f13, 0x1f18, 0x1f1a, 0x1f19, 0x1f1b, 0x1f20, - 0x1f22, 0x1f21, 0x1f23, 0x1f28, 0x1f2a, 0x1f29, 0x1f2b, 0x1f30, - 0x1f32, 0x1f31, 0x1f33, 0x1f38, 0x1f3a, 0x1f39, 0x1f3b, 0x1f40, - 0x1f42, 0x1f41, 0x1f43, 0x1f48, 0x1f4a, 0x1f49, 0x1f4b, 0x1f50, - 0x1f52, 0x1f51, 0x1f53, 0x1f59, 0x1f5b, 0x1f60, 0x1f62, 0x1f61, - 0x1f63, 0x1f68, 0x1f6a, 0x1f69, 0x1f6b, 0x1fbf, 0x1fcd, 0x1ffe, - 0x1fdd, 0x75, 0x41, 0xc1, 0x43, 0x106, 0x45, 0xc9, - 0x47, 0x1f4, 0x49, 0xcd, 0x4b, 0x1e30, 0x4c, 0x139, - 0x4d, 0x1e3e, 0x4e, 0x143, 0x4f, 0xd3, 0x50, 0x1e54, - 0x52, 0x154, 0x53, 0x15a, 0x55, 0xda, 0x57, 0x1e82, - 0x59, 0xdd, 0x5a, 0x179, 0x61, 0xe1, 0x63, 0x107, - 0x65, 0xe9, 0x67, 0x1f5, 0x69, 0xed, 0x6b, 0x1e31, - 0x6c, 0x13a, 0x6d, 0x1e3f, 0x6e, 0x144, 0x6f, 0xf3, - 0x70, 0x1e55, 0x72, 0x155, 0x73, 0x15b, 0x75, 0xfa, - 0x77, 0x1e83, 0x79, 0xfd, 0x7a, 0x17a, 0xa8, 0x385, - 0xc2, 0x1ea4, 0xc5, 0x1fa, 0xc6, 0x1fc, 0xc7, 0x1e08, - 0xca, 0x1ebe, 0xcf, 0x1e2e, 0xd4, 0x1ed0, 0xd5, 0x1e4c, - 0xd8, 0x1fe, 0xdc, 0x1d7, 0xe2, 0x1ea5, 0xe5, 0x1fb, - 0xe6, 0x1fd, 0xe7, 0x1e09, 0xea, 0x1ebf, 0xef, 0x1e2f, - 0xf4, 0x1ed1, 0xf5, 0x1e4d, 0xf8, 0x1ff, 0xfc, 0x1d8, - 0x102, 0x1eae, 0x103, 0x1eaf, 0x112, 0x1e16, 0x113, 0x1e17, - 0x14c, 0x1e52, 0x14d, 0x1e53, 0x168, 0x1e78, 0x169, 0x1e79, - 0x1a0, 0x1eda, 0x1a1, 0x1edb, 0x1af, 0x1ee8, 0x1b0, 0x1ee9, - 0x391, 0x386, 0x395, 0x388, 0x397, 0x389, 0x399, 0x38a, - 0x39f, 0x38c, 0x3a5, 0x38e, 0x3a9, 0x38f, 0x3b1, 0x3ac, - 0x3b5, 0x3ad, 0x3b7, 0x3ae, 0x3b9, 0x3af, 0x3bf, 0x3cc, - 0x3c5, 0x3cd, 0x3c9, 0x3ce, 0x3ca, 0x390, 0x3cb, 0x3b0, - 0x3d2, 0x3d3, 0x413, 0x403, 0x41a, 0x40c, 0x433, 0x453, - 0x43a, 0x45c, 0x1f00, 0x1f04, 0x1f01, 0x1f05, 0x1f08, 0x1f0c, - 0x1f09, 0x1f0d, 0x1f10, 0x1f14, 0x1f11, 0x1f15, 0x1f18, 0x1f1c, - 0x1f19, 0x1f1d, 0x1f20, 0x1f24, 0x1f21, 0x1f25, 0x1f28, 0x1f2c, - 0x1f29, 0x1f2d, 0x1f30, 0x1f34, 0x1f31, 0x1f35, 0x1f38, 0x1f3c, - 0x1f39, 0x1f3d, 0x1f40, 0x1f44, 0x1f41, 0x1f45, 0x1f48, 0x1f4c, - 0x1f49, 0x1f4d, 0x1f50, 0x1f54, 0x1f51, 0x1f55, 0x1f59, 0x1f5d, - 0x1f60, 0x1f64, 0x1f61, 0x1f65, 0x1f68, 0x1f6c, 0x1f69, 0x1f6d, - 0x1fbf, 0x1fce, 0x1ffe, 0x1fde, 0x20, 0x41, 0xc2, 0x43, - 0x108, 0x45, 0xca, 0x47, 0x11c, 0x48, 0x124, 0x49, - 0xce, 0x4a, 0x134, 0x4f, 0xd4, 0x53, 0x15c, 0x55, - 0xdb, 0x57, 0x174, 0x59, 0x176, 0x5a, 0x1e90, 0x61, - 0xe2, 0x63, 0x109, 0x65, 0xea, 0x67, 0x11d, 0x68, - 0x125, 0x69, 0xee, 0x6a, 0x135, 0x6f, 0xf4, 0x73, - 0x15d, 0x75, 0xfb, 0x77, 0x175, 0x79, 0x177, 0x7a, - 0x1e91, 0x1ea0, 0x1eac, 0x1ea1, 0x1ead, 0x1eb8, 0x1ec6, 0x1eb9, - 0x1ec7, 0x1ecc, 0x1ed8, 0x1ecd, 0x1ed9, 0x1c, 0x41, 0xc3, - 0x45, 0x1ebc, 0x49, 0x128, 0x4e, 0xd1, 0x4f, 0xd5, - 0x55, 0x168, 0x56, 0x1e7c, 0x59, 0x1ef8, 0x61, 0xe3, - 0x65, 0x1ebd, 0x69, 0x129, 0x6e, 0xf1, 0x6f, 0xf5, - 0x75, 0x169, 0x76, 0x1e7d, 0x79, 0x1ef9, 0xc2, 0x1eaa, - 0xca, 0x1ec4, 0xd4, 0x1ed6, 0xe2, 0x1eab, 0xea, 0x1ec5, - 0xf4, 0x1ed7, 0x102, 0x1eb4, 0x103, 0x1eb5, 0x1a0, 0x1ee0, - 0x1a1, 0x1ee1, 0x1af, 0x1eee, 0x1b0, 0x1eef, 0x2c, 0x41, - 0x100, 0x45, 0x112, 0x47, 0x1e20, 0x49, 0x12a, 0x4f, - 0x14c, 0x55, 0x16a, 0x59, 0x232, 0x61, 0x101, 0x65, - 0x113, 0x67, 0x1e21, 0x69, 0x12b, 0x6f, 0x14d, 0x75, - 0x16b, 0x79, 0x233, 0xc4, 0x1de, 0xc6, 0x1e2, 0xd5, - 0x22c, 0xd6, 0x22a, 0xdc, 0x1d5, 0xe4, 0x1df, 0xe6, - 0x1e3, 0xf5, 0x22d, 0xf6, 0x22b, 0xfc, 0x1d6, 0x1ea, - 0x1ec, 0x1eb, 0x1ed, 0x226, 0x1e0, 0x227, 0x1e1, 0x22e, - 0x230, 0x22f, 0x231, 0x391, 0x1fb9, 0x399, 0x1fd9, 0x3a5, - 0x1fe9, 0x3b1, 0x1fb1, 0x3b9, 0x1fd1, 0x3c5, 0x1fe1, 0x418, - 0x4e2, 0x423, 0x4ee, 0x438, 0x4e3, 0x443, 0x4ef, 0x1e36, - 0x1e38, 0x1e37, 0x1e39, 0x1e5a, 0x1e5c, 0x1e5b, 0x1e5d, 0x20, - 0x41, 0x102, 0x45, 0x114, 0x47, 0x11e, 0x49, 0x12c, - 0x4f, 0x14e, 0x55, 0x16c, 0x61, 0x103, 0x65, 0x115, - 0x67, 0x11f, 0x69, 0x12d, 0x6f, 0x14f, 0x75, 0x16d, - 0x228, 0x1e1c, 0x229, 0x1e1d, 0x391, 0x1fb8, 0x399, 0x1fd8, - 0x3a5, 0x1fe8, 0x3b1, 0x1fb0, 0x3b9, 0x1fd0, 0x3c5, 0x1fe0, - 0x410, 0x4d0, 0x415, 0x4d6, 0x416, 0x4c1, 0x418, 0x419, - 0x423, 0x40e, 0x430, 0x4d1, 0x435, 0x4d7, 0x436, 0x4c2, - 0x438, 0x439, 0x443, 0x45e, 0x1ea0, 0x1eb6, 0x1ea1, 0x1eb7, - 0x2e, 0x41, 0x226, 0x42, 0x1e02, 0x43, 0x10a, 0x44, - 0x1e0a, 0x45, 0x116, 0x46, 0x1e1e, 0x47, 0x120, 0x48, - 0x1e22, 0x49, 0x130, 0x4d, 0x1e40, 0x4e, 0x1e44, 0x4f, - 0x22e, 0x50, 0x1e56, 0x52, 0x1e58, 0x53, 0x1e60, 0x54, - 0x1e6a, 0x57, 0x1e86, 0x58, 0x1e8a, 0x59, 0x1e8e, 0x5a, - 0x17b, 0x61, 0x227, 0x62, 0x1e03, 0x63, 0x10b, 0x64, - 0x1e0b, 0x65, 0x117, 0x66, 0x1e1f, 0x67, 0x121, 0x68, - 0x1e23, 0x6d, 0x1e41, 0x6e, 0x1e45, 0x6f, 0x22f, 0x70, - 0x1e57, 0x72, 0x1e59, 0x73, 0x1e61, 0x74, 0x1e6b, 0x77, - 0x1e87, 0x78, 0x1e8b, 0x79, 0x1e8f, 0x7a, 0x17c, 0x15a, - 0x1e64, 0x15b, 0x1e65, 0x160, 0x1e66, 0x161, 0x1e67, 0x17f, - 0x1e9b, 0x1e62, 0x1e68, 0x1e63, 0x1e69, 0x36, 0x41, 0xc4, - 0x45, 0xcb, 0x48, 0x1e26, 0x49, 0xcf, 0x4f, 0xd6, - 0x55, 0xdc, 0x57, 0x1e84, 0x58, 0x1e8c, 0x59, 0x178, - 0x61, 0xe4, 0x65, 0xeb, 0x68, 0x1e27, 0x69, 0xef, - 0x6f, 0xf6, 0x74, 0x1e97, 0x75, 0xfc, 0x77, 0x1e85, - 0x78, 0x1e8d, 0x79, 0xff, 0xd5, 0x1e4e, 0xf5, 0x1e4f, - 0x16a, 0x1e7a, 0x16b, 0x1e7b, 0x399, 0x3aa, 0x3a5, 0x3ab, - 0x3b9, 0x3ca, 0x3c5, 0x3cb, 0x3d2, 0x3d4, 0x406, 0x407, - 0x410, 0x4d2, 0x415, 0x401, 0x416, 0x4dc, 0x417, 0x4de, - 0x418, 0x4e4, 0x41e, 0x4e6, 0x423, 0x4f0, 0x427, 0x4f4, - 0x42b, 0x4f8, 0x42d, 0x4ec, 0x430, 0x4d3, 0x435, 0x451, - 0x436, 0x4dd, 0x437, 0x4df, 0x438, 0x4e5, 0x43e, 0x4e7, - 0x443, 0x4f1, 0x447, 0x4f5, 0x44b, 0x4f9, 0x44d, 0x4ed, - 0x456, 0x457, 0x4d8, 0x4da, 0x4d9, 0x4db, 0x4e8, 0x4ea, - 0x4e9, 0x4eb, 0x18, 0x41, 0x1ea2, 0x45, 0x1eba, 0x49, - 0x1ec8, 0x4f, 0x1ece, 0x55, 0x1ee6, 0x59, 0x1ef6, 0x61, - 0x1ea3, 0x65, 0x1ebb, 0x69, 0x1ec9, 0x6f, 0x1ecf, 0x75, - 0x1ee7, 0x79, 0x1ef7, 0xc2, 0x1ea8, 0xca, 0x1ec2, 0xd4, - 0x1ed4, 0xe2, 0x1ea9, 0xea, 0x1ec3, 0xf4, 0x1ed5, 0x102, - 0x1eb2, 0x103, 0x1eb3, 0x1a0, 0x1ede, 0x1a1, 0x1edf, 0x1af, - 0x1eec, 0x1b0, 0x1eed, 0x6, 0x41, 0xc5, 0x55, 0x16e, - 0x61, 0xe5, 0x75, 0x16f, 0x77, 0x1e98, 0x79, 0x1e99, - 0x6, 0x4f, 0x150, 0x55, 0x170, 0x6f, 0x151, 0x75, - 0x171, 0x423, 0x4f2, 0x443, 0x4f3, 0x25, 0x41, 0x1cd, - 0x43, 0x10c, 0x44, 0x10e, 0x45, 0x11a, 0x47, 0x1e6, - 0x48, 0x21e, 0x49, 0x1cf, 0x4b, 0x1e8, 0x4c, 0x13d, - 0x4e, 0x147, 0x4f, 0x1d1, 0x52, 0x158, 0x53, 0x160, - 0x54, 0x164, 0x55, 0x1d3, 0x5a, 0x17d, 0x61, 0x1ce, - 0x63, 0x10d, 0x64, 0x10f, 0x65, 0x11b, 0x67, 0x1e7, - 0x68, 0x21f, 0x69, 0x1d0, 0x6a, 0x1f0, 0x6b, 0x1e9, - 0x6c, 0x13e, 0x6e, 0x148, 0x6f, 0x1d2, 0x72, 0x159, - 0x73, 0x161, 0x74, 0x165, 0x75, 0x1d4, 0x7a, 0x17e, - 0xdc, 0x1d9, 0xfc, 0x1da, 0x1b7, 0x1ee, 0x292, 0x1ef, - 0xe, 0x41, 0x200, 0x45, 0x204, 0x49, 0x208, 0x4f, - 0x20c, 0x52, 0x210, 0x55, 0x214, 0x61, 0x201, 0x65, - 0x205, 0x69, 0x209, 0x6f, 0x20d, 0x72, 0x211, 0x75, - 0x215, 0x474, 0x476, 0x475, 0x477, 0xc, 0x41, 0x202, - 0x45, 0x206, 0x49, 0x20a, 0x4f, 0x20e, 0x52, 0x212, - 0x55, 0x216, 0x61, 0x203, 0x65, 0x207, 0x69, 0x20b, - 0x6f, 0x20f, 0x72, 0x213, 0x75, 0x217, 0xe, 0x391, - 0x1f08, 0x395, 0x1f18, 0x397, 0x1f28, 0x399, 0x1f38, 0x39f, - 0x1f48, 0x3a9, 0x1f68, 0x3b1, 0x1f00, 0x3b5, 0x1f10, 0x3b7, - 0x1f20, 0x3b9, 0x1f30, 0x3bf, 0x1f40, 0x3c1, 0x1fe4, 0x3c5, - 0x1f50, 0x3c9, 0x1f60, 0x10, 0x391, 0x1f09, 0x395, 0x1f19, - 0x397, 0x1f29, 0x399, 0x1f39, 0x39f, 0x1f49, 0x3a1, 0x1fec, - 0x3a5, 0x1f59, 0x3a9, 0x1f69, 0x3b1, 0x1f01, 0x3b5, 0x1f11, - 0x3b7, 0x1f21, 0x3b9, 0x1f31, 0x3bf, 0x1f41, 0x3c1, 0x1fe5, - 0x3c5, 0x1f51, 0x3c9, 0x1f61, 0x4, 0x4f, 0x1a0, 0x55, - 0x1af, 0x6f, 0x1a1, 0x75, 0x1b0, 0x2a, 0x41, 0x1ea0, - 0x42, 0x1e04, 0x44, 0x1e0c, 0x45, 0x1eb8, 0x48, 0x1e24, - 0x49, 0x1eca, 0x4b, 0x1e32, 0x4c, 0x1e36, 0x4d, 0x1e42, - 0x4e, 0x1e46, 0x4f, 0x1ecc, 0x52, 0x1e5a, 0x53, 0x1e62, - 0x54, 0x1e6c, 0x55, 0x1ee4, 0x56, 0x1e7e, 0x57, 0x1e88, - 0x59, 0x1ef4, 0x5a, 0x1e92, 0x61, 0x1ea1, 0x62, 0x1e05, - 0x64, 0x1e0d, 0x65, 0x1eb9, 0x68, 0x1e25, 0x69, 0x1ecb, - 0x6b, 0x1e33, 0x6c, 0x1e37, 0x6d, 0x1e43, 0x6e, 0x1e47, - 0x6f, 0x1ecd, 0x72, 0x1e5b, 0x73, 0x1e63, 0x74, 0x1e6d, - 0x75, 0x1ee5, 0x76, 0x1e7f, 0x77, 0x1e89, 0x79, 0x1ef5, - 0x7a, 0x1e93, 0x1a0, 0x1ee2, 0x1a1, 0x1ee3, 0x1af, 0x1ef0, - 0x1b0, 0x1ef1, 0x2, 0x55, 0x1e72, 0x75, 0x1e73, 0x2, - 0x41, 0x1e00, 0x61, 0x1e01, 0x4, 0x53, 0x218, 0x54, - 0x21a, 0x73, 0x219, 0x74, 0x21b, 0x16, 0x43, 0xc7, - 0x44, 0x1e10, 0x45, 0x228, 0x47, 0x122, 0x48, 0x1e28, - 0x4b, 0x136, 0x4c, 0x13b, 0x4e, 0x145, 0x52, 0x156, - 0x53, 0x15e, 0x54, 0x162, 0x63, 0xe7, 0x64, 0x1e11, - 0x65, 0x229, 0x67, 0x123, 0x68, 0x1e29, 0x6b, 0x137, - 0x6c, 0x13c, 0x6e, 0x146, 0x72, 0x157, 0x73, 0x15f, - 0x74, 0x163, 0xa, 0x41, 0x104, 0x45, 0x118, 0x49, - 0x12e, 0x4f, 0x1ea, 0x55, 0x172, 0x61, 0x105, 0x65, - 0x119, 0x69, 0x12f, 0x6f, 0x1eb, 0x75, 0x173, 0xc, - 0x44, 0x1e12, 0x45, 0x1e18, 0x4c, 0x1e3c, 0x4e, 0x1e4a, - 0x54, 0x1e70, 0x55, 0x1e76, 0x64, 0x1e13, 0x65, 0x1e19, - 0x6c, 0x1e3d, 0x6e, 0x1e4b, 0x74, 0x1e71, 0x75, 0x1e77, - 0x2, 0x48, 0x1e2a, 0x68, 0x1e2b, 0x6, 0x45, 0x1e1a, - 0x49, 0x1e2c, 0x55, 0x1e74, 0x65, 0x1e1b, 0x69, 0x1e2d, - 0x75, 0x1e75, 0x11, 0x42, 0x1e06, 0x44, 0x1e0e, 0x4b, - 0x1e34, 0x4c, 0x1e3a, 0x4e, 0x1e48, 0x52, 0x1e5e, 0x54, - 0x1e6e, 0x5a, 0x1e94, 0x62, 0x1e07, 0x64, 0x1e0f, 0x68, - 0x1e96, 0x6b, 0x1e35, 0x6c, 0x1e3b, 0x6e, 0x1e49, 0x72, - 0x1e5f, 0x74, 0x1e6f, 0x7a, 0x1e95, 0x2c, 0x3c, 0x226e, - 0x3d, 0x2260, 0x3e, 0x226f, 0x2190, 0x219a, 0x2192, 0x219b, - 0x2194, 0x21ae, 0x21d0, 0x21cd, 0x21d2, 0x21cf, 0x21d4, 0x21ce, - 0x2203, 0x2204, 0x2208, 0x2209, 0x220b, 0x220c, 0x2223, 0x2224, - 0x2225, 0x2226, 0x223c, 0x2241, 0x2243, 0x2244, 0x2245, 0x2247, - 0x2248, 0x2249, 0x224d, 0x226d, 0x2261, 0x2262, 0x2264, 0x2270, - 0x2265, 0x2271, 0x2272, 0x2274, 0x2273, 0x2275, 0x2276, 0x2278, - 0x2277, 0x2279, 0x227a, 0x2280, 0x227b, 0x2281, 0x227c, 0x22e0, - 0x227d, 0x22e1, 0x2282, 0x2284, 0x2283, 0x2285, 0x2286, 0x2288, - 0x2287, 0x2289, 0x2291, 0x22e2, 0x2292, 0x22e3, 0x22a2, 0x22ac, - 0x22a8, 0x22ad, 0x22a9, 0x22ae, 0x22ab, 0x22af, 0x22b2, 0x22ea, - 0x22b3, 0x22eb, 0x22b4, 0x22ec, 0x22b5, 0x22ed, 0x1d, 0xa8, - 0x1fc1, 0x3b1, 0x1fb6, 0x3b7, 0x1fc6, 0x3b9, 0x1fd6, 0x3c5, - 0x1fe6, 0x3c9, 0x1ff6, 0x3ca, 0x1fd7, 0x3cb, 0x1fe7, 0x1f00, - 0x1f06, 0x1f01, 0x1f07, 0x1f08, 0x1f0e, 0x1f09, 0x1f0f, 0x1f20, - 0x1f26, 0x1f21, 0x1f27, 0x1f28, 0x1f2e, 0x1f29, 0x1f2f, 0x1f30, - 0x1f36, 0x1f31, 0x1f37, 0x1f38, 0x1f3e, 0x1f39, 0x1f3f, 0x1f50, - 0x1f56, 0x1f51, 0x1f57, 0x1f59, 0x1f5f, 0x1f60, 0x1f66, 0x1f61, - 0x1f67, 0x1f68, 0x1f6e, 0x1f69, 0x1f6f, 0x1fbf, 0x1fcf, 0x1ffe, - 0x1fdf, 0x3f, 0x391, 0x1fbc, 0x397, 0x1fcc, 0x3a9, 0x1ffc, - 0x3ac, 0x1fb4, 0x3ae, 0x1fc4, 0x3b1, 0x1fb3, 0x3b7, 0x1fc3, - 0x3c9, 0x1ff3, 0x3ce, 0x1ff4, 0x1f00, 0x1f80, 0x1f01, 0x1f81, - 0x1f02, 0x1f82, 0x1f03, 0x1f83, 0x1f04, 0x1f84, 0x1f05, 0x1f85, - 0x1f06, 0x1f86, 0x1f07, 0x1f87, 0x1f08, 0x1f88, 0x1f09, 0x1f89, - 0x1f0a, 0x1f8a, 0x1f0b, 0x1f8b, 0x1f0c, 0x1f8c, 0x1f0d, 0x1f8d, - 0x1f0e, 0x1f8e, 0x1f0f, 0x1f8f, 0x1f20, 0x1f90, 0x1f21, 0x1f91, - 0x1f22, 0x1f92, 0x1f23, 0x1f93, 0x1f24, 0x1f94, 0x1f25, 0x1f95, - 0x1f26, 0x1f96, 0x1f27, 0x1f97, 0x1f28, 0x1f98, 0x1f29, 0x1f99, - 0x1f2a, 0x1f9a, 0x1f2b, 0x1f9b, 0x1f2c, 0x1f9c, 0x1f2d, 0x1f9d, - 0x1f2e, 0x1f9e, 0x1f2f, 0x1f9f, 0x1f60, 0x1fa0, 0x1f61, 0x1fa1, - 0x1f62, 0x1fa2, 0x1f63, 0x1fa3, 0x1f64, 0x1fa4, 0x1f65, 0x1fa5, - 0x1f66, 0x1fa6, 0x1f67, 0x1fa7, 0x1f68, 0x1fa8, 0x1f69, 0x1fa9, - 0x1f6a, 0x1faa, 0x1f6b, 0x1fab, 0x1f6c, 0x1fac, 0x1f6d, 0x1fad, - 0x1f6e, 0x1fae, 0x1f6f, 0x1faf, 0x1f70, 0x1fb2, 0x1f74, 0x1fc2, - 0x1f7c, 0x1ff2, 0x1fb6, 0x1fb7, 0x1fc6, 0x1fc7, 0x1ff6, 0x1ff7, - 0x1, 0x627, 0x622, 0x6, 0x627, 0x623, 0x648, 0x624, - 0x64a, 0x626, 0x6c1, 0x6c2, 0x6d2, 0x6d3, 0x6d5, 0x6c0, - 0x1, 0x627, 0x625, 0x3, 0x928, 0x929, 0x930, 0x931, - 0x933, 0x934, 0x1, 0x9c7, 0x9cb, 0x1, 0x9c7, 0x9cc, - 0x1, 0xb47, 0xb4b, 0x1, 0xb47, 0xb48, 0x1, 0xb47, - 0xb4c, 0x2, 0xbc6, 0xbca, 0xbc7, 0xbcb, 0x2, 0xb92, - 0xb94, 0xbc6, 0xbcc, 0x1, 0xc46, 0xc48, 0x1, 0xcc6, - 0xcca, 0x3, 0xcbf, 0xcc0, 0xcc6, 0xcc7, 0xcca, 0xccb, - 0x1, 0xcc6, 0xcc8, 0x2, 0xd46, 0xd4a, 0xd47, 0xd4b, - 0x1, 0xd46, 0xd4c, 0x2, 0xdd9, 0xdda, 0xddc, 0xddd, - 0x1, 0xdd9, 0xddc, 0x1, 0xdd9, 0xdde, 0x1, 0x1025, - 0x1026, 0xb, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, - 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b11, 0x1b12, 0x1b3a, 0x1b3b, - 0x1b3c, 0x1b3d, 0x1b3e, 0x1b40, 0x1b3f, 0x1b41, 0x1b42, 0x1b43, - 0x30, 0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, - 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, - 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, - 0x3060, 0x3061, 0x3062, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, - 0x3069, 0x306f, 0x3070, 0x3072, 0x3073, 0x3075, 0x3076, 0x3078, - 0x3079, 0x307b, 0x307c, 0x309d, 0x309e, 0x30a6, 0x30f4, 0x30ab, - 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, - 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, - 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c4, - 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30cf, 0x30d0, 0x30d2, - 0x30d3, 0x30d5, 0x30d6, 0x30d8, 0x30d9, 0x30db, 0x30dc, 0x30ef, - 0x30f7, 0x30f0, 0x30f8, 0x30f1, 0x30f9, 0x30f2, 0x30fa, 0x30fd, - 0x30fe, 0xa, 0x306f, 0x3071, 0x3072, 0x3074, 0x3075, 0x3077, - 0x3078, 0x307a, 0x307b, 0x307d, 0x30cf, 0x30d1, 0x30d2, 0x30d4, - 0x30d5, 0x30d7, 0x30d8, 0x30da, 0x30db, 0x30dd, 0x3, 0xd804, - 0xdc99, 0xd804, 0xdc9a, 0xd804, 0xdc9b, 0xd804, 0xdc9c, 0xd804, - 0xdca5, 0xd804, 0xdcab, 0x2, 0xd804, 0xdd31, 0xd804, 0xdd2e, - 0xd804, 0xdd32, 0xd804, 0xdd2f -}; - - -struct NormalizationCorrection { - uint ucs4; - uint old_mapping; - int version; -}; - -static const NormalizationCorrection uc_normalization_corrections[] = { - { 0xf951, 0x96fb, 6 }, - { 0x2f868, 0x2136a, 7 }, - { 0x2f874, 0x5f33, 7 }, - { 0x2f91f, 0x43ab, 7 }, - { 0x2f95f, 0x7aae, 7 }, - { 0x2f9bf, 0x4d57, 7 }, -}; - -enum { NumNormalizationCorrections = 6 }; -enum { NormalizationCorrectionsVersionMax = 7 }; - -} // namespace QUnicodeTables - -using namespace QUnicodeTables; - -QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp b/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp deleted file mode 100644 index 3fd084829..000000000 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ /dev/null @@ -1,1223 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowskeymapper.h" -#include "qwindowscontext.h" -#include "qwindowswindow.h" -#include "qwindowsguieventdispatcher.h" -#include "qwindowsscaling.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -/*! - \class QWindowsKeyMapper - \brief Translates Windows keys to QWindowSystemInterface events. - \internal - \ingroup qt-lighthouse-win - - In addition, handles some special keys to display system menus, etc. - The code originates from \c qkeymapper_win.cpp. -*/ - -QWindowsKeyMapper::QWindowsKeyMapper() - : m_useRTLExtensions(false), m_keyGrabber(0) -{ - memset(keyLayout, 0, sizeof(keyLayout)); -} - -QWindowsKeyMapper::~QWindowsKeyMapper() -{ -} - -#ifndef LANG_PASHTO -#define LANG_PASHTO 0x63 -#endif -#ifndef LANG_SYRIAC -#define LANG_SYRIAC 0x5a -#endif -#ifndef LANG_DIVEHI -#define LANG_DIVEHI 0x65 -#endif -#ifndef VK_OEM_PLUS -#define VK_OEM_PLUS 0xBB -#endif -#ifndef VK_OEM_3 -#define VK_OEM_3 0xC0 -#endif - -// We not only need the scancode itself but also the extended bit of key messages. Thus we need -// the additional bit when masking the scancode. -enum { scancodeBitmask = 0x1ff }; - -// Key recorder ------------------------------------------------------------------------[ start ] -- -struct KeyRecord { - KeyRecord(int c, int a, int s, const QString &t) : code(c), ascii(a), state(s), text(t) {} - KeyRecord() {} - - int code; - int ascii; - int state; - QString text; -}; - -// We need to record the pressed keys in order to decide, whether the key event is an autorepeat -// event. As soon as its state changes, the chain of autorepeat events will be broken. -static const int QT_MAX_KEY_RECORDINGS = 64; // User has LOTS of fingers... -struct KeyRecorder -{ - KeyRecorder() : nrecs(0) {} - - inline KeyRecord *findKey(int code, bool remove); - inline void storeKey(int code, int ascii, int state, const QString& text); - inline void clearKeys(); - - int nrecs; - KeyRecord deleted_record; // A copy of last entry removed from records[] - KeyRecord records[QT_MAX_KEY_RECORDINGS]; -}; -static KeyRecorder key_recorder; - -KeyRecord *KeyRecorder::findKey(int code, bool remove) -{ - KeyRecord *result = 0; - for (int i = 0; i < nrecs; ++i) { - if (records[i].code == code) { - if (remove) { - deleted_record = records[i]; - // Move rest down, and decrease count - while (i + 1 < nrecs) { - records[i] = records[i + 1]; - ++i; - } - --nrecs; - result = &deleted_record; - } else { - result = &records[i]; - } - break; - } - } - return result; -} - -void KeyRecorder::storeKey(int code, int ascii, int state, const QString& text) -{ - Q_ASSERT_X(nrecs != QT_MAX_KEY_RECORDINGS, - "Internal KeyRecorder", - "Keyboard recorder buffer overflow, consider increasing QT_MAX_KEY_RECORDINGS"); - - if (nrecs == QT_MAX_KEY_RECORDINGS) { - qWarning("Qt: Internal keyboard buffer overflow"); - return; - } - records[nrecs++] = KeyRecord(code,ascii,state,text); -} - -void KeyRecorder::clearKeys() -{ - nrecs = 0; -} -// Key recorder --------------------------------------------------------------------------[ end ] -- - - -// Key translation ---------------------------------------------------------------------[ start ] -- -// Meaning of values: -// 0 = Character output key, needs keyboard driver mapping -// Key_unknown = Unknown Virtual Key, no translation possible, ignore -static const uint KeyTbl[] = { // Keyboard mapping table - // Dec | Hex | Windows Virtual key - Qt::Key_unknown, // 0 0x00 - Qt::Key_unknown, // 1 0x01 VK_LBUTTON | Left mouse button - Qt::Key_unknown, // 2 0x02 VK_RBUTTON | Right mouse button - Qt::Key_Cancel, // 3 0x03 VK_CANCEL | Control-Break processing - Qt::Key_unknown, // 4 0x04 VK_MBUTTON | Middle mouse button - Qt::Key_unknown, // 5 0x05 VK_XBUTTON1 | X1 mouse button - Qt::Key_unknown, // 6 0x06 VK_XBUTTON2 | X2 mouse button - Qt::Key_unknown, // 7 0x07 -- unassigned -- - Qt::Key_Backspace, // 8 0x08 VK_BACK | BackSpace key - Qt::Key_Tab, // 9 0x09 VK_TAB | Tab key - Qt::Key_unknown, // 10 0x0A -- reserved -- - Qt::Key_unknown, // 11 0x0B -- reserved -- - Qt::Key_Clear, // 12 0x0C VK_CLEAR | Clear key - Qt::Key_Return, // 13 0x0D VK_RETURN | Enter key - Qt::Key_unknown, // 14 0x0E -- unassigned -- - Qt::Key_unknown, // 15 0x0F -- unassigned -- - Qt::Key_Shift, // 16 0x10 VK_SHIFT | Shift key - Qt::Key_Control, // 17 0x11 VK_CONTROL | Ctrl key - Qt::Key_Alt, // 18 0x12 VK_MENU | Alt key - Qt::Key_Pause, // 19 0x13 VK_PAUSE | Pause key - Qt::Key_CapsLock, // 20 0x14 VK_CAPITAL | Caps-Lock - Qt::Key_unknown, // 21 0x15 VK_KANA / VK_HANGUL | IME Kana or Hangul mode - Qt::Key_unknown, // 22 0x16 -- unassigned -- - Qt::Key_unknown, // 23 0x17 VK_JUNJA | IME Junja mode - Qt::Key_unknown, // 24 0x18 VK_FINAL | IME final mode - Qt::Key_unknown, // 25 0x19 VK_HANJA / VK_KANJI | IME Hanja or Kanji mode - Qt::Key_unknown, // 26 0x1A -- unassigned -- - Qt::Key_Escape, // 27 0x1B VK_ESCAPE | Esc key - Qt::Key_unknown, // 28 0x1C VK_CONVERT | IME convert - Qt::Key_unknown, // 29 0x1D VK_NONCONVERT | IME non-convert - Qt::Key_unknown, // 30 0x1E VK_ACCEPT | IME accept - Qt::Key_Mode_switch,// 31 0x1F VK_MODECHANGE | IME mode change request - Qt::Key_Space, // 32 0x20 VK_SPACE | Spacebar - Qt::Key_PageUp, // 33 0x21 VK_PRIOR | Page Up key - Qt::Key_PageDown, // 34 0x22 VK_NEXT | Page Down key - Qt::Key_End, // 35 0x23 VK_END | End key - Qt::Key_Home, // 36 0x24 VK_HOME | Home key - Qt::Key_Left, // 37 0x25 VK_LEFT | Left arrow key - Qt::Key_Up, // 38 0x26 VK_UP | Up arrow key - Qt::Key_Right, // 39 0x27 VK_RIGHT | Right arrow key - Qt::Key_Down, // 40 0x28 VK_DOWN | Down arrow key - Qt::Key_Select, // 41 0x29 VK_SELECT | Select key - Qt::Key_Printer, // 42 0x2A VK_PRINT | Print key - Qt::Key_Execute, // 43 0x2B VK_EXECUTE | Execute key - Qt::Key_Print, // 44 0x2C VK_SNAPSHOT | Print Screen key - Qt::Key_Insert, // 45 0x2D VK_INSERT | Ins key - Qt::Key_Delete, // 46 0x2E VK_DELETE | Del key - Qt::Key_Help, // 47 0x2F VK_HELP | Help key - 0, // 48 0x30 (VK_0) | 0 key - 0, // 49 0x31 (VK_1) | 1 key - 0, // 50 0x32 (VK_2) | 2 key - 0, // 51 0x33 (VK_3) | 3 key - 0, // 52 0x34 (VK_4) | 4 key - 0, // 53 0x35 (VK_5) | 5 key - 0, // 54 0x36 (VK_6) | 6 key - 0, // 55 0x37 (VK_7) | 7 key - 0, // 56 0x38 (VK_8) | 8 key - 0, // 57 0x39 (VK_9) | 9 key - Qt::Key_unknown, // 58 0x3A -- unassigned -- - Qt::Key_unknown, // 59 0x3B -- unassigned -- - Qt::Key_unknown, // 60 0x3C -- unassigned -- - Qt::Key_unknown, // 61 0x3D -- unassigned -- - Qt::Key_unknown, // 62 0x3E -- unassigned -- - Qt::Key_unknown, // 63 0x3F -- unassigned -- - Qt::Key_unknown, // 64 0x40 -- unassigned -- - 0, // 65 0x41 (VK_A) | A key - 0, // 66 0x42 (VK_B) | B key - 0, // 67 0x43 (VK_C) | C key - 0, // 68 0x44 (VK_D) | D key - 0, // 69 0x45 (VK_E) | E key - 0, // 70 0x46 (VK_F) | F key - 0, // 71 0x47 (VK_G) | G key - 0, // 72 0x48 (VK_H) | H key - 0, // 73 0x49 (VK_I) | I key - 0, // 74 0x4A (VK_J) | J key - 0, // 75 0x4B (VK_K) | K key - 0, // 76 0x4C (VK_L) | L key - 0, // 77 0x4D (VK_M) | M key - 0, // 78 0x4E (VK_N) | N key - 0, // 79 0x4F (VK_O) | O key - 0, // 80 0x50 (VK_P) | P key - 0, // 81 0x51 (VK_Q) | Q key - 0, // 82 0x52 (VK_R) | R key - 0, // 83 0x53 (VK_S) | S key - 0, // 84 0x54 (VK_T) | T key - 0, // 85 0x55 (VK_U) | U key - 0, // 86 0x56 (VK_V) | V key - 0, // 87 0x57 (VK_W) | W key - 0, // 88 0x58 (VK_X) | X key - 0, // 89 0x59 (VK_Y) | Y key - 0, // 90 0x5A (VK_Z) | Z key - Qt::Key_Meta, // 91 0x5B VK_LWIN | Left Windows - MS Natural kbd - Qt::Key_Meta, // 92 0x5C VK_RWIN | Right Windows - MS Natural kbd - Qt::Key_Menu, // 93 0x5D VK_APPS | Application key-MS Natural kbd - Qt::Key_unknown, // 94 0x5E -- reserved -- - Qt::Key_Sleep, // 95 0x5F VK_SLEEP - Qt::Key_0, // 96 0x60 VK_NUMPAD0 | Numeric keypad 0 key - Qt::Key_1, // 97 0x61 VK_NUMPAD1 | Numeric keypad 1 key - Qt::Key_2, // 98 0x62 VK_NUMPAD2 | Numeric keypad 2 key - Qt::Key_3, // 99 0x63 VK_NUMPAD3 | Numeric keypad 3 key - Qt::Key_4, // 100 0x64 VK_NUMPAD4 | Numeric keypad 4 key - Qt::Key_5, // 101 0x65 VK_NUMPAD5 | Numeric keypad 5 key - Qt::Key_6, // 102 0x66 VK_NUMPAD6 | Numeric keypad 6 key - Qt::Key_7, // 103 0x67 VK_NUMPAD7 | Numeric keypad 7 key - Qt::Key_8, // 104 0x68 VK_NUMPAD8 | Numeric keypad 8 key - Qt::Key_9, // 105 0x69 VK_NUMPAD9 | Numeric keypad 9 key - Qt::Key_Asterisk, // 106 0x6A VK_MULTIPLY | Multiply key - Qt::Key_Plus, // 107 0x6B VK_ADD | Add key - Qt::Key_Comma, // 108 0x6C VK_SEPARATOR | Separator key - Qt::Key_Minus, // 109 0x6D VK_SUBTRACT | Subtract key - Qt::Key_Period, // 110 0x6E VK_DECIMAL | Decimal key - Qt::Key_Slash, // 111 0x6F VK_DIVIDE | Divide key - Qt::Key_F1, // 112 0x70 VK_F1 | F1 key - Qt::Key_F2, // 113 0x71 VK_F2 | F2 key - Qt::Key_F3, // 114 0x72 VK_F3 | F3 key - Qt::Key_F4, // 115 0x73 VK_F4 | F4 key - Qt::Key_F5, // 116 0x74 VK_F5 | F5 key - Qt::Key_F6, // 117 0x75 VK_F6 | F6 key - Qt::Key_F7, // 118 0x76 VK_F7 | F7 key - Qt::Key_F8, // 119 0x77 VK_F8 | F8 key - Qt::Key_F9, // 120 0x78 VK_F9 | F9 key - Qt::Key_F10, // 121 0x79 VK_F10 | F10 key - Qt::Key_F11, // 122 0x7A VK_F11 | F11 key - Qt::Key_F12, // 123 0x7B VK_F12 | F12 key - Qt::Key_F13, // 124 0x7C VK_F13 | F13 key - Qt::Key_F14, // 125 0x7D VK_F14 | F14 key - Qt::Key_F15, // 126 0x7E VK_F15 | F15 key - Qt::Key_F16, // 127 0x7F VK_F16 | F16 key - Qt::Key_F17, // 128 0x80 VK_F17 | F17 key - Qt::Key_F18, // 129 0x81 VK_F18 | F18 key - Qt::Key_F19, // 130 0x82 VK_F19 | F19 key - Qt::Key_F20, // 131 0x83 VK_F20 | F20 key - Qt::Key_F21, // 132 0x84 VK_F21 | F21 key - Qt::Key_F22, // 133 0x85 VK_F22 | F22 key - Qt::Key_F23, // 134 0x86 VK_F23 | F23 key - Qt::Key_F24, // 135 0x87 VK_F24 | F24 key - Qt::Key_unknown, // 136 0x88 -- unassigned -- - Qt::Key_unknown, // 137 0x89 -- unassigned -- - Qt::Key_unknown, // 138 0x8A -- unassigned -- - Qt::Key_unknown, // 139 0x8B -- unassigned -- - Qt::Key_unknown, // 140 0x8C -- unassigned -- - Qt::Key_unknown, // 141 0x8D -- unassigned -- - Qt::Key_unknown, // 142 0x8E -- unassigned -- - Qt::Key_unknown, // 143 0x8F -- unassigned -- - Qt::Key_NumLock, // 144 0x90 VK_NUMLOCK | Num Lock key - Qt::Key_ScrollLock, // 145 0x91 VK_SCROLL | Scroll Lock key - // Fujitsu/OASYS kbd -------------------- - 0, //Qt::Key_Jisho, // 146 0x92 VK_OEM_FJ_JISHO | 'Dictionary' key / - // VK_OEM_NEC_EQUAL = key on numpad on NEC PC-9800 kbd - Qt::Key_Massyo, // 147 0x93 VK_OEM_FJ_MASSHOU | 'Unregister word' key - Qt::Key_Touroku, // 148 0x94 VK_OEM_FJ_TOUROKU | 'Register word' key - 0, //Qt::Key_Oyayubi_Left,//149 0x95 VK_OEM_FJ_LOYA | 'Left OYAYUBI' key - 0, //Qt::Key_Oyayubi_Right,//150 0x96 VK_OEM_FJ_ROYA | 'Right OYAYUBI' key - Qt::Key_unknown, // 151 0x97 -- unassigned -- - Qt::Key_unknown, // 152 0x98 -- unassigned -- - Qt::Key_unknown, // 153 0x99 -- unassigned -- - Qt::Key_unknown, // 154 0x9A -- unassigned -- - Qt::Key_unknown, // 155 0x9B -- unassigned -- - Qt::Key_unknown, // 156 0x9C -- unassigned -- - Qt::Key_unknown, // 157 0x9D -- unassigned -- - Qt::Key_unknown, // 158 0x9E -- unassigned -- - Qt::Key_unknown, // 159 0x9F -- unassigned -- - Qt::Key_Shift, // 160 0xA0 VK_LSHIFT | Left Shift key - Qt::Key_Shift, // 161 0xA1 VK_RSHIFT | Right Shift key - Qt::Key_Control, // 162 0xA2 VK_LCONTROL | Left Ctrl key - Qt::Key_Control, // 163 0xA3 VK_RCONTROL | Right Ctrl key - Qt::Key_Alt, // 164 0xA4 VK_LMENU | Left Menu key - Qt::Key_Alt, // 165 0xA5 VK_RMENU | Right Menu key - Qt::Key_Back, // 166 0xA6 VK_BROWSER_BACK | Browser Back key - Qt::Key_Forward, // 167 0xA7 VK_BROWSER_FORWARD | Browser Forward key - Qt::Key_Refresh, // 168 0xA8 VK_BROWSER_REFRESH | Browser Refresh key - Qt::Key_Stop, // 169 0xA9 VK_BROWSER_STOP | Browser Stop key - Qt::Key_Search, // 170 0xAA VK_BROWSER_SEARCH | Browser Search key - Qt::Key_Favorites, // 171 0xAB VK_BROWSER_FAVORITES| Browser Favorites key - Qt::Key_HomePage, // 172 0xAC VK_BROWSER_HOME | Browser Start and Home key - Qt::Key_VolumeMute, // 173 0xAD VK_VOLUME_MUTE | Volume Mute key - Qt::Key_VolumeDown, // 174 0xAE VK_VOLUME_DOWN | Volume Down key - Qt::Key_VolumeUp, // 175 0xAF VK_VOLUME_UP | Volume Up key - Qt::Key_MediaNext, // 176 0xB0 VK_MEDIA_NEXT_TRACK | Next Track key - Qt::Key_MediaPrevious, //177 0xB1 VK_MEDIA_PREV_TRACK | Previous Track key - Qt::Key_MediaStop, // 178 0xB2 VK_MEDIA_STOP | Stop Media key - Qt::Key_MediaPlay, // 179 0xB3 VK_MEDIA_PLAY_PAUSE | Play/Pause Media key - Qt::Key_LaunchMail, // 180 0xB4 VK_LAUNCH_MAIL | Start Mail key - Qt::Key_LaunchMedia,// 181 0xB5 VK_LAUNCH_MEDIA_SELECT Select Media key - Qt::Key_Launch0, // 182 0xB6 VK_LAUNCH_APP1 | Start Application 1 key - Qt::Key_Launch1, // 183 0xB7 VK_LAUNCH_APP2 | Start Application 2 key - Qt::Key_unknown, // 184 0xB8 -- reserved -- - Qt::Key_unknown, // 185 0xB9 -- reserved -- - 0, // 186 0xBA VK_OEM_1 | ';:' for US - 0, // 187 0xBB VK_OEM_PLUS | '+' any country - 0, // 188 0xBC VK_OEM_COMMA | ',' any country - 0, // 189 0xBD VK_OEM_MINUS | '-' any country - 0, // 190 0xBE VK_OEM_PERIOD | '.' any country - 0, // 191 0xBF VK_OEM_2 | '/?' for US - 0, // 192 0xC0 VK_OEM_3 | '`~' for US - Qt::Key_unknown, // 193 0xC1 -- reserved -- - Qt::Key_unknown, // 194 0xC2 -- reserved -- - Qt::Key_unknown, // 195 0xC3 -- reserved -- - Qt::Key_unknown, // 196 0xC4 -- reserved -- - Qt::Key_unknown, // 197 0xC5 -- reserved -- - Qt::Key_unknown, // 198 0xC6 -- reserved -- - Qt::Key_unknown, // 199 0xC7 -- reserved -- - Qt::Key_unknown, // 200 0xC8 -- reserved -- - Qt::Key_unknown, // 201 0xC9 -- reserved -- - Qt::Key_unknown, // 202 0xCA -- reserved -- - Qt::Key_unknown, // 203 0xCB -- reserved -- - Qt::Key_unknown, // 204 0xCC -- reserved -- - Qt::Key_unknown, // 205 0xCD -- reserved -- - Qt::Key_unknown, // 206 0xCE -- reserved -- - Qt::Key_unknown, // 207 0xCF -- reserved -- - Qt::Key_unknown, // 208 0xD0 -- reserved -- - Qt::Key_unknown, // 209 0xD1 -- reserved -- - Qt::Key_unknown, // 210 0xD2 -- reserved -- - Qt::Key_unknown, // 211 0xD3 -- reserved -- - Qt::Key_unknown, // 212 0xD4 -- reserved -- - Qt::Key_unknown, // 213 0xD5 -- reserved -- - Qt::Key_unknown, // 214 0xD6 -- reserved -- - Qt::Key_unknown, // 215 0xD7 -- reserved -- - Qt::Key_unknown, // 216 0xD8 -- unassigned -- - Qt::Key_unknown, // 217 0xD9 -- unassigned -- - Qt::Key_unknown, // 218 0xDA -- unassigned -- - 0, // 219 0xDB VK_OEM_4 | '[{' for US - 0, // 220 0xDC VK_OEM_5 | '\|' for US - 0, // 221 0xDD VK_OEM_6 | ']}' for US - 0, // 222 0xDE VK_OEM_7 | ''"' for US - 0, // 223 0xDF VK_OEM_8 - Qt::Key_unknown, // 224 0xE0 -- reserved -- - Qt::Key_unknown, // 225 0xE1 VK_OEM_AX | 'AX' key on Japanese AX kbd - Qt::Key_unknown, // 226 0xE2 VK_OEM_102 | "<>" or "\|" on RT 102-key kbd - Qt::Key_unknown, // 227 0xE3 VK_ICO_HELP | Help key on ICO - Qt::Key_unknown, // 228 0xE4 VK_ICO_00 | 00 key on ICO - Qt::Key_unknown, // 229 0xE5 VK_PROCESSKEY | IME Process key - Qt::Key_unknown, // 230 0xE6 VK_ICO_CLEAR | - Qt::Key_unknown, // 231 0xE7 VK_PACKET | Unicode char as keystrokes - Qt::Key_unknown, // 232 0xE8 -- unassigned -- - // Nokia/Ericsson definitions --------------- - Qt::Key_unknown, // 233 0xE9 VK_OEM_RESET - Qt::Key_unknown, // 234 0xEA VK_OEM_JUMP - Qt::Key_unknown, // 235 0xEB VK_OEM_PA1 - Qt::Key_unknown, // 236 0xEC VK_OEM_PA2 - Qt::Key_unknown, // 237 0xED VK_OEM_PA3 - Qt::Key_unknown, // 238 0xEE VK_OEM_WSCTRL - Qt::Key_unknown, // 239 0xEF VK_OEM_CUSEL - Qt::Key_unknown, // 240 0xF0 VK_OEM_ATTN - Qt::Key_unknown, // 241 0xF1 VK_OEM_FINISH - Qt::Key_unknown, // 242 0xF2 VK_OEM_COPY - Qt::Key_unknown, // 243 0xF3 VK_OEM_AUTO - Qt::Key_unknown, // 244 0xF4 VK_OEM_ENLW - Qt::Key_unknown, // 245 0xF5 VK_OEM_BACKTAB - Qt::Key_unknown, // 246 0xF6 VK_ATTN | Attn key - Qt::Key_unknown, // 247 0xF7 VK_CRSEL | CrSel key - Qt::Key_unknown, // 248 0xF8 VK_EXSEL | ExSel key - Qt::Key_unknown, // 249 0xF9 VK_EREOF | Erase EOF key - Qt::Key_Play, // 250 0xFA VK_PLAY | Play key - Qt::Key_Zoom, // 251 0xFB VK_ZOOM | Zoom key - Qt::Key_unknown, // 252 0xFC VK_NONAME | Reserved - Qt::Key_unknown, // 253 0xFD VK_PA1 | PA1 key - Qt::Key_Clear, // 254 0xFE VK_OEM_CLEAR | Clear key - 0 -}; - -static const uint CmdTbl[] = { // Multimedia keys mapping table - // Dec | Hex | AppCommand - Qt::Key_unknown, // 0 0x00 - Qt::Key_Back, // 1 0x01 APPCOMMAND_BROWSER_BACKWARD - Qt::Key_Forward, // 2 0x02 APPCOMMAND_BROWSER_FORWARD - Qt::Key_Refresh, // 3 0x03 APPCOMMAND_BROWSER_REFRESH - Qt::Key_Stop, // 4 0x04 APPCOMMAND_BROWSER_STOP - Qt::Key_Search, // 5 0x05 APPCOMMAND_BROWSER_SEARCH - Qt::Key_Favorites, // 6 0x06 APPCOMMAND_BROWSER_FAVORITES - Qt::Key_Home, // 7 0x07 APPCOMMAND_BROWSER_HOME - Qt::Key_VolumeMute, // 8 0x08 APPCOMMAND_VOLUME_MUTE - Qt::Key_VolumeDown, // 9 0x09 APPCOMMAND_VOLUME_DOWN - Qt::Key_VolumeUp, // 10 0x0a APPCOMMAND_VOLUME_UP - Qt::Key_MediaNext, // 11 0x0b APPCOMMAND_MEDIA_NEXTTRACK - Qt::Key_MediaPrevious, // 12 0x0c APPCOMMAND_MEDIA_PREVIOUSTRACK - Qt::Key_MediaStop, // 13 0x0d APPCOMMAND_MEDIA_STOP - Qt::Key_MediaTogglePlayPause, // 14 0x0e APPCOMMAND_MEDIA_PLAYPAUSE - Qt::Key_LaunchMail, // 15 0x0f APPCOMMAND_LAUNCH_MAIL - Qt::Key_LaunchMedia, // 16 0x10 APPCOMMAND_LAUNCH_MEDIA_SELECT - Qt::Key_Launch0, // 17 0x11 APPCOMMAND_LAUNCH_APP1 - Qt::Key_Launch1, // 18 0x12 APPCOMMAND_LAUNCH_APP2 - Qt::Key_BassDown, // 19 0x13 APPCOMMAND_BASS_DOWN - Qt::Key_BassBoost, // 20 0x14 APPCOMMAND_BASS_BOOST - Qt::Key_BassUp, // 21 0x15 APPCOMMAND_BASS_UP - Qt::Key_TrebleDown, // 22 0x16 APPCOMMAND_TREBLE_DOWN - Qt::Key_TrebleUp, // 23 0x17 APPCOMMAND_TREBLE_UP - Qt::Key_MicMute, // 24 0x18 APPCOMMAND_MICROPHONE_VOLUME_MUTE - Qt::Key_MicVolumeDown, // 25 0x19 APPCOMMAND_MICROPHONE_VOLUME_DOWN - Qt::Key_MicVolumeUp, // 26 0x1a APPCOMMAND_MICROPHONE_VOLUME_UP - Qt::Key_Help, // 27 0x1b APPCOMMAND_HELP - Qt::Key_Find, // 28 0x1c APPCOMMAND_FIND - Qt::Key_New, // 29 0x1d APPCOMMAND_NEW - Qt::Key_Open, // 30 0x1e APPCOMMAND_OPEN - Qt::Key_Close, // 31 0x1f APPCOMMAND_CLOSE - Qt::Key_Save, // 32 0x20 APPCOMMAND_SAVE - Qt::Key_Print, // 33 0x21 APPCOMMAND_PRINT - Qt::Key_Undo, // 34 0x22 APPCOMMAND_UNDO - Qt::Key_Redo, // 35 0x23 APPCOMMAND_REDO - Qt::Key_Copy, // 36 0x24 APPCOMMAND_COPY - Qt::Key_Cut, // 37 0x25 APPCOMMAND_CUT - Qt::Key_Paste, // 38 0x26 APPCOMMAND_PASTE - Qt::Key_Reply, // 39 0x27 APPCOMMAND_REPLY_TO_MAIL - Qt::Key_MailForward, // 40 0x28 APPCOMMAND_FORWARD_MAIL - Qt::Key_Send, // 41 0x29 APPCOMMAND_SEND_MAIL - Qt::Key_Spell, // 42 0x2a APPCOMMAND_SPELL_CHECK - Qt::Key_unknown, // 43 0x2b APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE - Qt::Key_unknown, // 44 0x2c APPCOMMAND_MIC_ON_OFF_TOGGLE - Qt::Key_unknown, // 45 0x2d APPCOMMAND_CORRECTION_LIST - Qt::Key_MediaPlay, // 46 0x2e APPCOMMAND_MEDIA_PLAY - Qt::Key_MediaPause, // 47 0x2f APPCOMMAND_MEDIA_PAUSE - Qt::Key_MediaRecord, // 48 0x30 APPCOMMAND_MEDIA_RECORD - Qt::Key_AudioForward, // 49 0x31 APPCOMMAND_MEDIA_FAST_FORWARD - Qt::Key_AudioRewind, // 50 0x32 APPCOMMAND_MEDIA_REWIND - Qt::Key_ChannelDown, // 51 0x33 APPCOMMAND_MEDIA_CHANNEL_DOWN - Qt::Key_ChannelUp // 52 0x34 APPCOMMAND_MEDIA_CHANNEL_UP -}; - -// Possible modifier states. -// NOTE: The order of these states match the order in QWindowsKeyMapper::updatePossibleKeyCodes()! -static const Qt::KeyboardModifiers ModsTbl[] = { - Qt::NoModifier, // 0 - Qt::ShiftModifier, // 1 - Qt::ControlModifier, // 2 - Qt::ControlModifier | Qt::ShiftModifier, // 3 - Qt::AltModifier, // 4 - Qt::AltModifier | Qt::ShiftModifier, // 5 - Qt::AltModifier | Qt::ControlModifier, // 6 - Qt::AltModifier | Qt::ShiftModifier | Qt::ControlModifier, // 7 - Qt::NoModifier, // Fall-back to raw Key_* -}; -static const size_t NumMods = sizeof ModsTbl / sizeof *ModsTbl; -Q_STATIC_ASSERT((NumMods == KeyboardLayoutItem::NumQtKeys)); - -/** - Remap return or action key to select key for windows mobile. -*/ -inline int winceKeyBend(int keyCode) -{ - return KeyTbl[keyCode]; -} - -#ifdef Q_OS_WINCE -QT_BEGIN_INCLUDE_NAMESPACE -int ToUnicode(UINT vk, int /*scancode*/, unsigned char* /*kbdBuffer*/, LPWSTR unicodeBuffer, int, int) -{ - QT_USE_NAMESPACE - QChar* buf = reinterpret_cast< QChar*>(unicodeBuffer); - if (KeyTbl[vk] == 0) { - buf[0] = vk; - return 1; - } - return 0; -} - -int ToAscii(UINT vk, int scancode, unsigned char *kbdBuffer, LPWORD unicodeBuffer, int flag) -{ - return ToUnicode(vk, scancode, kbdBuffer, (LPWSTR) unicodeBuffer, 0, flag); - -} - -bool GetKeyboardState(unsigned char* kbuffer) -{ - for (int i=0; i< 256; ++i) - kbuffer[i] = GetAsyncKeyState(i); - return true; -} -QT_END_INCLUDE_NAMESPACE -#endif // Q_OS_WINCE - -// Translate a VK into a Qt key code, or unicode character -static inline int toKeyOrUnicode(int vk, int scancode, unsigned char *kbdBuffer, bool *isDeadkey = 0) -{ - Q_ASSERT(vk > 0 && vk < 256); - int code = 0; - QChar unicodeBuffer[5]; - int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); - // When Ctrl modifier is used ToUnicode does not return correct values. In order to assign the - // right key the control modifier is removed for just that function if the previous call failed. - if (res == 0 && kbdBuffer[VK_CONTROL]) { - const unsigned char controlState = kbdBuffer[VK_CONTROL]; - kbdBuffer[VK_CONTROL] = 0; - res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); - kbdBuffer[VK_CONTROL] = controlState; - } - if (res) - code = unicodeBuffer[0].toUpper().unicode(); - - // Qt::Key_*'s are not encoded below 0x20, so try again, and DEL keys (0x7f) is encoded with a - // proper Qt::Key_ code - if (code < 0x20 || code == 0x7f) // Handles res==0 too - code = winceKeyBend(vk); - - if (isDeadkey) - *isDeadkey = (res == -1); - - return code == Qt::Key_unknown ? 0 : code; -} - -static inline int asciiToKeycode(char a, int state) -{ - if (a >= 'a' && a <= 'z') - a = toupper(a); - if ((state & Qt::ControlModifier) != 0) { - if (a >= 0 && a <= 31) // Ctrl+@..Ctrl+A..CTRL+Z..Ctrl+_ - a += '@'; // to @..A..Z.._ - } - return a & 0xff; -} - -static inline bool isModifierKey(int code) -{ - return (code >= Qt::Key_Shift) && (code <= Qt::Key_ScrollLock); -} -// Key translation -----------------------------------------------------------------------[ end ]--- - - -// Keyboard map private ----------------------------------------------------------------[ start ]--- - -void QWindowsKeyMapper::deleteLayouts() -{ - for (size_t i = 0; i < NumKeyboardLayoutItems; ++i) - keyLayout[i].exists = false; -} - -void QWindowsKeyMapper::changeKeyboard() -{ - deleteLayouts(); - - /* MAKELCID()'s first argument is a WORD, and GetKeyboardLayout() - * returns a DWORD. */ - - LCID newLCID = MAKELCID((quintptr)GetKeyboardLayout(0), SORT_DEFAULT); -// keyboardInputLocale = qt_localeFromLCID(newLCID); - - bool bidi = false; - wchar_t LCIDFontSig[16]; - if (GetLocaleInfo(newLCID, LOCALE_FONTSIGNATURE, LCIDFontSig, sizeof(LCIDFontSig) / sizeof(wchar_t)) - && (LCIDFontSig[7] & (wchar_t)0x0800)) - bidi = true; - - keyboardInputDirection = bidi ? Qt::RightToLeft : Qt::LeftToRight; -} - -// Helper function that is used when obtaining the list of characters that can be produced by one key and -// every possible combination of modifiers -inline void setKbdState(unsigned char *kbd, bool shift, bool ctrl, bool alt) -{ - kbd[VK_LSHIFT ] = (shift ? 0x80 : 0); - kbd[VK_SHIFT ] = (shift ? 0x80 : 0); - kbd[VK_LCONTROL] = (ctrl ? 0x80 : 0); - kbd[VK_CONTROL ] = (ctrl ? 0x80 : 0); - kbd[VK_RMENU ] = (alt ? 0x80 : 0); - kbd[VK_MENU ] = (alt ? 0x80 : 0); -} - -// Adds the msg's key to keyLayout if it is not yet present there -void QWindowsKeyMapper::updateKeyMap(const MSG &msg) -{ - unsigned char kbdBuffer[256]; // Will hold the complete keyboard state - GetKeyboardState(kbdBuffer); - const quint32 scancode = (msg.lParam >> 16) & scancodeBitmask; - updatePossibleKeyCodes(kbdBuffer, scancode, msg.wParam); -} - -// Fills keyLayout for that vk_key. Values are all characters one can type using that key -// (in connection with every combination of modifiers) and whether these "characters" are -// dead keys. -void QWindowsKeyMapper::updatePossibleKeyCodes(unsigned char *kbdBuffer, quint32 scancode, - quint32 vk_key) -{ - if (!vk_key || (keyLayout[vk_key].exists && !keyLayout[vk_key].dirty)) - return; - - // Copy keyboard state, so we can modify and query output for each possible permutation - unsigned char buffer[256]; - memcpy(buffer, kbdBuffer, sizeof(buffer)); - // Always 0, as Windows doesn't treat these as modifiers; - buffer[VK_LWIN ] = 0; - buffer[VK_RWIN ] = 0; - buffer[VK_CAPITAL ] = 0; - buffer[VK_NUMLOCK ] = 0; - buffer[VK_SCROLL ] = 0; - // Always 0, since we'll only change the other versions - buffer[VK_RSHIFT ] = 0; - buffer[VK_RCONTROL] = 0; - buffer[VK_LMENU ] = 0; // Use right Alt, since left Ctrl + right Alt is considered AltGraph - - // keyLayout contains the actual characters which can be written using the vk_key together with the - // different modifiers. '2' together with shift will for example cause the character - // to be @ for a US key layout (thus keyLayout[vk_key].qtKey[1] will be @). In addition to that - // it stores whether the resulting key is a dead key as these keys have to be handled later. - bool isDeadKey = false; - keyLayout[vk_key].deadkeys = 0; - keyLayout[vk_key].dirty = false; - keyLayout[vk_key].exists = true; - setKbdState(buffer, false, false, false); - keyLayout[vk_key].qtKey[0] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x01 : 0; - setKbdState(buffer, true, false, false); - keyLayout[vk_key].qtKey[1] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x02 : 0; - setKbdState(buffer, false, true, false); - keyLayout[vk_key].qtKey[2] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x04 : 0; - setKbdState(buffer, true, true, false); - keyLayout[vk_key].qtKey[3] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x08 : 0; - setKbdState(buffer, false, false, true); - keyLayout[vk_key].qtKey[4] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x10 : 0; - setKbdState(buffer, true, false, true); - keyLayout[vk_key].qtKey[5] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x20 : 0; - setKbdState(buffer, false, true, true); - keyLayout[vk_key].qtKey[6] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x40 : 0; - setKbdState(buffer, true, true, true); - keyLayout[vk_key].qtKey[7] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x80 : 0; - // Add a fall back key for layouts which don't do composition and show non-latin1 characters - int fallbackKey = winceKeyBend(vk_key); - if (!fallbackKey || fallbackKey == Qt::Key_unknown) { - fallbackKey = 0; - if (vk_key != keyLayout[vk_key].qtKey[0] && vk_key < 0x5B && vk_key > 0x2F) - fallbackKey = vk_key; - } - keyLayout[vk_key].qtKey[8] = fallbackKey; - - // If one of the values inserted into the keyLayout above, can be considered a dead key, we have - // to run the workaround below. - if (keyLayout[vk_key].deadkeys) { - // Push a Space, then the original key through the low-level ToAscii functions. - // We do this because these functions (ToAscii / ToUnicode) will alter the internal state of - // the keyboard driver By doing the following, we set the keyboard driver state back to what - // it was before we wrecked it with the code above. - // We need to push the space with an empty keystate map, since the driver checks the map for - // transitions in modifiers, so this helps us capture all possible deadkeys. - unsigned char emptyBuffer[256]; - memset(emptyBuffer, 0, sizeof(emptyBuffer)); - ::ToAscii(VK_SPACE, 0, emptyBuffer, reinterpret_cast(&buffer), 0); - ::ToAscii(vk_key, scancode, kbdBuffer, reinterpret_cast(&buffer), 0); - } - if (QWindowsContext::verbose > 1 && lcQpaEvents().isDebugEnabled()) { - QString message; - QDebug debug(&message); - debug <<__FUNCTION__ << " for virtual key = 0x" << hex << vk_key << dec<< '\n'; - for (size_t i = 0; i < NumMods; ++i) { - const quint32 qtKey = keyLayout[vk_key].qtKey[i]; - debug << " [" << i << "] (" << qtKey << ',' - << hex << showbase << qtKey << noshowbase << dec - << ",'" << char(qtKey ? qtKey : 0x03) << "')"; - if (keyLayout[vk_key].deadkeys & (1<flags() & Qt::WindowMinimizeButtonHint)?enabled:disabled); - bool maximized = IsZoomed(topLevelHwnd); - - EnableMenuItem(menu, SC_MAXIMIZE, ! (topLevel->flags() & Qt::WindowMaximizeButtonHint) || maximized?disabled:enabled); - EnableMenuItem(menu, SC_RESTORE, maximized?enabled:disabled); - - // We should _not_ check with the setFixedSize(x,y) case here, since Windows is not able to check - // this and our menu here would be out-of-sync with the menu produced by mouse-click on the - // System Menu, or right-click on the title bar. - EnableMenuItem(menu, SC_SIZE, (topLevel->flags() & Qt::MSWindowsFixedSizeDialogHint) || maximized?disabled:enabled); - EnableMenuItem(menu, SC_MOVE, maximized?disabled:enabled); - EnableMenuItem(menu, SC_CLOSE, enabled); - // Set bold on close menu item - MENUITEMINFO closeItem; - closeItem.cbSize = sizeof(MENUITEMINFO); - closeItem.fMask = MIIM_STATE; - closeItem.fState = MFS_DEFAULT; - SetMenuItemInfo(menu, SC_CLOSE, FALSE, &closeItem); - -#undef enabled -#undef disabled -#endif // !Q_OS_WINCE - const QPoint topLeft = topLevel->geometry().topLeft() * QWindowsScaling::factor(); - const int ret = TrackPopupMenuEx(menu, - TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, - topLeft.x(), topLeft.y(), topLevelHwnd, 0); - if (ret) - qWindowsWndProc(topLevelHwnd, WM_SYSCOMMAND, ret, 0); -} - -static inline void sendExtendedPressRelease(QWindow *w, int k, - Qt::KeyboardModifiers mods, - quint32 nativeScanCode, - quint32 nativeVirtualKey, - quint32 nativeModifiers, - const QString & text = QString(), - bool autorep = false, - ushort count = 1) -{ - QWindowSystemInterface::handleExtendedKeyEvent(w, QEvent::KeyPress, k, mods, nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count); - QWindowSystemInterface::handleExtendedKeyEvent(w, QEvent::KeyRelease, k, mods, nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count); -} - -/*! - \brief To be called from the window procedure. -*/ - -bool QWindowsKeyMapper::translateKeyEvent(QWindow *widget, HWND hwnd, - const MSG &msg, LRESULT *result) -{ - *result = 0; - - // Reset layout map when system keyboard layout is changed - if (msg.message == WM_INPUTLANGCHANGE) { - deleteLayouts(); - return true; - } - -#if defined(WM_APPCOMMAND) - if (msg.message == WM_APPCOMMAND) - return translateMultimediaKeyEventInternal(widget, msg); -#endif - - // WM_(IME_)CHAR messages already contain the character in question so there is - // no need to fiddle with our key map. In any other case add this key to the - // keymap if it is not present yet. - if (msg.message != WM_CHAR && msg.message != WM_IME_CHAR) - updateKeyMap(msg); - - MSG peekedMsg; - // consume dead chars?(for example, typing '`','a' resulting in a-accent). - if (PeekMessage(&peekedMsg, hwnd, 0, 0, PM_NOREMOVE) && peekedMsg.message == WM_DEADCHAR) - return true; - - return translateKeyEventInternal(widget, msg, false); -} - -bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, const MSG &msg) -{ -#if defined(WM_APPCOMMAND) - const int cmd = GET_APPCOMMAND_LPARAM(msg.lParam); - const int dwKeys = GET_KEYSTATE_LPARAM(msg.lParam); - int state = 0; - state |= (dwKeys & MK_SHIFT ? int(Qt::ShiftModifier) : 0); - state |= (dwKeys & MK_CONTROL ? int(Qt::ControlModifier) : 0); - - QWindow *receiver = m_keyGrabber ? m_keyGrabber : window; - - if (cmd < 0 || cmd > 52) - return false; - - const int qtKey = CmdTbl[cmd]; - sendExtendedPressRelease(receiver, qtKey, Qt::KeyboardModifier(state), 0, 0, 0); - // QTBUG-43343: Make sure to return false if Qt does not handle the key, otherwise, - // the keys are not passed to the active media player. - const QKeySequence sequence(Qt::Modifier(state) + qtKey); - return QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(sequence); -#else - Q_UNREACHABLE(); - return false; -#endif -} - -bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &msg, bool /* grab */) -{ - const int msgType = msg.message; - - const quint32 scancode = (msg.lParam >> 16) & scancodeBitmask; - const quint32 vk_key = msg.wParam; - quint32 nModifiers = 0; - - QWindow *receiver = m_keyGrabber ? m_keyGrabber : window; - - // Map native modifiers to some bit representation - nModifiers |= (GetKeyState(VK_LSHIFT ) & 0x80 ? ShiftLeft : 0); - nModifiers |= (GetKeyState(VK_RSHIFT ) & 0x80 ? ShiftRight : 0); - nModifiers |= (GetKeyState(VK_LCONTROL) & 0x80 ? ControlLeft : 0); - nModifiers |= (GetKeyState(VK_RCONTROL) & 0x80 ? ControlRight : 0); - nModifiers |= (GetKeyState(VK_LMENU ) & 0x80 ? AltLeft : 0); - nModifiers |= (GetKeyState(VK_RMENU ) & 0x80 ? AltRight : 0); - nModifiers |= (GetKeyState(VK_LWIN ) & 0x80 ? MetaLeft : 0); - nModifiers |= (GetKeyState(VK_RWIN ) & 0x80 ? MetaRight : 0); - // Add Lock keys to the same bits - nModifiers |= (GetKeyState(VK_CAPITAL ) & 0x01 ? CapsLock : 0); - nModifiers |= (GetKeyState(VK_NUMLOCK ) & 0x01 ? NumLock : 0); - nModifiers |= (GetKeyState(VK_SCROLL ) & 0x01 ? ScrollLock : 0); - - if (msg.lParam & ExtendedKey) - nModifiers |= msg.lParam & ExtendedKey; - - // Get the modifier states (may be altered later, depending on key code) - int state = 0; - state |= (nModifiers & ShiftAny ? int(Qt::ShiftModifier) : 0); - state |= (nModifiers & ControlAny ? int(Qt::ControlModifier) : 0); - state |= (nModifiers & AltAny ? int(Qt::AltModifier) : 0); - state |= (nModifiers & MetaAny ? int(Qt::MetaModifier) : 0); - - // A multi-character key or a Input method character - // not found by our look-ahead - if (msgType == WM_CHAR || msgType == WM_IME_CHAR) { - sendExtendedPressRelease(receiver, 0, Qt::KeyboardModifier(state), scancode, vk_key, nModifiers, messageKeyText(msg), false); - return true; - } - - bool result = false; - // handle Directionality changes (BiDi) with RTL extensions - if (m_useRTLExtensions) { - static int dirStatus = 0; - if (!dirStatus && state == Qt::ControlModifier - && msg.wParam == VK_CONTROL - && msgType == WM_KEYDOWN) { - if (GetKeyState(VK_LCONTROL) < 0) - dirStatus = VK_LCONTROL; - else if (GetKeyState(VK_RCONTROL) < 0) - dirStatus = VK_RCONTROL; - } else if (dirStatus) { - if (msgType == WM_KEYDOWN) { - if (msg.wParam == VK_SHIFT) { - if (dirStatus == VK_LCONTROL && GetKeyState(VK_LSHIFT) < 0) - dirStatus = VK_LSHIFT; - else if (dirStatus == VK_RCONTROL && GetKeyState(VK_RSHIFT) < 0) - dirStatus = VK_RSHIFT; - } else { - dirStatus = 0; - } - } else if (msgType == WM_KEYUP) { - if (dirStatus == VK_LSHIFT - && ((msg.wParam == VK_SHIFT && GetKeyState(VK_LCONTROL)) - || (msg.wParam == VK_CONTROL && GetKeyState(VK_LSHIFT)))) { - sendExtendedPressRelease(receiver, Qt::Key_Direction_L, 0, scancode, msg.wParam, nModifiers, QString(), false); - result = true; - dirStatus = 0; - } else if (dirStatus == VK_RSHIFT - && ( (msg.wParam == VK_SHIFT && GetKeyState(VK_RCONTROL)) - || (msg.wParam == VK_CONTROL && GetKeyState(VK_RSHIFT)))) { - sendExtendedPressRelease(receiver, Qt::Key_Direction_R, 0, scancode, msg.wParam, nModifiers, QString(), false); - result = true; - dirStatus = 0; - } else { - dirStatus = 0; - } - } else { - dirStatus = 0; - } - } - } // RTL - - // IME will process these keys, so simply return - if (msg.wParam == VK_PROCESSKEY) - return true; - - // Ignore invalid virtual keycodes (see bugs 127424, QTBUG-3630) - if (msg.wParam == 0 || msg.wParam == 0xFF) - return true; - - // Translate VK_* (native) -> Key_* (Qt) keys - int modifiersIndex = 0; - modifiersIndex |= (nModifiers & ShiftAny ? 0x1 : 0); - modifiersIndex |= (nModifiers & ControlAny ? 0x2 : 0); - modifiersIndex |= (nModifiers & AltAny ? 0x4 : 0); - - int code = keyLayout[vk_key].qtKey[modifiersIndex]; - - // Invert state logic: - // If the key actually pressed is a modifier key, then we remove its modifier key from the - // state, since a modifier-key can't have itself as a modifier - if (code == Qt::Key_Control) - state = state ^ Qt::ControlModifier; - else if (code == Qt::Key_Shift) - state = state ^ Qt::ShiftModifier; - else if (code == Qt::Key_Alt) - state = state ^ Qt::AltModifier; - - // If the bit 24 of lParm is set you received a enter, - // otherwise a Return. (This is the extended key bit) - if ((code == Qt::Key_Return) && (msg.lParam & 0x1000000)) - code = Qt::Key_Enter; - - // All cursor keys without extended bit - if (!(msg.lParam & 0x1000000)) { - switch (code) { - case Qt::Key_Left: - case Qt::Key_Right: - case Qt::Key_Up: - case Qt::Key_Down: - case Qt::Key_PageUp: - case Qt::Key_PageDown: - case Qt::Key_Home: - case Qt::Key_End: - case Qt::Key_Insert: - case Qt::Key_Delete: - case Qt::Key_Asterisk: - case Qt::Key_Plus: - case Qt::Key_Minus: - case Qt::Key_Period: - case Qt::Key_Comma: - case Qt::Key_0: - case Qt::Key_1: - case Qt::Key_2: - case Qt::Key_3: - case Qt::Key_4: - case Qt::Key_5: - case Qt::Key_6: - case Qt::Key_7: - case Qt::Key_8: - case Qt::Key_9: - state |= ((msg.wParam >= '0' && msg.wParam <= '9') - || (msg.wParam >= VK_OEM_PLUS && msg.wParam <= VK_OEM_3)) - ? 0 : int(Qt::KeypadModifier); - default: - if ((uint)msg.lParam == 0x004c0001 || (uint)msg.lParam == 0xc04c0001) - state |= Qt::KeypadModifier; - break; - } - } - // Other keys with with extended bit - else { - switch (code) { - case Qt::Key_Enter: - case Qt::Key_Slash: - case Qt::Key_NumLock: - state |= Qt::KeypadModifier; - default: - break; - } - } - - // KEYDOWN --------------------------------------------------------------------------------- - if (msgType == WM_KEYDOWN || msgType == WM_IME_KEYDOWN || msgType == WM_SYSKEYDOWN) { - // Get the last record of this key press, so we can validate the current state - // The record is not removed from the list - KeyRecord *rec = key_recorder.findKey(msg.wParam, false); - - // If rec's state doesn't match the current state, something has changed behind our back - // (Consumed by modal widget is one possibility) So, remove the record from the list - // This will stop the auto-repeat of the key, should a modifier change, for example - if (rec && rec->state != state) { - key_recorder.findKey(msg.wParam, true); - rec = 0; - } - - // Find unicode character from Windows Message Queue - MSG wm_char; - UINT charType = (msgType == WM_KEYDOWN - ? WM_CHAR - : msgType == WM_IME_KEYDOWN ? WM_IME_CHAR : WM_SYSCHAR); - - QChar uch; - if (PeekMessage(&wm_char, 0, charType, charType, PM_REMOVE)) { - // Found a ?_CHAR - uch = QChar((ushort)wm_char.wParam); - if (msgType == WM_SYSKEYDOWN && uch.isLetter() && (msg.lParam & KF_ALTDOWN)) - uch = uch.toLower(); // (See doc of WM_SYSCHAR) Alt-letter - if (!code && !uch.row()) - code = asciiToKeycode(uch.cell(), state); - } - - // Special handling for the WM_IME_KEYDOWN message. Microsoft IME (Korean) will not - // generate a WM_IME_CHAR message corresponding to this message. We might get wrong - // results, if we map this virtual key-code directly (for eg '?' US layouts). So try - // to find the correct key using the current message parameters & keyboard state. - if (uch.isNull() && msgType == WM_IME_KEYDOWN) { - BYTE keyState[256]; - wchar_t newKey[3] = {0}; - GetKeyboardState(keyState); - int val = ToUnicode(vk_key, scancode, keyState, newKey, 2, 0); - if (val == 1) { - uch = QChar(newKey[0]); - } else { - // If we are still not able to find a unicode key, pass the WM_IME_KEYDOWN - // message to DefWindowProc() for generating a proper WM_KEYDOWN. - return false; - } - } - - // If no ?_CHAR was found in the queue; deduct character from the ?_KEYDOWN parameters - if (uch.isNull()) { - if (msg.wParam == VK_DELETE) { - uch = QChar(QLatin1Char(0x7f)); // Windows doesn't know this one. - } else { - if (msgType != WM_SYSKEYDOWN || !code) { - UINT map = MapVirtualKey(msg.wParam, 2); - // If the high bit of the return value is set, it's a deadkey - if (!(map & 0x80000000)) - uch = QChar((ushort)map); - } - } - if (!code && !uch.row()) - code = asciiToKeycode(uch.cell(), state); - } - - // Special handling of global Windows hotkeys - if (state == Qt::AltModifier) { - switch (code) { - case Qt::Key_Escape: - case Qt::Key_Tab: - case Qt::Key_Enter: - case Qt::Key_F4: - return false; // Send the event on to Windows - case Qt::Key_Space: - // do not pass this key to windows, we will process it ourselves - showSystemMenu(receiver); - return true; - default: - break; - } - } - - // Map SHIFT + Tab to SHIFT + BackTab, QShortcutMap knows about this translation - if (code == Qt::Key_Tab && (state & Qt::ShiftModifier) == Qt::ShiftModifier) - code = Qt::Key_Backtab; - - // If we have a record, it means that the key is already pressed, the state is the same - // so, we have an auto-repeating key - if (rec) { - if (code < Qt::Key_Shift || code > Qt::Key_ScrollLock) { - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true); - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true); - result = true; - } - } - // No record of the key being previous pressed, so we now send a QEvent::KeyPress event, - // and store the key data into our records. - else { - const QString text = uch.isNull() ? QString() : QString(uch); - const char a = uch.row() ? 0 : uch.cell(); - const Qt::KeyboardModifiers modifiers(state); -#ifndef QT_NO_SHORTCUT - // Is Qt interested in the context menu key? - if (modifiers == Qt::SHIFT && code == Qt::Key_F10 - && !QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(QKeySequence(Qt::SHIFT + Qt::Key_F10))) { - return false; - } -#endif // !QT_NO_SHORTCUT - key_recorder.storeKey(msg.wParam, a, state, text); - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code, - modifiers, scancode, msg.wParam, nModifiers, text, false); - result =true; - bool store = true; -#ifndef Q_OS_WINCE - // Alt+ go to the Win32 menu system if unhandled by Qt - if (msgType == WM_SYSKEYDOWN && !result && a) { - HWND parent = GetParent(QWindowsWindow::handleOf(receiver)); - while (parent) { - if (GetMenu(parent)) { - SendMessage(parent, WM_SYSCOMMAND, SC_KEYMENU, a); - store = false; - result = true; - break; - } - parent = GetParent(parent); - } - } -#endif // !Q_OS_WINCE - if (!store) - key_recorder.findKey(msg.wParam, true); - } - } - - // KEYUP ----------------------------------------------------------------------------------- - else { - // Try to locate the key in our records, and remove it if it exists. - // The key may not be in our records if, for example, the down event was handled by - // win32 natively, or our window gets focus while a key is already press, but now gets - // the key release event. - KeyRecord* rec = key_recorder.findKey(msg.wParam, true); - if (!rec && !(code == Qt::Key_Shift - || code == Qt::Key_Control - || code == Qt::Key_Meta - || code == Qt::Key_Alt)) { - // Someone ate the key down event - } else { - if (!code) - code = asciiToKeycode(rec->ascii ? rec->ascii : msg.wParam, state); - - // Map SHIFT + Tab to SHIFT + BackTab, QShortcutMap knows about this translation - if (code == Qt::Key_Tab && (state & Qt::ShiftModifier) == Qt::ShiftModifier) - code = Qt::Key_Backtab; - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, - (rec ? rec->text : QString()), false); - result = true; -#ifndef Q_OS_WINCE - // don't pass Alt to Windows unless we are embedded in a non-Qt window - if (code == Qt::Key_Alt) { - const QWindowsContext *context = QWindowsContext::instance(); - HWND parent = GetParent(QWindowsWindow::handleOf(receiver)); - while (parent) { - if (!context->findPlatformWindow(parent) && GetMenu(parent)) { - result = false; - break; - } - parent = GetParent(parent); - } - } -#endif - } - } - return result; -} - -Qt::KeyboardModifiers QWindowsKeyMapper::queryKeyboardModifiers() -{ - Qt::KeyboardModifiers modifiers = Qt::NoModifier; - if (GetKeyState(VK_SHIFT) < 0) - modifiers |= Qt::ShiftModifier; - if (GetKeyState(VK_CONTROL) < 0) - modifiers |= Qt::ControlModifier; - if (GetKeyState(VK_MENU) < 0) - modifiers |= Qt::AltModifier; - return modifiers; -} - -QList QWindowsKeyMapper::possibleKeys(const QKeyEvent *e) const -{ - QList result; - - const KeyboardLayoutItem &kbItem = keyLayout[e->nativeVirtualKey()]; - if (!kbItem.exists) - return result; - - quint32 baseKey = kbItem.qtKey[0]; - Qt::KeyboardModifiers keyMods = e->modifiers(); - if (baseKey == Qt::Key_Return && (e->nativeModifiers() & ExtendedKey)) { - result << int(Qt::Key_Enter + keyMods); - return result; - } - result << int(baseKey + keyMods); // The base key is _always_ valid, of course - - for (size_t i = 1; i < NumMods; ++i) { - Qt::KeyboardModifiers neededMods = ModsTbl[i]; - quint32 key = kbItem.qtKey[i]; - if (key && key != baseKey && ((keyMods & neededMods) == neededMods)) - result << int(key + (keyMods & ~neededMods)); - } - - return result; -} - -QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c b/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c deleted file mode 100644 index 93d9dc477..000000000 --- a/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c +++ /dev/null @@ -1,1385 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// main entry for the decoder -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) - -#include -#include "./alphai.h" -#include "./vp8li.h" -#include "../dsp/lossless.h" -#include "../dsp/yuv.h" -#include "../utils/alpha_processing.h" -#include "../utils/huffman.h" -#include "../utils/utils.h" - -#define NUM_ARGB_CACHE_ROWS 16 - -static const int kCodeLengthLiterals = 16; -static const int kCodeLengthRepeatCode = 16; -static const int kCodeLengthExtraBits[3] = { 2, 3, 7 }; -static const int kCodeLengthRepeatOffsets[3] = { 3, 3, 11 }; - -// ----------------------------------------------------------------------------- -// Five Huffman codes are used at each meta code: -// 1. green + length prefix codes + color cache codes, -// 2. alpha, -// 3. red, -// 4. blue, and, -// 5. distance prefix codes. -typedef enum { - GREEN = 0, - RED = 1, - BLUE = 2, - ALPHA = 3, - DIST = 4 -} HuffIndex; - -static const uint16_t kAlphabetSize[HUFFMAN_CODES_PER_META_CODE] = { - NUM_LITERAL_CODES + NUM_LENGTH_CODES, - NUM_LITERAL_CODES, NUM_LITERAL_CODES, NUM_LITERAL_CODES, - NUM_DISTANCE_CODES -}; - - -#define NUM_CODE_LENGTH_CODES 19 -static const uint8_t kCodeLengthCodeOrder[NUM_CODE_LENGTH_CODES] = { - 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -#define CODE_TO_PLANE_CODES 120 -static const uint8_t kCodeToPlane[CODE_TO_PLANE_CODES] = { - 0x18, 0x07, 0x17, 0x19, 0x28, 0x06, 0x27, 0x29, 0x16, 0x1a, - 0x26, 0x2a, 0x38, 0x05, 0x37, 0x39, 0x15, 0x1b, 0x36, 0x3a, - 0x25, 0x2b, 0x48, 0x04, 0x47, 0x49, 0x14, 0x1c, 0x35, 0x3b, - 0x46, 0x4a, 0x24, 0x2c, 0x58, 0x45, 0x4b, 0x34, 0x3c, 0x03, - 0x57, 0x59, 0x13, 0x1d, 0x56, 0x5a, 0x23, 0x2d, 0x44, 0x4c, - 0x55, 0x5b, 0x33, 0x3d, 0x68, 0x02, 0x67, 0x69, 0x12, 0x1e, - 0x66, 0x6a, 0x22, 0x2e, 0x54, 0x5c, 0x43, 0x4d, 0x65, 0x6b, - 0x32, 0x3e, 0x78, 0x01, 0x77, 0x79, 0x53, 0x5d, 0x11, 0x1f, - 0x64, 0x6c, 0x42, 0x4e, 0x76, 0x7a, 0x21, 0x2f, 0x75, 0x7b, - 0x31, 0x3f, 0x63, 0x6d, 0x52, 0x5e, 0x00, 0x74, 0x7c, 0x41, - 0x4f, 0x10, 0x20, 0x62, 0x6e, 0x30, 0x73, 0x7d, 0x51, 0x5f, - 0x40, 0x72, 0x7e, 0x61, 0x6f, 0x50, 0x71, 0x7f, 0x60, 0x70 -}; - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data); - -//------------------------------------------------------------------------------ - -int VP8LCheckSignature(const uint8_t* const data, size_t size) { - return (size >= VP8L_FRAME_HEADER_SIZE && - data[0] == VP8L_MAGIC_BYTE && - (data[4] >> 5) == 0); // version -} - -static int ReadImageInfo(VP8LBitReader* const br, - int* const width, int* const height, - int* const has_alpha) { - if (VP8LReadBits(br, 8) != VP8L_MAGIC_BYTE) return 0; - *width = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *height = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *has_alpha = VP8LReadBits(br, 1); - if (VP8LReadBits(br, VP8L_VERSION_BITS) != 0) return 0; - return 1; -} - -int VP8LGetInfo(const uint8_t* data, size_t data_size, - int* const width, int* const height, int* const has_alpha) { - if (data == NULL || data_size < VP8L_FRAME_HEADER_SIZE) { - return 0; // not enough data - } else if (!VP8LCheckSignature(data, data_size)) { - return 0; // bad signature - } else { - int w, h, a; - VP8LBitReader br; - VP8LInitBitReader(&br, data, data_size); - if (!ReadImageInfo(&br, &w, &h, &a)) { - return 0; - } - if (width != NULL) *width = w; - if (height != NULL) *height = h; - if (has_alpha != NULL) *has_alpha = a; - return 1; - } -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetCopyDistance(int distance_symbol, - VP8LBitReader* const br) { - int extra_bits, offset; - if (distance_symbol < 4) { - return distance_symbol + 1; - } - extra_bits = (distance_symbol - 2) >> 1; - offset = (2 + (distance_symbol & 1)) << extra_bits; - return offset + VP8LReadBits(br, extra_bits) + 1; -} - -static WEBP_INLINE int GetCopyLength(int length_symbol, - VP8LBitReader* const br) { - // Length and distance prefixes are encoded the same way. - return GetCopyDistance(length_symbol, br); -} - -static WEBP_INLINE int PlaneCodeToDistance(int xsize, int plane_code) { - if (plane_code > CODE_TO_PLANE_CODES) { - return plane_code - CODE_TO_PLANE_CODES; - } else { - const int dist_code = kCodeToPlane[plane_code - 1]; - const int yoffset = dist_code >> 4; - const int xoffset = 8 - (dist_code & 0xf); - const int dist = yoffset * xsize + xoffset; - return (dist >= 1) ? dist : 1; // dist<1 can happen if xsize is very small - } -} - -//------------------------------------------------------------------------------ -// Decodes the next Huffman code from bit-stream. -// FillBitWindow(br) needs to be called at minimum every second call -// to ReadSymbol, in order to pre-fetch enough bits. -static WEBP_INLINE int ReadSymbol(const HuffmanTree* tree, - VP8LBitReader* const br) { - const HuffmanTreeNode* node = tree->root_; - uint32_t bits = VP8LPrefetchBits(br); - int bitpos = br->bit_pos_; - // Check if we find the bit combination from the Huffman lookup table. - const int lut_ix = bits & (HUFF_LUT - 1); - const int lut_bits = tree->lut_bits_[lut_ix]; - if (lut_bits <= HUFF_LUT_BITS) { - VP8LSetBitPos(br, bitpos + lut_bits); - return tree->lut_symbol_[lut_ix]; - } - node += tree->lut_jump_[lut_ix]; - bitpos += HUFF_LUT_BITS; - bits >>= HUFF_LUT_BITS; - - // Decode the value from a binary tree. - assert(node != NULL); - do { - node = HuffmanTreeNextNode(node, bits & 1); - bits >>= 1; - ++bitpos; - } while (HuffmanTreeNodeIsNotLeaf(node)); - VP8LSetBitPos(br, bitpos); - return node->symbol_; -} - -static int ReadHuffmanCodeLengths( - VP8LDecoder* const dec, const int* const code_length_code_lengths, - int num_symbols, int* const code_lengths) { - int ok = 0; - VP8LBitReader* const br = &dec->br_; - int symbol; - int max_symbol; - int prev_code_len = DEFAULT_CODE_LENGTH; - HuffmanTree tree; - - if (!HuffmanTreeBuildImplicit(&tree, code_length_code_lengths, - NUM_CODE_LENGTH_CODES)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - - if (VP8LReadBits(br, 1)) { // use length - const int length_nbits = 2 + 2 * VP8LReadBits(br, 3); - max_symbol = 2 + VP8LReadBits(br, length_nbits); - if (max_symbol > num_symbols) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - } else { - max_symbol = num_symbols; - } - - symbol = 0; - while (symbol < num_symbols) { - int code_len; - if (max_symbol-- == 0) break; - VP8LFillBitWindow(br); - code_len = ReadSymbol(&tree, br); - if (code_len < kCodeLengthLiterals) { - code_lengths[symbol++] = code_len; - if (code_len != 0) prev_code_len = code_len; - } else { - const int use_prev = (code_len == kCodeLengthRepeatCode); - const int slot = code_len - kCodeLengthLiterals; - const int extra_bits = kCodeLengthExtraBits[slot]; - const int repeat_offset = kCodeLengthRepeatOffsets[slot]; - int repeat = VP8LReadBits(br, extra_bits) + repeat_offset; - if (symbol + repeat > num_symbols) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } else { - const int length = use_prev ? prev_code_len : 0; - while (repeat-- > 0) code_lengths[symbol++] = length; - } - } - } - ok = 1; - - End: - HuffmanTreeRelease(&tree); - return ok; -} - -static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec, - HuffmanTree* const tree) { - int ok = 0; - VP8LBitReader* const br = &dec->br_; - const int simple_code = VP8LReadBits(br, 1); - - if (simple_code) { // Read symbols, codes & code lengths directly. - int symbols[2]; - int codes[2]; - int code_lengths[2]; - const int num_symbols = VP8LReadBits(br, 1) + 1; - const int first_symbol_len_code = VP8LReadBits(br, 1); - // The first code is either 1 bit or 8 bit code. - symbols[0] = VP8LReadBits(br, (first_symbol_len_code == 0) ? 1 : 8); - codes[0] = 0; - code_lengths[0] = num_symbols - 1; - // The second code (if present), is always 8 bit long. - if (num_symbols == 2) { - symbols[1] = VP8LReadBits(br, 8); - codes[1] = 1; - code_lengths[1] = num_symbols - 1; - } - ok = HuffmanTreeBuildExplicit(tree, code_lengths, codes, symbols, - alphabet_size, num_symbols); - } else { // Decode Huffman-coded code lengths. - int* code_lengths = NULL; - int i; - int code_length_code_lengths[NUM_CODE_LENGTH_CODES] = { 0 }; - const int num_codes = VP8LReadBits(br, 4) + 4; - if (num_codes > NUM_CODE_LENGTH_CODES) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - - code_lengths = - (int*)WebPSafeCalloc((uint64_t)alphabet_size, sizeof(*code_lengths)); - if (code_lengths == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - - for (i = 0; i < num_codes; ++i) { - code_length_code_lengths[kCodeLengthCodeOrder[i]] = VP8LReadBits(br, 3); - } - ok = ReadHuffmanCodeLengths(dec, code_length_code_lengths, alphabet_size, - code_lengths); - if (ok) { - ok = HuffmanTreeBuildImplicit(tree, code_lengths, alphabet_size); - } - free(code_lengths); - } - ok = ok && !br->error_; - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - return 1; -} - -static void DeleteHtreeGroups(HTreeGroup* htree_groups, int num_htree_groups) { - if (htree_groups != NULL) { - int i, j; - for (i = 0; i < num_htree_groups; ++i) { - HuffmanTree* const htrees = htree_groups[i].htrees_; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - HuffmanTreeRelease(&htrees[j]); - } - } - free(htree_groups); - } -} - -static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, - int color_cache_bits, int allow_recursion) { - int i, j; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* huffman_image = NULL; - HTreeGroup* htree_groups = NULL; - int num_htree_groups = 1; - - if (allow_recursion && VP8LReadBits(br, 1)) { - // use meta Huffman codes. - const int huffman_precision = VP8LReadBits(br, 3) + 2; - const int huffman_xsize = VP8LSubSampleSize(xsize, huffman_precision); - const int huffman_ysize = VP8LSubSampleSize(ysize, huffman_precision); - const int huffman_pixs = huffman_xsize * huffman_ysize; - if (!DecodeImageStream(huffman_xsize, huffman_ysize, 0, dec, - &huffman_image)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto Error; - } - hdr->huffman_subsample_bits_ = huffman_precision; - for (i = 0; i < huffman_pixs; ++i) { - // The huffman data is stored in red and green bytes. - const int group = (huffman_image[i] >> 8) & 0xffff; - huffman_image[i] = group; - if (group >= num_htree_groups) { - num_htree_groups = group + 1; - } - } - } - - if (br->error_) goto Error; - - assert(num_htree_groups <= 0x10000); - htree_groups = - (HTreeGroup*)WebPSafeCalloc((uint64_t)num_htree_groups, - sizeof(*htree_groups)); - if (htree_groups == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Error; - } - - for (i = 0; i < num_htree_groups; ++i) { - HuffmanTree* const htrees = htree_groups[i].htrees_; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += 1 << color_cache_bits; - } - if (!ReadHuffmanCode(alphabet_size, dec, htrees + j)) goto Error; - } - } - - // All OK. Finalize pointers and return. - hdr->huffman_image_ = huffman_image; - hdr->num_htree_groups_ = num_htree_groups; - hdr->htree_groups_ = htree_groups; - return 1; - - Error: - free(huffman_image); - DeleteHtreeGroups(htree_groups, num_htree_groups); - return 0; -} - -//------------------------------------------------------------------------------ -// Scaling. - -static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { - const int num_channels = 4; - const int in_width = io->mb_w; - const int out_width = io->scaled_width; - const int in_height = io->mb_h; - const int out_height = io->scaled_height; - const uint64_t work_size = 2 * num_channels * (uint64_t)out_width; - int32_t* work; // Rescaler work area. - const uint64_t scaled_data_size = num_channels * (uint64_t)out_width; - uint32_t* scaled_data; // Temporary storage for scaled BGRA data. - const uint64_t memory_size = sizeof(*dec->rescaler) + - work_size * sizeof(*work) + - scaled_data_size * sizeof(*scaled_data); - uint8_t* memory = (uint8_t*)WebPSafeCalloc(memory_size, sizeof(*memory)); - if (memory == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - assert(dec->rescaler_memory == NULL); - dec->rescaler_memory = memory; - - dec->rescaler = (WebPRescaler*)memory; - memory += sizeof(*dec->rescaler); - work = (int32_t*)memory; - memory += work_size * sizeof(*work); - scaled_data = (uint32_t*)memory; - - WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data, - out_width, out_height, 0, num_channels, - in_width, out_width, in_height, out_height, work); - return 1; -} - -//------------------------------------------------------------------------------ -// Export to ARGB - -// We have special "export" function since we need to convert from BGRA -static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace, - int rgba_stride, uint8_t* const rgba) { - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - uint8_t* const dst = rgba + num_lines_out * rgba_stride; - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - VP8LConvertFromBGRA(src, dst_width, colorspace, dst); - ++num_lines_out; - } - return num_lines_out; -} - -// Emit scaled rows. -static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h, - uint8_t* const out, int out_stride) { - const WEBP_CSP_MODE colorspace = dec->output_->colorspace; - int num_lines_in = 0; - int num_lines_out = 0; - while (num_lines_in < mb_h) { - uint8_t* const row_in = in + num_lines_in * in_stride; - uint8_t* const row_out = out + num_lines_out * out_stride; - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - assert(needed_lines > 0 && needed_lines <= lines_left); - WebPMultARGBRows(row_in, in_stride, - dec->rescaler->src_width, needed_lines, 0); - WebPRescalerImport(dec->rescaler, lines_left, row_in, in_stride); - num_lines_in += needed_lines; - num_lines_out += Export(dec->rescaler, colorspace, out_stride, row_out); - } - return num_lines_out; -} - -// Emit rows without any scaling. -static int EmitRows(WEBP_CSP_MODE colorspace, - const uint8_t* row_in, int in_stride, - int mb_w, int mb_h, - uint8_t* const out, int out_stride) { - int lines = mb_h; - uint8_t* row_out = out; - while (lines-- > 0) { - VP8LConvertFromBGRA((const uint32_t*)row_in, mb_w, colorspace, row_out); - row_in += in_stride; - row_out += out_stride; - } - return mb_h; // Num rows out == num rows in. -} - -//------------------------------------------------------------------------------ -// Export to YUVA - -static void ConvertToYUVA(const uint32_t* const src, int width, int y_pos, - const WebPDecBuffer* const output) { - const WebPYUVABuffer* const buf = &output->u.YUVA; - // first, the luma plane - { - int i; - uint8_t* const y = buf->y + y_pos * buf->y_stride; - for (i = 0; i < width; ++i) { - const uint32_t p = src[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } - } - - // then U/V planes - { - uint8_t* const u = buf->u + (y_pos >> 1) * buf->u_stride; - uint8_t* const v = buf->v + (y_pos >> 1) * buf->v_stride; - const int uv_width = width >> 1; - int i; - for (i = 0; i < uv_width; ++i) { - const uint32_t v0 = src[2 * i + 0]; - const uint32_t v1 = src[2 * i + 1]; - // VP8RGBToU/V expects four accumulated pixels. Hence we need to - // scale r/g/b value by a factor 2. We just shift v0/v1 one bit less. - const int r = ((v0 >> 15) & 0x1fe) + ((v1 >> 15) & 0x1fe); - const int g = ((v0 >> 7) & 0x1fe) + ((v1 >> 7) & 0x1fe); - const int b = ((v0 << 1) & 0x1fe) + ((v1 << 1) & 0x1fe); - if (!(y_pos & 1)) { // even lines: store values - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } else { // odd lines: average with previous values - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - // Approximated average-of-four. But it's an acceptable diff. - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } - if (width & 1) { // last pixel - const uint32_t v0 = src[2 * i + 0]; - const int r = (v0 >> 14) & 0x3fc; - const int g = (v0 >> 6) & 0x3fc; - const int b = (v0 << 2) & 0x3fc; - if (!(y_pos & 1)) { // even lines - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } else { // odd lines (note: we could just skip this) - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } - } - // Lastly, store alpha if needed. - if (buf->a != NULL) { - int i; - uint8_t* const a = buf->a + y_pos * buf->a_stride; - for (i = 0; i < width; ++i) a[i] = (src[i] >> 24); - } -} - -static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) { - WebPRescaler* const rescaler = dec->rescaler; - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - ConvertToYUVA(src, dst_width, y_pos, dec->output_); - ++y_pos; - ++num_lines_out; - } - return num_lines_out; -} - -static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h) { - int num_lines_in = 0; - int y_pos = dec->last_out_row_; - while (num_lines_in < mb_h) { - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - WebPMultARGBRows(in, in_stride, dec->rescaler->src_width, needed_lines, 0); - WebPRescalerImport(dec->rescaler, lines_left, in, in_stride); - num_lines_in += needed_lines; - in += needed_lines * in_stride; - y_pos += ExportYUVA(dec, y_pos); - } - return y_pos; -} - -static int EmitRowsYUVA(const VP8LDecoder* const dec, - const uint8_t* in, int in_stride, - int mb_w, int num_rows) { - int y_pos = dec->last_out_row_; - while (num_rows-- > 0) { - ConvertToYUVA((const uint32_t*)in, mb_w, y_pos, dec->output_); - in += in_stride; - ++y_pos; - } - return y_pos; -} - -//------------------------------------------------------------------------------ -// Cropping. - -// Sets io->mb_y, io->mb_h & io->mb_w according to start row, end row and -// crop options. Also updates the input data pointer, so that it points to the -// start of the cropped window. Note that pixels are in ARGB format even if -// 'in_data' is uint8_t*. -// Returns true if the crop window is not empty. -static int SetCropWindow(VP8Io* const io, int y_start, int y_end, - uint8_t** const in_data, int pixel_stride) { - assert(y_start < y_end); - assert(io->crop_left < io->crop_right); - if (y_end > io->crop_bottom) { - y_end = io->crop_bottom; // make sure we don't overflow on last row. - } - if (y_start < io->crop_top) { - const int delta = io->crop_top - y_start; - y_start = io->crop_top; - *in_data += delta * pixel_stride; - } - if (y_start >= y_end) return 0; // Crop window is empty. - - *in_data += io->crop_left * sizeof(uint32_t); - - io->mb_y = y_start - io->crop_top; - io->mb_w = io->crop_right - io->crop_left; - io->mb_h = y_end - y_start; - return 1; // Non-empty crop window. -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetMetaIndex( - const uint32_t* const image, int xsize, int bits, int x, int y) { - if (bits == 0) return 0; - return image[xsize * (y >> bits) + (x >> bits)]; -} - -static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr, - int x, int y) { - const int meta_index = GetMetaIndex(hdr->huffman_image_, hdr->huffman_xsize_, - hdr->huffman_subsample_bits_, x, y); - assert(meta_index < hdr->num_htree_groups_); - return hdr->htree_groups_ + meta_index; -} - -//------------------------------------------------------------------------------ -// Main loop, with custom row-processing function - -typedef void (*ProcessRowsFunc)(VP8LDecoder* const dec, int row); - -static void ApplyInverseTransforms(VP8LDecoder* const dec, int num_rows, - const uint32_t* const rows) { - int n = dec->next_transform_; - const int cache_pixs = dec->width_ * num_rows; - const int start_row = dec->last_row_; - const int end_row = start_row + num_rows; - const uint32_t* rows_in = rows; - uint32_t* const rows_out = dec->argb_cache_; - - // Inverse transforms. - // TODO: most transforms only need to operate on the cropped region only. - memcpy(rows_out, rows_in, cache_pixs * sizeof(*rows_out)); - while (n-- > 0) { - VP8LTransform* const transform = &dec->transforms_[n]; - VP8LInverseTransform(transform, start_row, end_row, rows_in, rows_out); - rows_in = rows_out; - } -} - -// Special method for paletted alpha data. -static void ApplyInverseTransformsAlpha(VP8LDecoder* const dec, int num_rows, - const uint8_t* const rows) { - const int start_row = dec->last_row_; - const int end_row = start_row + num_rows; - const uint8_t* rows_in = rows; - uint8_t* rows_out = (uint8_t*)dec->io_->opaque + dec->io_->width * start_row; - VP8LTransform* const transform = &dec->transforms_[0]; - assert(dec->next_transform_ == 1); - assert(transform->type_ == COLOR_INDEXING_TRANSFORM); - VP8LColorIndexInverseTransformAlpha(transform, start_row, end_row, rows_in, - rows_out); -} - -// Processes (transforms, scales & color-converts) the rows decoded after the -// last call. -static void ProcessRows(VP8LDecoder* const dec, int row) { - const uint32_t* const rows = dec->pixels_ + dec->width_ * dec->last_row_; - const int num_rows = row - dec->last_row_; - - if (num_rows <= 0) return; // Nothing to be done. - ApplyInverseTransforms(dec, num_rows, rows); - - // Emit output. - { - VP8Io* const io = dec->io_; - uint8_t* rows_data = (uint8_t*)dec->argb_cache_; - const int in_stride = io->width * sizeof(uint32_t); // in unit of RGBA - if (!SetCropWindow(io, dec->last_row_, row, &rows_data, in_stride)) { - // Nothing to output (this time). - } else { - const WebPDecBuffer* const output = dec->output_; - if (output->colorspace < MODE_YUV) { // convert to RGBA - const WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride; - const int num_rows_out = io->use_scaling ? - EmitRescaledRowsRGBA(dec, rows_data, in_stride, io->mb_h, - rgba, buf->stride) : - EmitRows(output->colorspace, rows_data, in_stride, - io->mb_w, io->mb_h, rgba, buf->stride); - // Update 'last_out_row_'. - dec->last_out_row_ += num_rows_out; - } else { // convert to YUVA - dec->last_out_row_ = io->use_scaling ? - EmitRescaledRowsYUVA(dec, rows_data, in_stride, io->mb_h) : - EmitRowsYUVA(dec, rows_data, in_stride, io->mb_w, io->mb_h); - } - assert(dec->last_out_row_ <= output->height); - } - } - - // Update 'last_row_'. - dec->last_row_ = row; - assert(dec->last_row_ <= dec->height_); -} - -// Row-processing for the special case when alpha data contains only one -// transform (color indexing), and trivial non-green literals. -static int Is8bOptimizable(const VP8LMetadata* const hdr) { - int i; - if (hdr->color_cache_size_ > 0) return 0; - // When the Huffman tree contains only one symbol, we can skip the - // call to ReadSymbol() for red/blue/alpha channels. - for (i = 0; i < hdr->num_htree_groups_; ++i) { - const HuffmanTree* const htrees = hdr->htree_groups_[i].htrees_; - if (htrees[RED].num_nodes_ > 1) return 0; - if (htrees[BLUE].num_nodes_ > 1) return 0; - if (htrees[ALPHA].num_nodes_ > 1) return 0; - } - return 1; -} - -static void ExtractPalettedAlphaRows(VP8LDecoder* const dec, int row) { - const int num_rows = row - dec->last_row_; - const uint8_t* const in = - (uint8_t*)dec->pixels_ + dec->width_ * dec->last_row_; - if (num_rows > 0) { - ApplyInverseTransformsAlpha(dec, num_rows, in); - } - dec->last_row_ = dec->last_out_row_ = row; -} - -static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data, - int width, int height, int last_row) { - int ok = 1; - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - const HTreeGroup* htree_group = GetHtreeGroupForPos(hdr, col, row); - int pos = dec->last_pixel_; // current position - const int end = width * height; // End of data - const int last = width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); - assert(pos < end); - assert(last_row <= height); - assert(Is8bOptimizable(hdr)); - - while (!br->eos_ && pos < last) { - int code; - // Only update when changing tile. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - VP8LFillBitWindow(br); - code = ReadSymbol(&htree_group->htrees_[GREEN], br); - if (code < NUM_LITERAL_CODES) { // Literal - data[pos] = code; - ++pos; - ++col; - if (col >= width) { - col = 0; - ++row; - if (row % NUM_ARGB_CACHE_ROWS == 0) { - ExtractPalettedAlphaRows(dec, row); - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(&htree_group->htrees_[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - if (pos >= dist && end - pos >= length) { - int i; - for (i = 0; i < length; ++i) data[pos + i] = data[pos + i - dist]; - } else { - ok = 0; - goto End; - } - pos += length; - col += length; - while (col >= width) { - col -= width; - ++row; - if (row % NUM_ARGB_CACHE_ROWS == 0) { - ExtractPalettedAlphaRows(dec, row); - } - } - if (pos < last && (col & mask)) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - } else { // Not reached - ok = 0; - goto End; - } - ok = !br->error_; - if (!ok) goto End; - } - // Process the remaining rows corresponding to last row-block. - ExtractPalettedAlphaRows(dec, row); - - End: - if (br->error_ || !ok || (br->eos_ && pos < end)) { - ok = 0; - dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED - : VP8_STATUS_BITSTREAM_ERROR; - } else { - dec->last_pixel_ = (int)pos; - if (pos == end) dec->state_ = READ_DATA; - } - return ok; -} - -static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data, - int width, int height, int last_row, - ProcessRowsFunc process_func) { - int ok = 1; - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - HTreeGroup* htree_group = GetHtreeGroupForPos(hdr, col, row); - uint32_t* src = data + dec->last_pixel_; - uint32_t* last_cached = src; - uint32_t* const src_end = data + width * height; // End of data - uint32_t* const src_last = data + width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int color_cache_limit = len_code_limit + hdr->color_cache_size_; - VP8LColorCache* const color_cache = - (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); - assert(src < src_end); - assert(src_last <= src_end); - - while (!br->eos_ && src < src_last) { - int code; - // Only update when changing tile. Note we could use this test: - // if "((((prev_col ^ col) | prev_row ^ row)) > mask)" -> tile changed - // but that's actually slower and needs storing the previous col/row. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - VP8LFillBitWindow(br); - code = ReadSymbol(&htree_group->htrees_[GREEN], br); - if (code < NUM_LITERAL_CODES) { // Literal - int red, green, blue, alpha; - red = ReadSymbol(&htree_group->htrees_[RED], br); - green = code; - VP8LFillBitWindow(br); - blue = ReadSymbol(&htree_group->htrees_[BLUE], br); - alpha = ReadSymbol(&htree_group->htrees_[ALPHA], br); - *src = (alpha << 24) | (red << 16) | (green << 8) | blue; - AdvanceByOne: - ++src; - ++col; - if (col >= width) { - col = 0; - ++row; - if ((row % NUM_ARGB_CACHE_ROWS == 0) && (process_func != NULL)) { - process_func(dec, row); - } - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(&htree_group->htrees_[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - if (src - data < (ptrdiff_t)dist || src_end - src < (ptrdiff_t)length) { - ok = 0; - goto End; - } else { - int i; - for (i = 0; i < length; ++i) src[i] = src[i - dist]; - src += length; - } - col += length; - while (col >= width) { - col -= width; - ++row; - if ((row % NUM_ARGB_CACHE_ROWS == 0) && (process_func != NULL)) { - process_func(dec, row); - } - } - if (src < src_last) { - if (col & mask) htree_group = GetHtreeGroupForPos(hdr, col, row); - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } - } else if (code < color_cache_limit) { // Color cache - const int key = code - len_code_limit; - assert(color_cache != NULL); - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - *src = VP8LColorCacheLookup(color_cache, key); - goto AdvanceByOne; - } else { // Not reached - ok = 0; - goto End; - } - ok = !br->error_; - if (!ok) goto End; - } - // Process the remaining rows corresponding to last row-block. - if (process_func != NULL) process_func(dec, row); - - End: - if (br->error_ || !ok || (br->eos_ && src < src_end)) { - ok = 0; - dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED - : VP8_STATUS_BITSTREAM_ERROR; - } else { - dec->last_pixel_ = (int)(src - data); - if (src == src_end) dec->state_ = READ_DATA; - } - return ok; -} - -// ----------------------------------------------------------------------------- -// VP8LTransform - -static void ClearTransform(VP8LTransform* const transform) { - free(transform->data_); - transform->data_ = NULL; -} - -// For security reason, we need to remap the color map to span -// the total possible bundled values, and not just the num_colors. -static int ExpandColorMap(int num_colors, VP8LTransform* const transform) { - int i; - const int final_num_colors = 1 << (8 >> transform->bits_); - uint32_t* const new_color_map = - (uint32_t*)WebPSafeMalloc((uint64_t)final_num_colors, - sizeof(*new_color_map)); - if (new_color_map == NULL) { - return 0; - } else { - uint8_t* const data = (uint8_t*)transform->data_; - uint8_t* const new_data = (uint8_t*)new_color_map; - new_color_map[0] = transform->data_[0]; - for (i = 4; i < 4 * num_colors; ++i) { - // Equivalent to AddPixelEq(), on a byte-basis. - new_data[i] = (data[i] + new_data[i - 4]) & 0xff; - } - for (; i < 4 * final_num_colors; ++i) - new_data[i] = 0; // black tail. - free(transform->data_); - transform->data_ = new_color_map; - } - return 1; -} - -static int ReadTransform(int* const xsize, int const* ysize, - VP8LDecoder* const dec) { - int ok = 1; - VP8LBitReader* const br = &dec->br_; - VP8LTransform* transform = &dec->transforms_[dec->next_transform_]; - const VP8LImageTransformType type = - (VP8LImageTransformType)VP8LReadBits(br, 2); - - // Each transform type can only be present once in the stream. - if (dec->transforms_seen_ & (1U << type)) { - return 0; // Already there, let's not accept the second same transform. - } - dec->transforms_seen_ |= (1U << type); - - transform->type_ = type; - transform->xsize_ = *xsize; - transform->ysize_ = *ysize; - transform->data_ = NULL; - ++dec->next_transform_; - assert(dec->next_transform_ <= NUM_TRANSFORMS); - - switch (type) { - case PREDICTOR_TRANSFORM: - case CROSS_COLOR_TRANSFORM: - transform->bits_ = VP8LReadBits(br, 3) + 2; - ok = DecodeImageStream(VP8LSubSampleSize(transform->xsize_, - transform->bits_), - VP8LSubSampleSize(transform->ysize_, - transform->bits_), - 0, dec, &transform->data_); - break; - case COLOR_INDEXING_TRANSFORM: { - const int num_colors = VP8LReadBits(br, 8) + 1; - const int bits = (num_colors > 16) ? 0 - : (num_colors > 4) ? 1 - : (num_colors > 2) ? 2 - : 3; - *xsize = VP8LSubSampleSize(transform->xsize_, bits); - transform->bits_ = bits; - ok = DecodeImageStream(num_colors, 1, 0, dec, &transform->data_); - ok = ok && ExpandColorMap(num_colors, transform); - break; - } - case SUBTRACT_GREEN: - break; - default: - assert(0); // can't happen - break; - } - - return ok; -} - -// ----------------------------------------------------------------------------- -// VP8LMetadata - -static void InitMetadata(VP8LMetadata* const hdr) { - assert(hdr); - memset(hdr, 0, sizeof(*hdr)); -} - -static void ClearMetadata(VP8LMetadata* const hdr) { - assert(hdr); - - free(hdr->huffman_image_); - DeleteHtreeGroups(hdr->htree_groups_, hdr->num_htree_groups_); - VP8LColorCacheClear(&hdr->color_cache_); - InitMetadata(hdr); -} - -// ----------------------------------------------------------------------------- -// VP8LDecoder - -VP8LDecoder* VP8LNew(void) { - VP8LDecoder* const dec = (VP8LDecoder*)calloc(1, sizeof(*dec)); - if (dec == NULL) return NULL; - dec->status_ = VP8_STATUS_OK; - dec->action_ = READ_DIM; - dec->state_ = READ_DIM; - - VP8LDspInit(); // Init critical function pointers. - - return dec; -} - -void VP8LClear(VP8LDecoder* const dec) { - int i; - if (dec == NULL) return; - ClearMetadata(&dec->hdr_); - - free(dec->pixels_); - dec->pixels_ = NULL; - for (i = 0; i < dec->next_transform_; ++i) { - ClearTransform(&dec->transforms_[i]); - } - dec->next_transform_ = 0; - dec->transforms_seen_ = 0; - - free(dec->rescaler_memory); - dec->rescaler_memory = NULL; - - dec->output_ = NULL; // leave no trace behind -} - -void VP8LDelete(VP8LDecoder* const dec) { - if (dec != NULL) { - VP8LClear(dec); - free(dec); - } -} - -static void UpdateDecoder(VP8LDecoder* const dec, int width, int height) { - VP8LMetadata* const hdr = &dec->hdr_; - const int num_bits = hdr->huffman_subsample_bits_; - dec->width_ = width; - dec->height_ = height; - - hdr->huffman_xsize_ = VP8LSubSampleSize(width, num_bits); - hdr->huffman_mask_ = (num_bits == 0) ? ~0 : (1 << num_bits) - 1; -} - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data) { - int ok = 1; - int transform_xsize = xsize; - int transform_ysize = ysize; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* data = NULL; - int color_cache_bits = 0; - - // Read the transforms (may recurse). - if (is_level0) { - while (ok && VP8LReadBits(br, 1)) { - ok = ReadTransform(&transform_xsize, &transform_ysize, dec); - } - } - - // Color cache - if (ok && VP8LReadBits(br, 1)) { - color_cache_bits = VP8LReadBits(br, 4); - ok = (color_cache_bits >= 1 && color_cache_bits <= MAX_CACHE_BITS); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - } - - // Read the Huffman codes (may recurse). - ok = ok && ReadHuffmanCodes(dec, transform_xsize, transform_ysize, - color_cache_bits, is_level0); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - - // Finish setting up the color-cache - if (color_cache_bits > 0) { - hdr->color_cache_size_ = 1 << color_cache_bits; - if (!VP8LColorCacheInit(&hdr->color_cache_, color_cache_bits)) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } else { - hdr->color_cache_size_ = 0; - } - UpdateDecoder(dec, transform_xsize, transform_ysize); - - if (is_level0) { // level 0 complete - dec->state_ = READ_HDR; - goto End; - } - - { - const uint64_t total_size = (uint64_t)transform_xsize * transform_ysize; - data = (uint32_t*)WebPSafeMalloc(total_size, sizeof(*data)); - if (data == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } - - // Use the Huffman trees to decode the LZ77 encoded data. - ok = DecodeImageData(dec, data, transform_xsize, transform_ysize, - transform_ysize, NULL); - ok = ok && !br->error_; - - End: - - if (!ok) { - free(data); - ClearMetadata(hdr); - // If not enough data (br.eos_) resulted in BIT_STREAM_ERROR, update the - // status appropriately. - if (dec->status_ == VP8_STATUS_BITSTREAM_ERROR && dec->br_.eos_) { - dec->status_ = VP8_STATUS_SUSPENDED; - } - } else { - if (decoded_data != NULL) { - *decoded_data = data; - } else { - // We allocate image data in this function only for transforms. At level 0 - // (that is: not the transforms), we shouldn't have allocated anything. - assert(data == NULL); - assert(is_level0); - } - dec->last_pixel_ = 0; // Reset for future DECODE_DATA_FUNC() calls. - if (!is_level0) ClearMetadata(hdr); // Clean up temporary data behind. - } - return ok; -} - -//------------------------------------------------------------------------------ -// Allocate internal buffers dec->pixels_ and dec->argb_cache_. -static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) { - const uint64_t num_pixels = (uint64_t)dec->width_ * dec->height_; - // Scratch buffer corresponding to top-prediction row for transforming the - // first row in the row-blocks. Not needed for paletted alpha. - const uint64_t cache_top_pixels = (uint16_t)final_width; - // Scratch buffer for temporary BGRA storage. Not needed for paletted alpha. - const uint64_t cache_pixels = (uint64_t)final_width * NUM_ARGB_CACHE_ROWS; - const uint64_t total_num_pixels = - num_pixels + cache_top_pixels + cache_pixels; - - assert(dec->width_ <= final_width); - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t)); - if (dec->pixels_ == NULL) { - dec->argb_cache_ = NULL; // for sanity check - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - dec->argb_cache_ = dec->pixels_ + num_pixels + cache_top_pixels; - return 1; -} - -static int AllocateInternalBuffers8b(VP8LDecoder* const dec) { - const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_; - dec->argb_cache_ = NULL; // for sanity check - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t)); - if (dec->pixels_ == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - return 1; -} - -//------------------------------------------------------------------------------ - -// Special row-processing that only stores the alpha data. -static void ExtractAlphaRows(VP8LDecoder* const dec, int row) { - const int num_rows = row - dec->last_row_; - const uint32_t* const in = dec->pixels_ + dec->width_ * dec->last_row_; - - if (num_rows <= 0) return; // Nothing to be done. - ApplyInverseTransforms(dec, num_rows, in); - - // Extract alpha (which is stored in the green plane). - { - const int width = dec->io_->width; // the final width (!= dec->width_) - const int cache_pixs = width * num_rows; - uint8_t* const dst = (uint8_t*)dec->io_->opaque + width * dec->last_row_; - const uint32_t* const src = dec->argb_cache_; - int i; - for (i = 0; i < cache_pixs; ++i) dst[i] = (src[i] >> 8) & 0xff; - } - dec->last_row_ = dec->last_out_row_ = row; -} - -int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec, - const uint8_t* const data, size_t data_size, - uint8_t* const output) { - int ok = 0; - VP8LDecoder* dec; - VP8Io* io; - assert(alph_dec != NULL); - alph_dec->vp8l_dec_ = VP8LNew(); - if (alph_dec->vp8l_dec_ == NULL) return 0; - dec = alph_dec->vp8l_dec_; - - dec->width_ = alph_dec->width_; - dec->height_ = alph_dec->height_; - dec->io_ = &alph_dec->io_; - io = dec->io_; - - VP8InitIo(io); - WebPInitCustomIo(NULL, io); // Just a sanity Init. io won't be used. - io->opaque = output; - io->width = alph_dec->width_; - io->height = alph_dec->height_; - - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, data, data_size); - - dec->action_ = READ_HDR; - if (!DecodeImageStream(alph_dec->width_, alph_dec->height_, 1, dec, NULL)) { - goto Err; - } - - // Special case: if alpha data uses only the color indexing transform and - // doesn't use color cache (a frequent case), we will use DecodeAlphaData() - // method that only needs allocation of 1 byte per pixel (alpha channel). - if (dec->next_transform_ == 1 && - dec->transforms_[0].type_ == COLOR_INDEXING_TRANSFORM && - Is8bOptimizable(&dec->hdr_)) { - alph_dec->use_8b_decode = 1; - ok = AllocateInternalBuffers8b(dec); - } else { - // Allocate internal buffers (note that dec->width_ may have changed here). - alph_dec->use_8b_decode = 0; - ok = AllocateInternalBuffers32b(dec, alph_dec->width_); - } - - if (!ok) goto Err; - - dec->action_ = READ_DATA; - return 1; - - Err: - VP8LDelete(alph_dec->vp8l_dec_); - alph_dec->vp8l_dec_ = NULL; - return 0; -} - -int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) { - VP8LDecoder* const dec = alph_dec->vp8l_dec_; - assert(dec != NULL); - assert(dec->action_ == READ_DATA); - assert(last_row <= dec->height_); - - if (dec->last_pixel_ == dec->width_ * dec->height_) { - return 1; // Done - } - - // Decode (with special row processing). - return alph_dec->use_8b_decode ? - DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_, - last_row) : - DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - last_row, ExtractAlphaRows); -} - -//------------------------------------------------------------------------------ - -int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io) { - int width, height, has_alpha; - - if (dec == NULL) return 0; - if (io == NULL) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - return 0; - } - - dec->io_ = io; - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, io->data, io->data_size); - if (!ReadImageInfo(&dec->br_, &width, &height, &has_alpha)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto Error; - } - dec->state_ = READ_DIM; - io->width = width; - io->height = height; - - dec->action_ = READ_HDR; - if (!DecodeImageStream(width, height, 1, dec, NULL)) goto Error; - return 1; - - Error: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -int VP8LDecodeImage(VP8LDecoder* const dec) { - VP8Io* io = NULL; - WebPDecParams* params = NULL; - - // Sanity checks. - if (dec == NULL) return 0; - - io = dec->io_; - assert(io != NULL); - params = (WebPDecParams*)io->opaque; - assert(params != NULL); - dec->output_ = params->output; - assert(dec->output_ != NULL); - - // Initialization. - if (!WebPIoInitFromOptions(params->options, io, MODE_BGRA)) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - goto Err; - } - - if (!AllocateInternalBuffers32b(dec, io->width)) goto Err; - - if (io->use_scaling && !AllocateAndInitRescaler(dec, io)) goto Err; - - // Decode. - dec->action_ = READ_DATA; - if (!DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - dec->height_, ProcessRows)) { - goto Err; - } - - // Cleanup. - params->last_y = dec->last_out_row_; - VP8LClear(dec); - return 1; - - Err: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -//------------------------------------------------------------------------------ - diff --git a/Telegram/_qt_5_5_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff new file mode 100644 index 000000000..aed8c6268 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch.diff @@ -0,0 +1,11750 @@ +diff --git a/qtbase/mkspecs/common/msvc-desktop.conf b/qtbase/mkspecs/common/msvc-desktop.conf +index e638af6..e44ee5e 100644 +--- a/qtbase/mkspecs/common/msvc-desktop.conf ++++ b/qtbase/mkspecs/common/msvc-desktop.conf +@@ -28,9 +28,9 @@ QMAKE_YACCFLAGS = -d + QMAKE_CFLAGS = -nologo -Zc:wchar_t + QMAKE_CFLAGS_WARN_ON = -W3 + QMAKE_CFLAGS_WARN_OFF = -W0 +-QMAKE_CFLAGS_RELEASE = -O2 -MD +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi +-QMAKE_CFLAGS_DEBUG = -Zi -MDd ++QMAKE_CFLAGS_RELEASE = -O2 -MT ++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi ++QMAKE_CFLAGS_DEBUG = -Zi -MTd + QMAKE_CFLAGS_YACC = + QMAKE_CFLAGS_LTCG = -GL + QMAKE_CFLAGS_SSE2 = -arch:SSE2 +diff --git a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +index 81bb068..a0fe016 100644 +--- a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp ++++ b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +@@ -1500,11 +1500,15 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) + plist_in_text.replace("@TYPEINFO@", + (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") + ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); +- QFile plist_out_file(Option::output_dir + "/Info.plist"); +- if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { ++ QString plist_dir; ++ if (!project->isEmpty("PLIST_DIR")) ++ plist_dir = project->first("PLIST_DIR").toQString(); ++ QString plist_in_filename = QFileInfo(plist_in_file).fileName(); ++ QFile plist_out_file(Option::output_dir + "/" + plist_dir + plist_in_filename); ++ if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream plist_out(&plist_out_file); + plist_out << plist_in_text; +- t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", "Info.plist") << ";\n"; ++ t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; + } + } + } +diff --git a/qtbase/qmake/generators/makefile.cpp b/qtbase/qmake/generators/makefile.cpp +index 4a03faf..2c18c48 100644 +--- a/qtbase/qmake/generators/makefile.cpp ++++ b/qtbase/qmake/generators/makefile.cpp +@@ -167,7 +167,7 @@ MakefileGenerator::initOutPaths() + v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; + static const char * const dirs[] = { "OBJECTS_DIR", "DESTDIR", + "SUBLIBS_DIR", "DLLDESTDIR", +- "PRECOMPILED_DIR", 0 }; ++ "PRECOMPILED_DIR", "PLIST_DIR", 0 }; + for (int x = 0; dirs[x]; x++) { + const ProKey dkey(dirs[x]); + if (v[dkey].isEmpty()) +diff --git a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c +index 0907653..96f6e19 100644 +--- a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c ++++ b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c +@@ -101,7 +101,7 @@ for (p = string; length-- > 0; p++) + { + /* Normal UTF-16 code point. Neither high nor low surrogate. */ + } +- else if ((c & 0x0400) == 0) ++ else if ((c & 0xfc00) == 0xd800) + { + /* High surrogate. Must be a followed by a low surrogate. */ + if (length == 0) +diff --git a/qtbase/src/corelib/kernel/qobjectdefs.h b/qtbase/src/corelib/kernel/qobjectdefs.h +index 4d01264..9bee473 100644 +--- a/qtbase/src/corelib/kernel/qobjectdefs.h ++++ b/qtbase/src/corelib/kernel/qobjectdefs.h +@@ -142,7 +142,7 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} + # define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN + #endif + +-#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 ++#if defined(Q_CC_CLANG) && (Q_CC_CLANG >= 306) && 0 + # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") + #else + # define Q_OBJECT_NO_OVERRIDE_WARNING +diff --git a/qtbase/src/corelib/tools/qunicodetables.cpp b/qtbase/src/corelib/tools/qunicodetables.cpp +index 73dce81..76c6933 100644 +--- a/qtbase/src/corelib/tools/qunicodetables.cpp ++++ b/qtbase/src/corelib/tools/qunicodetables.cpp +@@ -5839,7 +5839,7 @@ static const Properties uc_properties[] = { + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, +- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 2 }, ++ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, +diff --git a/qtbase/src/gui/image/qbmphandler.cpp b/qtbase/src/gui/image/qbmphandler.cpp +index f124ced..eb78a13 100644 +--- a/qtbase/src/gui/image/qbmphandler.cpp ++++ b/qtbase/src/gui/image/qbmphandler.cpp +@@ -212,6 +212,9 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int + int blue_scale = 0; + int alpha_scale = 0; + ++ if (!d->isSequential()) ++ d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4 ? BMP_WIN : bi.biSize)); // goto start of colormap ++ + if (bi.biSize >= BMP_WIN4 || (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32))) { + if (d->read((char *)&red_mask, sizeof(red_mask)) != sizeof(red_mask)) + return false; +@@ -299,9 +302,6 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int + image.setDotsPerMeterX(bi.biXPelsPerMeter); + image.setDotsPerMeterY(bi.biYPelsPerMeter); + +- if (!d->isSequential()) +- d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4? BMP_WIN : bi.biSize)); // goto start of colormap +- + if (ncols > 0) { // read color table + uchar rgb[4]; + int rgb_len = t == BMP_OLD ? 3 : 4; +diff --git a/qtbase/src/gui/kernel/qplatformdialoghelper.h b/qtbase/src/gui/kernel/qplatformdialoghelper.h +index 8b2b988..2d1cdd9 100644 +--- a/qtbase/src/gui/kernel/qplatformdialoghelper.h ++++ b/qtbase/src/gui/kernel/qplatformdialoghelper.h +@@ -363,6 +363,7 @@ public: + virtual QUrl directory() const = 0; + virtual void selectFile(const QUrl &filename) = 0; + virtual QList selectedFiles() const = 0; ++ virtual QByteArray selectedRemoteContent() const { return QByteArray(); } + virtual void setFilter() = 0; + virtual void selectNameFilter(const QString &filter) = 0; + virtual QString selectedNameFilter() const = 0; +diff --git a/qtbase/src/gui/painting/qimagescale.cpp b/qtbase/src/gui/painting/qimagescale.cpp +index 9b4eabc..a3e0e04 100644 +--- a/qtbase/src/gui/painting/qimagescale.cpp ++++ b/qtbase/src/gui/painting/qimagescale.cpp +@@ -313,7 +313,10 @@ static void qt_qimageScaleAARGBA_up_xy(QImageScaleInfo *isi, unsigned int *dest, + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; +- *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); ++ if (xap > 0) ++ *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); ++ else ++ *dptr = pix[0]; + dptr++; + } + } +diff --git a/qtbase/src/gui/painting/qpaintengine_p.h b/qtbase/src/gui/painting/qpaintengine_p.h +index c58662e..468d671 100644 +--- a/qtbase/src/gui/painting/qpaintengine_p.h ++++ b/qtbase/src/gui/painting/qpaintengine_p.h +@@ -79,8 +79,18 @@ public: + if (hasSystemTransform) { + if (systemTransform.type() <= QTransform::TxTranslate) + systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); +- else +- systemClip = systemTransform.map(systemClip); ++ else { ++// Transform the system clip region back from device pixels to device-independent pixels before ++// applying systemTransform, which already has transform from device-independent pixels to device pixels ++#ifdef Q_OS_MAC ++ QTransform scaleTransform; ++ const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); ++ scaleTransform.scale(invDevicePixelRatio, invDevicePixelRatio); ++ systemClip = systemTransform.map(scaleTransform.map(systemClip)); ++#else ++ systemClip = systemTransform.map(systemClip); ++#endif ++ } + } + + // Make sure we're inside the viewport. +diff --git a/qtbase/src/gui/text/qtextlayout.cpp b/qtbase/src/gui/text/qtextlayout.cpp +index 7da3e84..0829250 100644 +--- a/qtbase/src/gui/text/qtextlayout.cpp ++++ b/qtbase/src/gui/text/qtextlayout.cpp +@@ -643,6 +643,9 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const + while (oldPos < len && !attributes[oldPos].graphemeBoundary) + oldPos++; + } else { ++ while (oldPos < len && attributes[oldPos].whiteSpace) ++ oldPos++; ++ + if (oldPos < len && d->atWordSeparator(oldPos)) { + oldPos++; + while (oldPos < len && d->atWordSeparator(oldPos)) +@@ -651,8 +654,6 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const + while (oldPos < len && !attributes[oldPos].whiteSpace && !d->atWordSeparator(oldPos)) + oldPos++; + } +- while (oldPos < len && attributes[oldPos].whiteSpace) +- oldPos++; + } + + return oldPos; +diff --git a/qtbase/src/gui/text/qtextlayout.h b/qtbase/src/gui/text/qtextlayout.h +index 47dcd38..64c3810 100644 +--- a/qtbase/src/gui/text/qtextlayout.h ++++ b/qtbase/src/gui/text/qtextlayout.h +@@ -186,6 +186,8 @@ private: + QRectF *brect, int tabstops, int* tabarray, int tabarraylen, + QPainter *painter); + QTextEngine *d; ++ ++ friend class TextBlock; + }; + + +diff --git a/qtbase/src/network/socket/qnativesocketengine_win.cpp b/qtbase/src/network/socket/qnativesocketengine_win.cpp +index 72f85c8..a1c2e08 100644 +--- a/qtbase/src/network/socket/qnativesocketengine_win.cpp ++++ b/qtbase/src/network/socket/qnativesocketengine_win.cpp +@@ -685,7 +685,13 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin + errorDetected = true; + break; + } +- if (value == WSAEADDRNOTAVAIL) { ++ if (value == WSAENETUNREACH) { ++ setError(QAbstractSocket::NetworkError, NetworkUnreachableErrorString); ++ socketState = QAbstractSocket::UnconnectedState; ++ errorDetected = true; ++ break; ++ } ++ if (value == WSAEADDRNOTAVAIL) { + setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString); + socketState = QAbstractSocket::UnconnectedState; + errorDetected = true; +diff --git a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +index 65cdabd..190683e 100644 +--- a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp ++++ b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +@@ -198,6 +198,78 @@ void QBasicFontDatabase::releaseHandle(void *handle) + + extern FT_Library qt_getFreetype(); + ++// copied from freetype with some modifications ++ ++#ifndef FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY ++#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG('i', 'g', 'p', 'f') ++#endif ++ ++#ifndef FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY ++#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG('i', 'g', 'p', 's') ++#endif ++ ++/* there's a Mac-specific extended implementation of FT_New_Face() */ ++/* in src/base/ftmac.c */ ++ ++#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON ) ++ ++/* documentation is in freetype.h */ ++ ++FT_Error __ft_New_Face(FT_Library library, const char* pathname, FT_Long face_index, FT_Face *aface) { ++ FT_Open_Args args; ++ ++ /* test for valid `library' and `aface' delayed to FT_Open_Face() */ ++ if (!pathname) ++ return FT_Err_Invalid_Argument; ++ ++ FT_Parameter params[2]; ++ params[0].tag = FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY; ++ params[0].data = 0; ++ params[1].tag = FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY; ++ params[1].data = 0; ++ args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; ++ args.pathname = (char*)pathname; ++ args.stream = NULL; ++ args.num_params = 2; ++ args.params = params; ++ ++ return FT_Open_Face(library, &args, face_index, aface); ++} ++ ++#else ++ ++FT_Error __ft_New_Face(FT_Library library, const char* pathname, FT_Long face_index, FT_Face *aface) { ++ return FT_New_Face(library, pathname, face_index, aface); ++} ++ ++#endif /* defined( FT_MACINTOSH ) && !defined( DARWIN_NO_CARBON ) */ ++ ++/* documentation is in freetype.h */ ++ ++FT_Error __ft_New_Memory_Face(FT_Library library, const FT_Byte* file_base, FT_Long file_size, FT_Long face_index, FT_Face *aface) { ++ FT_Open_Args args; ++ ++ /* test for valid `library' and `face' delayed to FT_Open_Face() */ ++ if (!file_base) ++ return FT_Err_Invalid_Argument; ++ ++ FT_Parameter params[2]; ++ params[0].tag = FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY; ++ params[0].data = 0; ++ params[1].tag = FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY; ++ params[1].data = 0; ++ args.flags = FT_OPEN_MEMORY | FT_OPEN_PARAMS; ++ args.memory_base = file_base; ++ args.memory_size = file_size; ++ args.stream = NULL; ++ args.num_params = 2; ++ args.params = params; ++ ++ return FT_Open_Face(library, &args, face_index, aface); ++} ++ ++// end ++ + QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file, QSupportedWritingSystems *supportedWritingSystems) + { + FT_Library library = qt_getFreetype(); +@@ -209,9 +281,9 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt + FT_Face face; + FT_Error error; + if (!fontData.isEmpty()) { +- error = FT_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); ++ error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); + } else { +- error = FT_New_Face(library, file.constData(), index, &face); ++ error = __ft_New_Face(library, file.constData(), index, &face); + } + if (error != FT_Err_Ok) { + qDebug() << "FT_New_Face failed with index" << index << ":" << hex << error; +diff --git a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +index 112bb8e..9f1df70 100644 +--- a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp ++++ b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +@@ -373,6 +373,15 @@ static void populateFromPattern(FcPattern *pattern) + return; + + familyName = QString::fromUtf8((const char *)value); ++ if (familyName == QLatin1String("Open Sans")) { ++ FcChar8 *styl = 0; ++ if (FcPatternGetString(pattern, FC_STYLE, 0, &styl) == FcResultMatch) { ++ QString style = QString::fromUtf8(reinterpret_cast(styl)); ++ if (style == QLatin1String("Semibold")) { ++ familyName.append(QChar(QChar::Space)).append(style); ++ } ++ } ++ } + + slant_value = FC_SLANT_ROMAN; + weight_value = FC_WEIGHT_REGULAR; +@@ -781,6 +790,15 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, + FcChar8 *fam = 0; + if (FcPatternGetString(pattern, FC_FAMILY, 0, &fam) == FcResultMatch) { + QString family = QString::fromUtf8(reinterpret_cast(fam)); ++ if (family == QLatin1String("Open Sans")) { ++ FcChar8 *styl = 0; ++ if (FcPatternGetString(pattern, FC_STYLE, 0, &styl) == FcResultMatch) { ++ QString style = QString::fromUtf8(reinterpret_cast(styl)); ++ if (style == QLatin1String("Semibold")) { ++ family.append(QChar(QChar::Space)).append(style); ++ } ++ } ++ } + families << family; + } + populateFromPattern(pattern); +diff --git a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +index be70092..1594dac 100644 +--- a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm ++++ b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +@@ -263,6 +263,10 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) + + fd->foundryName = QStringLiteral("CoreText"); + fd->familyName = (CFStringRef) CTFontDescriptorCopyAttribute(font, kCTFontFamilyNameAttribute); ++ QCFString _displayName = (CFStringRef) CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute); ++ if (_displayName == QStringLiteral("Open Sans Semibold")) { ++ fd->familyName = _displayName; ++ } + fd->styleName = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontStyleNameAttribute); + fd->weight = QFont::Normal; + fd->style = QFont::StyleNormal; +diff --git a/qtbase/src/plugins/platforminputcontexts/compose/compose.pro b/qtbase/src/plugins/platforminputcontexts/compose/compose.pro +index a9da36c..65183b6 100644 +--- a/qtbase/src/plugins/platforminputcontexts/compose/compose.pro ++++ b/qtbase/src/plugins/platforminputcontexts/compose/compose.pro +@@ -20,7 +20,7 @@ HEADERS += $$PWD/qcomposeplatforminputcontext.h \ + contains(QT_CONFIG, xkbcommon-qt): { + # dont't need x11 dependency for compose key plugin + QT_CONFIG -= use-xkbcommon-x11support +- include(../../../3rdparty/xkbcommon.pri) ++# include(../../../3rdparty/xkbcommon.pri) + } else { + LIBS += $$QMAKE_LIBS_XKBCOMMON + QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json +new file mode 100644 +index 0000000..6d2b389 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json +@@ -0,0 +1,3 @@ ++{ ++ "Keys": [ "fcitx" ] ++} +\ No newline at end of file +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro +new file mode 100644 +index 0000000..cbd3ab7 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro +@@ -0,0 +1,38 @@ ++TARGET = fcitxplatforminputcontextplugin ++ ++PLUGIN_TYPE = platforminputcontexts ++PLUGIN_EXTENDS = - ++PLUGIN_CLASS_NAME = QFcitxPlatformInputContextPlugin ++load(qt_plugin) ++ ++QT += dbus gui-private ++SOURCES += $$PWD/fcitxqtconnection.cpp \ ++ $$PWD/fcitxqtformattedpreedit.cpp \ ++ $$PWD/fcitxqtinputcontextproxy.cpp \ ++ $$PWD/fcitxqtinputmethoditem.cpp \ ++ $$PWD/fcitxqtinputmethodproxy.cpp \ ++ $$PWD/fcitxqtkeyboardlayout.cpp \ ++ $$PWD/fcitxqtkeyboardproxy.cpp \ ++ $$PWD/keyuni.cpp \ ++ $$PWD/main.cpp \ ++ $$PWD/qfcitxplatforminputcontext.cpp \ ++ $$PWD/utils.cpp ++ ++HEADERS += $$PWD/fcitxqtconnection.h \ ++ $$PWD/fcitxqtconnection_p.h \ ++ $$PWD/fcitxqtdbusaddons_export.h \ ++ $$PWD/fcitxqtdbusaddons_version.h \ ++ $$PWD/fcitxqtformattedpreedit.h \ ++ $$PWD/fcitxqtinputcontextproxy.h \ ++ $$PWD/fcitxqtinputmethoditem.h \ ++ $$PWD/fcitxqtinputmethodproxy.h \ ++ $$PWD/fcitxqtkeyboardlayout.h \ ++ $$PWD/fcitxqtkeyboardproxy.h \ ++ $$PWD/keydata.h \ ++ $$PWD/keyserver_x11.h \ ++ $$PWD/keyuni.h \ ++ $$PWD/main.h \ ++ $$PWD/qfcitxplatforminputcontext.h \ ++ $$PWD/utils.h ++ ++OTHER_FILES += $$PWD/fcitx.json +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp +new file mode 100644 +index 0000000..a50178a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp +@@ -0,0 +1,369 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "fcitxqtconnection_p.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++// utils function in fcitx-utils and fcitx-config ++bool _pid_exists(pid_t pid) { ++ if (pid <= 0) ++ return 0; ++ return !(kill(pid, 0) && (errno == ESRCH)); ++} ++ ++ ++FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent) ++ ,d_ptr(new FcitxQtConnectionPrivate(this)) ++{ ++} ++ ++void FcitxQtConnection::startConnection() ++{ ++ Q_D(FcitxQtConnection); ++ if (!d->m_initialized) { ++ d->initialize(); ++ d->createConnection(); ++ } ++} ++ ++void FcitxQtConnection::endConnection() ++{ ++ Q_D(FcitxQtConnection); ++ d->cleanUp(); ++ d->finalize(); ++ d->m_connectedOnce = false; ++} ++ ++bool FcitxQtConnection::autoReconnect() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_autoReconnect; ++} ++ ++void FcitxQtConnection::setAutoReconnect(bool a) ++{ ++ Q_D(FcitxQtConnection); ++ d->m_autoReconnect = a; ++} ++ ++QDBusConnection* FcitxQtConnection::connection() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_connection; ++} ++ ++const QString& FcitxQtConnection::serviceName() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_serviceName; ++} ++ ++bool FcitxQtConnection::isConnected() ++{ ++ Q_D(FcitxQtConnection); ++ return d->isConnected(); ++} ++ ++ ++ ++FcitxQtConnection::~FcitxQtConnection() ++{ ++} ++ ++FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn) ++ ,q_ptr(conn) ++ ,m_displayNumber(-1) ++ ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber())) ++ ,m_connection(0) ++ ,m_serviceWatcher(new QDBusServiceWatcher(conn)) ++ ,m_watcher(new QFileSystemWatcher(this)) ++ ,m_autoReconnect(true) ++ ,m_connectedOnce(false) ++ ,m_initialized(false) ++{ ++} ++ ++FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate() ++{ ++ if (m_connection) ++ delete m_connection; ++} ++ ++void FcitxQtConnectionPrivate::initialize() { ++ m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); ++ m_serviceWatcher->addWatchedService(m_serviceName); ++ ++ QFileInfo info(socketFile()); ++ QDir dir(info.path()); ++ if (!dir.exists()) { ++ QDir rt(QDir::root()); ++ rt.mkpath(info.path()); ++ } ++ m_watcher->addPath(info.path()); ++ if (info.exists()) { ++ m_watcher->addPath(info.filePath()); ++ } ++ ++ connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged())); ++ connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged())); ++ m_initialized = true; ++} ++ ++void FcitxQtConnectionPrivate::finalize() { ++ m_serviceWatcher->removeWatchedService(m_serviceName); ++ m_watcher->removePaths(m_watcher->files()); ++ m_watcher->removePaths(m_watcher->directories()); ++ m_watcher->disconnect(SIGNAL(fileChanged(QString))); ++ m_watcher->disconnect(SIGNAL(directoryChanged(QString))); ++ m_initialized = false; ++} ++ ++void FcitxQtConnectionPrivate::socketFileChanged() { ++ QFileInfo info(socketFile()); ++ if (info.exists()) { ++ if (m_watcher->files().indexOf(info.filePath()) == -1) ++ m_watcher->addPath(info.filePath()); ++ } ++ ++ QString addr = address(); ++ if (addr.isNull()) ++ return; ++ ++ cleanUp(); ++ createConnection(); ++} ++ ++QByteArray FcitxQtConnectionPrivate::localMachineId() ++{ ++#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) ++ return QDBusConnection::localMachineId(); ++#else ++ QFile file1("/var/lib/dbus/machine-id"); ++ QFile file2("/etc/machine-id"); ++ QFile* fileToRead = NULL; ++ if (file1.open(QIODevice::ReadOnly)) { ++ fileToRead = &file1; ++ } ++ else if (file2.open(QIODevice::ReadOnly)) { ++ fileToRead = &file2; ++ } ++ if (fileToRead) { ++ QByteArray result = fileToRead->readLine(1024); ++ fileToRead->close(); ++ result = result.trimmed(); ++ if (!result.isEmpty()) ++ return result; ++ } ++ return "machine-id"; ++#endif ++} ++ ++int FcitxQtConnectionPrivate::displayNumber() { ++ if (m_displayNumber < 0) { ++ QByteArray displayNumber("0"); ++ QByteArray display(qgetenv("DISPLAY")); ++ int pos = display.indexOf(':'); ++ ++ if (pos >= 0) { ++ ++pos; ++ int pos2 = display.indexOf('.', pos); ++ if (pos2 > 0) { ++ displayNumber = display.mid(pos, pos2 - pos); ++ } else { ++ displayNumber = display.mid(pos); ++ } ++ } ++ ++ bool ok; ++ int d = displayNumber.toInt(&ok); ++ if (ok) { ++ m_displayNumber = d; ++ } else { ++ m_displayNumber = 0; ++ } ++ } ++ ++ return m_displayNumber; ++} ++ ++const QString& FcitxQtConnectionPrivate::socketFile() ++{ ++ if (!m_socketFile.isEmpty()) ++ return m_socketFile; ++ ++ QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber()); ++ ++ QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME")); ++ if (home.isEmpty()) { ++ home = QDir::homePath().append(QLatin1Literal("/.config")); ++ } ++ m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename); ++ ++ return m_socketFile; ++} ++ ++QString FcitxQtConnectionPrivate::address() ++{ ++ QString addr; ++ QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS"); ++ if (!addrVar.isNull()) ++ return QString::fromLocal8Bit(addrVar); ++ ++ QFile file(socketFile()); ++ if (!file.open(QIODevice::ReadOnly)) ++ return QString(); ++ ++ const int BUFSIZE = 1024; ++ ++ char buffer[BUFSIZE]; ++ size_t sz = file.read(buffer, BUFSIZE); ++ file.close(); ++ if (sz == 0) ++ return QString(); ++ char* p = buffer; ++ while(*p) ++ p++; ++ size_t addrlen = p - buffer; ++ if (sz != addrlen + 2 * sizeof(pid_t) + 1) ++ return QString(); ++ ++ /* skip '\0' */ ++ p++; ++ pid_t *ppid = (pid_t*) p; ++ pid_t daemonpid = ppid[0]; ++ pid_t fcitxpid = ppid[1]; ++ ++ if (!_pid_exists(daemonpid) ++ || !_pid_exists(fcitxpid)) ++ return QString(); ++ ++ addr = QLatin1String(buffer); ++ ++ return addr; ++} ++ ++void FcitxQtConnectionPrivate::createConnection() { ++ if (m_connectedOnce && !m_autoReconnect) { ++ return; ++ } ++ ++ m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString))); ++ QString addr = address(); ++ if (!addr.isNull()) { ++ QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx")); ++ if (connection.isConnected()) { ++ // qDebug() << "create private"; ++ m_connection = new QDBusConnection(connection); ++ } ++ else ++ QDBusConnection::disconnectFromBus("fcitx"); ++ } ++ ++ if (!m_connection) { ++ QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus()); ++ connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString))); ++ QDBusReply registered = connection->interface()->isServiceRegistered(m_serviceName); ++ if (!registered.isValid() || !registered.value()) { ++ delete connection; ++ } ++ else { ++ m_connection = connection; ++ } ++ } ++ ++ Q_Q(FcitxQtConnection); ++ if (m_connection) { ++ ++ m_connection->connect ("org.freedesktop.DBus.Local", ++ "/org/freedesktop/DBus/Local", ++ "org.freedesktop.DBus.Local", ++ "Disconnected", ++ this, ++ SLOT (dbusDisconnected ())); ++ m_connectedOnce = true; ++ emit q->connected(); ++ } ++} ++ ++ ++void FcitxQtConnectionPrivate::dbusDisconnected() ++{ ++ cleanUp(); ++ ++ createConnection(); ++} ++ ++void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner) ++{ ++ if (service == m_serviceName) { ++ /* old die */ ++ if (oldowner.length() > 0 || newowner.length() > 0) ++ cleanUp(); ++ ++ /* new rise */ ++ if (newowner.length() > 0) { ++ QTimer::singleShot(100, this, SLOT(newServiceAppear())); ++ } ++ } ++} ++ ++void FcitxQtConnectionPrivate::cleanUp() ++{ ++ Q_Q(FcitxQtConnection); ++ bool doemit = false; ++ QDBusConnection::disconnectFromBus("fcitx"); ++ if (m_connection) { ++ delete m_connection; ++ m_connection = 0; ++ doemit = true; ++ } ++ ++ if (!m_autoReconnect && m_connectedOnce) ++ finalize(); ++ ++ /* we want m_connection and finalize being called before the signal ++ * thus isConnected will return false in slot ++ * and startConnection can be called in slot ++ */ ++ if (doemit) ++ emit q->disconnected(); ++} ++ ++bool FcitxQtConnectionPrivate::isConnected() ++{ ++ return m_connection && m_connection->isConnected(); ++} ++ ++void FcitxQtConnectionPrivate::newServiceAppear() { ++ if (!isConnected()) { ++ cleanUp(); ++ ++ createConnection(); ++ } ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h +new file mode 100644 +index 0000000..efe255f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h +@@ -0,0 +1,111 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITXQTCONNECTION_H ++#define FCITXQTCONNECTION_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++#include ++ ++class QDBusConnection; ++ ++class FcitxQtConnectionPrivate; ++ ++ ++/** ++ * dbus connection to fcitx ++ **/ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtConnection : public QObject { ++ Q_OBJECT ++ Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) ++ Q_PROPERTY(bool connected READ isConnected) ++ Q_PROPERTY(QDBusConnection* connection READ connection) ++ Q_PROPERTY(QString serviceName READ serviceName) ++public: ++ /** ++ * create a new connection ++ * ++ * @param parent ++ **/ ++ explicit FcitxQtConnection(QObject* parent = 0); ++ ++ /** ++ * destroy the connection ++ **/ ++ virtual ~FcitxQtConnection(); ++ ++ /** ++ * the connection will not start to work until you call this function ++ * you may want to connect to the signal before you call this function ++ **/ ++ void startConnection(); ++ void endConnection(); ++ /** ++ * automatically reconnect if fcitx disappeared ++ * ++ * @param a ... ++ * @return void ++ **/ ++ void setAutoReconnect(bool a); ++ ++ /** ++ * check this connection is doing automatical reconnect or not ++ * ++ * default value is true ++ **/ ++ bool autoReconnect(); ++ ++ /** ++ * return the current dbus connection to fcitx, notice, the object return ++ * by this function might be deteled if fcitx disappear, or might return 0 ++ * if fcitx is not running ++ * ++ * @return QDBusConnection* ++ **/ ++ QDBusConnection* connection(); ++ /** ++ * current fcitx dbus service name, can be used for create DBus proxy ++ * ++ * @return service name ++ **/ ++ const QString& serviceName(); ++ /** ++ * check its connected or not ++ **/ ++ bool isConnected(); ++ ++Q_SIGNALS: ++ /** ++ * this signal will be emitted upon fcitx appears ++ **/ ++ void connected(); ++ /** ++ * this signal will be emitted upon fcitx disappears ++ * ++ * it will come with connected in pair ++ **/ ++ void disconnected(); ++ ++private: ++ FcitxQtConnectionPrivate * const d_ptr; ++ Q_DECLARE_PRIVATE(FcitxQtConnection); ++}; ++ ++#endif // FCITXCONNECTION_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h +new file mode 100644 +index 0000000..dda726a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h +@@ -0,0 +1,68 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITXQTCONNECTION_P_H ++#define FCITXQTCONNECTION_P_H ++ ++#include "fcitxqtconnection.h" ++#include ++#include ++ ++class QDBusConnection; ++class QDBusServiceWatcher; ++ ++class FcitxQtConnectionPrivate : public QObject { ++ Q_OBJECT ++public: ++ FcitxQtConnectionPrivate(FcitxQtConnection* conn); ++ virtual ~FcitxQtConnectionPrivate(); ++ FcitxQtConnection * const q_ptr; ++ Q_DECLARE_PUBLIC(FcitxQtConnection); ++ ++private Q_SLOTS: ++ void imChanged(const QString& service, const QString& oldowner, const QString& newowner); ++ void dbusDisconnected(); ++ void cleanUp(); ++ void newServiceAppear(); ++ void socketFileChanged(); ++ ++private: ++ bool isConnected(); ++ ++ static QByteArray localMachineId(); ++ const QString& socketFile(); ++ void createConnection(); ++ QString address(); ++ int displayNumber(); ++ void initialize(); ++ void finalize(); ++ ++ int m_displayNumber; ++ QString m_serviceName; ++ QDBusConnection* m_connection; ++ QDBusServiceWatcher* m_serviceWatcher; ++ QFileSystemWatcher* m_watcher; ++ QString m_socketFile; ++ bool m_autoReconnect; ++ bool m_connectedOnce; ++ bool m_initialized; ++}; ++ ++ ++#endif // FCITXCONNECTION_P_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h +new file mode 100644 +index 0000000..3fabfb9 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h +@@ -0,0 +1,41 @@ ++ ++#ifndef FCITXQTDBUSADDONS_EXPORT_H ++#define FCITXQTDBUSADDONS_EXPORT_H ++ ++#ifdef FCITXQTDBUSADDONS_STATIC_DEFINE ++# define FCITXQTDBUSADDONS_EXPORT ++# define FCITXQTDBUSADDONS_NO_EXPORT ++#else ++# ifndef FCITXQTDBUSADDONS_EXPORT ++# ifdef FcitxQt5DBusAddons_EXPORTS ++ /* We are building this library */ ++# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) ++# else ++ /* We are using this library */ ++# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) ++# endif ++# endif ++ ++# ifndef FCITXQTDBUSADDONS_NO_EXPORT ++# define FCITXQTDBUSADDONS_NO_EXPORT __attribute__((visibility("hidden"))) ++# endif ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED ++# define FCITXQTDBUSADDONS_DEPRECATED __attribute__ ((__deprecated__)) ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED_EXPORT ++# define FCITXQTDBUSADDONS_DEPRECATED_EXPORT FCITXQTDBUSADDONS_EXPORT FCITXQTDBUSADDONS_DEPRECATED ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT ++# define FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT FCITXQTDBUSADDONS_NO_EXPORT FCITXQTDBUSADDONS_DEPRECATED ++#endif ++ ++#define DEFINE_NO_DEPRECATED 0 ++#if DEFINE_NO_DEPRECATED ++# define FCITXQTDBUSADDONS_NO_DEPRECATED ++#endif ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h +new file mode 100644 +index 0000000..7b6dbf4 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h +@@ -0,0 +1,11 @@ ++ ++#ifndef FCITXQT5DBUSADDONS_VERSION_H ++#define FCITXQT5DBUSADDONS_VERSION_H ++ ++#define FCITXQT5DBUSADDONS_VERSION_STRING "1.0.0" ++#define FCITXQT5DBUSADDONS_VERSION_MAJOR 1 ++#define FCITXQT5DBUSADDONS_VERSION_MINOR 0 ++#define FCITXQT5DBUSADDONS_VERSION_PATCH 0 ++#define FCITXQT5DBUSADDONS_VERSION ((1<<16)|(0<<8)|(0)) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp +new file mode 100644 +index 0000000..c6af845 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp +@@ -0,0 +1,78 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++ ++#include "fcitxqtformattedpreedit.h" ++ ++void FcitxQtFormattedPreedit::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtFormattedPreedit"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtFormattedPreeditList"); ++ qDBusRegisterMetaType(); ++} ++ ++qint32 FcitxQtFormattedPreedit::format() const ++{ ++ return m_format; ++} ++ ++const QString& FcitxQtFormattedPreedit::string() const ++{ ++ return m_string; ++} ++ ++void FcitxQtFormattedPreedit::setFormat(qint32 format) ++{ ++ m_format = format; ++} ++ ++void FcitxQtFormattedPreedit::setString(const QString& str) ++{ ++ m_string = str; ++} ++ ++bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const ++{ ++ return (preedit.m_format == m_format) && (preedit.m_string == m_string); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit) ++{ ++ argument.beginStructure(); ++ argument << preedit.string(); ++ argument << preedit.format(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit) ++{ ++ QString str; ++ qint32 format; ++ argument.beginStructure(); ++ argument >> str >> format; ++ argument.endStructure(); ++ preedit.setString(str); ++ preedit.setFormat(format); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h +new file mode 100644 +index 0000000..a00355c +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h +@@ -0,0 +1,51 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_FORMATTED_PREEDIT_H ++#define FCITX_QT_FORMATTED_PREEDIT_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtFormattedPreedit { ++public: ++ const QString& string() const; ++ qint32 format() const; ++ void setString(const QString& str); ++ void setFormat(qint32 format); ++ ++ static void registerMetaType(); ++ ++ bool operator ==(const FcitxQtFormattedPreedit& preedit) const; ++private: ++ QString m_string; ++ qint32 m_format; ++}; ++ ++typedef QList FcitxQtFormattedPreeditList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im); ++ ++Q_DECLARE_METATYPE(FcitxQtFormattedPreedit) ++Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp +new file mode 100644 +index 0000000..b47d332 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtinputcontextproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtInputContextProxy ++ */ ++ ++FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtInputContextProxy::~FcitxQtInputContextProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h +new file mode 100644 +index 0000000..19874dc +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h +@@ -0,0 +1,136 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTINPUTCONTEXTPROXY_H_1409252990 ++#define FCITXQTINPUTCONTEXTPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtformattedpreedit.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.InputContext ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputContextProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.InputContext"; } ++ ++public: ++ FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtInputContextProxy(); ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply<> CloseIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> DestroyIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> EnableIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> FocusIn() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> FocusOut() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> MouseEvent(int x) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x); ++ return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList); ++ } ++ ++ inline QDBusPendingReply ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time); ++ return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Reset() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCapacity(uint caps) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(caps); ++ return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCursorLocation(int x, int y) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); ++ return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h); ++ return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); ++ return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); ++ return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++ void CloseIM(); ++ void CommitString(const QString &str); ++ void DeleteSurroundingText(int offset, uint nchar); ++ void EnableIM(); ++ void ForwardKey(uint keyval, uint state, int type); ++ void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos); ++ void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos); ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp +new file mode 100644 +index 0000000..d28ed11 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp +@@ -0,0 +1,95 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++// Qt ++#include ++#include ++ ++// self ++#include "fcitxqtinputmethoditem.h" ++ ++bool FcitxQtInputMethodItem::enabled() const ++{ ++ return m_enabled; ++} ++const QString& FcitxQtInputMethodItem::langCode() const ++{ ++ return m_langCode; ++} ++const QString& FcitxQtInputMethodItem::name() const ++{ ++ return m_name; ++} ++const QString& FcitxQtInputMethodItem::uniqueName() const ++{ ++ return m_uniqueName; ++} ++void FcitxQtInputMethodItem::setEnabled(bool enable) ++{ ++ m_enabled = enable; ++} ++void FcitxQtInputMethodItem::setLangCode(const QString& lang) ++{ ++ m_langCode = lang; ++} ++void FcitxQtInputMethodItem::setName(const QString& name) ++{ ++ m_name = name; ++} ++void FcitxQtInputMethodItem::setUniqueName(const QString& name) ++{ ++ m_uniqueName = name; ++} ++ ++void FcitxQtInputMethodItem::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtInputMethodItem"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtInputMethodItemList"); ++ qDBusRegisterMetaType(); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im) ++{ ++ argument.beginStructure(); ++ argument << im.name(); ++ argument << im.uniqueName(); ++ argument << im.langCode(); ++ argument << im.enabled(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im) ++{ ++ QString name; ++ QString uniqueName; ++ QString langCode; ++ bool enabled; ++ argument.beginStructure(); ++ argument >> name >> uniqueName >> langCode >> enabled; ++ argument.endStructure(); ++ im.setName(name); ++ im.setUniqueName(uniqueName); ++ im.setLangCode(langCode); ++ im.setEnabled(enabled); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h +new file mode 100644 +index 0000000..6b8c780 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h +@@ -0,0 +1,64 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_INPUT_METHOD_ITEM_H ++#define FCITX_QT_INPUT_METHOD_ITEM_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++// Qt ++#include ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodItem ++{ ++public: ++ const QString& name() const; ++ const QString& uniqueName() const; ++ const QString& langCode() const; ++ bool enabled() const; ++ ++ void setName(const QString& name); ++ void setUniqueName(const QString& name); ++ void setLangCode(const QString& name); ++ void setEnabled(bool name); ++ static void registerMetaType(); ++ ++ inline bool operator < (const FcitxQtInputMethodItem& im) const { ++ if (m_enabled == true && im.m_enabled == false) ++ return true; ++ return false; ++ } ++private: ++ QString m_name; ++ QString m_uniqueName; ++ QString m_langCode; ++ bool m_enabled; ++}; ++ ++typedef QList FcitxQtInputMethodItemList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im); ++ ++Q_DECLARE_METATYPE(FcitxQtInputMethodItem) ++Q_DECLARE_METATYPE(FcitxQtInputMethodItemList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp +new file mode 100644 +index 0000000..068f4c2 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtinputmethodproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtInputMethodProxy ++ */ ++ ++FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h +new file mode 100644 +index 0000000..7aa37e2 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h +@@ -0,0 +1,217 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTINPUTMETHODPROXY_H_1409252990 ++#define FCITXQTINPUTMETHODPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtinputmethoditem.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.InputMethod ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.InputMethod"; } ++ ++public: ++ FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtInputMethodProxy(); ++ ++ Q_PROPERTY(QString CurrentIM READ currentIM WRITE setCurrentIM) ++ inline QString currentIM() const ++ { return qvariant_cast< QString >(property("CurrentIM")); } ++ inline void setCurrentIM(const QString &value) ++ { setProperty("CurrentIM", QVariant::fromValue(value)); } ++ ++ Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList) ++ inline FcitxQtInputMethodItemList iMList() const ++ { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); } ++ inline void setIMList(FcitxQtInputMethodItemList value) ++ { setProperty("IMList", QVariant::fromValue(value)); } ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply<> ActivateIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Configure() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ConfigureAddon(const QString &addon) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(addon); ++ return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ConfigureIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply CreateIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList); ++ } ++ inline QDBusReply CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) { ++ keyval1 = qdbus_cast(reply.arguments().at(1)); ++ state1 = qdbus_cast(reply.arguments().at(2)); ++ keyval2 = qdbus_cast(reply.arguments().at(3)); ++ state2 = qdbus_cast(reply.arguments().at(4)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply CreateICv2(const QString &appname) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname); ++ return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList); ++ } ++ inline QDBusReply CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { ++ enable = qdbus_cast(reply.arguments().at(1)); ++ keyval1 = qdbus_cast(reply.arguments().at(2)); ++ state1 = qdbus_cast(reply.arguments().at(3)); ++ keyval2 = qdbus_cast(reply.arguments().at(4)); ++ state2 = qdbus_cast(reply.arguments().at(5)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply CreateICv3(const QString &appname, int pid) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); ++ return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList); ++ } ++ inline QDBusReply CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { ++ enable = qdbus_cast(reply.arguments().at(1)); ++ keyval1 = qdbus_cast(reply.arguments().at(2)); ++ state1 = qdbus_cast(reply.arguments().at(3)); ++ keyval2 = qdbus_cast(reply.arguments().at(4)); ++ state2 = qdbus_cast(reply.arguments().at(5)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply<> Exit() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentState() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentUI() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetIMAddon(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> InactivateIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(addon); ++ return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ReloadConfig() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ResetIMList() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ResetIMList"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Restart() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCurrentIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ToggleIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp +new file mode 100644 +index 0000000..32cd981 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp +@@ -0,0 +1,100 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++// Qt ++#include ++#include ++ ++// self ++#include "fcitxqtkeyboardlayout.h" ++ ++const QString& FcitxQtKeyboardLayout::layout() const ++{ ++ return m_layout; ++} ++const QString& FcitxQtKeyboardLayout::langCode() const ++{ ++ return m_langCode; ++} ++const QString& FcitxQtKeyboardLayout::name() const ++{ ++ return m_name; ++} ++ ++const QString& FcitxQtKeyboardLayout::variant() const ++{ ++ return m_variant; ++} ++ ++void FcitxQtKeyboardLayout::setLayout(const QString& layout) ++{ ++ m_layout = layout; ++} ++ ++void FcitxQtKeyboardLayout::setLangCode(const QString& lang) ++{ ++ m_langCode = lang; ++} ++ ++void FcitxQtKeyboardLayout::setName(const QString& name) ++{ ++ m_name = name; ++} ++ ++void FcitxQtKeyboardLayout::setVariant(const QString& variant) ++{ ++ m_variant = variant; ++} ++ ++void FcitxQtKeyboardLayout::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtKeyboardLayout"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtKeyboardLayoutList"); ++ qDBusRegisterMetaType(); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout) ++{ ++ argument.beginStructure(); ++ argument << layout.layout(); ++ argument << layout.variant(); ++ argument << layout.name(); ++ argument << layout.langCode(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout) ++{ ++ QString l; ++ QString variant; ++ QString name; ++ QString langCode; ++ argument.beginStructure(); ++ argument >> l >> variant >> name >> langCode; ++ argument.endStructure(); ++ layout.setLayout(l); ++ layout.setVariant(variant); ++ layout.setName(name); ++ layout.setLangCode(langCode); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h +new file mode 100644 +index 0000000..d33438d +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h +@@ -0,0 +1,58 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_KEYBOARD_LAYOUT_H ++#define FCITX_QT_KEYBOARD_LAYOUT_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++// Qt ++#include ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardLayout ++{ ++public: ++ const QString& layout() const; ++ const QString& variant() const; ++ const QString& name() const; ++ const QString& langCode() const; ++ void setLayout(const QString& layout); ++ void setLangCode(const QString& lang); ++ void setName(const QString& name); ++ void setVariant(const QString& variant); ++ ++ static void registerMetaType(); ++private: ++ QString m_layout; ++ QString m_variant; ++ QString m_name; ++ QString m_langCode; ++}; ++ ++typedef QList FcitxQtKeyboardLayoutList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l); ++ ++Q_DECLARE_METATYPE(FcitxQtKeyboardLayout) ++Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp +new file mode 100644 +index 0000000..7523a92 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtkeyboardproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtKeyboardProxy ++ */ ++ ++FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h +new file mode 100644 +index 0000000..42a6561 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h +@@ -0,0 +1,74 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTKEYBOARDPROXY_H_1409252990 ++#define FCITXQTKEYBOARDPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtkeyboardlayout.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.Keyboard ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.Keyboard"; } ++ ++public: ++ FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtKeyboardProxy(); ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply GetLayoutForIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList); ++ } ++ inline QDBusReply GetLayoutForIM(const QString &im, QString &variant) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) { ++ variant = qdbus_cast(reply.arguments().at(1)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply GetLayouts() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant); ++ return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml +new file mode 100644 +index 0000000..1423d69 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml +@@ -0,0 +1,81 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml +new file mode 100644 +index 0000000..00dc20a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml +@@ -0,0 +1,81 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml +new file mode 100644 +index 0000000..28ffa53 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml +@@ -0,0 +1,20 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h +new file mode 100644 +index 0000000..5cee565 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h +@@ -0,0 +1,1612 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KEYDATA_H ++#define KEYDATA_H ++ ++struct _FcitxKeySymToUnicode{ ++ uint16_t keysym; ++ uint16_t ucs; ++}; ++ ++struct _FcitxUnicodeToKeySym { ++ uint16_t keysym; ++ uint16_t ucs; ++}; ++ ++static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = { ++ { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ ++ { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ ++ { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ ++ { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ ++ { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ ++ { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ ++ { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ ++ { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ ++ { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ ++ { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ ++ { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++ { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ ++ { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ ++ { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ ++ { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ ++ { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ ++ { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ ++ { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ ++ { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ ++ { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ ++ { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ ++ { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ ++ { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ ++ { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ ++ { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ ++ { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ ++ { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ ++ { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ ++ { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ ++ { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ ++ { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ ++ { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ ++ { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ ++ { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ ++ { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ ++ { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ ++ { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ ++ { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ ++ { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ ++ { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ ++ { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ ++ { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ ++ { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ ++ { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ ++ { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ ++ { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ ++ { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ ++ { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ ++ { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ ++ { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ ++ { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ ++ { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ ++ { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ ++ { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ ++ { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++ { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++ { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ ++ { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++ { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ ++ { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++ { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ ++ { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ ++ { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++ { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++ { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++ { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++ { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++ { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ ++ { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++ { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ ++ { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++ { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ ++ { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++ { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ ++ { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ ++ { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ ++ { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ ++ { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ ++ { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ ++ { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ ++ { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ ++ { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ ++ { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ ++ { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ ++ { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ ++ { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ ++ { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ ++ { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ ++ { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ ++ { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ ++ { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ ++ { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++ { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ ++ { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ ++ { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ ++ { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ ++ { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ ++ { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ ++ { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ ++ { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ ++ { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ ++ { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ ++ { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ ++ { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ ++ { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ ++ { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ ++ { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ ++ { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ ++ { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ ++ { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ ++ { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ ++ { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ ++ { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ ++ { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ ++ { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ ++ { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ ++ { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ ++ { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ ++ { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ ++ { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ ++ { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ ++ { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ ++ { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ ++ { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ ++ { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ ++ { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++ { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ ++ { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ ++ { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ ++ { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ ++ { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ ++ { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ ++ { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ ++ { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ ++ { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ ++ { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ ++ { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ ++ { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ ++ { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ ++ { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ ++ { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ ++ { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ ++ { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ ++ { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ ++ { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ ++ { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ ++ { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ ++ { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ ++ { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ ++ { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ ++ { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ ++ { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ ++ { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ ++ { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ ++ { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ ++ { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ ++ { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ ++ { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ ++ { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ ++ { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ ++ { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ ++ { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ ++ { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ ++ { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ ++ { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ ++ { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ ++ { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ ++ { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ ++ { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ ++ { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ ++ { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ ++ { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ ++ { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++ { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ ++ { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ ++ { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ ++ { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ ++ { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ ++ { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++ { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ ++ { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ ++ { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ ++ { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ ++ { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ ++ { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ ++ { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ ++ { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ ++ { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ ++ { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ ++ { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ ++ { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ ++ { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ ++ { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ ++ { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ ++ { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ ++ { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ ++ { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ ++ { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ ++ { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ ++ { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ ++ { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ ++ { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ ++ { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ ++ { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ ++ { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ ++ { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ ++ { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ ++ { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ ++ { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ ++ { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ ++ { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ ++ { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ ++ { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ ++ { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ ++ { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ ++ { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ ++ { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ ++ { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ ++ { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ ++ { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ ++ { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ ++ { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ ++ { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ ++ { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ ++ { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ ++ { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ ++ { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ ++ { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ ++ { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ ++ { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ ++ { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ ++ { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ ++ { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ ++ { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ ++ { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ ++ { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ ++ { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ ++ { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ ++ { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ ++ { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++ { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ ++ { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ ++ { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ ++ { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ ++ { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ ++ { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ ++ { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ ++ { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ ++ { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ ++ { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ ++ { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ ++ { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ ++ { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ ++ { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ ++ { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ ++ { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ ++ { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ ++ { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ ++ { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ ++ { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ ++ { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ ++ { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ ++ { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ ++ { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ ++ { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ ++ { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ ++ { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ ++ { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ ++ { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ ++ { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ ++ { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ ++ { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ ++ { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ ++ { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ ++ { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ ++ { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ ++ { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ ++ { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ ++ { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ ++ { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ ++ { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ ++ { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ ++ { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ ++ { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ ++ { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ ++ { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ ++ { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ ++ { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ ++ { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ ++ { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ ++ { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ ++ { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ ++ { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ ++ { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ ++ { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ ++ { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ ++ { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ ++ { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ ++ { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ ++ { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ ++ { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ ++ { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ ++ { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ ++ { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ ++ { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ ++ { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ ++ { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ ++ { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ ++ { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ ++ { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ ++ { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ ++ { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ ++ { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ ++ { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ ++ { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++ { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++ { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ ++ { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ ++ { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++ { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++ { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++ { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ ++ { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ ++ { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ ++ { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ ++ { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ ++ { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ ++ { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++ { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ ++ { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ ++ { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++ { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ ++ { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ ++ { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ ++ { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ ++ { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ ++ { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ ++ { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ ++ { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ ++ { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ ++ { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ ++ { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ ++ { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ ++ { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ ++ { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ ++ { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ ++ { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ ++ { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ ++ { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ ++ { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ ++ { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ ++ { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ ++ { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ ++ { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ ++ { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ ++ { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ ++ { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ ++ { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ ++ { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ ++ { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ ++ { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ ++ { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ ++ { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ ++ { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ ++ { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ ++ { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ ++ { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ ++ { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ ++ { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ ++ { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ ++ { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ ++ { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ ++ { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ ++ { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ ++ { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ ++ { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ ++ { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ ++ { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ ++ { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ ++ { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ ++ { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ ++ /* 0x08a1 leftradical ? ??? */ ++ /* 0x08a2 topleftradical ? ??? */ ++ /* 0x08a3 horizconnector ? ??? */ ++ { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ ++ { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ ++ { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ ++ /* 0x08a7 topleftsqbracket ? ??? */ ++ /* 0x08a8 botleftsqbracket ? ??? */ ++ /* 0x08a9 toprightsqbracket ? ??? */ ++ /* 0x08aa botrightsqbracket ? ??? */ ++ /* 0x08ab topleftparens ? ??? */ ++ /* 0x08ac botleftparens ? ??? */ ++ /* 0x08ad toprightparens ? ??? */ ++ /* 0x08ae botrightparens ? ??? */ ++ /* 0x08af leftmiddlecurlybrace ? ??? */ ++ /* 0x08b0 rightmiddlecurlybrace ? ??? */ ++ /* 0x08b1 topleftsummation ? ??? */ ++ /* 0x08b2 botleftsummation ? ??? */ ++ /* 0x08b3 topvertsummationconnector ? ??? */ ++ /* 0x08b4 botvertsummationconnector ? ??? */ ++ /* 0x08b5 toprightsummation ? ??? */ ++ /* 0x08b6 botrightsummation ? ??? */ ++ /* 0x08b7 rightmiddlesummation ? ??? */ ++ { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ ++ { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ ++ { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ ++ { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ ++ { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ ++ { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ ++ { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ ++ { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ ++ { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ ++ /* 0x08c9 similarequal ? ??? */ ++ { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ ++ { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ ++ { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ ++ { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ ++ { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ ++ { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ ++ { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ ++ { 0x08dd, 0x222a }, /* union ∪ UNION */ ++ { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ ++ { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ ++ { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ ++ { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ ++ { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ ++ { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ ++ { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ ++ { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ ++ { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ ++ { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ ++ { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ ++ { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ ++ { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ ++ { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ ++ { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ ++ { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ ++ { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ ++ { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ ++ { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ ++ { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++ { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ ++ { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++ /* 0x09ef horizlinescan1 ? ??? */ ++ /* 0x09f0 horizlinescan3 ? ??? */ ++ { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ ++ /* 0x09f2 horizlinescan7 ? ??? */ ++ /* 0x09f3 horizlinescan9 ? ??? */ ++ { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++ { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++ { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++ { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++ { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ ++ { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ ++ { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ ++ { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ ++ { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ ++ { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ ++ { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ ++ { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ ++ { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ ++ { 0x0aaa, 0x2013 }, /* endash – EN DASH */ ++ /* 0x0aac signifblank ? ??? */ ++ { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ ++ /* 0x0aaf doubbaselinedot ? ??? */ ++ { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ ++ { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ ++ { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ ++ { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ ++ { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ ++ { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ ++ { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ ++ { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ ++ { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ ++ { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ ++ { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ ++ { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ ++ { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ ++ /* 0x0abf marker ? ??? */ ++ { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ ++ { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ ++ { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ ++ { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ ++ { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ ++ { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ ++ /* 0x0acb trademarkincircle ? ??? */ ++ { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ ++ { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ ++ { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ ++ { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ ++ { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ ++ { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ ++ { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ ++ { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ ++ { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ ++ { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ ++ { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ ++ { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ ++ /* 0x0ada hexagram ? ??? */ ++ { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ ++ { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ ++ { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ ++ { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ ++ { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ ++ { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ ++ { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ ++ { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ ++ { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ ++ { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ ++ { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ ++ { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ ++ { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ ++ { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ ++ { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ ++ { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ ++ { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ ++ { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ ++ { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ ++ { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ ++ { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ ++ { 0x0af1, 0x2020 }, /* dagger † DAGGER */ ++ { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ ++ { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ ++ { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ ++ { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ ++ { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ ++ { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ ++ { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ ++ { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ ++ { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ ++ { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ ++ { 0x0afc, 0x2038 }, /* caret ‸ CARET */ ++ { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ ++ { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ ++ /* 0x0aff cursor ? ??? */ ++ { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ ++ { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ ++ { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ ++ { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ ++ { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ ++ { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ ++ { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ ++ { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ ++ { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ ++ { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ ++ { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ ++ { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ ++ { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ ++ { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ ++ { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ ++ { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ ++ { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ ++ { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ ++ { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ ++ { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ ++ { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ ++ { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ ++ { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ ++ { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ ++ { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ ++ { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ ++ { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ ++ { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ ++ { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ ++ { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ ++ { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ ++ { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ ++ { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ ++ { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ ++ { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ ++ { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ ++ { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ ++ { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ ++ { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ ++ { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ ++ { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ ++ { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ ++ { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ ++ { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ ++ { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ ++ { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ ++ { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ ++ { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ ++ { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ ++ { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ ++ { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ ++ { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ ++ { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ ++ { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ ++ { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ ++ { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ ++ { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ ++ { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ ++ { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ ++ { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ ++ { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ ++ { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ ++ { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ ++ { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ ++ { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ ++ { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ ++ { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ ++ { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ ++ { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ ++ { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ ++ { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ ++ { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ ++ { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ ++ { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ ++ { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ ++ { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ ++ { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ ++ { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ ++ { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ ++ { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ ++ { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ ++ { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ ++ { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ ++ { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ ++ { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ ++ { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ ++ { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ ++ { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ ++ { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ ++ { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ ++ { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ ++ { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ ++ { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ ++ { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ ++ { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ ++ { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ ++ { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ ++ { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ ++ { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ ++ { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ ++ { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ ++ { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ ++ { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ ++ { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ ++ { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ ++ { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */ ++ { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ ++ { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ ++ { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ ++ { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ ++ { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ ++ { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ ++ { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ ++ { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ ++ { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ ++ { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ ++ { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ ++ { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ ++ { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ ++ { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ ++ { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ ++ { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ ++ { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ ++ { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ ++ { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ ++ { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ ++ { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ ++ { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ ++ { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ ++ { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ ++ { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ ++ { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ ++ { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ ++ { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ ++ { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ ++ { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ ++ { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ ++ { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ ++ { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ ++ { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ ++ { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ ++ { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ ++ { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ ++ { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ ++ { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ ++ { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ ++ { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ ++ { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ ++ { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ ++ { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ ++ { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ ++ { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ ++ { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ ++ { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ ++ { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ ++ { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ ++ { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ ++ { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ ++ { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ ++ { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ ++ { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ ++ { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ ++ { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ ++ { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ ++ { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ ++ { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ ++ { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ ++ { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ ++ { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ ++ { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ ++ { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ ++ { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ ++ { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ ++ { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ ++ { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ ++ { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ ++ { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ ++ { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ ++ { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ ++ { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ ++ { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ ++ { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ ++ { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ ++ { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ ++ { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ ++ { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ ++ { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ ++ { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ ++ { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ ++ { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ ++ { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ ++ { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ ++ { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ ++ { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ ++ { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ ++ { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ ++ { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ ++ { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ ++ { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ ++ { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ ++ { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ ++ { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ ++ { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ ++ { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ ++ { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ ++ { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ ++ { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ ++ { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ ++ { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ ++ { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ ++ { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ ++ { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ ++ { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ ++ /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */ ++ { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ ++ { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ ++ { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ ++ { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ ++ { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ ++ /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */ ++ { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ ++ { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ ++ { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ ++ { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ ++ { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ ++ { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ ++ { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ ++ { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ ++ { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ ++ { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ ++ { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ ++ { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ ++ { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ ++ { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ ++ { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ ++ { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ ++ { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ ++ ++ ++ /* Following items added to GTK, not in the xterm table */ ++ ++ /* A few ASCII control characters */ ++ ++ { 0xFF08 /* Backspace */, '\b' }, ++ { 0xFF09 /* Tab */, '\t' }, ++ { 0xFF0A /* Linefeed */, '\n' }, ++ { 0xFF0B /* Vert. Tab */, '\v' }, ++ { 0xFF0D /* Return */, '\r' }, ++ { 0xFF1B /* Escape */, '\033' }, ++ ++ /* Numeric keypad */ ++ ++ { 0xFF80 /* Space */, ' ' }, ++ { 0xFFAA /* Multiply */, '*' }, ++ { 0xFFAB /* Add */, '+' }, ++ { 0xFFAC /* Separator */, ',' }, ++ { 0xFFAD /* Subtract */, '-' }, ++ { 0xFFAE /* Decimal */, '.' }, ++ { 0xFFAF /* Divide */, '/' }, ++ { 0xFFB0 /* 0 */, '0' }, ++ { 0xFFB1 /* 1 */, '1' }, ++ { 0xFFB2 /* 2 */, '2' }, ++ { 0xFFB3 /* 3 */, '3' }, ++ { 0xFFB4 /* 4 */, '4' }, ++ { 0xFFB5 /* 5 */, '5' }, ++ { 0xFFB6 /* 6 */, '6' }, ++ { 0xFFB7 /* 7 */, '7' }, ++ { 0xFFB8 /* 8 */, '8' }, ++ { 0xFFB9 /* 9 */, '9' }, ++ { 0xFFBD /* Equal */, '=' }, ++ ++ /* End numeric keypad */ ++ ++ { 0xFFFF /* Delete */, '\177' } ++}; ++ ++static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = { ++ { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ ++ { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ ++ { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ ++ { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ ++ { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ ++ { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ ++ { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ ++ { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ ++ { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ ++ { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ ++ { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ ++ { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ ++ { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ ++ { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++ { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++ { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++ { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ ++ { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ ++ { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ ++ { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ ++ { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ ++ { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ ++ { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ ++ { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ ++ { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ ++ { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++ { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ ++ { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ ++ { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ ++ { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ ++ { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ ++ { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++ { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++ { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ ++ { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ ++ { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++ { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ ++ { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ ++ { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ ++ { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++ { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++ { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ ++ { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ ++ { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ ++ { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ ++ { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ ++ { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ ++ { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ ++ { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ ++ { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++ { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ ++ { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++ { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++ { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ ++ { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ ++ { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ ++ { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ ++ { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ ++ { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ ++ { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ ++ { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ ++ { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ ++ { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ ++ { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ ++ { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ ++ { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ ++ { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ ++ { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ ++ { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ ++ { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ ++ { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ ++ { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ ++ { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ ++ { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ ++ { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++ { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ ++ { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ ++ { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ ++ { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ ++ { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ ++ { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ ++ { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ ++ { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ ++ { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ ++ { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ ++ { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++ { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ ++ { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ ++ { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ ++ { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ ++ { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ ++ { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ ++ { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ ++ { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ ++ { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ ++ { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ ++ { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ ++ { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ ++ { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ ++ { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ ++ { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ ++ { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ ++ { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ ++ { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ ++ { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++ { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ ++ { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ ++ { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ ++ { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ ++ { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++ { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ ++ { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ ++ { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ ++ { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ ++ { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ ++ { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ ++ { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ ++ { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ ++ { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ ++ { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ ++ { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++ { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++ { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ ++ { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ ++ { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++ { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++ { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++ { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++ { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ ++ { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ ++ { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ ++ { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ ++ { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ ++ { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ ++ { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ ++ { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ ++ { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ ++ { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ ++ { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ ++ { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ ++ { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ ++ { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ ++ { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ ++ { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ ++ { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ ++ { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ ++ { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ ++ { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ ++ { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ ++ { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ ++ { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ ++ { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ ++ { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ ++ { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ ++ { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ ++ { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ ++ { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++ { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ ++ { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ ++ { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ ++ { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ ++ { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ ++ { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ ++ { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ ++ { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ ++ { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ ++ { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ ++ { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ ++ { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ ++ { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ ++ { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ ++ { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ ++ { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ ++ { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ ++ { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ ++ { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ ++ { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ ++ { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ ++ { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ ++ { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ ++ { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ ++ { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ ++ { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ ++ { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ ++ { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ ++ { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ ++ { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ ++ { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ ++ { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++ { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ ++ { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ ++ { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ ++ { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ ++ { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ ++ { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ ++ { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ ++ { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ ++ { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ ++ { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ ++ { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ ++ { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ ++ { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ ++ { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ ++ { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ ++ { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ ++ { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ ++ { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ ++ { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ ++ { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ ++ { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ ++ { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ ++ { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ ++ { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ ++ { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ ++ { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ ++ { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ ++ { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ ++ { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ ++ { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ ++ { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ ++ { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ ++ { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ ++ { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ ++ { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ ++ { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ ++ { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ ++ { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ ++ { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ ++ { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ ++ { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ ++ { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ ++ { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ ++ { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ ++ { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ ++ { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ ++ { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ ++ { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ ++ { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ ++ { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ ++ { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ ++ { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ ++ { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ ++ { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ ++ { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ ++ { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ ++ { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ ++ { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ ++ { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ ++ { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ ++ { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ ++ { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ ++ { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ ++ { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ ++ { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ ++ { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ ++ { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ ++ { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ ++ { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ ++ { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ ++ { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ ++ { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ ++ { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ ++ { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ ++ { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ ++ { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ ++ { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ ++ { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ ++ { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ ++ { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ ++ { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ ++ { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ ++ { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ ++ { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ ++ { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ ++ { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ ++ { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ ++ { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ ++ { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ ++ { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ ++ { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ ++ { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ ++ { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ ++ { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ ++ { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ ++ { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ ++ { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ ++ { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ ++ { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ ++ { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ ++ { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ ++ { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ ++ { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ ++ { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ ++ { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ ++ { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ ++ { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ ++ { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ ++ { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ ++ { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ ++ { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ ++ { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ ++ { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ ++ { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ ++ { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ ++ { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ ++ { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ ++ { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ ++ { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++ { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ ++ { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ ++ { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ ++ { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ ++ { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ ++ { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ ++ { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ ++ { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ ++ { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ ++ { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ ++ { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ ++ { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ ++ { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ ++ { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ ++ { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ ++ { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ ++ { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ ++ { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ ++ { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ ++ { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ ++ { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ ++ { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ ++ { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ ++ { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ ++ { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ ++ { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ ++ { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ ++ { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ ++ { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ ++ { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ ++ { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ ++ { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ ++ { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ ++ { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ ++ { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ ++ { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ ++ { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ ++ { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ ++ { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ ++ { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ ++ { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ ++ { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ ++ { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ ++ { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ ++ { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ ++ { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ ++ { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ ++ { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ ++ { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ ++ { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ ++ { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ ++ { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ ++ { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ ++ { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ ++ { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ ++ { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ ++ { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ ++ { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ ++ { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ ++ { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ ++ { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ ++ { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ ++ { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ ++ { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ ++ { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ ++ { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ ++ { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ ++ { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ ++ { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ ++ { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ ++ { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ ++ { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ ++ { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ ++ { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ ++ { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ ++ { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ ++ { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ ++ { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ ++ { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ ++ { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ ++ { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ ++ { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ ++ { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ ++ { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ ++ { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ ++ { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ ++ { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ ++ { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ ++ { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ ++ { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ ++ { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ ++ { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ ++ { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ ++ { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ ++ { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ ++ { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ ++ { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ ++ { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ ++ { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ ++ { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ ++ { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ ++ { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ ++ { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ ++ { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ ++ { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ ++ { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ ++ { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ ++ { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ ++ { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ ++ { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ ++ { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ ++ { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ ++ { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ ++ { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ ++ { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ ++ { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ ++ { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ ++ { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ ++ { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ ++ { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ ++ { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ ++ { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ ++ { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ ++ { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ ++ { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ ++ { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ ++ { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ ++ { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ ++ { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ ++ { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ ++ { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ ++ { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ ++ { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ ++ { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ ++ { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ ++ { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ ++ { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ ++ { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ ++ { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ ++ { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ ++ { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ ++ { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ ++ { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ ++ { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ ++ { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ ++ { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ ++ { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ ++ { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ ++ { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ ++ { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ ++ { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ ++ { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ ++ { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ ++ { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ ++ { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ ++ { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ ++ { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ ++ { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ ++ { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ ++ { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ ++ { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ ++ { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ ++ { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ ++ { 0x0aaa, 0x2013 }, /* endash – EN DASH */ ++ { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ ++ { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ ++ { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ ++ { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ ++ { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ ++ { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ ++ { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ ++ { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ ++ { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ ++ { 0x0af1, 0x2020 }, /* dagger † DAGGER */ ++ { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ ++ { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ ++ { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ ++ { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ ++ { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ ++ { 0x0afc, 0x2038 }, /* caret ‸ CARET */ ++ { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ ++ { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ ++ { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ ++ { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ ++ { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ ++ { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ ++ { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ ++ { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ ++ { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ ++ { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ ++ { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ ++ { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ ++ { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ ++ { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ ++ { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ ++ { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ ++ { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ ++ { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ ++ { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ ++ { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ ++ { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ ++ { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ ++ { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ ++ { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ ++ { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ ++ { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ ++ { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ ++ { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ ++ { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ ++ { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ ++ { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ ++ { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ ++ { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ ++ { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ ++ { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ ++ { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ ++ { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ ++ { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ ++ { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ ++ { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ ++ { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ ++ { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ ++ { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ ++ { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ ++ { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ ++ { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ ++ { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ ++ { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ ++ { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ ++ { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ ++ { 0x08dd, 0x222a }, /* union ∪ UNION */ ++ { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ ++ { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ ++ { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ ++ { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ ++ { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ ++ { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ ++ { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ ++ { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ ++ { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ ++ { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ ++ { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ ++ { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ ++ { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ ++ { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ ++ { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ ++ { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ ++ { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ ++ { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ ++ { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ ++ { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ ++ { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ ++ { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ ++ { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ ++ { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ ++ { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ ++ { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ ++ { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ ++ { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ ++ { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ ++ { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ ++ { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ ++ { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ ++ { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++ { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ ++ { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ ++ { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ ++ { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++ { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++ { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++ { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++ { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++ { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ ++ { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ ++ { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ ++ { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ ++ { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ ++ { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ ++ { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ ++ { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ ++ { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ ++ { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ ++ { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ ++ { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ ++ { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ ++ { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ ++ { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ ++ { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ ++ { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ ++ { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ ++ { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ ++ { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ ++ { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ ++ { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ ++ { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ ++ { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ ++ { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ ++ { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ ++ { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ ++ { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ ++ { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ ++ { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ ++ { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ ++ { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ ++ { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ ++ { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ ++ { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ ++ { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ ++ { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ ++ { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ ++ { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ ++ { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ ++ { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ ++ { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++ { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ ++ { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ ++ { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ ++ { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ ++ { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ ++ { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ ++ { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ ++ { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ ++ { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ ++ { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ ++ { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ ++ { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ ++ { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ ++ { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ ++ { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ ++ { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ ++ { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ ++ { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ ++ { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ ++ { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ ++ { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ ++ { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ ++ { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ ++ { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ ++ { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ ++ { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ ++ { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ ++ { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ ++ { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ ++ { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ ++ { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ ++ { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ ++ { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ ++ { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ ++ { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ ++ { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ ++ { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ ++ { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ ++ { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ ++ { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ ++ { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ ++ { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ ++ { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ ++ { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ ++ { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ ++ { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ ++ { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ ++ { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ ++ { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ ++ { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ ++ { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ ++ { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ ++ { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ ++ { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ ++ { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ ++ { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ ++ { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++ { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ ++ { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ ++ { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ ++ { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ ++ { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ ++ { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ ++ { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ ++ { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ ++ { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ ++ { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ ++ { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ ++ { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ ++ { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ ++ { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ ++ { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ ++ { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ ++ { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ ++ { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ ++ { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ ++ { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ ++ { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ ++ { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ ++ { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ ++ { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ ++ { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ ++ { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ ++ { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ ++ { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ ++ { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ ++ { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ ++ { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ ++ { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ ++ { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ ++ { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ ++ { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ ++ { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ ++ { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ ++ { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ ++ { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ ++ { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ ++ { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ ++ { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ ++ { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ ++ { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ ++ { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ ++ { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ ++ { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ ++ { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ ++ { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ ++ { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ ++ { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ ++ { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ ++ { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ ++ { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ ++ { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ ++ { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ ++ { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ ++ { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ ++ { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ ++}; ++ ++#endif // KEYDATA_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h +new file mode 100644 +index 0000000..e735210 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h +@@ -0,0 +1,173 @@ ++/* ++ Copyright (C) 2001 Ellis Whitehead ++ ++ Win32 port: ++ Copyright (C) 2004 Jaroslaw Staniek ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library; see the file COPYING.LIB. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef KEYSERVER_X11_H ++#define KEYSERVER_X11_H ++ ++#include ++ ++struct TransKey { ++ int keySymQt; ++ uint keySymX; ++}; ++ ++static const TransKey g_rgQtToSymX[] = { ++ { Qt::Key_Escape, XK_Escape }, ++ { Qt::Key_Tab, XK_Tab }, ++ { Qt::Key_Backtab, XK_ISO_Left_Tab }, ++ { Qt::Key_Backspace, XK_BackSpace }, ++ { Qt::Key_Return, XK_Return }, ++ { Qt::Key_Enter, XK_KP_Enter }, ++ { Qt::Key_Insert, XK_Insert }, ++ { Qt::Key_Delete, XK_Delete }, ++ { Qt::Key_Pause, XK_Pause }, ++#ifdef sun ++ { Qt::Key_Print, XK_F22 }, ++#else ++ { Qt::Key_Print, XK_Print }, ++#endif ++ { Qt::Key_SysReq, XK_Sys_Req }, ++ { Qt::Key_Home, XK_Home }, ++ { Qt::Key_End, XK_End }, ++ { Qt::Key_Left, XK_Left }, ++ { Qt::Key_Up, XK_Up }, ++ { Qt::Key_Right, XK_Right }, ++ { Qt::Key_Down, XK_Down }, ++ //{ Qt::Key_Shift, 0 }, ++ //{ Qt::Key_Control, 0 }, ++ //{ Qt::Key_Meta, 0 }, ++ //{ Qt::Key_Alt, 0 }, ++ { Qt::Key_CapsLock, XK_Caps_Lock }, ++ { Qt::Key_NumLock, XK_Num_Lock }, ++ { Qt::Key_ScrollLock, XK_Scroll_Lock }, ++ { Qt::Key_F1, XK_F1 }, ++ { Qt::Key_F2, XK_F2 }, ++ { Qt::Key_F3, XK_F3 }, ++ { Qt::Key_F4, XK_F4 }, ++ { Qt::Key_F5, XK_F5 }, ++ { Qt::Key_F6, XK_F6 }, ++ { Qt::Key_F7, XK_F7 }, ++ { Qt::Key_F8, XK_F8 }, ++ { Qt::Key_F9, XK_F9 }, ++ { Qt::Key_F10, XK_F10 }, ++ { Qt::Key_F11, XK_F11 }, ++ { Qt::Key_F12, XK_F12 }, ++ { Qt::Key_F13, XK_F13 }, ++ { Qt::Key_F14, XK_F14 }, ++ { Qt::Key_F15, XK_F15 }, ++ { Qt::Key_F16, XK_F16 }, ++ { Qt::Key_F17, XK_F17 }, ++ { Qt::Key_F18, XK_F18 }, ++ { Qt::Key_F19, XK_F19 }, ++ { Qt::Key_F20, XK_F20 }, ++ { Qt::Key_F21, XK_F21 }, ++ { Qt::Key_F22, XK_F22 }, ++ { Qt::Key_F23, XK_F23 }, ++ { Qt::Key_F24, XK_F24 }, ++ { Qt::Key_F25, XK_F25 }, ++ { Qt::Key_F26, XK_F26 }, ++ { Qt::Key_F27, XK_F27 }, ++ { Qt::Key_F28, XK_F28 }, ++ { Qt::Key_F29, XK_F29 }, ++ { Qt::Key_F30, XK_F30 }, ++ { Qt::Key_F31, XK_F31 }, ++ { Qt::Key_F32, XK_F32 }, ++ { Qt::Key_F33, XK_F33 }, ++ { Qt::Key_F34, XK_F34 }, ++ { Qt::Key_F35, XK_F35 }, ++ { Qt::Key_Super_L, XK_Super_L }, ++ { Qt::Key_Super_R, XK_Super_R }, ++ { Qt::Key_Menu, XK_Menu }, ++ { Qt::Key_Hyper_L, XK_Hyper_L }, ++ { Qt::Key_Hyper_R, XK_Hyper_R }, ++ { Qt::Key_Help, XK_Help }, ++ ++ { '/', XK_KP_Divide }, ++ { '*', XK_KP_Multiply }, ++ { '-', XK_KP_Subtract }, ++ { '+', XK_KP_Add }, ++ { Qt::Key_Return, XK_KP_Enter }, ++ {Qt::Key_Multi_key, XK_Multi_key}, ++ {Qt::Key_Codeinput, XK_Codeinput}, ++ {Qt::Key_SingleCandidate, XK_SingleCandidate}, ++ {Qt::Key_MultipleCandidate, XK_MultipleCandidate}, ++ {Qt::Key_PreviousCandidate, XK_PreviousCandidate}, ++ {Qt::Key_Mode_switch, XK_Mode_switch}, ++ {Qt::Key_Kanji, XK_Kanji}, ++ {Qt::Key_Muhenkan, XK_Muhenkan}, ++ {Qt::Key_Henkan, XK_Henkan}, ++ {Qt::Key_Romaji, XK_Romaji}, ++ {Qt::Key_Hiragana, XK_Hiragana}, ++ {Qt::Key_Katakana, XK_Katakana}, ++ {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana}, ++ {Qt::Key_Zenkaku, XK_Zenkaku}, ++ {Qt::Key_Hankaku, XK_Hankaku}, ++ {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku}, ++ {Qt::Key_Touroku, XK_Touroku}, ++ {Qt::Key_Massyo, XK_Massyo}, ++ {Qt::Key_Kana_Lock, XK_Kana_Lock}, ++ {Qt::Key_Kana_Shift, XK_Kana_Shift}, ++ {Qt::Key_Eisu_Shift, XK_Eisu_Shift}, ++ {Qt::Key_Eisu_toggle, XK_Eisu_toggle}, ++ {Qt::Key_Hangul, XK_Hangul}, ++ {Qt::Key_Hangul_Start, XK_Hangul_Start}, ++ {Qt::Key_Hangul_End, XK_Hangul_End}, ++ {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja}, ++ {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo}, ++ {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja}, ++ {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja}, ++ {Qt::Key_Hangul_Banja, XK_Hangul_Banja}, ++ {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja}, ++ {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja}, ++ {Qt::Key_Hangul_Special, XK_Hangul_Special}, ++}; ++ ++#include ++ ++inline int map_sym_to_qt(uint keySym) ++{ ++ if (keySym < 0x1000) { ++ if (keySym >= 'a' && keySym <= 'z') ++ return QChar(keySym).toUpper().unicode(); ++ return keySym; ++ } ++#ifdef Q_WS_WIN ++ if (keySym < 0x3000) ++ return keySym; ++#else ++ if (keySym < 0x3000) ++ return keySym | Qt::UNICODE_ACCEL; ++ ++ for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++) ++ if (g_rgQtToSymX[i].keySymX == keySym) ++ return g_rgQtToSymX[i].keySymQt; ++#endif ++ return Qt::Key_unknown; ++} ++ ++static bool symToKeyQt(uint keySym, int& keyQt) ++{ ++ keyQt = map_sym_to_qt(keySym); ++ return (keyQt != Qt::Key_unknown); ++} ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp +new file mode 100644 +index 0000000..a4dec94 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp +@@ -0,0 +1,56 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++#include "keyuni.h" ++#include "keydata.h" ++ ++uint32_t ++FcitxKeySymToUnicode (uint32_t keyval) ++{ ++ int min = 0; ++ int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1; ++ int mid; ++ ++ /* First check for Latin-1 characters (1:1 mapping) */ ++ if ((keyval >= 0x0020 && keyval <= 0x007e) || ++ (keyval >= 0x00a0 && keyval <= 0x00ff)) ++ return keyval; ++ ++ /* Also check for directly encoded 24-bit UCS characters: ++ */ ++ if ((keyval & 0xff000000) == 0x01000000) ++ return keyval & 0x00ffffff; ++ ++ /* binary search in table */ ++ while (max >= min) { ++ mid = (min + max) / 2; ++ if (gdk_keysym_to_unicode_tab[mid].keysym < keyval) ++ min = mid + 1; ++ else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval) ++ max = mid - 1; ++ else { ++ /* found it */ ++ return gdk_keysym_to_unicode_tab[mid].ucs; ++ } ++ } ++ ++ /* No matching Unicode value found */ ++ return 0; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h +new file mode 100644 +index 0000000..02af14d +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h +@@ -0,0 +1,29 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KEYUNI_H ++#define KEYUNI_H ++ ++#include ++ ++quint32 ++FcitxKeySymToUnicode (quint32 keyval); ++ ++ ++#endif // KEYUNI_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp +new file mode 100644 +index 0000000..d522818 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp +@@ -0,0 +1,35 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "main.h" ++ ++ ++QStringList QFcitxPlatformInputContextPlugin::keys() const ++{ ++ return QStringList(QStringLiteral("fcitx")); ++ ++} ++ ++QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList) ++{ ++ Q_UNUSED(paramList); ++ if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0) ++ return new QFcitxPlatformInputContext; ++ return 0; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/main.h b/qtbase/src/plugins/platforminputcontexts/fcitx/main.h +new file mode 100644 +index 0000000..9938da1 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/main.h +@@ -0,0 +1,37 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef MAIN_H ++#define MAIN_H ++ ++#include ++#include ++ ++#include "qfcitxplatforminputcontext.h" ++ ++class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "fcitx.json") ++ QStringList keys() const; ++ QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList); ++}; ++ ++#endif // MAIN_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp +new file mode 100644 +index 0000000..adbf1bd +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp +@@ -0,0 +1,770 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "keyserver_x11.h" ++ ++#include "qfcitxplatforminputcontext.h" ++#include "fcitxqtinputcontextproxy.h" ++#include "fcitxqtinputmethodproxy.h" ++#include "fcitxqtconnection.h" ++#include "keyuni.h" ++#include "utils.h" ++ ++static bool key_filtered = false; ++ ++static bool ++get_boolean_env(const char *name, ++ bool defval) ++{ ++ const char *value = getenv(name); ++ ++ if (value == NULL) ++ return defval; ++ ++ if (strcmp(value, "") == 0 || ++ strcmp(value, "0") == 0 || ++ strcmp(value, "false") == 0 || ++ strcmp(value, "False") == 0 || ++ strcmp(value, "FALSE") == 0) ++ return false; ++ ++ return true; ++} ++ ++static inline const char* ++get_locale() ++{ ++ const char* locale = getenv("LC_ALL"); ++ if (!locale) ++ locale = getenv("LC_CTYPE"); ++ if (!locale) ++ locale = getenv("LANG"); ++ if (!locale) ++ locale = "C"; ++ ++ return locale; ++} ++ ++struct xkb_context* _xkb_context_new_helper() ++{ ++ struct xkb_context* context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); ++ if (context) { ++ xkb_context_set_log_level(context, XKB_LOG_LEVEL_CRITICAL); ++ } ++ ++ return context; ++} ++ ++QFcitxPlatformInputContext::QFcitxPlatformInputContext() : ++ m_connection(new FcitxQtConnection(this)), ++ m_improxy(0), ++ m_n_compose(0), ++ m_cursorPos(0), ++ m_useSurroundingText(false), ++ m_syncMode(true), ++ m_lastWId(0), ++ m_destroy(false), ++ m_xkbContext(_xkb_context_new_helper()), ++ m_xkbComposeTable(m_xkbContext ? xkb_compose_table_new_from_locale(m_xkbContext.data(), get_locale(), XKB_COMPOSE_COMPILE_NO_FLAGS) : 0), ++ m_xkbComposeState(m_xkbComposeTable ? xkb_compose_state_new(m_xkbComposeTable.data(), XKB_COMPOSE_STATE_NO_FLAGS) : 0) ++{ ++ FcitxQtFormattedPreedit::registerMetaType(); ++ ++ memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1)); ++ connect(m_connection, SIGNAL(connected()), this, SLOT(connected())); ++ connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp())); ++ ++ m_connection->startConnection(); ++} ++ ++QFcitxPlatformInputContext::~QFcitxPlatformInputContext() ++{ ++ m_destroy = true; ++ cleanUp(); ++} ++ ++void QFcitxPlatformInputContext::connected() ++{ ++ if (!m_connection->isConnected()) ++ return; ++ ++ // qDebug() << "create Input Context" << m_connection->name(); ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = 0; ++ } ++ m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); ++ ++ QWindow* w = qApp->focusWindow(); ++ if (w) ++ createICData(w); ++} ++ ++void QFcitxPlatformInputContext::cleanUp() ++{ ++ for(QHash::const_iterator i = m_icMap.constBegin(), ++ e = m_icMap.constEnd(); i != e; ++i) { ++ FcitxQtICData* data = i.value(); ++ ++ if (data->proxy) ++ delete data->proxy; ++ } ++ ++ m_icMap.clear(); ++ ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = 0; ++ } ++ ++ if (!m_destroy) { ++ commitPreedit(); ++ } ++} ++ ++bool QFcitxPlatformInputContext::isValid() const ++{ ++ return true; ++} ++ ++void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) ++{ ++ if (action == QInputMethod::Click ++ && (cursorPosition <= 0 || cursorPosition >= m_preedit.length()) ++ ) ++ { ++ // qDebug() << action << cursorPosition; ++ commitPreedit(); ++ } ++} ++ ++void QFcitxPlatformInputContext::commitPreedit() ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ if (m_commitPreedit.length() <= 0) ++ return; ++ QInputMethodEvent e; ++ e.setCommitString(m_commitPreedit); ++ QCoreApplication::sendEvent(input, &e); ++ m_commitPreedit.clear(); ++} ++ ++ ++void QFcitxPlatformInputContext::reset() ++{ ++ commitPreedit(); ++ FcitxQtInputContextProxy* proxy = validIC(); ++ if (proxy) ++ proxy->Reset(); ++ if (m_xkbComposeState) { ++ xkb_compose_state_reset(m_xkbComposeState.data()); ++ } ++ QPlatformInputContext::reset(); ++} ++ ++void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries ) ++{ ++ QWindow* window = qApp->focusWindow(); ++ FcitxQtInputContextProxy* proxy = validICByWindow(window); ++ if (!proxy) ++ return; ++ ++ FcitxQtICData* data = m_icMap.value(window->winId()); ++ ++ QInputMethod *method = qApp->inputMethod(); ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodQueryEvent query(queries); ++ QGuiApplication::sendEvent(input, &query); ++ ++ if (queries & Qt::ImCursorRectangle) { ++ cursorRectChanged(); ++ } ++ ++ if (queries & Qt::ImHints) { ++ Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()); ++ ++ ++#define CHECK_HINTS(_HINTS, _CAPACITY) \ ++ if (hints & _HINTS) \ ++ addCapacity(data, _CAPACITY); \ ++ else \ ++ removeCapacity(data, _CAPACITY); ++ ++ CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE) ++ CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER) ++ CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE) ++ CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE) ++ CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK) ++ CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT) ++ CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER) ++ CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE) ++ CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE) ++ CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE) ++ CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL) ++ } ++ ++ bool setSurrounding = false; ++ do { ++ if (!m_useSurroundingText) ++ break; ++ if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition))) ++ break; ++ if (data->capacity.testFlag(CAPACITY_PASSWORD)) ++ break; ++ QVariant var = query.value(Qt::ImSurroundingText); ++ QVariant var1 = query.value(Qt::ImCursorPosition); ++ QVariant var2 = query.value(Qt::ImAnchorPosition); ++ if (!var.isValid() || !var1.isValid()) ++ break; ++ QString text = var.toString(); ++ /* we don't want to waste too much memory here */ ++#define SURROUNDING_THRESHOLD 4096 ++ if (text.length() < SURROUNDING_THRESHOLD) { ++ if (_utf8_check_string(text.toUtf8().data())) { ++ addCapacity(data, CAPACITY_SURROUNDING_TEXT); ++ ++ int cursor = var1.toInt(); ++ int anchor; ++ if (var2.isValid()) ++ anchor = var2.toInt(); ++ else ++ anchor = cursor; ++ if (data->surroundingText != text) { ++ data->surroundingText = text; ++ proxy->SetSurroundingText(text, cursor, anchor); ++ } ++ else { ++ if (data->surroundingAnchor != anchor || ++ data->surroundingCursor != cursor) ++ proxy->SetSurroundingTextPosition(cursor, anchor); ++ } ++ data->surroundingCursor = cursor; ++ data->surroundingAnchor = anchor; ++ setSurrounding = true; ++ } ++ } ++ if (!setSurrounding) { ++ data->surroundingAnchor = -1; ++ data->surroundingCursor = -1; ++ data->surroundingText = QString::null; ++ removeCapacity(data, CAPACITY_SURROUNDING_TEXT); ++ } ++ } while(0); ++} ++ ++void QFcitxPlatformInputContext::commit() ++{ ++ QPlatformInputContext::commit(); ++} ++ ++void QFcitxPlatformInputContext::setFocusObject(QObject* object) ++{ ++ FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId); ++ if (proxy) { ++ proxy->FocusOut(); ++ } ++ ++ QWindow *window = qApp->focusWindow(); ++ if (window) { ++ m_lastWId = window->winId(); ++ } else { ++ m_lastWId = 0; ++ return; ++ } ++ proxy = validICByWindow(window); ++ if (proxy) ++ proxy->FocusIn(); ++ else { ++ FcitxQtICData* data = m_icMap.value(window->winId()); ++ if (!data) { ++ createICData(window); ++ return; ++ } ++ } ++} ++ ++void QFcitxPlatformInputContext::windowDestroyed(QObject* object) ++{ ++ /* access QWindow is not possible here, so we use our own map to do so */ ++ WId wid = m_windowToWidMap.take(object); ++ if (!wid) ++ return; ++ FcitxQtICData* data = m_icMap.take(wid); ++ if (!data) ++ return; ++ ++ delete data; ++ // qDebug() << "Window Destroyed and we destroy IC correctly, horray!"; ++} ++ ++void QFcitxPlatformInputContext::cursorRectChanged() ++{ ++ QWindow *inputWindow = qApp->focusWindow(); ++ if (!inputWindow) ++ return; ++ FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow); ++ if (!proxy) ++ return; ++ ++ FcitxQtICData* data = m_icMap.value(inputWindow->winId()); ++ ++ QRect r = qApp->inputMethod()->cursorRectangle().toRect(); ++ if(!r.isValid()) ++ return; ++ ++ r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft())); ++ ++ qreal scale = inputWindow->devicePixelRatio(); ++ if (data->rect != r) { ++ data->rect = r; ++ proxy->SetCursorRect(r.x() * scale, r.y() * scale, ++ r.width() * scale, r.height() * scale); ++ } ++} ++ ++void QFcitxPlatformInputContext::createInputContext(WId w) ++{ ++ if (!m_connection->isConnected()) ++ return; ++ ++ // qDebug() << "create Input Context" << m_connection->connection()->name(); ++ ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = NULL; ++ } ++ m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); ++ ++ if (!m_improxy->isValid()) ++ return; ++ ++ QFileInfo info(QCoreApplication::applicationFilePath()); ++ QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid()); ++ QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result); ++ watcher->setProperty("wid", (qulonglong) w); ++ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*))); ++} ++ ++void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher) ++{ ++ WId w = watcher->property("wid").toULongLong(); ++ FcitxQtICData* data = m_icMap.value(w); ++ if (!data) ++ return; ++ ++ QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher; ++ ++ do { ++ if (result.isError()) { ++ break; ++ } ++ ++ if (!m_connection->isConnected()) ++ break; ++ ++ int id = qdbus_cast(result.argumentAt(0)); ++ QString path = QString("/inputcontext_%1").arg(id); ++ if (data->proxy) { ++ delete data->proxy; ++ } ++ data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this); ++ connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString))); ++ connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int))); ++ connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int))); ++ connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint))); ++ ++ if (data->proxy->isValid()) { ++ QWindow* window = qApp->focusWindow(); ++ if (window && window->winId() == w) ++ data->proxy->FocusIn(); ++ } ++ ++ QFlags flag; ++ flag |= CAPACITY_PREEDIT; ++ flag |= CAPACITY_FORMATTED_PREEDIT; ++ flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT; ++ m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true); ++ if (m_useSurroundingText) ++ flag |= CAPACITY_SURROUNDING_TEXT; ++ ++ /* ++ * event loop will cause some problem, so we tries to use async way. ++ */ ++ m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false); ++ ++ addCapacity(data, flag, true); ++ } while(0); ++ delete watcher; ++} ++ ++void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data) ++{ ++ if (!data->proxy || !data->proxy->isValid()) ++ return; ++ ++ QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity); ++} ++ ++void QFcitxPlatformInputContext::commitString(const QString& str) ++{ ++ m_cursorPos = 0; ++ m_preeditList.clear(); ++ m_commitPreedit.clear(); ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodEvent event; ++ event.setCommitString(str); ++ QCoreApplication::sendEvent(input, &event); ++} ++ ++void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos) ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ if (cursorPos == m_cursorPos && preeditList == m_preeditList) ++ return; ++ m_preeditList = preeditList; ++ m_cursorPos = cursorPos; ++ QString str, commitStr; ++ int pos = 0; ++ QList attrList; ++ Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList) ++ { ++ str += preedit.string(); ++ if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS)) ++ commitStr += preedit.string(); ++ QTextCharFormat format; ++ if ((preedit.format() & MSG_NOUNDERLINE) == 0) { ++ format.setUnderlineStyle(QTextCharFormat::DashUnderline); ++ } ++ if (preedit.format() & MSG_HIGHLIGHT) { ++ QBrush brush; ++ QPalette palette; ++ palette = QGuiApplication::palette(); ++ format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight)))); ++ format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText)))); ++ } ++ attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format)); ++ pos += preedit.string().length(); ++ } ++ ++ QByteArray array = str.toUtf8(); ++ array.truncate(cursorPos); ++ cursorPos = QString::fromUtf8(array).length(); ++ ++ attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0)); ++ m_preedit = str; ++ m_commitPreedit = commitStr; ++ QInputMethodEvent event(str, attrList); ++ QCoreApplication::sendEvent(input, &event); ++ update(Qt::ImCursorRectangle); ++} ++ ++void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar) ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodEvent event; ++ event.setCommitString("", offset, nchar); ++ QCoreApplication::sendEvent(input, &event); ++} ++ ++void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type) ++{ ++ QObject *input = qApp->focusObject(); ++ if (input != NULL) { ++ key_filtered = true; ++ QKeyEvent *keyevent = createKeyEvent(keyval, state, type); ++ QCoreApplication::sendEvent(input, keyevent); ++ delete keyevent; ++ key_filtered = false; ++ } ++} ++ ++void QFcitxPlatformInputContext::createICData(QWindow* w) ++{ ++ FcitxQtICData* data = m_icMap.value(w->winId()); ++ if (!data) { ++ data = new FcitxQtICData; ++ m_icMap[w->winId()] = data; ++ m_windowToWidMap[w] = w->winId(); ++ connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); ++ } ++ createInputContext(w->winId()); ++} ++ ++QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type) ++{ ++ Qt::KeyboardModifiers qstate = Qt::NoModifier; ++ ++ int count = 1; ++ if (state & FcitxKeyState_Alt) { ++ qstate |= Qt::AltModifier; ++ count ++; ++ } ++ ++ if (state & FcitxKeyState_Shift) { ++ qstate |= Qt::ShiftModifier; ++ count ++; ++ } ++ ++ if (state & FcitxKeyState_Ctrl) { ++ qstate |= Qt::ControlModifier; ++ count ++; ++ } ++ ++ int key; ++ symToKeyQt(keyval, key); ++ ++ QKeyEvent* keyevent = new QKeyEvent( ++ (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease), ++ key, ++ qstate, ++ QString(), ++ false, ++ count ++ ); ++ ++ return keyevent; ++} ++ ++bool QFcitxPlatformInputContext::filterEvent(const QEvent* event) ++{ ++ do { ++ if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { ++ break; ++ } ++ ++ const QKeyEvent* keyEvent = static_cast(event); ++ quint32 keyval = keyEvent->nativeVirtualKey(); ++ quint32 keycode = keyEvent->nativeScanCode(); ++ quint32 state = keyEvent->nativeModifiers(); ++ bool press = keyEvent->type() == QEvent::KeyPress; ++ ++ if (key_filtered) { ++ break; ++ } ++ ++ if (!inputMethodAccepted()) ++ break; ++ ++ QObject *input = qApp->focusObject(); ++ ++ if (!input) { ++ break; ++ } ++ ++ FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow()); ++ ++ if (!proxy) { ++ if (filterEventFallback(keyval, keycode, state, press)) { ++ return true; ++ } else { ++ break; ++ } ++ } ++ ++ proxy->FocusIn(); ++ ++ QDBusPendingReply< int > reply = proxy->ProcessKeyEvent(keyval, ++ keycode, ++ state, ++ (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY, ++ QDateTime::currentDateTime().toTime_t()); ++ ++ ++ if (Q_UNLIKELY(m_syncMode)) { ++ reply.waitForFinished(); ++ ++ if (!m_connection->isConnected() || !reply.isFinished() || reply.isError() || reply.value() <= 0) { ++ if (filterEventFallback(keyval, keycode, state, press)) { ++ return true; ++ } else { ++ break; ++ } ++ } else { ++ update(Qt::ImCursorRectangle); ++ return true; ++ } ++ } ++ else { ++ ProcessKeyWatcher* watcher = new ProcessKeyWatcher(*keyEvent, qApp->focusWindow(), reply, this); ++ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), ++ this, SLOT(processKeyEventFinished(QDBusPendingCallWatcher*))); ++ return true; ++ } ++ } while(0); ++ return QPlatformInputContext::filterEvent(event); ++} ++ ++void QFcitxPlatformInputContext::processKeyEventFinished(QDBusPendingCallWatcher* w) ++{ ++ ProcessKeyWatcher* watcher = static_cast(w); ++ QDBusPendingReply< int > result(*watcher); ++ bool filtered = false; ++ ++ QWindow* window = watcher->window(); ++ // if window is already destroyed, we can only throw this event away. ++ if (!window) { ++ return; ++ } ++ ++ const QKeyEvent& keyEvent = watcher->event(); ++ ++ // use same variable name as in QXcbKeyboard::handleKeyEvent ++ QEvent::Type type = keyEvent.type(); ++ int qtcode = keyEvent.key(); ++ Qt::KeyboardModifiers modifiers = keyEvent.modifiers(); ++ quint32 code = keyEvent.nativeScanCode(); ++ quint32 sym = keyEvent.nativeVirtualKey(); ++ quint32 state = keyEvent.nativeModifiers(); ++ QString string = keyEvent.text(); ++ bool isAutoRepeat = keyEvent.isAutoRepeat(); ++ ulong time = keyEvent.timestamp(); ++ ++ if (result.isError() || result.value() <= 0) { ++ filtered = filterEventFallback(sym, code, state, type == QEvent::KeyPress); ++ } else { ++ filtered = true; ++ } ++ ++ if (!result.isError()) { ++ update(Qt::ImCursorRectangle); ++ } ++ ++ if (!filtered) { ++ // copied from QXcbKeyboard::handleKeyEvent() ++ if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu) { ++ const QPoint globalPos = window->screen()->handle()->cursor()->pos(); ++ const QPoint pos = window->mapFromGlobal(globalPos); QWindowSystemInterface::handleContextMenuEvent(window, false, pos, globalPos, modifiers); ++ } ++ QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, ++ code, sym, state, string, isAutoRepeat); ++ } ++ ++ delete watcher; ++} ++ ++ ++bool QFcitxPlatformInputContext::filterEventFallback(uint keyval, uint keycode, uint state, bool press) ++{ ++ Q_UNUSED(keycode); ++ if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) { ++ return true; ++ } ++ return false; ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC() ++{ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ QWindow* window = qApp->focusWindow(); ++ return validICByWindow(window); ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid) ++{ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ FcitxQtICData* icData = m_icMap.value(wid); ++ if (!icData) ++ return 0; ++ if (icData->proxy.isNull()) { ++ return 0; ++ } else if (icData->proxy->isValid()) { ++ return icData->proxy.data(); ++ } ++ return 0; ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w) ++{ ++ if (!w) { ++ return 0; ++ } ++ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ return validICByWId(w->winId()); ++} ++ ++ ++bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event) ++{ ++ Q_UNUSED(state); ++ ++ if (!m_xkbComposeTable || event == FCITX_RELEASE_KEY) ++ return false; ++ ++ struct xkb_compose_state* xkbComposeState = m_xkbComposeState.data(); ++ ++ enum xkb_compose_feed_result result = xkb_compose_state_feed(xkbComposeState, keyval); ++ if (result == XKB_COMPOSE_FEED_IGNORED) { ++ return false; ++ } ++ ++ enum xkb_compose_status status = xkb_compose_state_get_status(xkbComposeState); ++ if (status == XKB_COMPOSE_NOTHING) { ++ return 0; ++ } else if (status == XKB_COMPOSE_COMPOSED) { ++ char buffer[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0'}; ++ int length = xkb_compose_state_get_utf8(xkbComposeState, buffer, sizeof(buffer)); ++ xkb_compose_state_reset(xkbComposeState); ++ if (length != 0) { ++ commitString(QString::fromUtf8(buffer)); ++ } ++ ++ } else if (status == XKB_COMPOSE_CANCELLED) { ++ xkb_compose_state_reset(xkbComposeState); ++ } ++ ++ return true; ++} ++ ++ ++// kate: indent-mode cstyle; space-indent on; indent-width 0; +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h +new file mode 100644 +index 0000000..1371278 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h +@@ -0,0 +1,269 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef QFCITXPLATFORMINPUTCONTEXT_H ++#define QFCITXPLATFORMINPUTCONTEXT_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtformattedpreedit.h" ++#include "fcitxqtinputcontextproxy.h" ++ ++#define MAX_COMPOSE_LEN 7 ++ ++class FcitxQtConnection; ++class QFileSystemWatcher; ++enum FcitxKeyEventType { ++ FCITX_PRESS_KEY, ++ FCITX_RELEASE_KEY ++}; ++ ++enum FcitxCapacityFlags { ++ CAPACITY_NONE = 0, ++ CAPACITY_CLIENT_SIDE_UI = (1 << 0), ++ CAPACITY_PREEDIT = (1 << 1), ++ CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2), ++ CAPACITY_PASSWORD = (1 << 3), ++ CAPACITY_FORMATTED_PREEDIT = (1 << 4), ++ CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5), ++ CAPACITY_SURROUNDING_TEXT = (1 << 6), ++ CAPACITY_EMAIL = (1 << 7), ++ CAPACITY_DIGIT = (1 << 8), ++ CAPACITY_UPPERCASE = (1 << 9), ++ CAPACITY_LOWERCASE = (1 << 10), ++ CAPACITY_NOAUTOUPPERCASE = (1 << 11), ++ CAPACITY_URL = (1 << 12), ++ CAPACITY_DIALABLE = (1 << 13), ++ CAPACITY_NUMBER = (1 << 14), ++ CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15), ++ CAPACITY_SPELLCHECK = (1 << 16), ++ CAPACITY_NO_SPELLCHECK = (1 << 17), ++ CAPACITY_WORD_COMPLETION = (1 << 18), ++ CAPACITY_UPPERCASE_WORDS = (1 << 19), ++ CAPACITY_UPPERCASE_SENTENCES = (1 << 20), ++ CAPACITY_ALPHA = (1 << 21), ++ CAPACITY_NAME = (1 << 22) ++} ; ++ ++/** message type and flags */ ++enum FcitxMessageType { ++ MSG_TYPE_FIRST = 0, ++ MSG_TYPE_LAST = 6, ++ MSG_TIPS = 0, /**< Hint Text */ ++ MSG_INPUT = 1, /**< User Input */ ++ MSG_INDEX = 2, /**< Index Number */ ++ MSG_FIRSTCAND = 3, /**< First candidate */ ++ MSG_USERPHR = 4, /**< User Phrase */ ++ MSG_CODE = 5, /**< Typed character */ ++ MSG_OTHER = 6, /**< Other Text */ ++ MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */ ++ MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */ ++ MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */ ++ MSG_REGULAR_MASK = 0x7 /**< regular color type mask */ ++}; ++ ++ ++enum FcitxKeyState { ++ FcitxKeyState_None = 0, ++ FcitxKeyState_Shift = 1 << 0, ++ FcitxKeyState_CapsLock = 1 << 1, ++ FcitxKeyState_Ctrl = 1 << 2, ++ FcitxKeyState_Alt = 1 << 3, ++ FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift, ++ FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift, ++ FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt, ++ FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift, ++ FcitxKeyState_NumLock = 1 << 4, ++ FcitxKeyState_Super = 1 << 6, ++ FcitxKeyState_ScrollLock = 1 << 7, ++ FcitxKeyState_MousePressed = 1 << 8, ++ FcitxKeyState_HandledMask = 1 << 24, ++ FcitxKeyState_IgnoredMask = 1 << 25, ++ FcitxKeyState_Super2 = 1 << 26, ++ FcitxKeyState_Hyper = 1 << 27, ++ FcitxKeyState_Meta = 1 << 28, ++ FcitxKeyState_UsedMask = 0x5c001fff ++}; ++ ++struct FcitxQtICData { ++ FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {} ++ ~FcitxQtICData() { ++ if (proxy && proxy->isValid()) { ++ proxy->DestroyIC(); ++ delete proxy; ++ } ++ } ++ QFlags capacity; ++ QPointer proxy; ++ QRect rect; ++ QString surroundingText; ++ int surroundingAnchor; ++ int surroundingCursor; ++}; ++ ++ ++class ProcessKeyWatcher : public QDBusPendingCallWatcher ++{ ++ Q_OBJECT ++public: ++ ProcessKeyWatcher(const QKeyEvent& event, QWindow* window, const QDBusPendingCall &call, QObject *parent = 0) : ++ QDBusPendingCallWatcher(call, parent) ++ ,m_event(event.type(), event.key(), event.modifiers(), ++ event.nativeScanCode(), event.nativeVirtualKey(), event.nativeModifiers(), ++ event.text(), event.isAutoRepeat(), event.count()) ++ ,m_window(window) ++ { ++ } ++ ++ virtual ~ProcessKeyWatcher() { ++ } ++ ++ const QKeyEvent& event() { ++ return m_event; ++ } ++ ++ QWindow* window() { ++ return m_window.data(); ++ } ++ ++private: ++ QKeyEvent m_event; ++ QPointer m_window; ++}; ++ ++struct XkbContextDeleter ++{ ++ static inline void cleanup(struct xkb_context* pointer) ++ { ++ if (pointer) xkb_context_unref(pointer); ++ } ++}; ++ ++struct XkbComposeTableDeleter ++{ ++ static inline void cleanup(struct xkb_compose_table* pointer) ++ { ++ if (pointer) xkb_compose_table_unref(pointer); ++ } ++}; ++ ++struct XkbComposeStateDeleter ++{ ++ static inline void cleanup(struct xkb_compose_state* pointer) ++ { ++ if (pointer) xkb_compose_state_unref(pointer); ++ } ++}; ++ ++class FcitxQtInputMethodProxy; ++ ++class QFcitxPlatformInputContext : public QPlatformInputContext ++{ ++ Q_OBJECT ++public: ++ QFcitxPlatformInputContext(); ++ virtual ~QFcitxPlatformInputContext(); ++ ++ virtual bool filterEvent(const QEvent* event); ++ virtual bool isValid() const; ++ virtual void invokeAction(QInputMethod::Action , int cursorPosition); ++ virtual void reset(); ++ virtual void commit(); ++ virtual void update(Qt::InputMethodQueries quries ); ++ virtual void setFocusObject(QObject* object); ++ ++ ++public Q_SLOTS: ++ void cursorRectChanged(); ++ void commitString(const QString& str); ++ void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos); ++ void deleteSurroundingText(int offset, uint nchar); ++ void forwardKey(uint keyval, uint state, int type); ++ void createInputContextFinished(QDBusPendingCallWatcher* watcher); ++ void connected(); ++ void cleanUp(); ++ void windowDestroyed(QObject* object); ++ ++ ++private: ++ void createInputContext(WId w); ++ bool processCompose(uint keyval, uint state, FcitxKeyEventType event); ++ bool checkAlgorithmically(); ++ bool checkCompactTable(const struct _FcitxComposeTableCompact *table); ++ QKeyEvent* createKeyEvent(uint keyval, uint state, int type); ++ ++ ++ void addCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) ++ { ++ QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity; ++ if (data->capacity != newcaps || forceUpdate) { ++ data->capacity = newcaps; ++ updateCapacity(data); ++ } ++ } ++ ++ void removeCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) ++ { ++ QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity); ++ if (data->capacity != newcaps || forceUpdate) { ++ data->capacity = newcaps; ++ updateCapacity(data); ++ } ++ } ++ ++ void updateCapacity(FcitxQtICData* data); ++ void commitPreedit(); ++ void createICData(QWindow* w); ++ FcitxQtInputContextProxy* validIC(); ++ FcitxQtInputContextProxy* validICByWindow(QWindow* window); ++ FcitxQtInputContextProxy* validICByWId(WId wid); ++ bool filterEventFallback(uint keyval, uint keycode, uint state, bool press); ++ ++ FcitxQtInputMethodProxy* m_improxy; ++ uint m_compose_buffer[MAX_COMPOSE_LEN + 1]; ++ int m_n_compose; ++ QString m_preedit; ++ QString m_commitPreedit; ++ FcitxQtFormattedPreeditList m_preeditList; ++ int m_cursorPos; ++ bool m_useSurroundingText; ++ bool m_syncMode; ++ FcitxQtConnection* m_connection; ++ QString m_lastSurroundingText; ++ int m_lastSurroundingAnchor; ++ int m_lastSurroundingCursor; ++ QHash m_icMap; ++ QHash m_windowToWidMap; ++ WId m_lastWId; ++ bool m_destroy; ++ QScopedPointer m_xkbContext; ++ QScopedPointer m_xkbComposeTable; ++ QScopedPointer m_xkbComposeState; ++private slots: ++ void processKeyEventFinished(QDBusPendingCallWatcher*); ++}; ++ ++#endif // QFCITXPLATFORMINPUTCONTEXT_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp +new file mode 100644 +index 0000000..fe4eda1 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp +@@ -0,0 +1,177 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "utils.h" ++/** check utf8 character */ ++#define ISUTF8_CB(c) (((c)&0xc0) == 0x80) ++ ++#define CONT(i) ISUTF8_CB(in[i]) ++#define VAL(i, s) ((in[i]&0x3f) << s) ++ ++#define UTF8_LENGTH(Char) \ ++ ((Char) < 0x80 ? 1 : \ ++ ((Char) < 0x800 ? 2 : \ ++ ((Char) < 0x10000 ? 3 : \ ++ ((Char) < 0x200000 ? 4 : \ ++ ((Char) < 0x4000000 ? 5 : 6))))) ++ ++#define UNICODE_VALID(Char) \ ++ ((Char) < 0x110000 && \ ++ (((Char) & 0xFFFFF800) != 0xD800) && \ ++ ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \ ++ ((Char) & 0xFFFE) != 0xFFFE) ++ ++int ++_utf8_get_char_extended(const char *s, ++ int max_len) ++{ ++ const unsigned char*p = (const unsigned char*)s; ++ int i, len; ++ unsigned int wc = (unsigned char) * p; ++ ++ if (wc < 0x80) { ++ return wc; ++ } else if (wc < 0xc0) { ++ return (unsigned int) - 1; ++ } else if (wc < 0xe0) { ++ len = 2; ++ wc &= 0x1f; ++ } else if (wc < 0xf0) { ++ len = 3; ++ wc &= 0x0f; ++ } else if (wc < 0xf8) { ++ len = 4; ++ wc &= 0x07; ++ } else if (wc < 0xfc) { ++ len = 5; ++ wc &= 0x03; ++ } else if (wc < 0xfe) { ++ len = 6; ++ wc &= 0x01; ++ } else { ++ return (unsigned int) - 1; ++ } ++ ++ if (max_len >= 0 && len > max_len) { ++ for (i = 1; i < max_len; i++) { ++ if ((((unsigned char *)p)[i] & 0xc0) != 0x80) ++ return (unsigned int) - 1; ++ } ++ ++ return (unsigned int) - 2; ++ } ++ ++ for (i = 1; i < len; ++i) { ++ unsigned int ch = ((unsigned char *)p)[i]; ++ ++ if ((ch & 0xc0) != 0x80) { ++ if (ch) ++ return (unsigned int) - 1; ++ else ++ return (unsigned int) - 2; ++ } ++ ++ wc <<= 6; ++ ++ wc |= (ch & 0x3f); ++ } ++ ++ if (UTF8_LENGTH(wc) != len) ++ return (unsigned int) - 1; ++ ++ return wc; ++} ++ ++int _utf8_get_char_validated(const char *p, ++ int max_len) ++{ ++ int result; ++ ++ if (max_len == 0) ++ return -2; ++ ++ result = _utf8_get_char_extended(p, max_len); ++ ++ if (result & 0x80000000) ++ return result; ++ else if (!UNICODE_VALID(result)) ++ return -1; ++ else ++ return result; ++} ++ ++ ++char * ++_utf8_get_char(const char *i, uint32_t *chr) ++{ ++ const unsigned char* in = (const unsigned char *)i; ++ if (!(in[0] & 0x80)) { ++ *(chr) = *(in); ++ return (char *)in + 1; ++ } ++ ++ /* 2-byte, 0x80-0x7ff */ ++ if ((in[0] & 0xe0) == 0xc0 && CONT(1)) { ++ *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0); ++ return (char *)in + 2; ++ } ++ ++ /* 3-byte, 0x800-0xffff */ ++ if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) { ++ *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0); ++ return (char *)in + 3; ++ } ++ ++ /* 4-byte, 0x10000-0x1FFFFF */ ++ if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) { ++ *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0); ++ return (char *)in + 4; ++ } ++ ++ /* 5-byte, 0x200000-0x3FFFFFF */ ++ if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) { ++ *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0); ++ return (char *)in + 5; ++ } ++ ++ /* 6-byte, 0x400000-0x7FFFFFF */ ++ if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) { ++ *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0); ++ return (char *)in + 6; ++ } ++ ++ *chr = *in; ++ ++ return (char *)in + 1; ++} ++ ++ ++int _utf8_check_string(const char *s) ++{ ++ while (*s) { ++ uint32_t chr; ++ ++ if (_utf8_get_char_validated(s, 6) < 0) ++ return 0; ++ ++ s = _utf8_get_char(s, &chr); ++ } ++ ++ return 1; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h +new file mode 100644 +index 0000000..ae0c79c +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h +@@ -0,0 +1,35 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef UTILS_H ++#define UTILS_H ++ ++#include ++ ++int ++_utf8_get_char_extended(const char *s, ++ int max_len); ++int _utf8_get_char_validated(const char *p, ++ int max_len); ++char * ++_utf8_get_char(const char *i, uint32_t *chr); ++int _utf8_check_string(const char *s); ++ ++ ++#endif // UTILS_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h +new file mode 100644 +index 0000000..299732f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h +@@ -0,0 +1,98 @@ ++/* ++ * Copyright © 2012 Daniel Stone ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_COMPAT_H ++#define _XKBCOMMON_COMPAT_H ++ ++/** ++ * Renamed keymap API. ++ */ ++#define xkb_group_index_t xkb_layout_index_t ++#define xkb_group_mask_t xkb_layout_mask_t ++#define xkb_map_compile_flags xkb_keymap_compile_flags ++#define XKB_GROUP_INVALID XKB_LAYOUT_INVALID ++ ++#define XKB_STATE_DEPRESSED \ ++ (XKB_STATE_MODS_DEPRESSED | XKB_STATE_LAYOUT_DEPRESSED) ++#define XKB_STATE_LATCHED \ ++ (XKB_STATE_MODS_LATCHED | XKB_STATE_LAYOUT_LATCHED) ++#define XKB_STATE_LOCKED \ ++ (XKB_STATE_MODS_LOCKED | XKB_STATE_LAYOUT_LOCKED) ++#define XKB_STATE_EFFECTIVE \ ++ (XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED | \ ++ XKB_STATE_MODS_EFFECTIVE | XKB_STATE_LAYOUT_EFFECTIVE) ++ ++#define xkb_map_new_from_names(context, names, flags) \ ++ xkb_keymap_new_from_names(context, names, flags) ++#define xkb_map_new_from_file(context, file, format, flags) \ ++ xkb_keymap_new_from_file(context, file, format, flags) ++#define xkb_map_new_from_string(context, string, format, flags) \ ++ xkb_keymap_new_from_string(context, string, format, flags) ++#define xkb_map_get_as_string(keymap) \ ++ xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1) ++#define xkb_map_ref(keymap) xkb_keymap_ref(keymap) ++#define xkb_map_unref(keymap) xkb_keymap_unref(keymap) ++ ++#define xkb_map_num_mods(keymap) xkb_keymap_num_mods(keymap) ++#define xkb_map_mod_get_name(keymap, idx) xkb_keymap_mod_get_name(keymap, idx) ++#define xkb_map_mod_get_index(keymap, str) xkb_keymap_mod_get_index(keymap, str) ++#define xkb_key_mod_index_is_consumed(state, key, mod) \ ++ xkb_state_mod_index_is_consumed(state, key, mod) ++#define xkb_key_mod_mask_remove_consumed(state, key, modmask) \ ++ xkb_state_mod_mask_remove_consumed(state, key, modmask) ++ ++#define xkb_map_num_groups(keymap) xkb_keymap_num_layouts(keymap) ++#define xkb_key_num_groups(keymap, key) \ ++ xkb_keymap_num_layouts_for_key(keymap, key) ++#define xkb_map_group_get_name(keymap, idx) \ ++ xkb_keymap_layout_get_name(keymap, idx) ++#define xkb_map_group_get_index(keymap, str) \ ++ xkb_keymap_layout_get_index(keymap, str) ++ ++#define xkb_map_num_leds(keymap) xkb_keymap_num_leds(keymap) ++#define xkb_map_led_get_name(keymap, idx) xkb_keymap_led_get_name(keymap, idx) ++#define xkb_map_led_get_index(keymap, str) \ ++ xkb_keymap_led_get_index(keymap, str) ++ ++#define xkb_key_repeats(keymap, key) xkb_keymap_key_repeats(keymap, key) ++ ++#define xkb_key_get_syms(state, key, syms_out) \ ++ xkb_state_key_get_syms(state, key, syms_out) ++ ++#define xkb_state_group_name_is_active(state, name, type) \ ++ xkb_state_layout_name_is_active(state, name, type) ++#define xkb_state_group_index_is_active(state, idx, type) \ ++ xkb_state_layout_index_is_active(state, idx, type) ++ ++#define xkb_state_serialize_group(state, component) \ ++ xkb_state_serialize_layout(state, component) ++ ++#define xkb_state_get_map(state) xkb_state_get_keymap(state) ++ ++/* Not needed anymore, since there's NO_FLAGS. */ ++#define XKB_MAP_COMPILE_PLACEHOLDER XKB_KEYMAP_COMPILE_NO_FLAGS ++#define XKB_MAP_COMPILE_NO_FLAGS XKB_KEYMAP_COMPILE_NO_FLAGS ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h +new file mode 100644 +index 0000000..7414c37 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h +@@ -0,0 +1,488 @@ ++/* ++ * Copyright © 2013 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef _XKBCOMMON_COMPOSE_H ++#define _XKBCOMMON_COMPOSE_H ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * libxkbcommon Compose API - support for Compose and dead-keys. ++ */ ++ ++/** ++ * @defgroup compose Compose and dead-keys support ++ * Support for Compose and dead-keys. ++ * @since 0.5.0 ++ * ++ * @{ ++ */ ++ ++/** ++ * @page compose-overview Overview ++ * @parblock ++ * ++ * Compose and dead-keys are a common feature of many keyboard input ++ * systems. They extend the range of the keysysm that can be produced ++ * directly from a keyboard by using a sequence of key strokes, instead ++ * of just one. ++ * ++ * Here are some example sequences, in the libX11 Compose file format: ++ * ++ * : "á" aacute # LATIN SMALL LETTER A WITH ACUTE ++ * : "@" at # COMMERCIAL AT ++ * ++ * When the user presses a key which produces the `` keysym, ++ * nothing initially happens (thus the key is dubbed a "dead-key"). But ++ * when the user enters ``, "á" is "composed", in place of "a". If ++ * instead the user had entered a keysym which does not follow ++ * `` in any compose sequence, the sequence is said to be ++ * "cancelled". ++ * ++ * Compose files define many such sequences. For a description of the ++ * common file format for Compose files, see the Compose(5) man page. ++ * ++ * A successfuly-composed sequence has two results: a keysym and a UTF-8 ++ * string. At least one of the two is defined for each sequence. If only ++ * a keysym is given, the keysym's string representation is used for the ++ * result string (using xkb_keysym_to_utf8()). ++ * ++ * This library provides low-level support for Compose file parsing and ++ * processing. Higher-level APIs (such as libX11's `Xutf8LookupString`(3)) ++ * may be built upon it, or it can be used directly. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @page compose-conflicting Conflicting Sequences ++ * @parblock ++ * ++ * To avoid ambiguity, a sequence is not allowed to be a prefix of another. ++ * In such a case, the conflict is resolved thus: ++ * ++ * 1. A longer sequence overrides a shorter one. ++ * 2. An equal sequence overrides an existing one. ++ * 3. A shorter sequence does not override a longer one. ++ * ++ * Sequences of length 1 are allowed. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @page compose-cancellation Cancellation Behavior ++ * @parblock ++ * ++ * What should happen when a sequence is cancelled? For example, consider ++ * there are only the above sequences, and the input keysyms are ++ * ` `. There are a few approaches: ++ * ++ * 1. Swallow the cancelling keysym; that is, no keysym is produced. ++ * This is the approach taken by libX11. ++ * 2. Let the cancelling keysym through; that is, `` is produced. ++ * 3. Replay the entire sequence; that is, ` ` is produced. ++ * This is the approach taken by Microsoft Windows (approximately; ++ * instead of ``, the underlying key is used. This is ++ * difficult to simulate with XKB keymaps). ++ * ++ * You can program whichever approach best fits users' expectations. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @struct xkb_compose_table ++ * Opaque Compose table object. ++ * ++ * The compose table holds the definitions of the Compose sequences, as ++ * gathered from Compose files. It is immutable. ++ */ ++struct xkb_compose_table; ++ ++/** ++ * @struct xkb_compose_state ++ * Opaque Compose state object. ++ * ++ * The compose state maintains state for compose sequence matching, such ++ * as which possible sequences are being matched, and the position within ++ * these sequences. It acts as a simple state machine wherein keysyms are ++ * the input, and composed keysyms and strings are the output. ++ * ++ * The compose state is usually associated with a keyboard device. ++ */ ++struct xkb_compose_state; ++ ++/** Flags affecting Compose file compilation. */ ++enum xkb_compose_compile_flags { ++ /** Do not apply any flags. */ ++ XKB_COMPOSE_COMPILE_NO_FLAGS = 0 ++}; ++ ++/** The recognized Compose file formats. */ ++enum xkb_compose_format { ++ /** The classic libX11 Compose text format, described in Compose(5). */ ++ XKB_COMPOSE_FORMAT_TEXT_V1 = 1 ++}; ++ ++/** ++ * @page compose-locale Compose Locale ++ * @parblock ++ * ++ * Compose files are locale dependent: ++ * - Compose files are written for a locale, and the locale is used when ++ * searching for the appropriate file to use. ++ * - Compose files may reference the locale internally, with directives ++ * such as \%L. ++ * ++ * As such, functions like xkb_compose_table_new_from_locale() require ++ * a `locale` parameter. This will usually be the current locale (see ++ * locale(7) for more details). You may also want to allow the user to ++ * explicitly configure it, so he can use the Compose file of a given ++ * locale, but not use that locale for other things. ++ * ++ * You may query the current locale as follows: ++ * @code ++ * const char *locale; ++ * locale = setlocale(LC_CTYPE, NULL); ++ * @endcode ++ * ++ * This will only give useful results if the program had previously set ++ * the current locale using setlocale(3), with `LC_CTYPE` or `LC_ALL` ++ * and a non-NULL argument. ++ * ++ * If you prefer not to use the locale system of the C runtime library, ++ * you may nevertheless obtain the user's locale directly using ++ * environment variables, as described in locale(7). For example, ++ * @code ++ * locale = getenv("LC_ALL"); ++ * if (!locale) ++ * locale = getenv("LC_CTYPE"); ++ * if (!locale) ++ * locale = getenv("LANG"); ++ * if (!locale) ++ * locale = "C"; ++ * @endcode ++ * ++ * Note that some locales supported by the C standard library may not ++ * have a Compose file assigned. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * Create a compose table for a given locale. ++ * ++ * The locale is used for searching the file-system for an appropriate ++ * Compose file. The search order is described in Compose(5). It is ++ * affected by the following environment variables: ++ * ++ * 1. `XCOMPOSEFILE` - see Compose(5). ++ * 2. `HOME` - see Compose(5). ++ * 3. `XLOCALEDIR` - if set, used as the base directory for the system's ++ * X locale files, e.g. `/usr/share/X11/locale`, instead of the ++ * preconfigured directory. ++ * ++ * @param context ++ * The library context in which to create the compose table. ++ * @param locale ++ * The current locale. See @ref compose-locale. ++ * @param flags ++ * Optional flags for the compose table, or 0. ++ * ++ * @returns A compose table for the given locale, or NULL if the ++ * compilation failed or a Compose file was not found. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_locale(struct xkb_context *context, ++ const char *locale, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Create a new compose table from a Compose file. ++ * ++ * @param context ++ * The library context in which to create the compose table. ++ * @param file ++ * The Compose file to compile. ++ * @param locale ++ * The current locale. See @ref compose-locale. ++ * @param format ++ * The text format of the Compose file to compile. ++ * @param flags ++ * Optional flags for the compose table, or 0. ++ * ++ * @returns A compose table compiled from the given file, or NULL if ++ * the compilation failed. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_file(struct xkb_context *context, ++ FILE *file, ++ const char *locale, ++ enum xkb_compose_format format, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Create a new compose table from a memory buffer. ++ * ++ * This is just like xkb_compose_table_new_from_file(), but instead of ++ * a file, gets the table as one enormous string. ++ * ++ * @see xkb_compose_table_new_from_file() ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_buffer(struct xkb_context *context, ++ const char *buffer, size_t length, ++ const char *locale, ++ enum xkb_compose_format format, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Take a new reference on a compose table. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_ref(struct xkb_compose_table *table); ++ ++/** ++ * Release a reference on a compose table, and possibly free it. ++ * ++ * @param table The object. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_compose_table ++ */ ++void ++xkb_compose_table_unref(struct xkb_compose_table *table); ++ ++/** Flags for compose state creation. */ ++enum xkb_compose_state_flags { ++ /** Do not apply any flags. */ ++ XKB_COMPOSE_STATE_NO_FLAGS = 0 ++}; ++ ++/** ++ * Create a new compose state object. ++ * ++ * @param table ++ * The compose table the state will use. ++ * @param flags ++ * Optional flags for the compose state, or 0. ++ * ++ * @returns A new compose state, or NULL on failure. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_state * ++xkb_compose_state_new(struct xkb_compose_table *table, ++ enum xkb_compose_state_flags flags); ++ ++/** ++ * Take a new reference on a compose state object. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_state * ++xkb_compose_state_ref(struct xkb_compose_state *state); ++ ++/** ++ * Release a reference on a compose state object, and possibly free it. ++ * ++ * @param state The object. If NULL, do nothing. ++ * ++ * @memberof xkb_compose_state ++ */ ++void ++xkb_compose_state_unref(struct xkb_compose_state *state); ++ ++/** ++ * Get the compose table which a compose state object is using. ++ * ++ * @returns The compose table which was passed to xkb_compose_state_new() ++ * when creating this state object. ++ * ++ * This function does not take a new reference on the compose table; you ++ * must explicitly reference it yourself if you plan to use it beyond the ++ * lifetime of the state. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_table * ++xkb_compose_state_get_compose_table(struct xkb_compose_state *state); ++ ++/** Status of the Compose sequence state machine. */ ++enum xkb_compose_status { ++ /** The initial state; no sequence has started yet. */ ++ XKB_COMPOSE_NOTHING, ++ /** In the middle of a sequence. */ ++ XKB_COMPOSE_COMPOSING, ++ /** A complete sequence has been matched. */ ++ XKB_COMPOSE_COMPOSED, ++ /** The last sequence was cancelled due to an unmatched keysym. */ ++ XKB_COMPOSE_CANCELLED ++}; ++ ++/** The effect of a keysym fed to xkb_compose_state_feed(). */ ++enum xkb_compose_feed_result { ++ /** The keysym had no effect - it did not affect the status. */ ++ XKB_COMPOSE_FEED_IGNORED, ++ /** The keysym started, advanced or cancelled a sequence. */ ++ XKB_COMPOSE_FEED_ACCEPTED ++}; ++ ++/** ++ * Feed one keysym to the Compose sequence state machine. ++ * ++ * This function can advance into a compose sequence, cancel a sequence, ++ * start a new sequence, or do nothing in particular. The resulting ++ * status may be observed with xkb_compose_state_get_status(). ++ * ++ * Some keysyms, such as keysyms for modifier keys, are ignored - they ++ * have no effect on the status or otherwise. ++ * ++ * The following is a description of the possible status transitions, in ++ * the format CURRENT STATUS => NEXT STATUS, given a non-ignored input ++ * keysym `keysym`: ++ * ++ @verbatim ++ NOTHING or CANCELLED or COMPOSED => ++ NOTHING if keysym does not start a sequence. ++ COMPOSING if keysym starts a sequence. ++ COMPOSED if keysym starts and terminates a single-keysym sequence. ++ ++ COMPOSING => ++ COMPOSING if keysym advances any of the currently possible ++ sequences but does not terminate any of them. ++ COMPOSED if keysym terminates one of the currently possible ++ sequences. ++ CANCELLED if keysym does not advance any of the currently ++ possible sequences. ++ @endverbatim ++ * ++ * The current Compose formats do not support multiple-keysyms. ++ * Therefore, if you are using a function such as xkb_state_key_get_syms() ++ * and it returns more than one keysym, consider feeding XKB_KEY_NoSymbol ++ * instead. ++ * ++ * @param state ++ * The compose state object. ++ * @param keysym ++ * A keysym, usually obtained after a key-press event, with a ++ * function such as xkb_state_key_get_one_sym(). ++ * ++ * @returns Whether the keysym was ignored. This is useful, for example, ++ * if you want to keep a record of the sequence matched thus far. ++ * ++ * @memberof xkb_compose_state ++ */ ++enum xkb_compose_feed_result ++xkb_compose_state_feed(struct xkb_compose_state *state, ++ xkb_keysym_t keysym); ++ ++/** ++ * Reset the Compose sequence state machine. ++ * ++ * The status is set to XKB_COMPOSE_NOTHING, and the current sequence ++ * is discarded. ++ * ++ * @memberof xkb_compose_state ++ */ ++void ++xkb_compose_state_reset(struct xkb_compose_state *state); ++ ++/** ++ * Get the current status of the compose state machine. ++ * ++ * @see xkb_compose_status ++ * @memberof xkb_compose_state ++ **/ ++enum xkb_compose_status ++xkb_compose_state_get_status(struct xkb_compose_state *state); ++ ++/** ++ * Get the result Unicode/UTF-8 string for a composed sequence. ++ * ++ * See @ref compose-overview for more details. This function is only ++ * useful when the status is XKB_COMPOSE_COMPOSED. ++ * ++ * @param[in] state ++ * The compose state. ++ * @param[out] buffer ++ * A buffer to write the string into. ++ * @param[in] size ++ * Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated). ++ * ++ * @returns ++ * The number of bytes required for the string, excluding the NUL byte. ++ * If the sequence is not complete, or does not have a viable result ++ * string, returns 0, and sets `buffer` to the empty string (if possible). ++ * @returns ++ * You may check if truncation has occurred by comparing the return value ++ * with the size of `buffer`, similarly to the `snprintf`(3) function. ++ * You may safely pass NULL and 0 to `buffer` and `size` to find the ++ * required size (without the NUL-byte). ++ * ++ * @memberof xkb_compose_state ++ **/ ++int ++xkb_compose_state_get_utf8(struct xkb_compose_state *state, ++ char *buffer, size_t size); ++ ++/** ++ * Get the result keysym for a composed sequence. ++ * ++ * See @ref compose-overview for more details. This function is only ++ * useful when the status is XKB_COMPOSE_COMPOSED. ++ * ++ * @returns The result keysym. If the sequence is not complete, or does ++ * not specify a result keysym, returns XKB_KEY_NoSymbol. ++ * ++ * @memberof xkb_compose_state ++ **/ ++xkb_keysym_t ++xkb_compose_state_get_one_sym(struct xkb_compose_state *state); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_COMPOSE_H */ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h +new file mode 100644 +index 0000000..69c582e +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h +@@ -0,0 +1,3012 @@ ++#ifndef _XKBCOMMON_KEYSYMS_H ++#define _XKBCOMMON_KEYSYMS_H ++ ++/* This file is autogenerated from Makefile.am; please do not commit directly. */ ++ ++#define XKB_KEY_NoSymbol 0x000000 /* Special KeySym */ ++ ++/*********************************************************** ++Copyright 1987, 1994, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included ++in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR ++OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall ++not be used in advertising or otherwise to promote the sale, use or ++other dealings in this Software without prior written authorization ++from The Open Group. ++ ++ ++Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the name of Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++******************************************************************/ ++ ++/* ++ * The "X11 Window System Protocol" standard defines in Appendix A the ++ * keysym codes. These 29-bit integer values identify characters or ++ * functions associated with each key (e.g., via the visible ++ * engraving) of a keyboard layout. This file assigns mnemonic macro ++ * names for these keysyms. ++ * ++ * This file is also compiled (by src/util/makekeys.c in libX11) into ++ * hash tables that can be accessed with X11 library functions such as ++ * XStringToKeysym() and XKeysymToString(). ++ * ++ * Where a keysym corresponds one-to-one to an ISO 10646 / Unicode ++ * character, this is noted in a comment that provides both the U+xxxx ++ * Unicode position, as well as the official Unicode name of the ++ * character. ++ * ++ * Where the correspondence is either not one-to-one or semantically ++ * unclear, the Unicode position and name are enclosed in ++ * parentheses. Such legacy keysyms should be considered deprecated ++ * and are not recommended for use in future keyboard mappings. ++ * ++ * For any future extension of the keysyms with characters already ++ * found in ISO 10646 / Unicode, the following algorithm shall be ++ * used. The new keysym code position will simply be the character's ++ * Unicode number plus 0x01000000. The keysym values in the range ++ * 0x01000100 to 0x0110ffff are reserved to represent Unicode ++ * characters in the range U+0100 to U+10FFFF. ++ * ++ * While most newer Unicode-based X11 clients do already accept ++ * Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it ++ * will remain necessary for clients -- in the interest of ++ * compatibility with existing servers -- to also understand the ++ * existing legacy keysym values in the range 0x0100 to 0x20ff. ++ * ++ * Where several mnemonic names are defined for the same keysym in this ++ * file, all but the first one listed should be considered deprecated. ++ * ++ * Mnemonic names for keysyms are defined in this file with lines ++ * that match one of these Perl regular expressions: ++ * ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/ ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/ ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/ ++ * ++ * Before adding new keysyms, please do consider the following: In ++ * addition to the keysym names defined in this file, the ++ * XStringToKeysym() and XKeysymToString() functions will also handle ++ * any keysym string of the form "U0020" to "U007E" and "U00A0" to ++ * "U10FFFF" for all possible Unicode characters. In other words, ++ * every possible Unicode character has already a keysym string ++ * defined algorithmically, even if it is not listed here. Therefore, ++ * defining an additional keysym macro is only necessary where a ++ * non-hexadecimal mnemonic name is needed, or where the new keysym ++ * does not represent any existing Unicode character. ++ * ++ * When adding new keysyms to this file, do not forget to also update the ++ * following as needed: ++ * ++ * - the mappings in src/KeyBind.c in the repo ++ * git://anongit.freedesktop.org/xorg/lib/libX11.git ++ * ++ * - the protocol specification in specs/keysyms.xml ++ * in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git ++ * ++ */ ++ ++#define XKB_KEY_VoidSymbol 0xffffff /* Void symbol */ ++ ++/* ++ * TTY function keys, cleverly chosen to map to ASCII, for convenience of ++ * programming, but could have been arbitrary (at the cost of lookup ++ * tables in client code). ++ */ ++ ++#define XKB_KEY_BackSpace 0xff08 /* Back space, back char */ ++#define XKB_KEY_Tab 0xff09 ++#define XKB_KEY_Linefeed 0xff0a /* Linefeed, LF */ ++#define XKB_KEY_Clear 0xff0b ++#define XKB_KEY_Return 0xff0d /* Return, enter */ ++#define XKB_KEY_Pause 0xff13 /* Pause, hold */ ++#define XKB_KEY_Scroll_Lock 0xff14 ++#define XKB_KEY_Sys_Req 0xff15 ++#define XKB_KEY_Escape 0xff1b ++#define XKB_KEY_Delete 0xffff /* Delete, rubout */ ++ ++ ++ ++/* International & multi-key character composition */ ++ ++#define XKB_KEY_Multi_key 0xff20 /* Multi-key character compose */ ++#define XKB_KEY_Codeinput 0xff37 ++#define XKB_KEY_SingleCandidate 0xff3c ++#define XKB_KEY_MultipleCandidate 0xff3d ++#define XKB_KEY_PreviousCandidate 0xff3e ++ ++/* Japanese keyboard support */ ++ ++#define XKB_KEY_Kanji 0xff21 /* Kanji, Kanji convert */ ++#define XKB_KEY_Muhenkan 0xff22 /* Cancel Conversion */ ++#define XKB_KEY_Henkan_Mode 0xff23 /* Start/Stop Conversion */ ++#define XKB_KEY_Henkan 0xff23 /* Alias for Henkan_Mode */ ++#define XKB_KEY_Romaji 0xff24 /* to Romaji */ ++#define XKB_KEY_Hiragana 0xff25 /* to Hiragana */ ++#define XKB_KEY_Katakana 0xff26 /* to Katakana */ ++#define XKB_KEY_Hiragana_Katakana 0xff27 /* Hiragana/Katakana toggle */ ++#define XKB_KEY_Zenkaku 0xff28 /* to Zenkaku */ ++#define XKB_KEY_Hankaku 0xff29 /* to Hankaku */ ++#define XKB_KEY_Zenkaku_Hankaku 0xff2a /* Zenkaku/Hankaku toggle */ ++#define XKB_KEY_Touroku 0xff2b /* Add to Dictionary */ ++#define XKB_KEY_Massyo 0xff2c /* Delete from Dictionary */ ++#define XKB_KEY_Kana_Lock 0xff2d /* Kana Lock */ ++#define XKB_KEY_Kana_Shift 0xff2e /* Kana Shift */ ++#define XKB_KEY_Eisu_Shift 0xff2f /* Alphanumeric Shift */ ++#define XKB_KEY_Eisu_toggle 0xff30 /* Alphanumeric toggle */ ++#define XKB_KEY_Kanji_Bangou 0xff37 /* Codeinput */ ++#define XKB_KEY_Zen_Koho 0xff3d /* Multiple/All Candidate(s) */ ++#define XKB_KEY_Mae_Koho 0xff3e /* Previous Candidate */ ++ ++/* 0xff31 thru 0xff3f are under XK_KOREAN */ ++ ++/* Cursor control & motion */ ++ ++#define XKB_KEY_Home 0xff50 ++#define XKB_KEY_Left 0xff51 /* Move left, left arrow */ ++#define XKB_KEY_Up 0xff52 /* Move up, up arrow */ ++#define XKB_KEY_Right 0xff53 /* Move right, right arrow */ ++#define XKB_KEY_Down 0xff54 /* Move down, down arrow */ ++#define XKB_KEY_Prior 0xff55 /* Prior, previous */ ++#define XKB_KEY_Page_Up 0xff55 ++#define XKB_KEY_Next 0xff56 /* Next */ ++#define XKB_KEY_Page_Down 0xff56 ++#define XKB_KEY_End 0xff57 /* EOL */ ++#define XKB_KEY_Begin 0xff58 /* BOL */ ++ ++ ++/* Misc functions */ ++ ++#define XKB_KEY_Select 0xff60 /* Select, mark */ ++#define XKB_KEY_Print 0xff61 ++#define XKB_KEY_Execute 0xff62 /* Execute, run, do */ ++#define XKB_KEY_Insert 0xff63 /* Insert, insert here */ ++#define XKB_KEY_Undo 0xff65 ++#define XKB_KEY_Redo 0xff66 /* Redo, again */ ++#define XKB_KEY_Menu 0xff67 ++#define XKB_KEY_Find 0xff68 /* Find, search */ ++#define XKB_KEY_Cancel 0xff69 /* Cancel, stop, abort, exit */ ++#define XKB_KEY_Help 0xff6a /* Help */ ++#define XKB_KEY_Break 0xff6b ++#define XKB_KEY_Mode_switch 0xff7e /* Character set switch */ ++#define XKB_KEY_script_switch 0xff7e /* Alias for mode_switch */ ++#define XKB_KEY_Num_Lock 0xff7f ++ ++/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */ ++ ++#define XKB_KEY_KP_Space 0xff80 /* Space */ ++#define XKB_KEY_KP_Tab 0xff89 ++#define XKB_KEY_KP_Enter 0xff8d /* Enter */ ++#define XKB_KEY_KP_F1 0xff91 /* PF1, KP_A, ... */ ++#define XKB_KEY_KP_F2 0xff92 ++#define XKB_KEY_KP_F3 0xff93 ++#define XKB_KEY_KP_F4 0xff94 ++#define XKB_KEY_KP_Home 0xff95 ++#define XKB_KEY_KP_Left 0xff96 ++#define XKB_KEY_KP_Up 0xff97 ++#define XKB_KEY_KP_Right 0xff98 ++#define XKB_KEY_KP_Down 0xff99 ++#define XKB_KEY_KP_Prior 0xff9a ++#define XKB_KEY_KP_Page_Up 0xff9a ++#define XKB_KEY_KP_Next 0xff9b ++#define XKB_KEY_KP_Page_Down 0xff9b ++#define XKB_KEY_KP_End 0xff9c ++#define XKB_KEY_KP_Begin 0xff9d ++#define XKB_KEY_KP_Insert 0xff9e ++#define XKB_KEY_KP_Delete 0xff9f ++#define XKB_KEY_KP_Equal 0xffbd /* Equals */ ++#define XKB_KEY_KP_Multiply 0xffaa ++#define XKB_KEY_KP_Add 0xffab ++#define XKB_KEY_KP_Separator 0xffac /* Separator, often comma */ ++#define XKB_KEY_KP_Subtract 0xffad ++#define XKB_KEY_KP_Decimal 0xffae ++#define XKB_KEY_KP_Divide 0xffaf ++ ++#define XKB_KEY_KP_0 0xffb0 ++#define XKB_KEY_KP_1 0xffb1 ++#define XKB_KEY_KP_2 0xffb2 ++#define XKB_KEY_KP_3 0xffb3 ++#define XKB_KEY_KP_4 0xffb4 ++#define XKB_KEY_KP_5 0xffb5 ++#define XKB_KEY_KP_6 0xffb6 ++#define XKB_KEY_KP_7 0xffb7 ++#define XKB_KEY_KP_8 0xffb8 ++#define XKB_KEY_KP_9 0xffb9 ++ ++ ++ ++/* ++ * Auxiliary functions; note the duplicate definitions for left and right ++ * function keys; Sun keyboards and a few other manufacturers have such ++ * function key groups on the left and/or right sides of the keyboard. ++ * We've not found a keyboard with more than 35 function keys total. ++ */ ++ ++#define XKB_KEY_F1 0xffbe ++#define XKB_KEY_F2 0xffbf ++#define XKB_KEY_F3 0xffc0 ++#define XKB_KEY_F4 0xffc1 ++#define XKB_KEY_F5 0xffc2 ++#define XKB_KEY_F6 0xffc3 ++#define XKB_KEY_F7 0xffc4 ++#define XKB_KEY_F8 0xffc5 ++#define XKB_KEY_F9 0xffc6 ++#define XKB_KEY_F10 0xffc7 ++#define XKB_KEY_F11 0xffc8 ++#define XKB_KEY_L1 0xffc8 ++#define XKB_KEY_F12 0xffc9 ++#define XKB_KEY_L2 0xffc9 ++#define XKB_KEY_F13 0xffca ++#define XKB_KEY_L3 0xffca ++#define XKB_KEY_F14 0xffcb ++#define XKB_KEY_L4 0xffcb ++#define XKB_KEY_F15 0xffcc ++#define XKB_KEY_L5 0xffcc ++#define XKB_KEY_F16 0xffcd ++#define XKB_KEY_L6 0xffcd ++#define XKB_KEY_F17 0xffce ++#define XKB_KEY_L7 0xffce ++#define XKB_KEY_F18 0xffcf ++#define XKB_KEY_L8 0xffcf ++#define XKB_KEY_F19 0xffd0 ++#define XKB_KEY_L9 0xffd0 ++#define XKB_KEY_F20 0xffd1 ++#define XKB_KEY_L10 0xffd1 ++#define XKB_KEY_F21 0xffd2 ++#define XKB_KEY_R1 0xffd2 ++#define XKB_KEY_F22 0xffd3 ++#define XKB_KEY_R2 0xffd3 ++#define XKB_KEY_F23 0xffd4 ++#define XKB_KEY_R3 0xffd4 ++#define XKB_KEY_F24 0xffd5 ++#define XKB_KEY_R4 0xffd5 ++#define XKB_KEY_F25 0xffd6 ++#define XKB_KEY_R5 0xffd6 ++#define XKB_KEY_F26 0xffd7 ++#define XKB_KEY_R6 0xffd7 ++#define XKB_KEY_F27 0xffd8 ++#define XKB_KEY_R7 0xffd8 ++#define XKB_KEY_F28 0xffd9 ++#define XKB_KEY_R8 0xffd9 ++#define XKB_KEY_F29 0xffda ++#define XKB_KEY_R9 0xffda ++#define XKB_KEY_F30 0xffdb ++#define XKB_KEY_R10 0xffdb ++#define XKB_KEY_F31 0xffdc ++#define XKB_KEY_R11 0xffdc ++#define XKB_KEY_F32 0xffdd ++#define XKB_KEY_R12 0xffdd ++#define XKB_KEY_F33 0xffde ++#define XKB_KEY_R13 0xffde ++#define XKB_KEY_F34 0xffdf ++#define XKB_KEY_R14 0xffdf ++#define XKB_KEY_F35 0xffe0 ++#define XKB_KEY_R15 0xffe0 ++ ++/* Modifiers */ ++ ++#define XKB_KEY_Shift_L 0xffe1 /* Left shift */ ++#define XKB_KEY_Shift_R 0xffe2 /* Right shift */ ++#define XKB_KEY_Control_L 0xffe3 /* Left control */ ++#define XKB_KEY_Control_R 0xffe4 /* Right control */ ++#define XKB_KEY_Caps_Lock 0xffe5 /* Caps lock */ ++#define XKB_KEY_Shift_Lock 0xffe6 /* Shift lock */ ++ ++#define XKB_KEY_Meta_L 0xffe7 /* Left meta */ ++#define XKB_KEY_Meta_R 0xffe8 /* Right meta */ ++#define XKB_KEY_Alt_L 0xffe9 /* Left alt */ ++#define XKB_KEY_Alt_R 0xffea /* Right alt */ ++#define XKB_KEY_Super_L 0xffeb /* Left super */ ++#define XKB_KEY_Super_R 0xffec /* Right super */ ++#define XKB_KEY_Hyper_L 0xffed /* Left hyper */ ++#define XKB_KEY_Hyper_R 0xffee /* Right hyper */ ++ ++/* ++ * Keyboard (XKB) Extension function and modifier keys ++ * (from Appendix C of "The X Keyboard Extension: Protocol Specification") ++ * Byte 3 = 0xfe ++ */ ++ ++#define XKB_KEY_ISO_Lock 0xfe01 ++#define XKB_KEY_ISO_Level2_Latch 0xfe02 ++#define XKB_KEY_ISO_Level3_Shift 0xfe03 ++#define XKB_KEY_ISO_Level3_Latch 0xfe04 ++#define XKB_KEY_ISO_Level3_Lock 0xfe05 ++#define XKB_KEY_ISO_Level5_Shift 0xfe11 ++#define XKB_KEY_ISO_Level5_Latch 0xfe12 ++#define XKB_KEY_ISO_Level5_Lock 0xfe13 ++#define XKB_KEY_ISO_Group_Shift 0xff7e /* Alias for mode_switch */ ++#define XKB_KEY_ISO_Group_Latch 0xfe06 ++#define XKB_KEY_ISO_Group_Lock 0xfe07 ++#define XKB_KEY_ISO_Next_Group 0xfe08 ++#define XKB_KEY_ISO_Next_Group_Lock 0xfe09 ++#define XKB_KEY_ISO_Prev_Group 0xfe0a ++#define XKB_KEY_ISO_Prev_Group_Lock 0xfe0b ++#define XKB_KEY_ISO_First_Group 0xfe0c ++#define XKB_KEY_ISO_First_Group_Lock 0xfe0d ++#define XKB_KEY_ISO_Last_Group 0xfe0e ++#define XKB_KEY_ISO_Last_Group_Lock 0xfe0f ++ ++#define XKB_KEY_ISO_Left_Tab 0xfe20 ++#define XKB_KEY_ISO_Move_Line_Up 0xfe21 ++#define XKB_KEY_ISO_Move_Line_Down 0xfe22 ++#define XKB_KEY_ISO_Partial_Line_Up 0xfe23 ++#define XKB_KEY_ISO_Partial_Line_Down 0xfe24 ++#define XKB_KEY_ISO_Partial_Space_Left 0xfe25 ++#define XKB_KEY_ISO_Partial_Space_Right 0xfe26 ++#define XKB_KEY_ISO_Set_Margin_Left 0xfe27 ++#define XKB_KEY_ISO_Set_Margin_Right 0xfe28 ++#define XKB_KEY_ISO_Release_Margin_Left 0xfe29 ++#define XKB_KEY_ISO_Release_Margin_Right 0xfe2a ++#define XKB_KEY_ISO_Release_Both_Margins 0xfe2b ++#define XKB_KEY_ISO_Fast_Cursor_Left 0xfe2c ++#define XKB_KEY_ISO_Fast_Cursor_Right 0xfe2d ++#define XKB_KEY_ISO_Fast_Cursor_Up 0xfe2e ++#define XKB_KEY_ISO_Fast_Cursor_Down 0xfe2f ++#define XKB_KEY_ISO_Continuous_Underline 0xfe30 ++#define XKB_KEY_ISO_Discontinuous_Underline 0xfe31 ++#define XKB_KEY_ISO_Emphasize 0xfe32 ++#define XKB_KEY_ISO_Center_Object 0xfe33 ++#define XKB_KEY_ISO_Enter 0xfe34 ++ ++#define XKB_KEY_dead_grave 0xfe50 ++#define XKB_KEY_dead_acute 0xfe51 ++#define XKB_KEY_dead_circumflex 0xfe52 ++#define XKB_KEY_dead_tilde 0xfe53 ++#define XKB_KEY_dead_perispomeni 0xfe53 /* alias for dead_tilde */ ++#define XKB_KEY_dead_macron 0xfe54 ++#define XKB_KEY_dead_breve 0xfe55 ++#define XKB_KEY_dead_abovedot 0xfe56 ++#define XKB_KEY_dead_diaeresis 0xfe57 ++#define XKB_KEY_dead_abovering 0xfe58 ++#define XKB_KEY_dead_doubleacute 0xfe59 ++#define XKB_KEY_dead_caron 0xfe5a ++#define XKB_KEY_dead_cedilla 0xfe5b ++#define XKB_KEY_dead_ogonek 0xfe5c ++#define XKB_KEY_dead_iota 0xfe5d ++#define XKB_KEY_dead_voiced_sound 0xfe5e ++#define XKB_KEY_dead_semivoiced_sound 0xfe5f ++#define XKB_KEY_dead_belowdot 0xfe60 ++#define XKB_KEY_dead_hook 0xfe61 ++#define XKB_KEY_dead_horn 0xfe62 ++#define XKB_KEY_dead_stroke 0xfe63 ++#define XKB_KEY_dead_abovecomma 0xfe64 ++#define XKB_KEY_dead_psili 0xfe64 /* alias for dead_abovecomma */ ++#define XKB_KEY_dead_abovereversedcomma 0xfe65 ++#define XKB_KEY_dead_dasia 0xfe65 /* alias for dead_abovereversedcomma */ ++#define XKB_KEY_dead_doublegrave 0xfe66 ++#define XKB_KEY_dead_belowring 0xfe67 ++#define XKB_KEY_dead_belowmacron 0xfe68 ++#define XKB_KEY_dead_belowcircumflex 0xfe69 ++#define XKB_KEY_dead_belowtilde 0xfe6a ++#define XKB_KEY_dead_belowbreve 0xfe6b ++#define XKB_KEY_dead_belowdiaeresis 0xfe6c ++#define XKB_KEY_dead_invertedbreve 0xfe6d ++#define XKB_KEY_dead_belowcomma 0xfe6e ++#define XKB_KEY_dead_currency 0xfe6f ++ ++/* extra dead elements for German T3 layout */ ++#define XKB_KEY_dead_lowline 0xfe90 ++#define XKB_KEY_dead_aboveverticalline 0xfe91 ++#define XKB_KEY_dead_belowverticalline 0xfe92 ++#define XKB_KEY_dead_longsolidusoverlay 0xfe93 ++ ++/* dead vowels for universal syllable entry */ ++#define XKB_KEY_dead_a 0xfe80 ++#define XKB_KEY_dead_A 0xfe81 ++#define XKB_KEY_dead_e 0xfe82 ++#define XKB_KEY_dead_E 0xfe83 ++#define XKB_KEY_dead_i 0xfe84 ++#define XKB_KEY_dead_I 0xfe85 ++#define XKB_KEY_dead_o 0xfe86 ++#define XKB_KEY_dead_O 0xfe87 ++#define XKB_KEY_dead_u 0xfe88 ++#define XKB_KEY_dead_U 0xfe89 ++#define XKB_KEY_dead_small_schwa 0xfe8a ++#define XKB_KEY_dead_capital_schwa 0xfe8b ++ ++#define XKB_KEY_dead_greek 0xfe8c ++ ++#define XKB_KEY_First_Virtual_Screen 0xfed0 ++#define XKB_KEY_Prev_Virtual_Screen 0xfed1 ++#define XKB_KEY_Next_Virtual_Screen 0xfed2 ++#define XKB_KEY_Last_Virtual_Screen 0xfed4 ++#define XKB_KEY_Terminate_Server 0xfed5 ++ ++#define XKB_KEY_AccessX_Enable 0xfe70 ++#define XKB_KEY_AccessX_Feedback_Enable 0xfe71 ++#define XKB_KEY_RepeatKeys_Enable 0xfe72 ++#define XKB_KEY_SlowKeys_Enable 0xfe73 ++#define XKB_KEY_BounceKeys_Enable 0xfe74 ++#define XKB_KEY_StickyKeys_Enable 0xfe75 ++#define XKB_KEY_MouseKeys_Enable 0xfe76 ++#define XKB_KEY_MouseKeys_Accel_Enable 0xfe77 ++#define XKB_KEY_Overlay1_Enable 0xfe78 ++#define XKB_KEY_Overlay2_Enable 0xfe79 ++#define XKB_KEY_AudibleBell_Enable 0xfe7a ++ ++#define XKB_KEY_Pointer_Left 0xfee0 ++#define XKB_KEY_Pointer_Right 0xfee1 ++#define XKB_KEY_Pointer_Up 0xfee2 ++#define XKB_KEY_Pointer_Down 0xfee3 ++#define XKB_KEY_Pointer_UpLeft 0xfee4 ++#define XKB_KEY_Pointer_UpRight 0xfee5 ++#define XKB_KEY_Pointer_DownLeft 0xfee6 ++#define XKB_KEY_Pointer_DownRight 0xfee7 ++#define XKB_KEY_Pointer_Button_Dflt 0xfee8 ++#define XKB_KEY_Pointer_Button1 0xfee9 ++#define XKB_KEY_Pointer_Button2 0xfeea ++#define XKB_KEY_Pointer_Button3 0xfeeb ++#define XKB_KEY_Pointer_Button4 0xfeec ++#define XKB_KEY_Pointer_Button5 0xfeed ++#define XKB_KEY_Pointer_DblClick_Dflt 0xfeee ++#define XKB_KEY_Pointer_DblClick1 0xfeef ++#define XKB_KEY_Pointer_DblClick2 0xfef0 ++#define XKB_KEY_Pointer_DblClick3 0xfef1 ++#define XKB_KEY_Pointer_DblClick4 0xfef2 ++#define XKB_KEY_Pointer_DblClick5 0xfef3 ++#define XKB_KEY_Pointer_Drag_Dflt 0xfef4 ++#define XKB_KEY_Pointer_Drag1 0xfef5 ++#define XKB_KEY_Pointer_Drag2 0xfef6 ++#define XKB_KEY_Pointer_Drag3 0xfef7 ++#define XKB_KEY_Pointer_Drag4 0xfef8 ++#define XKB_KEY_Pointer_Drag5 0xfefd ++ ++#define XKB_KEY_Pointer_EnableKeys 0xfef9 ++#define XKB_KEY_Pointer_Accelerate 0xfefa ++#define XKB_KEY_Pointer_DfltBtnNext 0xfefb ++#define XKB_KEY_Pointer_DfltBtnPrev 0xfefc ++ ++/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */ ++ ++#define XKB_KEY_ch 0xfea0 ++#define XKB_KEY_Ch 0xfea1 ++#define XKB_KEY_CH 0xfea2 ++#define XKB_KEY_c_h 0xfea3 ++#define XKB_KEY_C_h 0xfea4 ++#define XKB_KEY_C_H 0xfea5 ++ ++ ++/* ++ * 3270 Terminal Keys ++ * Byte 3 = 0xfd ++ */ ++ ++#define XKB_KEY_3270_Duplicate 0xfd01 ++#define XKB_KEY_3270_FieldMark 0xfd02 ++#define XKB_KEY_3270_Right2 0xfd03 ++#define XKB_KEY_3270_Left2 0xfd04 ++#define XKB_KEY_3270_BackTab 0xfd05 ++#define XKB_KEY_3270_EraseEOF 0xfd06 ++#define XKB_KEY_3270_EraseInput 0xfd07 ++#define XKB_KEY_3270_Reset 0xfd08 ++#define XKB_KEY_3270_Quit 0xfd09 ++#define XKB_KEY_3270_PA1 0xfd0a ++#define XKB_KEY_3270_PA2 0xfd0b ++#define XKB_KEY_3270_PA3 0xfd0c ++#define XKB_KEY_3270_Test 0xfd0d ++#define XKB_KEY_3270_Attn 0xfd0e ++#define XKB_KEY_3270_CursorBlink 0xfd0f ++#define XKB_KEY_3270_AltCursor 0xfd10 ++#define XKB_KEY_3270_KeyClick 0xfd11 ++#define XKB_KEY_3270_Jump 0xfd12 ++#define XKB_KEY_3270_Ident 0xfd13 ++#define XKB_KEY_3270_Rule 0xfd14 ++#define XKB_KEY_3270_Copy 0xfd15 ++#define XKB_KEY_3270_Play 0xfd16 ++#define XKB_KEY_3270_Setup 0xfd17 ++#define XKB_KEY_3270_Record 0xfd18 ++#define XKB_KEY_3270_ChangeScreen 0xfd19 ++#define XKB_KEY_3270_DeleteWord 0xfd1a ++#define XKB_KEY_3270_ExSelect 0xfd1b ++#define XKB_KEY_3270_CursorSelect 0xfd1c ++#define XKB_KEY_3270_PrintScreen 0xfd1d ++#define XKB_KEY_3270_Enter 0xfd1e ++ ++/* ++ * Latin 1 ++ * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF) ++ * Byte 3 = 0 ++ */ ++#define XKB_KEY_space 0x0020 /* U+0020 SPACE */ ++#define XKB_KEY_exclam 0x0021 /* U+0021 EXCLAMATION MARK */ ++#define XKB_KEY_quotedbl 0x0022 /* U+0022 QUOTATION MARK */ ++#define XKB_KEY_numbersign 0x0023 /* U+0023 NUMBER SIGN */ ++#define XKB_KEY_dollar 0x0024 /* U+0024 DOLLAR SIGN */ ++#define XKB_KEY_percent 0x0025 /* U+0025 PERCENT SIGN */ ++#define XKB_KEY_ampersand 0x0026 /* U+0026 AMPERSAND */ ++#define XKB_KEY_apostrophe 0x0027 /* U+0027 APOSTROPHE */ ++#define XKB_KEY_quoteright 0x0027 /* deprecated */ ++#define XKB_KEY_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */ ++#define XKB_KEY_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */ ++#define XKB_KEY_asterisk 0x002a /* U+002A ASTERISK */ ++#define XKB_KEY_plus 0x002b /* U+002B PLUS SIGN */ ++#define XKB_KEY_comma 0x002c /* U+002C COMMA */ ++#define XKB_KEY_minus 0x002d /* U+002D HYPHEN-MINUS */ ++#define XKB_KEY_period 0x002e /* U+002E FULL STOP */ ++#define XKB_KEY_slash 0x002f /* U+002F SOLIDUS */ ++#define XKB_KEY_0 0x0030 /* U+0030 DIGIT ZERO */ ++#define XKB_KEY_1 0x0031 /* U+0031 DIGIT ONE */ ++#define XKB_KEY_2 0x0032 /* U+0032 DIGIT TWO */ ++#define XKB_KEY_3 0x0033 /* U+0033 DIGIT THREE */ ++#define XKB_KEY_4 0x0034 /* U+0034 DIGIT FOUR */ ++#define XKB_KEY_5 0x0035 /* U+0035 DIGIT FIVE */ ++#define XKB_KEY_6 0x0036 /* U+0036 DIGIT SIX */ ++#define XKB_KEY_7 0x0037 /* U+0037 DIGIT SEVEN */ ++#define XKB_KEY_8 0x0038 /* U+0038 DIGIT EIGHT */ ++#define XKB_KEY_9 0x0039 /* U+0039 DIGIT NINE */ ++#define XKB_KEY_colon 0x003a /* U+003A COLON */ ++#define XKB_KEY_semicolon 0x003b /* U+003B SEMICOLON */ ++#define XKB_KEY_less 0x003c /* U+003C LESS-THAN SIGN */ ++#define XKB_KEY_equal 0x003d /* U+003D EQUALS SIGN */ ++#define XKB_KEY_greater 0x003e /* U+003E GREATER-THAN SIGN */ ++#define XKB_KEY_question 0x003f /* U+003F QUESTION MARK */ ++#define XKB_KEY_at 0x0040 /* U+0040 COMMERCIAL AT */ ++#define XKB_KEY_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */ ++#define XKB_KEY_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */ ++#define XKB_KEY_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */ ++#define XKB_KEY_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */ ++#define XKB_KEY_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */ ++#define XKB_KEY_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */ ++#define XKB_KEY_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */ ++#define XKB_KEY_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */ ++#define XKB_KEY_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */ ++#define XKB_KEY_J 0x004a /* U+004A LATIN CAPITAL LETTER J */ ++#define XKB_KEY_K 0x004b /* U+004B LATIN CAPITAL LETTER K */ ++#define XKB_KEY_L 0x004c /* U+004C LATIN CAPITAL LETTER L */ ++#define XKB_KEY_M 0x004d /* U+004D LATIN CAPITAL LETTER M */ ++#define XKB_KEY_N 0x004e /* U+004E LATIN CAPITAL LETTER N */ ++#define XKB_KEY_O 0x004f /* U+004F LATIN CAPITAL LETTER O */ ++#define XKB_KEY_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */ ++#define XKB_KEY_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */ ++#define XKB_KEY_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */ ++#define XKB_KEY_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */ ++#define XKB_KEY_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */ ++#define XKB_KEY_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */ ++#define XKB_KEY_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */ ++#define XKB_KEY_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */ ++#define XKB_KEY_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */ ++#define XKB_KEY_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */ ++#define XKB_KEY_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */ ++#define XKB_KEY_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */ ++#define XKB_KEY_backslash 0x005c /* U+005C REVERSE SOLIDUS */ ++#define XKB_KEY_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */ ++#define XKB_KEY_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */ ++#define XKB_KEY_underscore 0x005f /* U+005F LOW LINE */ ++#define XKB_KEY_grave 0x0060 /* U+0060 GRAVE ACCENT */ ++#define XKB_KEY_quoteleft 0x0060 /* deprecated */ ++#define XKB_KEY_a 0x0061 /* U+0061 LATIN SMALL LETTER A */ ++#define XKB_KEY_b 0x0062 /* U+0062 LATIN SMALL LETTER B */ ++#define XKB_KEY_c 0x0063 /* U+0063 LATIN SMALL LETTER C */ ++#define XKB_KEY_d 0x0064 /* U+0064 LATIN SMALL LETTER D */ ++#define XKB_KEY_e 0x0065 /* U+0065 LATIN SMALL LETTER E */ ++#define XKB_KEY_f 0x0066 /* U+0066 LATIN SMALL LETTER F */ ++#define XKB_KEY_g 0x0067 /* U+0067 LATIN SMALL LETTER G */ ++#define XKB_KEY_h 0x0068 /* U+0068 LATIN SMALL LETTER H */ ++#define XKB_KEY_i 0x0069 /* U+0069 LATIN SMALL LETTER I */ ++#define XKB_KEY_j 0x006a /* U+006A LATIN SMALL LETTER J */ ++#define XKB_KEY_k 0x006b /* U+006B LATIN SMALL LETTER K */ ++#define XKB_KEY_l 0x006c /* U+006C LATIN SMALL LETTER L */ ++#define XKB_KEY_m 0x006d /* U+006D LATIN SMALL LETTER M */ ++#define XKB_KEY_n 0x006e /* U+006E LATIN SMALL LETTER N */ ++#define XKB_KEY_o 0x006f /* U+006F LATIN SMALL LETTER O */ ++#define XKB_KEY_p 0x0070 /* U+0070 LATIN SMALL LETTER P */ ++#define XKB_KEY_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */ ++#define XKB_KEY_r 0x0072 /* U+0072 LATIN SMALL LETTER R */ ++#define XKB_KEY_s 0x0073 /* U+0073 LATIN SMALL LETTER S */ ++#define XKB_KEY_t 0x0074 /* U+0074 LATIN SMALL LETTER T */ ++#define XKB_KEY_u 0x0075 /* U+0075 LATIN SMALL LETTER U */ ++#define XKB_KEY_v 0x0076 /* U+0076 LATIN SMALL LETTER V */ ++#define XKB_KEY_w 0x0077 /* U+0077 LATIN SMALL LETTER W */ ++#define XKB_KEY_x 0x0078 /* U+0078 LATIN SMALL LETTER X */ ++#define XKB_KEY_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */ ++#define XKB_KEY_z 0x007a /* U+007A LATIN SMALL LETTER Z */ ++#define XKB_KEY_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */ ++#define XKB_KEY_bar 0x007c /* U+007C VERTICAL LINE */ ++#define XKB_KEY_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */ ++#define XKB_KEY_asciitilde 0x007e /* U+007E TILDE */ ++ ++#define XKB_KEY_nobreakspace 0x00a0 /* U+00A0 NO-BREAK SPACE */ ++#define XKB_KEY_exclamdown 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */ ++#define XKB_KEY_cent 0x00a2 /* U+00A2 CENT SIGN */ ++#define XKB_KEY_sterling 0x00a3 /* U+00A3 POUND SIGN */ ++#define XKB_KEY_currency 0x00a4 /* U+00A4 CURRENCY SIGN */ ++#define XKB_KEY_yen 0x00a5 /* U+00A5 YEN SIGN */ ++#define XKB_KEY_brokenbar 0x00a6 /* U+00A6 BROKEN BAR */ ++#define XKB_KEY_section 0x00a7 /* U+00A7 SECTION SIGN */ ++#define XKB_KEY_diaeresis 0x00a8 /* U+00A8 DIAERESIS */ ++#define XKB_KEY_copyright 0x00a9 /* U+00A9 COPYRIGHT SIGN */ ++#define XKB_KEY_ordfeminine 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */ ++#define XKB_KEY_guillemotleft 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ ++#define XKB_KEY_notsign 0x00ac /* U+00AC NOT SIGN */ ++#define XKB_KEY_hyphen 0x00ad /* U+00AD SOFT HYPHEN */ ++#define XKB_KEY_registered 0x00ae /* U+00AE REGISTERED SIGN */ ++#define XKB_KEY_macron 0x00af /* U+00AF MACRON */ ++#define XKB_KEY_degree 0x00b0 /* U+00B0 DEGREE SIGN */ ++#define XKB_KEY_plusminus 0x00b1 /* U+00B1 PLUS-MINUS SIGN */ ++#define XKB_KEY_twosuperior 0x00b2 /* U+00B2 SUPERSCRIPT TWO */ ++#define XKB_KEY_threesuperior 0x00b3 /* U+00B3 SUPERSCRIPT THREE */ ++#define XKB_KEY_acute 0x00b4 /* U+00B4 ACUTE ACCENT */ ++#define XKB_KEY_mu 0x00b5 /* U+00B5 MICRO SIGN */ ++#define XKB_KEY_paragraph 0x00b6 /* U+00B6 PILCROW SIGN */ ++#define XKB_KEY_periodcentered 0x00b7 /* U+00B7 MIDDLE DOT */ ++#define XKB_KEY_cedilla 0x00b8 /* U+00B8 CEDILLA */ ++#define XKB_KEY_onesuperior 0x00b9 /* U+00B9 SUPERSCRIPT ONE */ ++#define XKB_KEY_masculine 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */ ++#define XKB_KEY_guillemotright 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ ++#define XKB_KEY_onequarter 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */ ++#define XKB_KEY_onehalf 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */ ++#define XKB_KEY_threequarters 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */ ++#define XKB_KEY_questiondown 0x00bf /* U+00BF INVERTED QUESTION MARK */ ++#define XKB_KEY_Agrave 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */ ++#define XKB_KEY_Aacute 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */ ++#define XKB_KEY_Acircumflex 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ ++#define XKB_KEY_Atilde 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */ ++#define XKB_KEY_Adiaeresis 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */ ++#define XKB_KEY_Aring 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */ ++#define XKB_KEY_AE 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */ ++#define XKB_KEY_Ccedilla 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */ ++#define XKB_KEY_Egrave 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */ ++#define XKB_KEY_Eacute 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ ++#define XKB_KEY_Ecircumflex 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ ++#define XKB_KEY_Ediaeresis 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */ ++#define XKB_KEY_Igrave 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */ ++#define XKB_KEY_Iacute 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */ ++#define XKB_KEY_Icircumflex 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ ++#define XKB_KEY_Idiaeresis 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */ ++#define XKB_KEY_ETH 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */ ++#define XKB_KEY_Eth 0x00d0 /* deprecated */ ++#define XKB_KEY_Ntilde 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */ ++#define XKB_KEY_Ograve 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */ ++#define XKB_KEY_Oacute 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */ ++#define XKB_KEY_Ocircumflex 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ ++#define XKB_KEY_Otilde 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */ ++#define XKB_KEY_Odiaeresis 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */ ++#define XKB_KEY_multiply 0x00d7 /* U+00D7 MULTIPLICATION SIGN */ ++#define XKB_KEY_Oslash 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ ++#define XKB_KEY_Ooblique 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ ++#define XKB_KEY_Ugrave 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */ ++#define XKB_KEY_Uacute 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */ ++#define XKB_KEY_Ucircumflex 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ ++#define XKB_KEY_Udiaeresis 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */ ++#define XKB_KEY_Yacute 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */ ++#define XKB_KEY_THORN 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */ ++#define XKB_KEY_Thorn 0x00de /* deprecated */ ++#define XKB_KEY_ssharp 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */ ++#define XKB_KEY_agrave 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */ ++#define XKB_KEY_aacute 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */ ++#define XKB_KEY_acircumflex 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */ ++#define XKB_KEY_atilde 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */ ++#define XKB_KEY_adiaeresis 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */ ++#define XKB_KEY_aring 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */ ++#define XKB_KEY_ae 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */ ++#define XKB_KEY_ccedilla 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */ ++#define XKB_KEY_egrave 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */ ++#define XKB_KEY_eacute 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ ++#define XKB_KEY_ecircumflex 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */ ++#define XKB_KEY_ediaeresis 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */ ++#define XKB_KEY_igrave 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */ ++#define XKB_KEY_iacute 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */ ++#define XKB_KEY_icircumflex 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */ ++#define XKB_KEY_idiaeresis 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */ ++#define XKB_KEY_eth 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */ ++#define XKB_KEY_ntilde 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */ ++#define XKB_KEY_ograve 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */ ++#define XKB_KEY_oacute 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */ ++#define XKB_KEY_ocircumflex 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */ ++#define XKB_KEY_otilde 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */ ++#define XKB_KEY_odiaeresis 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */ ++#define XKB_KEY_division 0x00f7 /* U+00F7 DIVISION SIGN */ ++#define XKB_KEY_oslash 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ ++#define XKB_KEY_ooblique 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ ++#define XKB_KEY_ugrave 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */ ++#define XKB_KEY_uacute 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */ ++#define XKB_KEY_ucircumflex 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */ ++#define XKB_KEY_udiaeresis 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */ ++#define XKB_KEY_yacute 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */ ++#define XKB_KEY_thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */ ++#define XKB_KEY_ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ ++ ++/* ++ * Latin 2 ++ * Byte 3 = 1 ++ */ ++ ++#define XKB_KEY_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ ++#define XKB_KEY_breve 0x01a2 /* U+02D8 BREVE */ ++#define XKB_KEY_Lstroke 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ ++#define XKB_KEY_Lcaron 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */ ++#define XKB_KEY_Sacute 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */ ++#define XKB_KEY_Scaron 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */ ++#define XKB_KEY_Scedilla 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */ ++#define XKB_KEY_Tcaron 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */ ++#define XKB_KEY_Zacute 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */ ++#define XKB_KEY_Zcaron 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */ ++#define XKB_KEY_Zabovedot 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++#define XKB_KEY_aogonek 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */ ++#define XKB_KEY_ogonek 0x01b2 /* U+02DB OGONEK */ ++#define XKB_KEY_lstroke 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */ ++#define XKB_KEY_lcaron 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */ ++#define XKB_KEY_sacute 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */ ++#define XKB_KEY_caron 0x01b7 /* U+02C7 CARON */ ++#define XKB_KEY_scaron 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */ ++#define XKB_KEY_scedilla 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */ ++#define XKB_KEY_tcaron 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */ ++#define XKB_KEY_zacute 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */ ++#define XKB_KEY_doubleacute 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */ ++#define XKB_KEY_zcaron 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */ ++#define XKB_KEY_zabovedot 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */ ++#define XKB_KEY_Racute 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */ ++#define XKB_KEY_Abreve 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */ ++#define XKB_KEY_Lacute 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */ ++#define XKB_KEY_Cacute 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */ ++#define XKB_KEY_Ccaron 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */ ++#define XKB_KEY_Eogonek 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */ ++#define XKB_KEY_Ecaron 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */ ++#define XKB_KEY_Dcaron 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */ ++#define XKB_KEY_Dstroke 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */ ++#define XKB_KEY_Nacute 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */ ++#define XKB_KEY_Ncaron 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */ ++#define XKB_KEY_Odoubleacute 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++#define XKB_KEY_Rcaron 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */ ++#define XKB_KEY_Uring 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */ ++#define XKB_KEY_Udoubleacute 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++#define XKB_KEY_Tcedilla 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */ ++#define XKB_KEY_racute 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */ ++#define XKB_KEY_abreve 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */ ++#define XKB_KEY_lacute 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */ ++#define XKB_KEY_cacute 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */ ++#define XKB_KEY_ccaron 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */ ++#define XKB_KEY_eogonek 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */ ++#define XKB_KEY_ecaron 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */ ++#define XKB_KEY_dcaron 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */ ++#define XKB_KEY_dstroke 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */ ++#define XKB_KEY_nacute 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */ ++#define XKB_KEY_ncaron 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */ ++#define XKB_KEY_odoubleacute 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++#define XKB_KEY_rcaron 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */ ++#define XKB_KEY_uring 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */ ++#define XKB_KEY_udoubleacute 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++#define XKB_KEY_tcedilla 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */ ++#define XKB_KEY_abovedot 0x01ff /* U+02D9 DOT ABOVE */ ++ ++/* ++ * Latin 3 ++ * Byte 3 = 2 ++ */ ++ ++#define XKB_KEY_Hstroke 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */ ++#define XKB_KEY_Hcircumflex 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++#define XKB_KEY_Iabovedot 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++#define XKB_KEY_Gbreve 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */ ++#define XKB_KEY_Jcircumflex 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++#define XKB_KEY_hstroke 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */ ++#define XKB_KEY_hcircumflex 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++#define XKB_KEY_idotless 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */ ++#define XKB_KEY_gbreve 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */ ++#define XKB_KEY_jcircumflex 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++#define XKB_KEY_Cabovedot 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++#define XKB_KEY_Ccircumflex 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++#define XKB_KEY_Gabovedot 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++#define XKB_KEY_Gcircumflex 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++#define XKB_KEY_Ubreve 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */ ++#define XKB_KEY_Scircumflex 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++#define XKB_KEY_cabovedot 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */ ++#define XKB_KEY_ccircumflex 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++#define XKB_KEY_gabovedot 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */ ++#define XKB_KEY_gcircumflex 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++#define XKB_KEY_ubreve 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */ ++#define XKB_KEY_scircumflex 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ ++ ++/* ++ * Latin 4 ++ * Byte 3 = 3 ++ */ ++ ++#define XKB_KEY_kra 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */ ++#define XKB_KEY_kappa 0x03a2 /* deprecated */ ++#define XKB_KEY_Rcedilla 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */ ++#define XKB_KEY_Itilde 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */ ++#define XKB_KEY_Lcedilla 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */ ++#define XKB_KEY_Emacron 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */ ++#define XKB_KEY_Gcedilla 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */ ++#define XKB_KEY_Tslash 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */ ++#define XKB_KEY_rcedilla 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */ ++#define XKB_KEY_itilde 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */ ++#define XKB_KEY_lcedilla 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */ ++#define XKB_KEY_emacron 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */ ++#define XKB_KEY_gcedilla 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */ ++#define XKB_KEY_tslash 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */ ++#define XKB_KEY_ENG 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */ ++#define XKB_KEY_eng 0x03bf /* U+014B LATIN SMALL LETTER ENG */ ++#define XKB_KEY_Amacron 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */ ++#define XKB_KEY_Iogonek 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */ ++#define XKB_KEY_Eabovedot 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++#define XKB_KEY_Imacron 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */ ++#define XKB_KEY_Ncedilla 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */ ++#define XKB_KEY_Omacron 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */ ++#define XKB_KEY_Kcedilla 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */ ++#define XKB_KEY_Uogonek 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */ ++#define XKB_KEY_Utilde 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */ ++#define XKB_KEY_Umacron 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */ ++#define XKB_KEY_amacron 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */ ++#define XKB_KEY_iogonek 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */ ++#define XKB_KEY_eabovedot 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */ ++#define XKB_KEY_imacron 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */ ++#define XKB_KEY_ncedilla 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */ ++#define XKB_KEY_omacron 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */ ++#define XKB_KEY_kcedilla 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */ ++#define XKB_KEY_uogonek 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */ ++#define XKB_KEY_utilde 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */ ++#define XKB_KEY_umacron 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */ ++ ++/* ++ * Latin 8 ++ */ ++#define XKB_KEY_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ ++#define XKB_KEY_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */ ++#define XKB_KEY_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ ++#define XKB_KEY_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */ ++#define XKB_KEY_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */ ++#define XKB_KEY_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */ ++#define XKB_KEY_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */ ++#define XKB_KEY_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */ ++#define XKB_KEY_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */ ++#define XKB_KEY_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */ ++#define XKB_KEY_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */ ++#define XKB_KEY_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */ ++#define XKB_KEY_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */ ++#define XKB_KEY_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */ ++#define XKB_KEY_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */ ++#define XKB_KEY_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */ ++#define XKB_KEY_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */ ++#define XKB_KEY_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */ ++#define XKB_KEY_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */ ++#define XKB_KEY_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */ ++#define XKB_KEY_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */ ++#define XKB_KEY_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */ ++#define XKB_KEY_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */ ++#define XKB_KEY_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */ ++#define XKB_KEY_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */ ++#define XKB_KEY_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */ ++ ++/* ++ * Latin 9 ++ * Byte 3 = 0x13 ++ */ ++ ++#define XKB_KEY_OE 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */ ++#define XKB_KEY_oe 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */ ++#define XKB_KEY_Ydiaeresis 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ ++/* ++ * Katakana ++ * Byte 3 = 4 ++ */ ++ ++#define XKB_KEY_overline 0x047e /* U+203E OVERLINE */ ++#define XKB_KEY_kana_fullstop 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */ ++#define XKB_KEY_kana_openingbracket 0x04a2 /* U+300C LEFT CORNER BRACKET */ ++#define XKB_KEY_kana_closingbracket 0x04a3 /* U+300D RIGHT CORNER BRACKET */ ++#define XKB_KEY_kana_comma 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */ ++#define XKB_KEY_kana_conjunctive 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */ ++#define XKB_KEY_kana_middledot 0x04a5 /* deprecated */ ++#define XKB_KEY_kana_WO 0x04a6 /* U+30F2 KATAKANA LETTER WO */ ++#define XKB_KEY_kana_a 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */ ++#define XKB_KEY_kana_i 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */ ++#define XKB_KEY_kana_u 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */ ++#define XKB_KEY_kana_e 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */ ++#define XKB_KEY_kana_o 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */ ++#define XKB_KEY_kana_ya 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */ ++#define XKB_KEY_kana_yu 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */ ++#define XKB_KEY_kana_yo 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */ ++#define XKB_KEY_kana_tsu 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */ ++#define XKB_KEY_kana_tu 0x04af /* deprecated */ ++#define XKB_KEY_prolongedsound 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++#define XKB_KEY_kana_A 0x04b1 /* U+30A2 KATAKANA LETTER A */ ++#define XKB_KEY_kana_I 0x04b2 /* U+30A4 KATAKANA LETTER I */ ++#define XKB_KEY_kana_U 0x04b3 /* U+30A6 KATAKANA LETTER U */ ++#define XKB_KEY_kana_E 0x04b4 /* U+30A8 KATAKANA LETTER E */ ++#define XKB_KEY_kana_O 0x04b5 /* U+30AA KATAKANA LETTER O */ ++#define XKB_KEY_kana_KA 0x04b6 /* U+30AB KATAKANA LETTER KA */ ++#define XKB_KEY_kana_KI 0x04b7 /* U+30AD KATAKANA LETTER KI */ ++#define XKB_KEY_kana_KU 0x04b8 /* U+30AF KATAKANA LETTER KU */ ++#define XKB_KEY_kana_KE 0x04b9 /* U+30B1 KATAKANA LETTER KE */ ++#define XKB_KEY_kana_KO 0x04ba /* U+30B3 KATAKANA LETTER KO */ ++#define XKB_KEY_kana_SA 0x04bb /* U+30B5 KATAKANA LETTER SA */ ++#define XKB_KEY_kana_SHI 0x04bc /* U+30B7 KATAKANA LETTER SI */ ++#define XKB_KEY_kana_SU 0x04bd /* U+30B9 KATAKANA LETTER SU */ ++#define XKB_KEY_kana_SE 0x04be /* U+30BB KATAKANA LETTER SE */ ++#define XKB_KEY_kana_SO 0x04bf /* U+30BD KATAKANA LETTER SO */ ++#define XKB_KEY_kana_TA 0x04c0 /* U+30BF KATAKANA LETTER TA */ ++#define XKB_KEY_kana_CHI 0x04c1 /* U+30C1 KATAKANA LETTER TI */ ++#define XKB_KEY_kana_TI 0x04c1 /* deprecated */ ++#define XKB_KEY_kana_TSU 0x04c2 /* U+30C4 KATAKANA LETTER TU */ ++#define XKB_KEY_kana_TU 0x04c2 /* deprecated */ ++#define XKB_KEY_kana_TE 0x04c3 /* U+30C6 KATAKANA LETTER TE */ ++#define XKB_KEY_kana_TO 0x04c4 /* U+30C8 KATAKANA LETTER TO */ ++#define XKB_KEY_kana_NA 0x04c5 /* U+30CA KATAKANA LETTER NA */ ++#define XKB_KEY_kana_NI 0x04c6 /* U+30CB KATAKANA LETTER NI */ ++#define XKB_KEY_kana_NU 0x04c7 /* U+30CC KATAKANA LETTER NU */ ++#define XKB_KEY_kana_NE 0x04c8 /* U+30CD KATAKANA LETTER NE */ ++#define XKB_KEY_kana_NO 0x04c9 /* U+30CE KATAKANA LETTER NO */ ++#define XKB_KEY_kana_HA 0x04ca /* U+30CF KATAKANA LETTER HA */ ++#define XKB_KEY_kana_HI 0x04cb /* U+30D2 KATAKANA LETTER HI */ ++#define XKB_KEY_kana_FU 0x04cc /* U+30D5 KATAKANA LETTER HU */ ++#define XKB_KEY_kana_HU 0x04cc /* deprecated */ ++#define XKB_KEY_kana_HE 0x04cd /* U+30D8 KATAKANA LETTER HE */ ++#define XKB_KEY_kana_HO 0x04ce /* U+30DB KATAKANA LETTER HO */ ++#define XKB_KEY_kana_MA 0x04cf /* U+30DE KATAKANA LETTER MA */ ++#define XKB_KEY_kana_MI 0x04d0 /* U+30DF KATAKANA LETTER MI */ ++#define XKB_KEY_kana_MU 0x04d1 /* U+30E0 KATAKANA LETTER MU */ ++#define XKB_KEY_kana_ME 0x04d2 /* U+30E1 KATAKANA LETTER ME */ ++#define XKB_KEY_kana_MO 0x04d3 /* U+30E2 KATAKANA LETTER MO */ ++#define XKB_KEY_kana_YA 0x04d4 /* U+30E4 KATAKANA LETTER YA */ ++#define XKB_KEY_kana_YU 0x04d5 /* U+30E6 KATAKANA LETTER YU */ ++#define XKB_KEY_kana_YO 0x04d6 /* U+30E8 KATAKANA LETTER YO */ ++#define XKB_KEY_kana_RA 0x04d7 /* U+30E9 KATAKANA LETTER RA */ ++#define XKB_KEY_kana_RI 0x04d8 /* U+30EA KATAKANA LETTER RI */ ++#define XKB_KEY_kana_RU 0x04d9 /* U+30EB KATAKANA LETTER RU */ ++#define XKB_KEY_kana_RE 0x04da /* U+30EC KATAKANA LETTER RE */ ++#define XKB_KEY_kana_RO 0x04db /* U+30ED KATAKANA LETTER RO */ ++#define XKB_KEY_kana_WA 0x04dc /* U+30EF KATAKANA LETTER WA */ ++#define XKB_KEY_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */ ++#define XKB_KEY_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ ++#define XKB_KEY_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++#define XKB_KEY_kana_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Arabic ++ * Byte 3 = 5 ++ */ ++ ++#define XKB_KEY_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */ ++#define XKB_KEY_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */ ++#define XKB_KEY_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */ ++#define XKB_KEY_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */ ++#define XKB_KEY_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */ ++#define XKB_KEY_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */ ++#define XKB_KEY_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */ ++#define XKB_KEY_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */ ++#define XKB_KEY_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */ ++#define XKB_KEY_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */ ++#define XKB_KEY_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */ ++#define XKB_KEY_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */ ++#define XKB_KEY_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */ ++#define XKB_KEY_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */ ++#define XKB_KEY_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */ ++#define XKB_KEY_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */ ++#define XKB_KEY_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */ ++#define XKB_KEY_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */ ++#define XKB_KEY_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */ ++#define XKB_KEY_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */ ++#define XKB_KEY_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */ ++#define XKB_KEY_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */ ++#define XKB_KEY_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */ ++#define XKB_KEY_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */ ++#define XKB_KEY_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */ ++#define XKB_KEY_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */ ++#define XKB_KEY_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */ ++#define XKB_KEY_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */ ++#define XKB_KEY_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */ ++#define XKB_KEY_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */ ++#define XKB_KEY_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */ ++#define XKB_KEY_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */ ++#define XKB_KEY_Arabic_maddaonalef 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */ ++#define XKB_KEY_Arabic_hamzaonalef 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamzaonwaw 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamzaunderalef 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */ ++#define XKB_KEY_Arabic_hamzaonyeh 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_alef 0x05c7 /* U+0627 ARABIC LETTER ALEF */ ++#define XKB_KEY_Arabic_beh 0x05c8 /* U+0628 ARABIC LETTER BEH */ ++#define XKB_KEY_Arabic_tehmarbuta 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */ ++#define XKB_KEY_Arabic_teh 0x05ca /* U+062A ARABIC LETTER TEH */ ++#define XKB_KEY_Arabic_theh 0x05cb /* U+062B ARABIC LETTER THEH */ ++#define XKB_KEY_Arabic_jeem 0x05cc /* U+062C ARABIC LETTER JEEM */ ++#define XKB_KEY_Arabic_hah 0x05cd /* U+062D ARABIC LETTER HAH */ ++#define XKB_KEY_Arabic_khah 0x05ce /* U+062E ARABIC LETTER KHAH */ ++#define XKB_KEY_Arabic_dal 0x05cf /* U+062F ARABIC LETTER DAL */ ++#define XKB_KEY_Arabic_thal 0x05d0 /* U+0630 ARABIC LETTER THAL */ ++#define XKB_KEY_Arabic_ra 0x05d1 /* U+0631 ARABIC LETTER REH */ ++#define XKB_KEY_Arabic_zain 0x05d2 /* U+0632 ARABIC LETTER ZAIN */ ++#define XKB_KEY_Arabic_seen 0x05d3 /* U+0633 ARABIC LETTER SEEN */ ++#define XKB_KEY_Arabic_sheen 0x05d4 /* U+0634 ARABIC LETTER SHEEN */ ++#define XKB_KEY_Arabic_sad 0x05d5 /* U+0635 ARABIC LETTER SAD */ ++#define XKB_KEY_Arabic_dad 0x05d6 /* U+0636 ARABIC LETTER DAD */ ++#define XKB_KEY_Arabic_tah 0x05d7 /* U+0637 ARABIC LETTER TAH */ ++#define XKB_KEY_Arabic_zah 0x05d8 /* U+0638 ARABIC LETTER ZAH */ ++#define XKB_KEY_Arabic_ain 0x05d9 /* U+0639 ARABIC LETTER AIN */ ++#define XKB_KEY_Arabic_ghain 0x05da /* U+063A ARABIC LETTER GHAIN */ ++#define XKB_KEY_Arabic_tatweel 0x05e0 /* U+0640 ARABIC TATWEEL */ ++#define XKB_KEY_Arabic_feh 0x05e1 /* U+0641 ARABIC LETTER FEH */ ++#define XKB_KEY_Arabic_qaf 0x05e2 /* U+0642 ARABIC LETTER QAF */ ++#define XKB_KEY_Arabic_kaf 0x05e3 /* U+0643 ARABIC LETTER KAF */ ++#define XKB_KEY_Arabic_lam 0x05e4 /* U+0644 ARABIC LETTER LAM */ ++#define XKB_KEY_Arabic_meem 0x05e5 /* U+0645 ARABIC LETTER MEEM */ ++#define XKB_KEY_Arabic_noon 0x05e6 /* U+0646 ARABIC LETTER NOON */ ++#define XKB_KEY_Arabic_ha 0x05e7 /* U+0647 ARABIC LETTER HEH */ ++#define XKB_KEY_Arabic_heh 0x05e7 /* deprecated */ ++#define XKB_KEY_Arabic_waw 0x05e8 /* U+0648 ARABIC LETTER WAW */ ++#define XKB_KEY_Arabic_alefmaksura 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */ ++#define XKB_KEY_Arabic_yeh 0x05ea /* U+064A ARABIC LETTER YEH */ ++#define XKB_KEY_Arabic_fathatan 0x05eb /* U+064B ARABIC FATHATAN */ ++#define XKB_KEY_Arabic_dammatan 0x05ec /* U+064C ARABIC DAMMATAN */ ++#define XKB_KEY_Arabic_kasratan 0x05ed /* U+064D ARABIC KASRATAN */ ++#define XKB_KEY_Arabic_fatha 0x05ee /* U+064E ARABIC FATHA */ ++#define XKB_KEY_Arabic_damma 0x05ef /* U+064F ARABIC DAMMA */ ++#define XKB_KEY_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */ ++#define XKB_KEY_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */ ++#define XKB_KEY_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */ ++#define XKB_KEY_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */ ++#define XKB_KEY_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */ ++#define XKB_KEY_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */ ++#define XKB_KEY_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */ ++#define XKB_KEY_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */ ++#define XKB_KEY_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */ ++#define XKB_KEY_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */ ++#define XKB_KEY_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */ ++#define XKB_KEY_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ ++#define XKB_KEY_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ ++#define XKB_KEY_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ ++#define XKB_KEY_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ ++#define XKB_KEY_Arabic_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Cyrillic ++ * Byte 3 = 6 ++ */ ++#define XKB_KEY_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */ ++#define XKB_KEY_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */ ++#define XKB_KEY_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */ ++#define XKB_KEY_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */ ++#define XKB_KEY_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ ++#define XKB_KEY_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */ ++#define XKB_KEY_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */ ++#define XKB_KEY_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */ ++ ++#define XKB_KEY_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */ ++#define XKB_KEY_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */ ++#define XKB_KEY_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */ ++#define XKB_KEY_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */ ++#define XKB_KEY_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */ ++#define XKB_KEY_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */ ++#define XKB_KEY_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */ ++#define XKB_KEY_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */ ++ ++#define XKB_KEY_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */ ++#define XKB_KEY_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */ ++#define XKB_KEY_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */ ++#define XKB_KEY_Ukrainian_ie 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */ ++#define XKB_KEY_Ukranian_je 0x06a4 /* deprecated */ ++#define XKB_KEY_Macedonia_dse 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */ ++#define XKB_KEY_Ukrainian_i 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++#define XKB_KEY_Ukranian_i 0x06a6 /* deprecated */ ++#define XKB_KEY_Ukrainian_yi 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */ ++#define XKB_KEY_Ukranian_yi 0x06a7 /* deprecated */ ++#define XKB_KEY_Cyrillic_je 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */ ++#define XKB_KEY_Serbian_je 0x06a8 /* deprecated */ ++#define XKB_KEY_Cyrillic_lje 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */ ++#define XKB_KEY_Serbian_lje 0x06a9 /* deprecated */ ++#define XKB_KEY_Cyrillic_nje 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */ ++#define XKB_KEY_Serbian_nje 0x06aa /* deprecated */ ++#define XKB_KEY_Serbian_tshe 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */ ++#define XKB_KEY_Macedonia_kje 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */ ++#define XKB_KEY_Ukrainian_ghe_with_upturn 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */ ++#define XKB_KEY_Byelorussian_shortu 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */ ++#define XKB_KEY_Cyrillic_dzhe 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */ ++#define XKB_KEY_Serbian_dze 0x06af /* deprecated */ ++#define XKB_KEY_numerosign 0x06b0 /* U+2116 NUMERO SIGN */ ++#define XKB_KEY_Serbian_DJE 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */ ++#define XKB_KEY_Macedonia_GJE 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */ ++#define XKB_KEY_Cyrillic_IO 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */ ++#define XKB_KEY_Ukrainian_IE 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++#define XKB_KEY_Ukranian_JE 0x06b4 /* deprecated */ ++#define XKB_KEY_Macedonia_DSE 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */ ++#define XKB_KEY_Ukrainian_I 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++#define XKB_KEY_Ukranian_I 0x06b6 /* deprecated */ ++#define XKB_KEY_Ukrainian_YI 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */ ++#define XKB_KEY_Ukranian_YI 0x06b7 /* deprecated */ ++#define XKB_KEY_Cyrillic_JE 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */ ++#define XKB_KEY_Serbian_JE 0x06b8 /* deprecated */ ++#define XKB_KEY_Cyrillic_LJE 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */ ++#define XKB_KEY_Serbian_LJE 0x06b9 /* deprecated */ ++#define XKB_KEY_Cyrillic_NJE 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */ ++#define XKB_KEY_Serbian_NJE 0x06ba /* deprecated */ ++#define XKB_KEY_Serbian_TSHE 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */ ++#define XKB_KEY_Macedonia_KJE 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */ ++#define XKB_KEY_Ukrainian_GHE_WITH_UPTURN 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ ++#define XKB_KEY_Byelorussian_SHORTU 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */ ++#define XKB_KEY_Cyrillic_DZHE 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */ ++#define XKB_KEY_Serbian_DZE 0x06bf /* deprecated */ ++#define XKB_KEY_Cyrillic_yu 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */ ++#define XKB_KEY_Cyrillic_a 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */ ++#define XKB_KEY_Cyrillic_be 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */ ++#define XKB_KEY_Cyrillic_tse 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */ ++#define XKB_KEY_Cyrillic_de 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */ ++#define XKB_KEY_Cyrillic_ie 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */ ++#define XKB_KEY_Cyrillic_ef 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */ ++#define XKB_KEY_Cyrillic_ghe 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */ ++#define XKB_KEY_Cyrillic_ha 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */ ++#define XKB_KEY_Cyrillic_i 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */ ++#define XKB_KEY_Cyrillic_shorti 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */ ++#define XKB_KEY_Cyrillic_ka 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */ ++#define XKB_KEY_Cyrillic_el 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */ ++#define XKB_KEY_Cyrillic_em 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */ ++#define XKB_KEY_Cyrillic_en 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */ ++#define XKB_KEY_Cyrillic_o 0x06cf /* U+043E CYRILLIC SMALL LETTER O */ ++#define XKB_KEY_Cyrillic_pe 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */ ++#define XKB_KEY_Cyrillic_ya 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */ ++#define XKB_KEY_Cyrillic_er 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */ ++#define XKB_KEY_Cyrillic_es 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */ ++#define XKB_KEY_Cyrillic_te 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */ ++#define XKB_KEY_Cyrillic_u 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */ ++#define XKB_KEY_Cyrillic_zhe 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */ ++#define XKB_KEY_Cyrillic_ve 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */ ++#define XKB_KEY_Cyrillic_softsign 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */ ++#define XKB_KEY_Cyrillic_yeru 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */ ++#define XKB_KEY_Cyrillic_ze 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */ ++#define XKB_KEY_Cyrillic_sha 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */ ++#define XKB_KEY_Cyrillic_e 0x06dc /* U+044D CYRILLIC SMALL LETTER E */ ++#define XKB_KEY_Cyrillic_shcha 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */ ++#define XKB_KEY_Cyrillic_che 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */ ++#define XKB_KEY_Cyrillic_hardsign 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */ ++#define XKB_KEY_Cyrillic_YU 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */ ++#define XKB_KEY_Cyrillic_A 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */ ++#define XKB_KEY_Cyrillic_BE 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */ ++#define XKB_KEY_Cyrillic_TSE 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */ ++#define XKB_KEY_Cyrillic_DE 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */ ++#define XKB_KEY_Cyrillic_IE 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */ ++#define XKB_KEY_Cyrillic_EF 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */ ++#define XKB_KEY_Cyrillic_GHE 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */ ++#define XKB_KEY_Cyrillic_HA 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */ ++#define XKB_KEY_Cyrillic_I 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */ ++#define XKB_KEY_Cyrillic_SHORTI 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */ ++#define XKB_KEY_Cyrillic_KA 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */ ++#define XKB_KEY_Cyrillic_EL 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */ ++#define XKB_KEY_Cyrillic_EM 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */ ++#define XKB_KEY_Cyrillic_EN 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */ ++#define XKB_KEY_Cyrillic_O 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */ ++#define XKB_KEY_Cyrillic_PE 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */ ++#define XKB_KEY_Cyrillic_YA 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */ ++#define XKB_KEY_Cyrillic_ER 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */ ++#define XKB_KEY_Cyrillic_ES 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */ ++#define XKB_KEY_Cyrillic_TE 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */ ++#define XKB_KEY_Cyrillic_U 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */ ++#define XKB_KEY_Cyrillic_ZHE 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */ ++#define XKB_KEY_Cyrillic_VE 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */ ++#define XKB_KEY_Cyrillic_SOFTSIGN 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */ ++#define XKB_KEY_Cyrillic_YERU 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */ ++#define XKB_KEY_Cyrillic_ZE 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */ ++#define XKB_KEY_Cyrillic_SHA 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */ ++#define XKB_KEY_Cyrillic_E 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */ ++#define XKB_KEY_Cyrillic_SHCHA 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ ++#define XKB_KEY_Cyrillic_CHE 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */ ++#define XKB_KEY_Cyrillic_HARDSIGN 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */ ++ ++/* ++ * Greek ++ * (based on an early draft of, and not quite identical to, ISO/IEC 8859-7) ++ * Byte 3 = 7 ++ */ ++ ++#define XKB_KEY_Greek_ALPHAaccent 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++#define XKB_KEY_Greek_EPSILONaccent 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++#define XKB_KEY_Greek_ETAaccent 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */ ++#define XKB_KEY_Greek_IOTAaccent 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */ ++#define XKB_KEY_Greek_IOTAdieresis 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++#define XKB_KEY_Greek_IOTAdiaeresis 0x07a5 /* old typo */ ++#define XKB_KEY_Greek_OMICRONaccent 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++#define XKB_KEY_Greek_UPSILONaccent 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++#define XKB_KEY_Greek_UPSILONdieresis 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++#define XKB_KEY_Greek_OMEGAaccent 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++#define XKB_KEY_Greek_accentdieresis 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */ ++#define XKB_KEY_Greek_horizbar 0x07af /* U+2015 HORIZONTAL BAR */ ++#define XKB_KEY_Greek_alphaaccent 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */ ++#define XKB_KEY_Greek_epsilonaccent 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */ ++#define XKB_KEY_Greek_etaaccent 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */ ++#define XKB_KEY_Greek_iotaaccent 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */ ++#define XKB_KEY_Greek_iotadieresis 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++#define XKB_KEY_Greek_iotaaccentdieresis 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++#define XKB_KEY_Greek_omicronaccent 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */ ++#define XKB_KEY_Greek_upsilonaccent 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */ ++#define XKB_KEY_Greek_upsilondieresis 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++#define XKB_KEY_Greek_upsilonaccentdieresis 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++#define XKB_KEY_Greek_omegaaccent 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */ ++#define XKB_KEY_Greek_ALPHA 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */ ++#define XKB_KEY_Greek_BETA 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */ ++#define XKB_KEY_Greek_GAMMA 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */ ++#define XKB_KEY_Greek_DELTA 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */ ++#define XKB_KEY_Greek_EPSILON 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */ ++#define XKB_KEY_Greek_ZETA 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */ ++#define XKB_KEY_Greek_ETA 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */ ++#define XKB_KEY_Greek_THETA 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */ ++#define XKB_KEY_Greek_IOTA 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */ ++#define XKB_KEY_Greek_KAPPA 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */ ++#define XKB_KEY_Greek_LAMDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ ++#define XKB_KEY_Greek_LAMBDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ ++#define XKB_KEY_Greek_MU 0x07cc /* U+039C GREEK CAPITAL LETTER MU */ ++#define XKB_KEY_Greek_NU 0x07cd /* U+039D GREEK CAPITAL LETTER NU */ ++#define XKB_KEY_Greek_XI 0x07ce /* U+039E GREEK CAPITAL LETTER XI */ ++#define XKB_KEY_Greek_OMICRON 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */ ++#define XKB_KEY_Greek_PI 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */ ++#define XKB_KEY_Greek_RHO 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */ ++#define XKB_KEY_Greek_SIGMA 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */ ++#define XKB_KEY_Greek_TAU 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */ ++#define XKB_KEY_Greek_UPSILON 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */ ++#define XKB_KEY_Greek_PHI 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */ ++#define XKB_KEY_Greek_CHI 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */ ++#define XKB_KEY_Greek_PSI 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */ ++#define XKB_KEY_Greek_OMEGA 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */ ++#define XKB_KEY_Greek_alpha 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */ ++#define XKB_KEY_Greek_beta 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */ ++#define XKB_KEY_Greek_gamma 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */ ++#define XKB_KEY_Greek_delta 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */ ++#define XKB_KEY_Greek_epsilon 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */ ++#define XKB_KEY_Greek_zeta 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */ ++#define XKB_KEY_Greek_eta 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */ ++#define XKB_KEY_Greek_theta 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */ ++#define XKB_KEY_Greek_iota 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */ ++#define XKB_KEY_Greek_kappa 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */ ++#define XKB_KEY_Greek_lamda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ ++#define XKB_KEY_Greek_lambda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ ++#define XKB_KEY_Greek_mu 0x07ec /* U+03BC GREEK SMALL LETTER MU */ ++#define XKB_KEY_Greek_nu 0x07ed /* U+03BD GREEK SMALL LETTER NU */ ++#define XKB_KEY_Greek_xi 0x07ee /* U+03BE GREEK SMALL LETTER XI */ ++#define XKB_KEY_Greek_omicron 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */ ++#define XKB_KEY_Greek_pi 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */ ++#define XKB_KEY_Greek_rho 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */ ++#define XKB_KEY_Greek_sigma 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */ ++#define XKB_KEY_Greek_finalsmallsigma 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */ ++#define XKB_KEY_Greek_tau 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */ ++#define XKB_KEY_Greek_upsilon 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */ ++#define XKB_KEY_Greek_phi 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */ ++#define XKB_KEY_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */ ++#define XKB_KEY_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */ ++#define XKB_KEY_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */ ++#define XKB_KEY_Greek_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Technical ++ * (from the DEC VT330/VT420 Technical Character Set, http://vt100.net/charsets/technical.html) ++ * Byte 3 = 8 ++ */ ++ ++#define XKB_KEY_leftradical 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */ ++#define XKB_KEY_topleftradical 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/ ++#define XKB_KEY_horizconnector 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/ ++#define XKB_KEY_topintegral 0x08a4 /* U+2320 TOP HALF INTEGRAL */ ++#define XKB_KEY_botintegral 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */ ++#define XKB_KEY_vertconnector 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/ ++#define XKB_KEY_topleftsqbracket 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */ ++#define XKB_KEY_botleftsqbracket 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */ ++#define XKB_KEY_toprightsqbracket 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */ ++#define XKB_KEY_botrightsqbracket 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */ ++#define XKB_KEY_topleftparens 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */ ++#define XKB_KEY_botleftparens 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */ ++#define XKB_KEY_toprightparens 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */ ++#define XKB_KEY_botrightparens 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */ ++#define XKB_KEY_leftmiddlecurlybrace 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */ ++#define XKB_KEY_rightmiddlecurlybrace 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */ ++#define XKB_KEY_topleftsummation 0x08b1 ++#define XKB_KEY_botleftsummation 0x08b2 ++#define XKB_KEY_topvertsummationconnector 0x08b3 ++#define XKB_KEY_botvertsummationconnector 0x08b4 ++#define XKB_KEY_toprightsummation 0x08b5 ++#define XKB_KEY_botrightsummation 0x08b6 ++#define XKB_KEY_rightmiddlesummation 0x08b7 ++#define XKB_KEY_lessthanequal 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */ ++#define XKB_KEY_notequal 0x08bd /* U+2260 NOT EQUAL TO */ ++#define XKB_KEY_greaterthanequal 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */ ++#define XKB_KEY_integral 0x08bf /* U+222B INTEGRAL */ ++#define XKB_KEY_therefore 0x08c0 /* U+2234 THEREFORE */ ++#define XKB_KEY_variation 0x08c1 /* U+221D PROPORTIONAL TO */ ++#define XKB_KEY_infinity 0x08c2 /* U+221E INFINITY */ ++#define XKB_KEY_nabla 0x08c5 /* U+2207 NABLA */ ++#define XKB_KEY_approximate 0x08c8 /* U+223C TILDE OPERATOR */ ++#define XKB_KEY_similarequal 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */ ++#define XKB_KEY_ifonlyif 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */ ++#define XKB_KEY_implies 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */ ++#define XKB_KEY_identical 0x08cf /* U+2261 IDENTICAL TO */ ++#define XKB_KEY_radical 0x08d6 /* U+221A SQUARE ROOT */ ++#define XKB_KEY_includedin 0x08da /* U+2282 SUBSET OF */ ++#define XKB_KEY_includes 0x08db /* U+2283 SUPERSET OF */ ++#define XKB_KEY_intersection 0x08dc /* U+2229 INTERSECTION */ ++#define XKB_KEY_union 0x08dd /* U+222A UNION */ ++#define XKB_KEY_logicaland 0x08de /* U+2227 LOGICAL AND */ ++#define XKB_KEY_logicalor 0x08df /* U+2228 LOGICAL OR */ ++#define XKB_KEY_partialderivative 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */ ++#define XKB_KEY_function 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */ ++#define XKB_KEY_leftarrow 0x08fb /* U+2190 LEFTWARDS ARROW */ ++#define XKB_KEY_uparrow 0x08fc /* U+2191 UPWARDS ARROW */ ++#define XKB_KEY_rightarrow 0x08fd /* U+2192 RIGHTWARDS ARROW */ ++#define XKB_KEY_downarrow 0x08fe /* U+2193 DOWNWARDS ARROW */ ++ ++/* ++ * Special ++ * (from the DEC VT100 Special Graphics Character Set) ++ * Byte 3 = 9 ++ */ ++ ++#define XKB_KEY_blank 0x09df ++#define XKB_KEY_soliddiamond 0x09e0 /* U+25C6 BLACK DIAMOND */ ++#define XKB_KEY_checkerboard 0x09e1 /* U+2592 MEDIUM SHADE */ ++#define XKB_KEY_ht 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */ ++#define XKB_KEY_ff 0x09e3 /* U+240C SYMBOL FOR FORM FEED */ ++#define XKB_KEY_cr 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */ ++#define XKB_KEY_lf 0x09e5 /* U+240A SYMBOL FOR LINE FEED */ ++#define XKB_KEY_nl 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */ ++#define XKB_KEY_vt 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */ ++#define XKB_KEY_lowrightcorner 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */ ++#define XKB_KEY_uprightcorner 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */ ++#define XKB_KEY_upleftcorner 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++#define XKB_KEY_lowleftcorner 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */ ++#define XKB_KEY_crossinglines 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++#define XKB_KEY_horizlinescan1 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */ ++#define XKB_KEY_horizlinescan3 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */ ++#define XKB_KEY_horizlinescan5 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */ ++#define XKB_KEY_horizlinescan7 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */ ++#define XKB_KEY_horizlinescan9 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */ ++#define XKB_KEY_leftt 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++#define XKB_KEY_rightt 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++#define XKB_KEY_bott 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++#define XKB_KEY_topt 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++#define XKB_KEY_vertbar 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ ++ ++/* ++ * Publishing ++ * (these are probably from a long forgotten DEC Publishing ++ * font that once shipped with DECwrite) ++ * Byte 3 = 0x0a ++ */ ++ ++#define XKB_KEY_emspace 0x0aa1 /* U+2003 EM SPACE */ ++#define XKB_KEY_enspace 0x0aa2 /* U+2002 EN SPACE */ ++#define XKB_KEY_em3space 0x0aa3 /* U+2004 THREE-PER-EM SPACE */ ++#define XKB_KEY_em4space 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */ ++#define XKB_KEY_digitspace 0x0aa5 /* U+2007 FIGURE SPACE */ ++#define XKB_KEY_punctspace 0x0aa6 /* U+2008 PUNCTUATION SPACE */ ++#define XKB_KEY_thinspace 0x0aa7 /* U+2009 THIN SPACE */ ++#define XKB_KEY_hairspace 0x0aa8 /* U+200A HAIR SPACE */ ++#define XKB_KEY_emdash 0x0aa9 /* U+2014 EM DASH */ ++#define XKB_KEY_endash 0x0aaa /* U+2013 EN DASH */ ++#define XKB_KEY_signifblank 0x0aac /*(U+2423 OPEN BOX)*/ ++#define XKB_KEY_ellipsis 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */ ++#define XKB_KEY_doubbaselinedot 0x0aaf /* U+2025 TWO DOT LEADER */ ++#define XKB_KEY_onethird 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */ ++#define XKB_KEY_twothirds 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */ ++#define XKB_KEY_onefifth 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */ ++#define XKB_KEY_twofifths 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */ ++#define XKB_KEY_threefifths 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */ ++#define XKB_KEY_fourfifths 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */ ++#define XKB_KEY_onesixth 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */ ++#define XKB_KEY_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */ ++#define XKB_KEY_careof 0x0ab8 /* U+2105 CARE OF */ ++#define XKB_KEY_figdash 0x0abb /* U+2012 FIGURE DASH */ ++#define XKB_KEY_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/ ++#define XKB_KEY_decimalpoint 0x0abd /*(U+002E FULL STOP)*/ ++#define XKB_KEY_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/ ++#define XKB_KEY_marker 0x0abf ++#define XKB_KEY_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */ ++#define XKB_KEY_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */ ++#define XKB_KEY_fiveeighths 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */ ++#define XKB_KEY_seveneighths 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */ ++#define XKB_KEY_trademark 0x0ac9 /* U+2122 TRADE MARK SIGN */ ++#define XKB_KEY_signaturemark 0x0aca /*(U+2613 SALTIRE)*/ ++#define XKB_KEY_trademarkincircle 0x0acb ++#define XKB_KEY_leftopentriangle 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/ ++#define XKB_KEY_rightopentriangle 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/ ++#define XKB_KEY_emopencircle 0x0ace /*(U+25CB WHITE CIRCLE)*/ ++#define XKB_KEY_emopenrectangle 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/ ++#define XKB_KEY_leftsinglequotemark 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */ ++#define XKB_KEY_rightsinglequotemark 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */ ++#define XKB_KEY_leftdoublequotemark 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */ ++#define XKB_KEY_rightdoublequotemark 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */ ++#define XKB_KEY_prescription 0x0ad4 /* U+211E PRESCRIPTION TAKE */ ++#define XKB_KEY_permille 0x0ad5 /* U+2030 PER MILLE SIGN */ ++#define XKB_KEY_minutes 0x0ad6 /* U+2032 PRIME */ ++#define XKB_KEY_seconds 0x0ad7 /* U+2033 DOUBLE PRIME */ ++#define XKB_KEY_latincross 0x0ad9 /* U+271D LATIN CROSS */ ++#define XKB_KEY_hexagram 0x0ada ++#define XKB_KEY_filledrectbullet 0x0adb /*(U+25AC BLACK RECTANGLE)*/ ++#define XKB_KEY_filledlefttribullet 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/ ++#define XKB_KEY_filledrighttribullet 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/ ++#define XKB_KEY_emfilledcircle 0x0ade /*(U+25CF BLACK CIRCLE)*/ ++#define XKB_KEY_emfilledrect 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/ ++#define XKB_KEY_enopencircbullet 0x0ae0 /*(U+25E6 WHITE BULLET)*/ ++#define XKB_KEY_enopensquarebullet 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/ ++#define XKB_KEY_openrectbullet 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/ ++#define XKB_KEY_opentribulletup 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/ ++#define XKB_KEY_opentribulletdown 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/ ++#define XKB_KEY_openstar 0x0ae5 /*(U+2606 WHITE STAR)*/ ++#define XKB_KEY_enfilledcircbullet 0x0ae6 /*(U+2022 BULLET)*/ ++#define XKB_KEY_enfilledsqbullet 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/ ++#define XKB_KEY_filledtribulletup 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/ ++#define XKB_KEY_filledtribulletdown 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/ ++#define XKB_KEY_leftpointer 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/ ++#define XKB_KEY_rightpointer 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/ ++#define XKB_KEY_club 0x0aec /* U+2663 BLACK CLUB SUIT */ ++#define XKB_KEY_diamond 0x0aed /* U+2666 BLACK DIAMOND SUIT */ ++#define XKB_KEY_heart 0x0aee /* U+2665 BLACK HEART SUIT */ ++#define XKB_KEY_maltesecross 0x0af0 /* U+2720 MALTESE CROSS */ ++#define XKB_KEY_dagger 0x0af1 /* U+2020 DAGGER */ ++#define XKB_KEY_doubledagger 0x0af2 /* U+2021 DOUBLE DAGGER */ ++#define XKB_KEY_checkmark 0x0af3 /* U+2713 CHECK MARK */ ++#define XKB_KEY_ballotcross 0x0af4 /* U+2717 BALLOT X */ ++#define XKB_KEY_musicalsharp 0x0af5 /* U+266F MUSIC SHARP SIGN */ ++#define XKB_KEY_musicalflat 0x0af6 /* U+266D MUSIC FLAT SIGN */ ++#define XKB_KEY_malesymbol 0x0af7 /* U+2642 MALE SIGN */ ++#define XKB_KEY_femalesymbol 0x0af8 /* U+2640 FEMALE SIGN */ ++#define XKB_KEY_telephone 0x0af9 /* U+260E BLACK TELEPHONE */ ++#define XKB_KEY_telephonerecorder 0x0afa /* U+2315 TELEPHONE RECORDER */ ++#define XKB_KEY_phonographcopyright 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */ ++#define XKB_KEY_caret 0x0afc /* U+2038 CARET */ ++#define XKB_KEY_singlelowquotemark 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */ ++#define XKB_KEY_doublelowquotemark 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */ ++#define XKB_KEY_cursor 0x0aff ++ ++/* ++ * APL ++ * Byte 3 = 0x0b ++ */ ++ ++#define XKB_KEY_leftcaret 0x0ba3 /*(U+003C LESS-THAN SIGN)*/ ++#define XKB_KEY_rightcaret 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/ ++#define XKB_KEY_downcaret 0x0ba8 /*(U+2228 LOGICAL OR)*/ ++#define XKB_KEY_upcaret 0x0ba9 /*(U+2227 LOGICAL AND)*/ ++#define XKB_KEY_overbar 0x0bc0 /*(U+00AF MACRON)*/ ++#define XKB_KEY_downtack 0x0bc2 /* U+22A4 DOWN TACK */ ++#define XKB_KEY_upshoe 0x0bc3 /*(U+2229 INTERSECTION)*/ ++#define XKB_KEY_downstile 0x0bc4 /* U+230A LEFT FLOOR */ ++#define XKB_KEY_underbar 0x0bc6 /*(U+005F LOW LINE)*/ ++#define XKB_KEY_jot 0x0bca /* U+2218 RING OPERATOR */ ++#define XKB_KEY_quad 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */ ++#define XKB_KEY_uptack 0x0bce /* U+22A5 UP TACK */ ++#define XKB_KEY_circle 0x0bcf /* U+25CB WHITE CIRCLE */ ++#define XKB_KEY_upstile 0x0bd3 /* U+2308 LEFT CEILING */ ++#define XKB_KEY_downshoe 0x0bd6 /*(U+222A UNION)*/ ++#define XKB_KEY_rightshoe 0x0bd8 /*(U+2283 SUPERSET OF)*/ ++#define XKB_KEY_leftshoe 0x0bda /*(U+2282 SUBSET OF)*/ ++#define XKB_KEY_lefttack 0x0bdc /* U+22A3 LEFT TACK */ ++#define XKB_KEY_righttack 0x0bfc /* U+22A2 RIGHT TACK */ ++ ++/* ++ * Hebrew ++ * Byte 3 = 0x0c ++ */ ++ ++#define XKB_KEY_hebrew_doublelowline 0x0cdf /* U+2017 DOUBLE LOW LINE */ ++#define XKB_KEY_hebrew_aleph 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */ ++#define XKB_KEY_hebrew_bet 0x0ce1 /* U+05D1 HEBREW LETTER BET */ ++#define XKB_KEY_hebrew_beth 0x0ce1 /* deprecated */ ++#define XKB_KEY_hebrew_gimel 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */ ++#define XKB_KEY_hebrew_gimmel 0x0ce2 /* deprecated */ ++#define XKB_KEY_hebrew_dalet 0x0ce3 /* U+05D3 HEBREW LETTER DALET */ ++#define XKB_KEY_hebrew_daleth 0x0ce3 /* deprecated */ ++#define XKB_KEY_hebrew_he 0x0ce4 /* U+05D4 HEBREW LETTER HE */ ++#define XKB_KEY_hebrew_waw 0x0ce5 /* U+05D5 HEBREW LETTER VAV */ ++#define XKB_KEY_hebrew_zain 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */ ++#define XKB_KEY_hebrew_zayin 0x0ce6 /* deprecated */ ++#define XKB_KEY_hebrew_chet 0x0ce7 /* U+05D7 HEBREW LETTER HET */ ++#define XKB_KEY_hebrew_het 0x0ce7 /* deprecated */ ++#define XKB_KEY_hebrew_tet 0x0ce8 /* U+05D8 HEBREW LETTER TET */ ++#define XKB_KEY_hebrew_teth 0x0ce8 /* deprecated */ ++#define XKB_KEY_hebrew_yod 0x0ce9 /* U+05D9 HEBREW LETTER YOD */ ++#define XKB_KEY_hebrew_finalkaph 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */ ++#define XKB_KEY_hebrew_kaph 0x0ceb /* U+05DB HEBREW LETTER KAF */ ++#define XKB_KEY_hebrew_lamed 0x0cec /* U+05DC HEBREW LETTER LAMED */ ++#define XKB_KEY_hebrew_finalmem 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */ ++#define XKB_KEY_hebrew_mem 0x0cee /* U+05DE HEBREW LETTER MEM */ ++#define XKB_KEY_hebrew_finalnun 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */ ++#define XKB_KEY_hebrew_nun 0x0cf0 /* U+05E0 HEBREW LETTER NUN */ ++#define XKB_KEY_hebrew_samech 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */ ++#define XKB_KEY_hebrew_samekh 0x0cf1 /* deprecated */ ++#define XKB_KEY_hebrew_ayin 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */ ++#define XKB_KEY_hebrew_finalpe 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */ ++#define XKB_KEY_hebrew_pe 0x0cf4 /* U+05E4 HEBREW LETTER PE */ ++#define XKB_KEY_hebrew_finalzade 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */ ++#define XKB_KEY_hebrew_finalzadi 0x0cf5 /* deprecated */ ++#define XKB_KEY_hebrew_zade 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */ ++#define XKB_KEY_hebrew_zadi 0x0cf6 /* deprecated */ ++#define XKB_KEY_hebrew_qoph 0x0cf7 /* U+05E7 HEBREW LETTER QOF */ ++#define XKB_KEY_hebrew_kuf 0x0cf7 /* deprecated */ ++#define XKB_KEY_hebrew_resh 0x0cf8 /* U+05E8 HEBREW LETTER RESH */ ++#define XKB_KEY_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */ ++#define XKB_KEY_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */ ++#define XKB_KEY_hebrew_taf 0x0cfa /* deprecated */ ++#define XKB_KEY_Hebrew_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Thai ++ * Byte 3 = 0x0d ++ */ ++ ++#define XKB_KEY_Thai_kokai 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */ ++#define XKB_KEY_Thai_khokhai 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */ ++#define XKB_KEY_Thai_khokhuat 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */ ++#define XKB_KEY_Thai_khokhwai 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */ ++#define XKB_KEY_Thai_khokhon 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */ ++#define XKB_KEY_Thai_khorakhang 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */ ++#define XKB_KEY_Thai_ngongu 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */ ++#define XKB_KEY_Thai_chochan 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */ ++#define XKB_KEY_Thai_choching 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */ ++#define XKB_KEY_Thai_chochang 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */ ++#define XKB_KEY_Thai_soso 0x0dab /* U+0E0B THAI CHARACTER SO SO */ ++#define XKB_KEY_Thai_chochoe 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */ ++#define XKB_KEY_Thai_yoying 0x0dad /* U+0E0D THAI CHARACTER YO YING */ ++#define XKB_KEY_Thai_dochada 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */ ++#define XKB_KEY_Thai_topatak 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */ ++#define XKB_KEY_Thai_thothan 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */ ++#define XKB_KEY_Thai_thonangmontho 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */ ++#define XKB_KEY_Thai_thophuthao 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */ ++#define XKB_KEY_Thai_nonen 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */ ++#define XKB_KEY_Thai_dodek 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */ ++#define XKB_KEY_Thai_totao 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */ ++#define XKB_KEY_Thai_thothung 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */ ++#define XKB_KEY_Thai_thothahan 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */ ++#define XKB_KEY_Thai_thothong 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */ ++#define XKB_KEY_Thai_nonu 0x0db9 /* U+0E19 THAI CHARACTER NO NU */ ++#define XKB_KEY_Thai_bobaimai 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */ ++#define XKB_KEY_Thai_popla 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */ ++#define XKB_KEY_Thai_phophung 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */ ++#define XKB_KEY_Thai_fofa 0x0dbd /* U+0E1D THAI CHARACTER FO FA */ ++#define XKB_KEY_Thai_phophan 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */ ++#define XKB_KEY_Thai_fofan 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */ ++#define XKB_KEY_Thai_phosamphao 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */ ++#define XKB_KEY_Thai_moma 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */ ++#define XKB_KEY_Thai_yoyak 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */ ++#define XKB_KEY_Thai_rorua 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */ ++#define XKB_KEY_Thai_ru 0x0dc4 /* U+0E24 THAI CHARACTER RU */ ++#define XKB_KEY_Thai_loling 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */ ++#define XKB_KEY_Thai_lu 0x0dc6 /* U+0E26 THAI CHARACTER LU */ ++#define XKB_KEY_Thai_wowaen 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */ ++#define XKB_KEY_Thai_sosala 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */ ++#define XKB_KEY_Thai_sorusi 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */ ++#define XKB_KEY_Thai_sosua 0x0dca /* U+0E2A THAI CHARACTER SO SUA */ ++#define XKB_KEY_Thai_hohip 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */ ++#define XKB_KEY_Thai_lochula 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */ ++#define XKB_KEY_Thai_oang 0x0dcd /* U+0E2D THAI CHARACTER O ANG */ ++#define XKB_KEY_Thai_honokhuk 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */ ++#define XKB_KEY_Thai_paiyannoi 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */ ++#define XKB_KEY_Thai_saraa 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */ ++#define XKB_KEY_Thai_maihanakat 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */ ++#define XKB_KEY_Thai_saraaa 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */ ++#define XKB_KEY_Thai_saraam 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */ ++#define XKB_KEY_Thai_sarai 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */ ++#define XKB_KEY_Thai_saraii 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */ ++#define XKB_KEY_Thai_saraue 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */ ++#define XKB_KEY_Thai_sarauee 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */ ++#define XKB_KEY_Thai_sarau 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */ ++#define XKB_KEY_Thai_sarauu 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */ ++#define XKB_KEY_Thai_phinthu 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */ ++#define XKB_KEY_Thai_maihanakat_maitho 0x0dde ++#define XKB_KEY_Thai_baht 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */ ++#define XKB_KEY_Thai_sarae 0x0de0 /* U+0E40 THAI CHARACTER SARA E */ ++#define XKB_KEY_Thai_saraae 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */ ++#define XKB_KEY_Thai_sarao 0x0de2 /* U+0E42 THAI CHARACTER SARA O */ ++#define XKB_KEY_Thai_saraaimaimuan 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */ ++#define XKB_KEY_Thai_saraaimaimalai 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */ ++#define XKB_KEY_Thai_lakkhangyao 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */ ++#define XKB_KEY_Thai_maiyamok 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */ ++#define XKB_KEY_Thai_maitaikhu 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */ ++#define XKB_KEY_Thai_maiek 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */ ++#define XKB_KEY_Thai_maitho 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */ ++#define XKB_KEY_Thai_maitri 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */ ++#define XKB_KEY_Thai_maichattawa 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */ ++#define XKB_KEY_Thai_thanthakhat 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */ ++#define XKB_KEY_Thai_nikhahit 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */ ++#define XKB_KEY_Thai_leksun 0x0df0 /* U+0E50 THAI DIGIT ZERO */ ++#define XKB_KEY_Thai_leknung 0x0df1 /* U+0E51 THAI DIGIT ONE */ ++#define XKB_KEY_Thai_leksong 0x0df2 /* U+0E52 THAI DIGIT TWO */ ++#define XKB_KEY_Thai_leksam 0x0df3 /* U+0E53 THAI DIGIT THREE */ ++#define XKB_KEY_Thai_leksi 0x0df4 /* U+0E54 THAI DIGIT FOUR */ ++#define XKB_KEY_Thai_lekha 0x0df5 /* U+0E55 THAI DIGIT FIVE */ ++#define XKB_KEY_Thai_lekhok 0x0df6 /* U+0E56 THAI DIGIT SIX */ ++#define XKB_KEY_Thai_lekchet 0x0df7 /* U+0E57 THAI DIGIT SEVEN */ ++#define XKB_KEY_Thai_lekpaet 0x0df8 /* U+0E58 THAI DIGIT EIGHT */ ++#define XKB_KEY_Thai_lekkao 0x0df9 /* U+0E59 THAI DIGIT NINE */ ++ ++/* ++ * Korean ++ * Byte 3 = 0x0e ++ */ ++ ++ ++#define XKB_KEY_Hangul 0xff31 /* Hangul start/stop(toggle) */ ++#define XKB_KEY_Hangul_Start 0xff32 /* Hangul start */ ++#define XKB_KEY_Hangul_End 0xff33 /* Hangul end, English start */ ++#define XKB_KEY_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */ ++#define XKB_KEY_Hangul_Jamo 0xff35 /* Hangul Jamo mode */ ++#define XKB_KEY_Hangul_Romaja 0xff36 /* Hangul Romaja mode */ ++#define XKB_KEY_Hangul_Codeinput 0xff37 /* Hangul code input mode */ ++#define XKB_KEY_Hangul_Jeonja 0xff38 /* Jeonja mode */ ++#define XKB_KEY_Hangul_Banja 0xff39 /* Banja mode */ ++#define XKB_KEY_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */ ++#define XKB_KEY_Hangul_PostHanja 0xff3b /* Post Hanja conversion */ ++#define XKB_KEY_Hangul_SingleCandidate 0xff3c /* Single candidate */ ++#define XKB_KEY_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ ++#define XKB_KEY_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ ++#define XKB_KEY_Hangul_Special 0xff3f /* Special symbols */ ++#define XKB_KEY_Hangul_switch 0xff7e /* Alias for mode_switch */ ++ ++/* Hangul Consonant Characters */ ++#define XKB_KEY_Hangul_Kiyeog 0x0ea1 ++#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2 ++#define XKB_KEY_Hangul_KiyeogSios 0x0ea3 ++#define XKB_KEY_Hangul_Nieun 0x0ea4 ++#define XKB_KEY_Hangul_NieunJieuj 0x0ea5 ++#define XKB_KEY_Hangul_NieunHieuh 0x0ea6 ++#define XKB_KEY_Hangul_Dikeud 0x0ea7 ++#define XKB_KEY_Hangul_SsangDikeud 0x0ea8 ++#define XKB_KEY_Hangul_Rieul 0x0ea9 ++#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa ++#define XKB_KEY_Hangul_RieulMieum 0x0eab ++#define XKB_KEY_Hangul_RieulPieub 0x0eac ++#define XKB_KEY_Hangul_RieulSios 0x0ead ++#define XKB_KEY_Hangul_RieulTieut 0x0eae ++#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf ++#define XKB_KEY_Hangul_RieulHieuh 0x0eb0 ++#define XKB_KEY_Hangul_Mieum 0x0eb1 ++#define XKB_KEY_Hangul_Pieub 0x0eb2 ++#define XKB_KEY_Hangul_SsangPieub 0x0eb3 ++#define XKB_KEY_Hangul_PieubSios 0x0eb4 ++#define XKB_KEY_Hangul_Sios 0x0eb5 ++#define XKB_KEY_Hangul_SsangSios 0x0eb6 ++#define XKB_KEY_Hangul_Ieung 0x0eb7 ++#define XKB_KEY_Hangul_Jieuj 0x0eb8 ++#define XKB_KEY_Hangul_SsangJieuj 0x0eb9 ++#define XKB_KEY_Hangul_Cieuc 0x0eba ++#define XKB_KEY_Hangul_Khieuq 0x0ebb ++#define XKB_KEY_Hangul_Tieut 0x0ebc ++#define XKB_KEY_Hangul_Phieuf 0x0ebd ++#define XKB_KEY_Hangul_Hieuh 0x0ebe ++ ++/* Hangul Vowel Characters */ ++#define XKB_KEY_Hangul_A 0x0ebf ++#define XKB_KEY_Hangul_AE 0x0ec0 ++#define XKB_KEY_Hangul_YA 0x0ec1 ++#define XKB_KEY_Hangul_YAE 0x0ec2 ++#define XKB_KEY_Hangul_EO 0x0ec3 ++#define XKB_KEY_Hangul_E 0x0ec4 ++#define XKB_KEY_Hangul_YEO 0x0ec5 ++#define XKB_KEY_Hangul_YE 0x0ec6 ++#define XKB_KEY_Hangul_O 0x0ec7 ++#define XKB_KEY_Hangul_WA 0x0ec8 ++#define XKB_KEY_Hangul_WAE 0x0ec9 ++#define XKB_KEY_Hangul_OE 0x0eca ++#define XKB_KEY_Hangul_YO 0x0ecb ++#define XKB_KEY_Hangul_U 0x0ecc ++#define XKB_KEY_Hangul_WEO 0x0ecd ++#define XKB_KEY_Hangul_WE 0x0ece ++#define XKB_KEY_Hangul_WI 0x0ecf ++#define XKB_KEY_Hangul_YU 0x0ed0 ++#define XKB_KEY_Hangul_EU 0x0ed1 ++#define XKB_KEY_Hangul_YI 0x0ed2 ++#define XKB_KEY_Hangul_I 0x0ed3 ++ ++/* Hangul syllable-final (JongSeong) Characters */ ++#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4 ++#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5 ++#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6 ++#define XKB_KEY_Hangul_J_Nieun 0x0ed7 ++#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8 ++#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9 ++#define XKB_KEY_Hangul_J_Dikeud 0x0eda ++#define XKB_KEY_Hangul_J_Rieul 0x0edb ++#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc ++#define XKB_KEY_Hangul_J_RieulMieum 0x0edd ++#define XKB_KEY_Hangul_J_RieulPieub 0x0ede ++#define XKB_KEY_Hangul_J_RieulSios 0x0edf ++#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0 ++#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1 ++#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2 ++#define XKB_KEY_Hangul_J_Mieum 0x0ee3 ++#define XKB_KEY_Hangul_J_Pieub 0x0ee4 ++#define XKB_KEY_Hangul_J_PieubSios 0x0ee5 ++#define XKB_KEY_Hangul_J_Sios 0x0ee6 ++#define XKB_KEY_Hangul_J_SsangSios 0x0ee7 ++#define XKB_KEY_Hangul_J_Ieung 0x0ee8 ++#define XKB_KEY_Hangul_J_Jieuj 0x0ee9 ++#define XKB_KEY_Hangul_J_Cieuc 0x0eea ++#define XKB_KEY_Hangul_J_Khieuq 0x0eeb ++#define XKB_KEY_Hangul_J_Tieut 0x0eec ++#define XKB_KEY_Hangul_J_Phieuf 0x0eed ++#define XKB_KEY_Hangul_J_Hieuh 0x0eee ++ ++/* Ancient Hangul Consonant Characters */ ++#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef ++#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0 ++#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1 ++#define XKB_KEY_Hangul_PanSios 0x0ef2 ++#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3 ++#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4 ++#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5 ++ ++/* Ancient Hangul Vowel Characters */ ++#define XKB_KEY_Hangul_AraeA 0x0ef6 ++#define XKB_KEY_Hangul_AraeAE 0x0ef7 ++ ++/* Ancient Hangul syllable-final (JongSeong) Characters */ ++#define XKB_KEY_Hangul_J_PanSios 0x0ef8 ++#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9 ++#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa ++ ++/* Korean currency symbol */ ++#define XKB_KEY_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/ ++ ++ ++/* ++ * Armenian ++ */ ++ ++#define XKB_KEY_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */ ++#define XKB_KEY_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */ ++#define XKB_KEY_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */ ++#define XKB_KEY_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */ ++#define XKB_KEY_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */ ++#define XKB_KEY_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */ ++#define XKB_KEY_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */ ++#define XKB_KEY_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ ++#define XKB_KEY_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ ++#define XKB_KEY_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ ++#define XKB_KEY_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ ++#define XKB_KEY_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */ ++#define XKB_KEY_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */ ++#define XKB_KEY_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */ ++#define XKB_KEY_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */ ++#define XKB_KEY_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */ ++#define XKB_KEY_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */ ++#define XKB_KEY_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */ ++#define XKB_KEY_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */ ++#define XKB_KEY_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */ ++#define XKB_KEY_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */ ++#define XKB_KEY_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */ ++#define XKB_KEY_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */ ++#define XKB_KEY_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */ ++#define XKB_KEY_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */ ++#define XKB_KEY_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */ ++#define XKB_KEY_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */ ++#define XKB_KEY_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */ ++#define XKB_KEY_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */ ++#define XKB_KEY_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */ ++#define XKB_KEY_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */ ++#define XKB_KEY_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */ ++#define XKB_KEY_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */ ++#define XKB_KEY_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */ ++#define XKB_KEY_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */ ++#define XKB_KEY_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */ ++#define XKB_KEY_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */ ++#define XKB_KEY_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */ ++#define XKB_KEY_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */ ++#define XKB_KEY_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */ ++#define XKB_KEY_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */ ++#define XKB_KEY_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */ ++#define XKB_KEY_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */ ++#define XKB_KEY_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */ ++#define XKB_KEY_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */ ++#define XKB_KEY_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */ ++#define XKB_KEY_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */ ++#define XKB_KEY_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */ ++#define XKB_KEY_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */ ++#define XKB_KEY_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */ ++#define XKB_KEY_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */ ++#define XKB_KEY_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */ ++#define XKB_KEY_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */ ++#define XKB_KEY_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */ ++#define XKB_KEY_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */ ++#define XKB_KEY_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */ ++#define XKB_KEY_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */ ++#define XKB_KEY_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */ ++#define XKB_KEY_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */ ++#define XKB_KEY_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */ ++#define XKB_KEY_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */ ++#define XKB_KEY_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */ ++#define XKB_KEY_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */ ++#define XKB_KEY_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */ ++#define XKB_KEY_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */ ++#define XKB_KEY_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */ ++#define XKB_KEY_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */ ++#define XKB_KEY_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */ ++#define XKB_KEY_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */ ++#define XKB_KEY_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */ ++#define XKB_KEY_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */ ++#define XKB_KEY_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */ ++#define XKB_KEY_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */ ++#define XKB_KEY_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */ ++#define XKB_KEY_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */ ++#define XKB_KEY_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */ ++#define XKB_KEY_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */ ++#define XKB_KEY_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */ ++#define XKB_KEY_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */ ++#define XKB_KEY_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */ ++#define XKB_KEY_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */ ++#define XKB_KEY_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */ ++#define XKB_KEY_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */ ++#define XKB_KEY_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */ ++#define XKB_KEY_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */ ++#define XKB_KEY_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */ ++#define XKB_KEY_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */ ++#define XKB_KEY_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */ ++#define XKB_KEY_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */ ++#define XKB_KEY_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */ ++ ++/* ++ * Georgian ++ */ ++ ++#define XKB_KEY_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */ ++#define XKB_KEY_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */ ++#define XKB_KEY_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */ ++#define XKB_KEY_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */ ++#define XKB_KEY_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */ ++#define XKB_KEY_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */ ++#define XKB_KEY_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */ ++#define XKB_KEY_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */ ++#define XKB_KEY_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */ ++#define XKB_KEY_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */ ++#define XKB_KEY_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */ ++#define XKB_KEY_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */ ++#define XKB_KEY_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */ ++#define XKB_KEY_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */ ++#define XKB_KEY_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */ ++#define XKB_KEY_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */ ++#define XKB_KEY_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */ ++#define XKB_KEY_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */ ++#define XKB_KEY_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */ ++#define XKB_KEY_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */ ++#define XKB_KEY_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */ ++#define XKB_KEY_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */ ++#define XKB_KEY_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */ ++#define XKB_KEY_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */ ++#define XKB_KEY_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */ ++#define XKB_KEY_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */ ++#define XKB_KEY_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */ ++#define XKB_KEY_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */ ++#define XKB_KEY_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */ ++#define XKB_KEY_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */ ++#define XKB_KEY_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */ ++#define XKB_KEY_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */ ++#define XKB_KEY_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */ ++#define XKB_KEY_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */ ++#define XKB_KEY_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */ ++#define XKB_KEY_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */ ++#define XKB_KEY_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */ ++#define XKB_KEY_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */ ++#define XKB_KEY_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */ ++ ++/* ++ * Azeri (and other Turkic or Caucasian languages) ++ */ ++ ++/* latin */ ++#define XKB_KEY_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */ ++#define XKB_KEY_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */ ++#define XKB_KEY_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */ ++#define XKB_KEY_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */ ++#define XKB_KEY_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */ ++#define XKB_KEY_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ ++#define XKB_KEY_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */ ++#define XKB_KEY_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */ ++#define XKB_KEY_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */ ++#define XKB_KEY_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */ ++#define XKB_KEY_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */ ++#define XKB_KEY_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */ ++#define XKB_KEY_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */ ++#define XKB_KEY_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */ ++#define XKB_KEY_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */ ++#define XKB_KEY_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */ ++/* those are not really Caucasus */ ++/* For Inupiak */ ++#define XKB_KEY_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */ ++#define XKB_KEY_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */ ++ ++/* ++ * Vietnamese ++ */ ++ ++#define XKB_KEY_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */ ++#define XKB_KEY_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */ ++#define XKB_KEY_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */ ++#define XKB_KEY_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */ ++#define XKB_KEY_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ ++#define XKB_KEY_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */ ++#define XKB_KEY_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ ++#define XKB_KEY_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */ ++#define XKB_KEY_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ ++#define XKB_KEY_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ ++#define XKB_KEY_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ ++#define XKB_KEY_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */ ++#define XKB_KEY_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ ++#define XKB_KEY_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ ++#define XKB_KEY_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */ ++#define XKB_KEY_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */ ++#define XKB_KEY_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */ ++#define XKB_KEY_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */ ++#define XKB_KEY_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */ ++#define XKB_KEY_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */ ++#define XKB_KEY_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */ ++#define XKB_KEY_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */ ++#define XKB_KEY_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */ ++#define XKB_KEY_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */ ++#define XKB_KEY_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */ ++#define XKB_KEY_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */ ++#define XKB_KEY_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */ ++#define XKB_KEY_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */ ++#define XKB_KEY_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ ++#define XKB_KEY_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */ ++#define XKB_KEY_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ ++#define XKB_KEY_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */ ++#define XKB_KEY_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */ ++#define XKB_KEY_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */ ++#define XKB_KEY_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ ++#define XKB_KEY_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ ++#define XKB_KEY_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */ ++#define XKB_KEY_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */ ++#define XKB_KEY_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */ ++#define XKB_KEY_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */ ++#define XKB_KEY_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ ++#define XKB_KEY_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */ ++#define XKB_KEY_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ ++#define XKB_KEY_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */ ++#define XKB_KEY_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */ ++#define XKB_KEY_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */ ++#define XKB_KEY_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ ++#define XKB_KEY_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ ++#define XKB_KEY_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */ ++#define XKB_KEY_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */ ++#define XKB_KEY_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ ++#define XKB_KEY_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */ ++#define XKB_KEY_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */ ++#define XKB_KEY_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */ ++#define XKB_KEY_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ ++#define XKB_KEY_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ ++#define XKB_KEY_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */ ++#define XKB_KEY_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */ ++ ++ ++#define XKB_KEY_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */ ++#define XKB_KEY_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */ ++#define XKB_KEY_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */ ++#define XKB_KEY_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */ ++#define XKB_KEY_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */ ++#define XKB_KEY_MillSign 0x10020a5 /* U+20A5 MILL SIGN */ ++#define XKB_KEY_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */ ++#define XKB_KEY_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */ ++#define XKB_KEY_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */ ++#define XKB_KEY_WonSign 0x10020a9 /* U+20A9 WON SIGN */ ++#define XKB_KEY_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */ ++#define XKB_KEY_DongSign 0x10020ab /* U+20AB DONG SIGN */ ++#define XKB_KEY_EuroSign 0x20ac /* U+20AC EURO SIGN */ ++ ++/* one, two and three are defined above. */ ++#define XKB_KEY_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */ ++#define XKB_KEY_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */ ++#define XKB_KEY_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */ ++#define XKB_KEY_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */ ++#define XKB_KEY_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */ ++#define XKB_KEY_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */ ++#define XKB_KEY_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */ ++#define XKB_KEY_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */ ++#define XKB_KEY_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */ ++#define XKB_KEY_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */ ++#define XKB_KEY_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */ ++#define XKB_KEY_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */ ++#define XKB_KEY_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */ ++#define XKB_KEY_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */ ++#define XKB_KEY_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */ ++#define XKB_KEY_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */ ++#define XKB_KEY_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */ ++#define XKB_KEY_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */ ++#define XKB_KEY_emptyset 0x1002205 /* U+2205 NULL SET */ ++#define XKB_KEY_elementof 0x1002208 /* U+2208 ELEMENT OF */ ++#define XKB_KEY_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */ ++#define XKB_KEY_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */ ++#define XKB_KEY_squareroot 0x100221A /* U+221A SQUARE ROOT */ ++#define XKB_KEY_cuberoot 0x100221B /* U+221B CUBE ROOT */ ++#define XKB_KEY_fourthroot 0x100221C /* U+221C FOURTH ROOT */ ++#define XKB_KEY_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */ ++#define XKB_KEY_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */ ++#define XKB_KEY_because 0x1002235 /* U+2235 BECAUSE */ ++#define XKB_KEY_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */ ++#define XKB_KEY_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */ ++#define XKB_KEY_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */ ++#define XKB_KEY_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */ ++ ++#define XKB_KEY_braille_dot_1 0xfff1 ++#define XKB_KEY_braille_dot_2 0xfff2 ++#define XKB_KEY_braille_dot_3 0xfff3 ++#define XKB_KEY_braille_dot_4 0xfff4 ++#define XKB_KEY_braille_dot_5 0xfff5 ++#define XKB_KEY_braille_dot_6 0xfff6 ++#define XKB_KEY_braille_dot_7 0xfff7 ++#define XKB_KEY_braille_dot_8 0xfff8 ++#define XKB_KEY_braille_dot_9 0xfff9 ++#define XKB_KEY_braille_dot_10 0xfffa ++#define XKB_KEY_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */ ++#define XKB_KEY_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */ ++#define XKB_KEY_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */ ++#define XKB_KEY_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */ ++#define XKB_KEY_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */ ++#define XKB_KEY_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */ ++#define XKB_KEY_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */ ++#define XKB_KEY_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */ ++#define XKB_KEY_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */ ++#define XKB_KEY_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */ ++#define XKB_KEY_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */ ++#define XKB_KEY_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */ ++#define XKB_KEY_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */ ++#define XKB_KEY_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */ ++#define XKB_KEY_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */ ++#define XKB_KEY_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */ ++#define XKB_KEY_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */ ++#define XKB_KEY_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */ ++#define XKB_KEY_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */ ++#define XKB_KEY_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */ ++#define XKB_KEY_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */ ++#define XKB_KEY_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */ ++#define XKB_KEY_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */ ++#define XKB_KEY_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */ ++#define XKB_KEY_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */ ++#define XKB_KEY_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */ ++#define XKB_KEY_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */ ++#define XKB_KEY_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */ ++#define XKB_KEY_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */ ++#define XKB_KEY_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */ ++#define XKB_KEY_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */ ++#define XKB_KEY_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */ ++#define XKB_KEY_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */ ++#define XKB_KEY_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */ ++#define XKB_KEY_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */ ++#define XKB_KEY_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */ ++#define XKB_KEY_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */ ++#define XKB_KEY_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */ ++#define XKB_KEY_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */ ++#define XKB_KEY_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */ ++#define XKB_KEY_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */ ++#define XKB_KEY_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */ ++#define XKB_KEY_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */ ++#define XKB_KEY_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */ ++#define XKB_KEY_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */ ++#define XKB_KEY_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */ ++#define XKB_KEY_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */ ++#define XKB_KEY_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */ ++#define XKB_KEY_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */ ++#define XKB_KEY_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */ ++#define XKB_KEY_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */ ++#define XKB_KEY_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */ ++#define XKB_KEY_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */ ++#define XKB_KEY_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */ ++#define XKB_KEY_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */ ++#define XKB_KEY_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */ ++#define XKB_KEY_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */ ++#define XKB_KEY_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */ ++#define XKB_KEY_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */ ++#define XKB_KEY_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */ ++#define XKB_KEY_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */ ++#define XKB_KEY_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */ ++#define XKB_KEY_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */ ++#define XKB_KEY_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */ ++#define XKB_KEY_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */ ++#define XKB_KEY_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */ ++#define XKB_KEY_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */ ++#define XKB_KEY_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */ ++#define XKB_KEY_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */ ++#define XKB_KEY_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */ ++#define XKB_KEY_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */ ++#define XKB_KEY_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */ ++#define XKB_KEY_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */ ++#define XKB_KEY_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */ ++#define XKB_KEY_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */ ++#define XKB_KEY_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */ ++#define XKB_KEY_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */ ++#define XKB_KEY_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */ ++#define XKB_KEY_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */ ++#define XKB_KEY_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */ ++#define XKB_KEY_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */ ++#define XKB_KEY_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */ ++#define XKB_KEY_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */ ++#define XKB_KEY_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */ ++#define XKB_KEY_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */ ++#define XKB_KEY_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */ ++#define XKB_KEY_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */ ++#define XKB_KEY_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */ ++#define XKB_KEY_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */ ++#define XKB_KEY_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */ ++#define XKB_KEY_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */ ++#define XKB_KEY_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */ ++#define XKB_KEY_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */ ++#define XKB_KEY_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */ ++#define XKB_KEY_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */ ++#define XKB_KEY_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */ ++#define XKB_KEY_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */ ++#define XKB_KEY_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */ ++#define XKB_KEY_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */ ++#define XKB_KEY_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */ ++#define XKB_KEY_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */ ++#define XKB_KEY_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */ ++#define XKB_KEY_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */ ++#define XKB_KEY_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */ ++#define XKB_KEY_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */ ++#define XKB_KEY_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */ ++#define XKB_KEY_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */ ++#define XKB_KEY_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */ ++#define XKB_KEY_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */ ++#define XKB_KEY_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */ ++#define XKB_KEY_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */ ++#define XKB_KEY_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */ ++#define XKB_KEY_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */ ++#define XKB_KEY_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */ ++#define XKB_KEY_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */ ++#define XKB_KEY_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */ ++#define XKB_KEY_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */ ++#define XKB_KEY_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */ ++#define XKB_KEY_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */ ++#define XKB_KEY_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */ ++#define XKB_KEY_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */ ++#define XKB_KEY_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */ ++#define XKB_KEY_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */ ++#define XKB_KEY_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */ ++#define XKB_KEY_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */ ++#define XKB_KEY_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */ ++#define XKB_KEY_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */ ++#define XKB_KEY_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */ ++#define XKB_KEY_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */ ++#define XKB_KEY_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */ ++#define XKB_KEY_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */ ++#define XKB_KEY_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */ ++#define XKB_KEY_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */ ++#define XKB_KEY_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */ ++#define XKB_KEY_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */ ++#define XKB_KEY_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */ ++#define XKB_KEY_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */ ++#define XKB_KEY_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */ ++#define XKB_KEY_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */ ++#define XKB_KEY_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */ ++#define XKB_KEY_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */ ++#define XKB_KEY_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */ ++#define XKB_KEY_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */ ++#define XKB_KEY_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */ ++#define XKB_KEY_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */ ++#define XKB_KEY_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */ ++#define XKB_KEY_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */ ++#define XKB_KEY_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */ ++#define XKB_KEY_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */ ++#define XKB_KEY_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */ ++#define XKB_KEY_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */ ++#define XKB_KEY_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */ ++#define XKB_KEY_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */ ++#define XKB_KEY_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */ ++#define XKB_KEY_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */ ++#define XKB_KEY_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */ ++#define XKB_KEY_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */ ++#define XKB_KEY_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */ ++#define XKB_KEY_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */ ++#define XKB_KEY_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */ ++#define XKB_KEY_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */ ++#define XKB_KEY_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */ ++#define XKB_KEY_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */ ++#define XKB_KEY_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */ ++#define XKB_KEY_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */ ++#define XKB_KEY_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */ ++#define XKB_KEY_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */ ++#define XKB_KEY_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */ ++#define XKB_KEY_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */ ++#define XKB_KEY_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */ ++#define XKB_KEY_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */ ++#define XKB_KEY_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */ ++#define XKB_KEY_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */ ++#define XKB_KEY_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */ ++#define XKB_KEY_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */ ++#define XKB_KEY_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */ ++#define XKB_KEY_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */ ++#define XKB_KEY_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */ ++#define XKB_KEY_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */ ++#define XKB_KEY_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */ ++#define XKB_KEY_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */ ++#define XKB_KEY_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */ ++#define XKB_KEY_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */ ++#define XKB_KEY_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */ ++#define XKB_KEY_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */ ++#define XKB_KEY_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */ ++#define XKB_KEY_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */ ++#define XKB_KEY_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */ ++#define XKB_KEY_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */ ++#define XKB_KEY_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */ ++#define XKB_KEY_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */ ++#define XKB_KEY_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */ ++#define XKB_KEY_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */ ++#define XKB_KEY_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */ ++#define XKB_KEY_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */ ++#define XKB_KEY_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */ ++#define XKB_KEY_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */ ++#define XKB_KEY_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */ ++#define XKB_KEY_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */ ++#define XKB_KEY_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */ ++#define XKB_KEY_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */ ++#define XKB_KEY_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */ ++#define XKB_KEY_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */ ++#define XKB_KEY_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */ ++#define XKB_KEY_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */ ++#define XKB_KEY_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */ ++#define XKB_KEY_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */ ++#define XKB_KEY_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */ ++#define XKB_KEY_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */ ++#define XKB_KEY_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */ ++#define XKB_KEY_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */ ++#define XKB_KEY_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */ ++#define XKB_KEY_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */ ++#define XKB_KEY_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */ ++#define XKB_KEY_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */ ++#define XKB_KEY_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */ ++#define XKB_KEY_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */ ++#define XKB_KEY_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */ ++#define XKB_KEY_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */ ++#define XKB_KEY_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */ ++#define XKB_KEY_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */ ++#define XKB_KEY_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */ ++#define XKB_KEY_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */ ++#define XKB_KEY_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */ ++#define XKB_KEY_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */ ++#define XKB_KEY_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */ ++#define XKB_KEY_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */ ++#define XKB_KEY_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */ ++#define XKB_KEY_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */ ++#define XKB_KEY_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */ ++#define XKB_KEY_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */ ++#define XKB_KEY_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */ ++#define XKB_KEY_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */ ++#define XKB_KEY_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */ ++#define XKB_KEY_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */ ++#define XKB_KEY_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */ ++#define XKB_KEY_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */ ++#define XKB_KEY_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */ ++#define XKB_KEY_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */ ++#define XKB_KEY_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */ ++#define XKB_KEY_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */ ++#define XKB_KEY_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */ ++#define XKB_KEY_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */ ++#define XKB_KEY_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */ ++#define XKB_KEY_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */ ++#define XKB_KEY_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */ ++#define XKB_KEY_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */ ++#define XKB_KEY_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */ ++#define XKB_KEY_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */ ++#define XKB_KEY_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */ ++#define XKB_KEY_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */ ++#define XKB_KEY_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */ ++#define XKB_KEY_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */ ++#define XKB_KEY_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */ ++#define XKB_KEY_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */ ++#define XKB_KEY_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */ ++ ++/* ++ * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf) ++ * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html ++ */ ++ ++#define XKB_KEY_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */ ++#define XKB_KEY_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */ ++#define XKB_KEY_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */ ++#define XKB_KEY_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */ ++#define XKB_KEY_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */ ++#define XKB_KEY_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */ ++#define XKB_KEY_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */ ++#define XKB_KEY_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */ ++#define XKB_KEY_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */ ++#define XKB_KEY_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */ ++#define XKB_KEY_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */ ++#define XKB_KEY_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */ ++#define XKB_KEY_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */ ++#define XKB_KEY_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */ ++#define XKB_KEY_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */ ++#define XKB_KEY_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */ ++#define XKB_KEY_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */ ++#define XKB_KEY_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */ ++#define XKB_KEY_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */ ++#define XKB_KEY_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */ ++#define XKB_KEY_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */ ++#define XKB_KEY_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */ ++#define XKB_KEY_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */ ++#define XKB_KEY_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */ ++#define XKB_KEY_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */ ++#define XKB_KEY_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */ ++#define XKB_KEY_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */ ++#define XKB_KEY_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */ ++#define XKB_KEY_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */ ++#define XKB_KEY_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */ ++#define XKB_KEY_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */ ++#define XKB_KEY_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */ ++#define XKB_KEY_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */ ++#define XKB_KEY_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */ ++#define XKB_KEY_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */ ++#define XKB_KEY_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */ ++#define XKB_KEY_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */ ++#define XKB_KEY_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */ ++#define XKB_KEY_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */ ++#define XKB_KEY_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */ ++#define XKB_KEY_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */ ++#define XKB_KEY_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */ ++#define XKB_KEY_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */ ++#define XKB_KEY_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */ ++#define XKB_KEY_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */ ++#define XKB_KEY_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */ ++#define XKB_KEY_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */ ++#define XKB_KEY_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */ ++#define XKB_KEY_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */ ++#define XKB_KEY_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */ ++#define XKB_KEY_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */ ++#define XKB_KEY_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */ ++#define XKB_KEY_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */ ++#define XKB_KEY_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */ ++#define XKB_KEY_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */ ++#define XKB_KEY_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */ ++#define XKB_KEY_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */ ++#define XKB_KEY_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */ ++#define XKB_KEY_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */ ++#define XKB_KEY_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */ ++#define XKB_KEY_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */ ++#define XKB_KEY_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */ ++#define XKB_KEY_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */ ++#define XKB_KEY_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */ ++#define XKB_KEY_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */ ++#define XKB_KEY_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */ ++#define XKB_KEY_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */ ++#define XKB_KEY_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */ ++#define XKB_KEY_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */ ++#define XKB_KEY_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */ ++#define XKB_KEY_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */ ++#define XKB_KEY_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */ ++#define XKB_KEY_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */ ++#define XKB_KEY_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ ++#define XKB_KEY_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ ++#define XKB_KEY_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */ ++#define XKB_KEY_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */ ++#define XKB_KEY_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */ ++#define XKB_KEY_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */ ++#define XKB_KEY_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */ ++/* ++ * XFree86 vendor specific keysyms. ++ * ++ * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. ++ * ++ * When adding new entries, the xc/lib/XKeysymDB file should also be ++ * updated to make the new entries visible to Xlib. ++ */ ++ ++/* ++ * ModeLock ++ * ++ * This one is old, and not really used any more since XKB offers this ++ * functionality. ++ */ ++ ++#define XKB_KEY_XF86ModeLock 0x1008FF01 /* Mode Switch Lock */ ++ ++/* ++ * Note, 0x1008FF07 - 0x1008FF0F are free and should be used for misc new ++ * keysyms that don't fit into any of the groups below. ++ * ++ * 0x1008FF64, 0x1008FF6F, 0x1008FF71, 0x1008FF83 are no longer used, ++ * and should be used first for new keysyms. ++ * ++ * Check in keysymdef.h for generic symbols before adding new XFree86-specific ++ * symbols here. ++ * ++ * X.Org will not be adding to the XF86 set of keysyms, though they have ++ * been adopted and are considered a "standard" part of X keysym definitions. ++ * XFree86 never properly commented these keysyms, so we have done our ++ * best to explain the semantic meaning of these keys. ++ * ++ * XFree86 has removed their mail archives of the period, that might have ++ * shed more light on some of these definitions. Until/unless we resurrect ++ * these archives, these are from memory and usage. ++ */ ++ ++ ++/* Backlight controls. */ ++#define XKB_KEY_XF86MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ ++#define XKB_KEY_XF86MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ ++#define XKB_KEY_XF86KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ ++#define XKB_KEY_XF86KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ ++#define XKB_KEY_XF86KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ ++ ++/* ++ * Keys found on some "Internet" keyboards. ++ */ ++#define XKB_KEY_XF86Standby 0x1008FF10 /* System into standby mode */ ++#define XKB_KEY_XF86AudioLowerVolume 0x1008FF11 /* Volume control down */ ++#define XKB_KEY_XF86AudioMute 0x1008FF12 /* Mute sound from the system */ ++#define XKB_KEY_XF86AudioRaiseVolume 0x1008FF13 /* Volume control up */ ++#define XKB_KEY_XF86AudioPlay 0x1008FF14 /* Start playing of audio > */ ++#define XKB_KEY_XF86AudioStop 0x1008FF15 /* Stop playing audio */ ++#define XKB_KEY_XF86AudioPrev 0x1008FF16 /* Previous track */ ++#define XKB_KEY_XF86AudioNext 0x1008FF17 /* Next track */ ++#define XKB_KEY_XF86HomePage 0x1008FF18 /* Display user's home page */ ++#define XKB_KEY_XF86Mail 0x1008FF19 /* Invoke user's mail program */ ++#define XKB_KEY_XF86Start 0x1008FF1A /* Start application */ ++#define XKB_KEY_XF86Search 0x1008FF1B /* Search */ ++#define XKB_KEY_XF86AudioRecord 0x1008FF1C /* Record audio application */ ++ ++/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ ++#define XKB_KEY_XF86Calculator 0x1008FF1D /* Invoke calculator program */ ++#define XKB_KEY_XF86Memo 0x1008FF1E /* Invoke Memo taking program */ ++#define XKB_KEY_XF86ToDoList 0x1008FF1F /* Invoke To Do List program */ ++#define XKB_KEY_XF86Calendar 0x1008FF20 /* Invoke Calendar program */ ++#define XKB_KEY_XF86PowerDown 0x1008FF21 /* Deep sleep the system */ ++#define XKB_KEY_XF86ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ ++#define XKB_KEY_XF86RockerUp 0x1008FF23 /* Rocker switches exist up */ ++#define XKB_KEY_XF86RockerDown 0x1008FF24 /* and down */ ++#define XKB_KEY_XF86RockerEnter 0x1008FF25 /* and let you press them */ ++ ++/* Some more "Internet" keyboard symbols */ ++#define XKB_KEY_XF86Back 0x1008FF26 /* Like back on a browser */ ++#define XKB_KEY_XF86Forward 0x1008FF27 /* Like forward on a browser */ ++#define XKB_KEY_XF86Stop 0x1008FF28 /* Stop current operation */ ++#define XKB_KEY_XF86Refresh 0x1008FF29 /* Refresh the page */ ++#define XKB_KEY_XF86PowerOff 0x1008FF2A /* Power off system entirely */ ++#define XKB_KEY_XF86WakeUp 0x1008FF2B /* Wake up system from sleep */ ++#define XKB_KEY_XF86Eject 0x1008FF2C /* Eject device (e.g. DVD) */ ++#define XKB_KEY_XF86ScreenSaver 0x1008FF2D /* Invoke screensaver */ ++#define XKB_KEY_XF86WWW 0x1008FF2E /* Invoke web browser */ ++#define XKB_KEY_XF86Sleep 0x1008FF2F /* Put system to sleep */ ++#define XKB_KEY_XF86Favorites 0x1008FF30 /* Show favorite locations */ ++#define XKB_KEY_XF86AudioPause 0x1008FF31 /* Pause audio playing */ ++#define XKB_KEY_XF86AudioMedia 0x1008FF32 /* Launch media collection app */ ++#define XKB_KEY_XF86MyComputer 0x1008FF33 /* Display "My Computer" window */ ++#define XKB_KEY_XF86VendorHome 0x1008FF34 /* Display vendor home web site */ ++#define XKB_KEY_XF86LightBulb 0x1008FF35 /* Light bulb keys exist */ ++#define XKB_KEY_XF86Shop 0x1008FF36 /* Display shopping web site */ ++#define XKB_KEY_XF86History 0x1008FF37 /* Show history of web surfing */ ++#define XKB_KEY_XF86OpenURL 0x1008FF38 /* Open selected URL */ ++#define XKB_KEY_XF86AddFavorite 0x1008FF39 /* Add URL to favorites list */ ++#define XKB_KEY_XF86HotLinks 0x1008FF3A /* Show "hot" links */ ++#define XKB_KEY_XF86BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ ++#define XKB_KEY_XF86Finance 0x1008FF3C /* Display financial site */ ++#define XKB_KEY_XF86Community 0x1008FF3D /* Display user's community */ ++#define XKB_KEY_XF86AudioRewind 0x1008FF3E /* "rewind" audio track */ ++#define XKB_KEY_XF86BackForward 0x1008FF3F /* ??? */ ++#define XKB_KEY_XF86Launch0 0x1008FF40 /* Launch Application */ ++#define XKB_KEY_XF86Launch1 0x1008FF41 /* Launch Application */ ++#define XKB_KEY_XF86Launch2 0x1008FF42 /* Launch Application */ ++#define XKB_KEY_XF86Launch3 0x1008FF43 /* Launch Application */ ++#define XKB_KEY_XF86Launch4 0x1008FF44 /* Launch Application */ ++#define XKB_KEY_XF86Launch5 0x1008FF45 /* Launch Application */ ++#define XKB_KEY_XF86Launch6 0x1008FF46 /* Launch Application */ ++#define XKB_KEY_XF86Launch7 0x1008FF47 /* Launch Application */ ++#define XKB_KEY_XF86Launch8 0x1008FF48 /* Launch Application */ ++#define XKB_KEY_XF86Launch9 0x1008FF49 /* Launch Application */ ++#define XKB_KEY_XF86LaunchA 0x1008FF4A /* Launch Application */ ++#define XKB_KEY_XF86LaunchB 0x1008FF4B /* Launch Application */ ++#define XKB_KEY_XF86LaunchC 0x1008FF4C /* Launch Application */ ++#define XKB_KEY_XF86LaunchD 0x1008FF4D /* Launch Application */ ++#define XKB_KEY_XF86LaunchE 0x1008FF4E /* Launch Application */ ++#define XKB_KEY_XF86LaunchF 0x1008FF4F /* Launch Application */ ++ ++#define XKB_KEY_XF86ApplicationLeft 0x1008FF50 /* switch to application, left */ ++#define XKB_KEY_XF86ApplicationRight 0x1008FF51 /* switch to application, right*/ ++#define XKB_KEY_XF86Book 0x1008FF52 /* Launch bookreader */ ++#define XKB_KEY_XF86CD 0x1008FF53 /* Launch CD/DVD player */ ++#define XKB_KEY_XF86Calculater 0x1008FF54 /* Launch Calculater */ ++#define XKB_KEY_XF86Clear 0x1008FF55 /* Clear window, screen */ ++#define XKB_KEY_XF86Close 0x1008FF56 /* Close window */ ++#define XKB_KEY_XF86Copy 0x1008FF57 /* Copy selection */ ++#define XKB_KEY_XF86Cut 0x1008FF58 /* Cut selection */ ++#define XKB_KEY_XF86Display 0x1008FF59 /* Output switch key */ ++#define XKB_KEY_XF86DOS 0x1008FF5A /* Launch DOS (emulation) */ ++#define XKB_KEY_XF86Documents 0x1008FF5B /* Open documents window */ ++#define XKB_KEY_XF86Excel 0x1008FF5C /* Launch spread sheet */ ++#define XKB_KEY_XF86Explorer 0x1008FF5D /* Launch file explorer */ ++#define XKB_KEY_XF86Game 0x1008FF5E /* Launch game */ ++#define XKB_KEY_XF86Go 0x1008FF5F /* Go to URL */ ++#define XKB_KEY_XF86iTouch 0x1008FF60 /* Logitch iTouch- don't use */ ++#define XKB_KEY_XF86LogOff 0x1008FF61 /* Log off system */ ++#define XKB_KEY_XF86Market 0x1008FF62 /* ?? */ ++#define XKB_KEY_XF86Meeting 0x1008FF63 /* enter meeting in calendar */ ++#define XKB_KEY_XF86MenuKB 0x1008FF65 /* distingush keyboard from PB */ ++#define XKB_KEY_XF86MenuPB 0x1008FF66 /* distinuish PB from keyboard */ ++#define XKB_KEY_XF86MySites 0x1008FF67 /* Favourites */ ++#define XKB_KEY_XF86New 0x1008FF68 /* New (folder, document... */ ++#define XKB_KEY_XF86News 0x1008FF69 /* News */ ++#define XKB_KEY_XF86OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ ++#define XKB_KEY_XF86Open 0x1008FF6B /* Open */ ++#define XKB_KEY_XF86Option 0x1008FF6C /* ?? */ ++#define XKB_KEY_XF86Paste 0x1008FF6D /* Paste */ ++#define XKB_KEY_XF86Phone 0x1008FF6E /* Launch phone; dial number */ ++#define XKB_KEY_XF86Q 0x1008FF70 /* Compaq's Q - don't use */ ++#define XKB_KEY_XF86Reply 0x1008FF72 /* Reply e.g., mail */ ++#define XKB_KEY_XF86Reload 0x1008FF73 /* Reload web page, file, etc. */ ++#define XKB_KEY_XF86RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ ++#define XKB_KEY_XF86RotationPB 0x1008FF75 /* don't use */ ++#define XKB_KEY_XF86RotationKB 0x1008FF76 /* don't use */ ++#define XKB_KEY_XF86Save 0x1008FF77 /* Save (file, document, state */ ++#define XKB_KEY_XF86ScrollUp 0x1008FF78 /* Scroll window/contents up */ ++#define XKB_KEY_XF86ScrollDown 0x1008FF79 /* Scrool window/contentd down */ ++#define XKB_KEY_XF86ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ ++#define XKB_KEY_XF86Send 0x1008FF7B /* Send mail, file, object */ ++#define XKB_KEY_XF86Spell 0x1008FF7C /* Spell checker */ ++#define XKB_KEY_XF86SplitScreen 0x1008FF7D /* Split window or screen */ ++#define XKB_KEY_XF86Support 0x1008FF7E /* Get support (??) */ ++#define XKB_KEY_XF86TaskPane 0x1008FF7F /* Show tasks */ ++#define XKB_KEY_XF86Terminal 0x1008FF80 /* Launch terminal emulator */ ++#define XKB_KEY_XF86Tools 0x1008FF81 /* toolbox of desktop/app. */ ++#define XKB_KEY_XF86Travel 0x1008FF82 /* ?? */ ++#define XKB_KEY_XF86UserPB 0x1008FF84 /* ?? */ ++#define XKB_KEY_XF86User1KB 0x1008FF85 /* ?? */ ++#define XKB_KEY_XF86User2KB 0x1008FF86 /* ?? */ ++#define XKB_KEY_XF86Video 0x1008FF87 /* Launch video player */ ++#define XKB_KEY_XF86WheelButton 0x1008FF88 /* button from a mouse wheel */ ++#define XKB_KEY_XF86Word 0x1008FF89 /* Launch word processor */ ++#define XKB_KEY_XF86Xfer 0x1008FF8A ++#define XKB_KEY_XF86ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ ++#define XKB_KEY_XF86ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ ++ ++#define XKB_KEY_XF86Away 0x1008FF8D /* mark yourself as away */ ++#define XKB_KEY_XF86Messenger 0x1008FF8E /* as in instant messaging */ ++#define XKB_KEY_XF86WebCam 0x1008FF8F /* Launch web camera app. */ ++#define XKB_KEY_XF86MailForward 0x1008FF90 /* Forward in mail */ ++#define XKB_KEY_XF86Pictures 0x1008FF91 /* Show pictures */ ++#define XKB_KEY_XF86Music 0x1008FF92 /* Launch music application */ ++ ++#define XKB_KEY_XF86Battery 0x1008FF93 /* Display battery information */ ++#define XKB_KEY_XF86Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ ++#define XKB_KEY_XF86WLAN 0x1008FF95 /* Enable/disable WLAN */ ++#define XKB_KEY_XF86UWB 0x1008FF96 /* Enable/disable UWB */ ++ ++#define XKB_KEY_XF86AudioForward 0x1008FF97 /* fast-forward audio track */ ++#define XKB_KEY_XF86AudioRepeat 0x1008FF98 /* toggle repeat mode */ ++#define XKB_KEY_XF86AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ ++#define XKB_KEY_XF86Subtitle 0x1008FF9A /* cycle through subtitle */ ++#define XKB_KEY_XF86AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ ++#define XKB_KEY_XF86CycleAngle 0x1008FF9C /* cycle through angles */ ++#define XKB_KEY_XF86FrameBack 0x1008FF9D /* video: go one frame back */ ++#define XKB_KEY_XF86FrameForward 0x1008FF9E /* video: go one frame forward */ ++#define XKB_KEY_XF86Time 0x1008FF9F /* display, or shows an entry for time seeking */ ++#define XKB_KEY_XF86Select 0x1008FFA0 /* Select button on joypads and remotes */ ++#define XKB_KEY_XF86View 0x1008FFA1 /* Show a view options/properties */ ++#define XKB_KEY_XF86TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ ++ ++#define XKB_KEY_XF86Red 0x1008FFA3 /* Red button */ ++#define XKB_KEY_XF86Green 0x1008FFA4 /* Green button */ ++#define XKB_KEY_XF86Yellow 0x1008FFA5 /* Yellow button */ ++#define XKB_KEY_XF86Blue 0x1008FFA6 /* Blue button */ ++ ++#define XKB_KEY_XF86Suspend 0x1008FFA7 /* Sleep to RAM */ ++#define XKB_KEY_XF86Hibernate 0x1008FFA8 /* Sleep to disk */ ++#define XKB_KEY_XF86TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ ++#define XKB_KEY_XF86TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ ++#define XKB_KEY_XF86TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ ++ ++#define XKB_KEY_XF86AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ ++ ++/* Keys for special action keys (hot keys) */ ++/* Virtual terminals on some operating systems */ ++#define XKB_KEY_XF86Switch_VT_1 0x1008FE01 ++#define XKB_KEY_XF86Switch_VT_2 0x1008FE02 ++#define XKB_KEY_XF86Switch_VT_3 0x1008FE03 ++#define XKB_KEY_XF86Switch_VT_4 0x1008FE04 ++#define XKB_KEY_XF86Switch_VT_5 0x1008FE05 ++#define XKB_KEY_XF86Switch_VT_6 0x1008FE06 ++#define XKB_KEY_XF86Switch_VT_7 0x1008FE07 ++#define XKB_KEY_XF86Switch_VT_8 0x1008FE08 ++#define XKB_KEY_XF86Switch_VT_9 0x1008FE09 ++#define XKB_KEY_XF86Switch_VT_10 0x1008FE0A ++#define XKB_KEY_XF86Switch_VT_11 0x1008FE0B ++#define XKB_KEY_XF86Switch_VT_12 0x1008FE0C ++ ++#define XKB_KEY_XF86Ungrab 0x1008FE20 /* force ungrab */ ++#define XKB_KEY_XF86ClearGrab 0x1008FE21 /* kill application with grab */ ++#define XKB_KEY_XF86Next_VMode 0x1008FE22 /* next video mode available */ ++#define XKB_KEY_XF86Prev_VMode 0x1008FE23 /* prev. video mode available */ ++#define XKB_KEY_XF86LogWindowTree 0x1008FE24 /* print window tree to log */ ++#define XKB_KEY_XF86LogGrabInfo 0x1008FE25 /* print all active grabs to log */ ++/* ++ * Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++/************************************************************ ++ ++Copyright 1991, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall not be ++used in advertising or otherwise to promote the sale, use or other dealings ++in this Software without prior written authorization from The Open Group. ++ ++***********************************************************/ ++ ++/* ++ * Floating Accent ++ */ ++ ++#define XKB_KEY_SunFA_Grave 0x1005FF00 ++#define XKB_KEY_SunFA_Circum 0x1005FF01 ++#define XKB_KEY_SunFA_Tilde 0x1005FF02 ++#define XKB_KEY_SunFA_Acute 0x1005FF03 ++#define XKB_KEY_SunFA_Diaeresis 0x1005FF04 ++#define XKB_KEY_SunFA_Cedilla 0x1005FF05 ++ ++/* ++ * Miscellaneous Functions ++ */ ++ ++#define XKB_KEY_SunF36 0x1005FF10 /* Labeled F11 */ ++#define XKB_KEY_SunF37 0x1005FF11 /* Labeled F12 */ ++ ++#define XKB_KEY_SunSys_Req 0x1005FF60 ++#define XKB_KEY_SunPrint_Screen 0x0000FF61 /* Same as XK_Print */ ++ ++/* ++ * International & Multi-Key Character Composition ++ */ ++ ++#define XKB_KEY_SunCompose 0x0000FF20 /* Same as XK_Multi_key */ ++#define XKB_KEY_SunAltGraph 0x0000FF7E /* Same as XK_Mode_switch */ ++ ++/* ++ * Cursor Control ++ */ ++ ++#define XKB_KEY_SunPageUp 0x0000FF55 /* Same as XK_Prior */ ++#define XKB_KEY_SunPageDown 0x0000FF56 /* Same as XK_Next */ ++ ++/* ++ * Open Look Functions ++ */ ++ ++#define XKB_KEY_SunUndo 0x0000FF65 /* Same as XK_Undo */ ++#define XKB_KEY_SunAgain 0x0000FF66 /* Same as XK_Redo */ ++#define XKB_KEY_SunFind 0x0000FF68 /* Same as XK_Find */ ++#define XKB_KEY_SunStop 0x0000FF69 /* Same as XK_Cancel */ ++#define XKB_KEY_SunProps 0x1005FF70 ++#define XKB_KEY_SunFront 0x1005FF71 ++#define XKB_KEY_SunCopy 0x1005FF72 ++#define XKB_KEY_SunOpen 0x1005FF73 ++#define XKB_KEY_SunPaste 0x1005FF74 ++#define XKB_KEY_SunCut 0x1005FF75 ++ ++#define XKB_KEY_SunPowerSwitch 0x1005FF76 ++#define XKB_KEY_SunAudioLowerVolume 0x1005FF77 ++#define XKB_KEY_SunAudioMute 0x1005FF78 ++#define XKB_KEY_SunAudioRaiseVolume 0x1005FF79 ++#define XKB_KEY_SunVideoDegauss 0x1005FF7A ++#define XKB_KEY_SunVideoLowerBrightness 0x1005FF7B ++#define XKB_KEY_SunVideoRaiseBrightness 0x1005FF7C ++#define XKB_KEY_SunPowerSwitchShift 0x1005FF7D ++/*********************************************************** ++ ++Copyright 1988, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall not be ++used in advertising or otherwise to promote the sale, use or other dealings ++in this Software without prior written authorization from The Open Group. ++ ++ ++Copyright 1988 by Digital Equipment Corporation, Maynard, Massachusetts. ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the name of Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++******************************************************************/ ++ ++/* ++ * DEC private keysyms ++ * (29th bit set) ++ */ ++ ++/* two-key compose sequence initiators, chosen to map to Latin1 characters */ ++ ++#define XKB_KEY_Dring_accent 0x1000FEB0 ++#define XKB_KEY_Dcircumflex_accent 0x1000FE5E ++#define XKB_KEY_Dcedilla_accent 0x1000FE2C ++#define XKB_KEY_Dacute_accent 0x1000FE27 ++#define XKB_KEY_Dgrave_accent 0x1000FE60 ++#define XKB_KEY_Dtilde 0x1000FE7E ++#define XKB_KEY_Ddiaeresis 0x1000FE22 ++ ++/* special keysym for LK2** "Remove" key on editing keypad */ ++ ++#define XKB_KEY_DRemove 0x1000FF00 /* Remove */ ++/* ++ ++Copyright 1987, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included ++in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR ++OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall ++not be used in advertising or otherwise to promote the sale, use or ++other dealings in this Software without prior written authorization ++from The Open Group. ++ ++Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the names of Hewlett Packard ++or Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD ++TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++PURPOSE. Hewlett-Packard shall not be liable for errors ++contained herein or direct, indirect, special, incidental or ++consequential damages in connection with the furnishing, ++performance, or use of this material. ++ ++*/ ++ ++ ++ ++#define XKB_KEY_hpClearLine 0x1000FF6F ++#define XKB_KEY_hpInsertLine 0x1000FF70 ++#define XKB_KEY_hpDeleteLine 0x1000FF71 ++#define XKB_KEY_hpInsertChar 0x1000FF72 ++#define XKB_KEY_hpDeleteChar 0x1000FF73 ++#define XKB_KEY_hpBackTab 0x1000FF74 ++#define XKB_KEY_hpKP_BackTab 0x1000FF75 ++#define XKB_KEY_hpModelock1 0x1000FF48 ++#define XKB_KEY_hpModelock2 0x1000FF49 ++#define XKB_KEY_hpReset 0x1000FF6C ++#define XKB_KEY_hpSystem 0x1000FF6D ++#define XKB_KEY_hpUser 0x1000FF6E ++#define XKB_KEY_hpmute_acute 0x100000A8 ++#define XKB_KEY_hpmute_grave 0x100000A9 ++#define XKB_KEY_hpmute_asciicircum 0x100000AA ++#define XKB_KEY_hpmute_diaeresis 0x100000AB ++#define XKB_KEY_hpmute_asciitilde 0x100000AC ++#define XKB_KEY_hplira 0x100000AF ++#define XKB_KEY_hpguilder 0x100000BE ++#define XKB_KEY_hpYdiaeresis 0x100000EE ++#define XKB_KEY_hpIO 0x100000EE ++#define XKB_KEY_hplongminus 0x100000F6 ++#define XKB_KEY_hpblock 0x100000FC ++ ++ ++ ++#define XKB_KEY_osfCopy 0x1004FF02 ++#define XKB_KEY_osfCut 0x1004FF03 ++#define XKB_KEY_osfPaste 0x1004FF04 ++#define XKB_KEY_osfBackTab 0x1004FF07 ++#define XKB_KEY_osfBackSpace 0x1004FF08 ++#define XKB_KEY_osfClear 0x1004FF0B ++#define XKB_KEY_osfEscape 0x1004FF1B ++#define XKB_KEY_osfAddMode 0x1004FF31 ++#define XKB_KEY_osfPrimaryPaste 0x1004FF32 ++#define XKB_KEY_osfQuickPaste 0x1004FF33 ++#define XKB_KEY_osfPageLeft 0x1004FF40 ++#define XKB_KEY_osfPageUp 0x1004FF41 ++#define XKB_KEY_osfPageDown 0x1004FF42 ++#define XKB_KEY_osfPageRight 0x1004FF43 ++#define XKB_KEY_osfActivate 0x1004FF44 ++#define XKB_KEY_osfMenuBar 0x1004FF45 ++#define XKB_KEY_osfLeft 0x1004FF51 ++#define XKB_KEY_osfUp 0x1004FF52 ++#define XKB_KEY_osfRight 0x1004FF53 ++#define XKB_KEY_osfDown 0x1004FF54 ++#define XKB_KEY_osfEndLine 0x1004FF57 ++#define XKB_KEY_osfBeginLine 0x1004FF58 ++#define XKB_KEY_osfEndData 0x1004FF59 ++#define XKB_KEY_osfBeginData 0x1004FF5A ++#define XKB_KEY_osfPrevMenu 0x1004FF5B ++#define XKB_KEY_osfNextMenu 0x1004FF5C ++#define XKB_KEY_osfPrevField 0x1004FF5D ++#define XKB_KEY_osfNextField 0x1004FF5E ++#define XKB_KEY_osfSelect 0x1004FF60 ++#define XKB_KEY_osfInsert 0x1004FF63 ++#define XKB_KEY_osfUndo 0x1004FF65 ++#define XKB_KEY_osfMenu 0x1004FF67 ++#define XKB_KEY_osfCancel 0x1004FF69 ++#define XKB_KEY_osfHelp 0x1004FF6A ++#define XKB_KEY_osfSelectAll 0x1004FF71 ++#define XKB_KEY_osfDeselectAll 0x1004FF72 ++#define XKB_KEY_osfReselect 0x1004FF73 ++#define XKB_KEY_osfExtend 0x1004FF74 ++#define XKB_KEY_osfRestore 0x1004FF78 ++#define XKB_KEY_osfDelete 0x1004FFFF ++ ++ ++ ++/************************************************************** ++ * The use of the following macros is deprecated. ++ * They are listed below only for backwards compatibility. ++ */ ++#define XKB_KEY_Reset 0x1000FF6C ++#define XKB_KEY_System 0x1000FF6D ++#define XKB_KEY_User 0x1000FF6E ++#define XKB_KEY_ClearLine 0x1000FF6F ++#define XKB_KEY_InsertLine 0x1000FF70 ++#define XKB_KEY_DeleteLine 0x1000FF71 ++#define XKB_KEY_InsertChar 0x1000FF72 ++#define XKB_KEY_DeleteChar 0x1000FF73 ++#define XKB_KEY_BackTab 0x1000FF74 ++#define XKB_KEY_KP_BackTab 0x1000FF75 ++#define XKB_KEY_Ext16bit_L 0x1000FF76 ++#define XKB_KEY_Ext16bit_R 0x1000FF77 ++#define XKB_KEY_mute_acute 0x100000a8 ++#define XKB_KEY_mute_grave 0x100000a9 ++#define XKB_KEY_mute_asciicircum 0x100000aa ++#define XKB_KEY_mute_diaeresis 0x100000ab ++#define XKB_KEY_mute_asciitilde 0x100000ac ++#define XKB_KEY_lira 0x100000af ++#define XKB_KEY_guilder 0x100000be ++#define XKB_KEY_IO 0x100000ee ++#define XKB_KEY_longminus 0x100000f6 ++#define XKB_KEY_block 0x100000fc ++ ++ ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h +new file mode 100644 +index 0000000..ecb551f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h +@@ -0,0 +1,45 @@ ++/* ++ * Copyright © 2012 Intel Corporation ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_NAMES_H ++#define _XKBCOMMON_NAMES_H ++ ++/** ++ * @file ++ * @brief Predefined names for common modifiers and LEDs. ++ */ ++ ++#define XKB_MOD_NAME_SHIFT "Shift" ++#define XKB_MOD_NAME_CAPS "Lock" ++#define XKB_MOD_NAME_CTRL "Control" ++#define XKB_MOD_NAME_ALT "Mod1" ++#define XKB_MOD_NAME_NUM "Mod2" ++#define XKB_MOD_NAME_LOGO "Mod4" ++ ++#define XKB_LED_NAME_CAPS "Caps Lock" ++#define XKB_LED_NAME_NUM "Num Lock" ++#define XKB_LED_NAME_SCROLL "Scroll Lock" ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h +new file mode 100644 +index 0000000..0158315 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h +@@ -0,0 +1,244 @@ ++/* ++ * Copyright © 2013 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef _XKBCOMMON_X11_H ++#define _XKBCOMMON_X11_H ++ ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * libxkbcommon-x11 API - Additional X11 support for xkbcommon. ++ */ ++ ++/** ++ * @defgroup x11 X11 support ++ * Additional X11 support for xkbcommon. ++ * @since 0.4.0 ++ * ++ * @{ ++ */ ++ ++/** ++ * @page x11-overview Overview ++ * @parblock ++ * ++ * The xkbcommon-x11 module provides a means for creating an xkb_keymap ++ * corresponding to the currently active keymap on the X server. To do ++ * so, it queries the XKB X11 extension using the xcb-xkb library. It ++ * can be used as a replacement for Xlib's keyboard handling. ++ * ++ * Following is an example workflow using xkbcommon-x11. A complete ++ * example may be found in the test/interactive-x11.c file in the ++ * xkbcommon source repository. On startup: ++ * ++ * 1. Connect to the X server using xcb_connect(). ++ * 2. Setup the XKB X11 extension. You can do this either by using the ++ * xcb_xkb_use_extension() request directly, or by using the ++ * xkb_x11_setup_xkb_extension() helper function. ++ * ++ * The XKB extension supports using separate keymaps and states for ++ * different keyboard devices. The devices are identified by an integer ++ * device ID and are managed by another X11 extension, XInput (or its ++ * successor, XInput2). The original X11 protocol only had one keyboard ++ * device, called the "core keyboard", which is still supported as a ++ * "virtual device". ++ * ++ * 3. We will use the core keyboard as an example. To get its device ID, ++ * use either the xcb_xkb_get_device_info() request directly, or the ++ * xkb_x11_get_core_keyboard_device_id() helper function. ++ * 4. Create an initial xkb_keymap for this device, using the ++ * xkb_x11_keymap_new_from_device() function. ++ * 5. Create an initial xkb_state for this device, using the ++ * xkb_x11_state_new_from_device() function. ++ * ++ * @note At this point, you may consider setting various XKB controls and ++ * XKB per-client flags. For example, enabling detectable autorepeat: \n ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Detectable_Autorepeat ++ * ++ * Next, you need to react to state changes (e.g. a modifier was pressed, ++ * the layout was changed) and to keymap changes (e.g. a tool like xkbcomp, ++ * setxkbmap or xmodmap was used): ++ * ++ * 6. Select to listen to at least the following XKB events: ++ * NewKeyboardNotify, MapNotify, StateNotify; using the ++ * xcb_xkb_select_events_aux() request. ++ * 7. When NewKeyboardNotify or MapNotify are received, recreate the ++ * xkb_keymap and xkb_state as described above. ++ * 8. When StateNotify is received, update the xkb_state accordingly ++ * using the xkb_state_update_mask() function. ++ * ++ * @note It is also possible to use the KeyPress/KeyRelease @p state ++ * field to find the effective modifier and layout state, instead of ++ * using XkbStateNotify: \n ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Computing_A_State_Field_from_an_XKB_State ++ * \n However, XkbStateNotify is more accurate. ++ * ++ * @note There is no need to call xkb_state_update_key(); the state is ++ * already synchronized. ++ * ++ * Finally, when a key event is received, you can use ordinary xkbcommon ++ * functions, like xkb_state_key_get_one_sym() and xkb_state_key_get_utf8(), ++ * as you normally would. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * The minimal compatible major version of the XKB X11 extension which ++ * this library can use. ++ */ ++#define XKB_X11_MIN_MAJOR_XKB_VERSION 1 ++/** ++ * The minimal compatible minor version of the XKB X11 extension which ++ * this library can use (for the minimal major version). ++ */ ++#define XKB_X11_MIN_MINOR_XKB_VERSION 0 ++ ++/** Flags for the xkb_x11_setup_xkb_extension() function. */ ++enum xkb_x11_setup_xkb_extension_flags { ++ /** Do not apply any flags. */ ++ XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS = 0 ++}; ++ ++/** ++ * Setup the XKB X11 extension for this X client. ++ * ++ * The xkbcommon-x11 library uses various XKB requests. Before doing so, ++ * an X client must notify the server that it will be using the extension. ++ * This function (or an XCB equivalent) must be called before any other ++ * function in this library is used. ++ * ++ * Some X servers may not support or disable the XKB extension. If you ++ * want to support such servers, you need to use a different fallback. ++ * ++ * You may call this function several times; it is idempotent. ++ * ++ * @param connection ++ * An XCB connection to the X server. ++ * @param major_xkb_version ++ * See @p minor_xkb_version. ++ * @param minor_xkb_version ++ * The XKB extension version to request. To operate correctly, you ++ * must have (major_xkb_version, minor_xkb_version) >= ++ * (XKB_X11_MIN_MAJOR_XKB_VERSION, XKB_X11_MIN_MINOR_XKB_VERSION), ++ * though this is not enforced. ++ * @param flags ++ * Optional flags, or 0. ++ * @param[out] major_xkb_version_out ++ * See @p minor_xkb_version_out. ++ * @param[out] minor_xkb_version_out ++ * Backfilled with the compatible XKB extension version numbers picked ++ * by the server. Can be NULL. ++ * @param[out] base_event_out ++ * Backfilled with the XKB base (also known as first) event code, needed ++ * to distinguish XKB events. Can be NULL. ++ * @param[out] base_error_out ++ * Backfilled with the XKB base (also known as first) error code, needed ++ * to distinguish XKB errors. Can be NULL. ++ * ++ * @returns 1 on success, or 0 on failure. ++ */ ++int ++xkb_x11_setup_xkb_extension(xcb_connection_t *connection, ++ uint16_t major_xkb_version, ++ uint16_t minor_xkb_version, ++ enum xkb_x11_setup_xkb_extension_flags flags, ++ uint16_t *major_xkb_version_out, ++ uint16_t *minor_xkb_version_out, ++ uint8_t *base_event_out, ++ uint8_t *base_error_out); ++ ++/** ++ * Get the keyboard device ID of the core X11 keyboard. ++ * ++ * @param connection An XCB connection to the X server. ++ * ++ * @returns A device ID which may be used with other xkb_x11_* functions, ++ * or -1 on failure. ++ */ ++int32_t ++xkb_x11_get_core_keyboard_device_id(xcb_connection_t *connection); ++ ++/** ++ * Create a keymap from an X11 keyboard device. ++ * ++ * This function queries the X server with various requests, fetches the ++ * details of the active keymap on a keyboard device, and creates an ++ * xkb_keymap from these details. ++ * ++ * @param context ++ * The context in which to create the keymap. ++ * @param connection ++ * An XCB connection to the X server. ++ * @param device_id ++ * An XInput 1 device ID (in the range 0-255) with input class KEY. ++ * Passing values outside of this range is an error. ++ * @param flags ++ * Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap retrieved from the X server, or NULL on failure. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_x11_keymap_new_from_device(struct xkb_context *context, ++ xcb_connection_t *connection, ++ int32_t device_id, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a new keyboard state object from an X11 keyboard device. ++ * ++ * This function is the same as xkb_state_new(), only pre-initialized ++ * with the state of the device at the time this function is called. ++ * ++ * @param keymap ++ * The keymap for which to create the state. ++ * @param connection ++ * An XCB connection to the X server. ++ * @param device_id ++ * An XInput 1 device ID (in the range 0-255) with input class KEY. ++ * Passing values outside of this range is an error. ++ * ++ * @returns A new keyboard state object, or NULL on failure. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_x11_state_new_from_device(struct xkb_keymap *keymap, ++ xcb_connection_t *connection, ++ int32_t device_id); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_X11_H */ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h +new file mode 100644 +index 0000000..f0c9202 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h +@@ -0,0 +1,1723 @@ ++/* ++ * Copyright 1985, 1987, 1990, 1998 The Open Group ++ * Copyright 2008 Dan Nicholson ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Except as contained in this notice, the names of the authors or their ++ * institutions shall not be used in advertising or otherwise to promote the ++ * sale, use or other dealings in this Software without prior written ++ * authorization from the authors. ++ */ ++ ++/************************************************************ ++ * Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. ++ * ++ * Permission to use, copy, modify, and distribute this ++ * software and its documentation for any purpose and without ++ * fee is hereby granted, provided that the above copyright ++ * notice appear in all copies and that both that copyright ++ * notice and this permission notice appear in supporting ++ * documentation, and that the name of Silicon Graphics not be ++ * used in advertising or publicity pertaining to distribution ++ * of the software without specific prior written permission. ++ * Silicon Graphics makes no representation about the suitability ++ * of this software for any purpose. It is provided "as is" ++ * without any express or implied warranty. ++ * ++ * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ++ * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON ++ * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, ++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE ++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH ++ * THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ ********************************************************/ ++ ++/* ++ * Copyright © 2009-2012 Daniel Stone ++ * Copyright © 2012 Intel Corporation ++ * Copyright © 2012 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_H_ ++#define _XKBCOMMON_H_ ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * Main libxkbcommon API. ++ */ ++ ++/** ++ * @struct xkb_context ++ * Opaque top level library context object. ++ * ++ * The context contains various general library data and state, like ++ * logging level and include paths. ++ * ++ * Objects are created in a specific context, and multiple contexts may ++ * coexist simultaneously. Objects from different contexts are completely ++ * separated and do not share any memory or state. ++ */ ++struct xkb_context; ++ ++/** ++ * @struct xkb_keymap ++ * Opaque compiled keymap object. ++ * ++ * The keymap object holds all of the static keyboard information obtained ++ * from compiling XKB files. ++ * ++ * A keymap is immutable after it is created (besides reference counts, etc.); ++ * if you need to change it, you must create a new one. ++ */ ++struct xkb_keymap; ++ ++/** ++ * @struct xkb_state ++ * Opaque keyboard state object. ++ * ++ * State objects contain the active state of a keyboard (or keyboards), such ++ * as the currently effective layout and the active modifiers. It acts as a ++ * simple state machine, wherein key presses and releases are the input, and ++ * key symbols (keysyms) are the output. ++ */ ++struct xkb_state; ++ ++/** ++ * A number used to represent a physical key on a keyboard. ++ * ++ * A standard PC-compatible keyboard might have 102 keys. An appropriate ++ * keymap would assign each of them a keycode, by which the user should ++ * refer to the key throughout the library. ++ * ++ * Historically, the X11 protocol, and consequentially the XKB protocol, ++ * assign only 8 bits for keycodes. This limits the number of different ++ * keys that can be used simultaneously in a single keymap to 256 ++ * (disregarding other limitations). This library does not share this limit; ++ * keycodes beyond 255 ('extended keycodes') are not treated specially. ++ * Keymaps and applications which are compatible with X11 should not use ++ * these keycodes. ++ * ++ * The values of specific keycodes are determined by the keymap and the ++ * underlying input system. For example, with an X11-compatible keymap ++ * and Linux evdev scan codes (see linux/input.h), a fixed offset is used: ++ * ++ * @code ++ * xkb_keycode_t keycode_A = KEY_A + 8; ++ * @endcode ++ * ++ * @sa xkb_keycode_is_legal_ext() xkb_keycode_is_legal_x11() ++ */ ++typedef uint32_t xkb_keycode_t; ++ ++/** ++ * A number used to represent the symbols generated from a key on a keyboard. ++ * ++ * A key, represented by a keycode, may generate different symbols according ++ * to keyboard state. For example, on a QWERTY keyboard, pressing the key ++ * labled \ generates the symbol 'a'. If the Shift key is held, it ++ * generates the symbol 'A'. If a different layout is used, say Greek, ++ * it generates the symbol 'α'. And so on. ++ * ++ * Each such symbol is represented by a keysym. Note that keysyms are ++ * somewhat more general, in that they can also represent some "function", ++ * such as "Left" or "Right" for the arrow keys. For more information, ++ * see: ++ * http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html#keysym_encoding ++ * ++ * Specifically named keysyms can be found in the ++ * xkbcommon/xkbcommon-keysyms.h header file. Their name does not include ++ * the XKB_KEY_ prefix. ++ * ++ * Besides those, any Unicode/ISO 10646 character in the range U0100 to ++ * U10FFFF can be represented by a keysym value in the range 0x01000100 to ++ * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "UA1B2". ++ * ++ * The name of other unnamed keysyms is the hexadecimal representation of ++ * their value, e.g. "0xabcd1234". ++ * ++ * Keysym names are case-sensitive. ++ */ ++typedef uint32_t xkb_keysym_t; ++ ++/** ++ * Index of a keyboard layout. ++ * ++ * The layout index is a state component which detemines which keyboard ++ * layout is active. These may be different alphabets, different key ++ * arrangements, etc. ++ * ++ * Layout indices are consecutive. The first layout has index 0. ++ * ++ * Each layout is not required to have a name, and the names are not ++ * guaranteed to be unique (though they are usually provided and unique). ++ * Therefore, it is not safe to use the name as a unique identifier for a ++ * layout. Layout names are case-sensitive. ++ * ++ * Layouts are also called "groups" by XKB. ++ * ++ * @sa xkb_keymap_num_layouts() xkb_keymap_num_layouts_for_key() ++ */ ++typedef uint32_t xkb_layout_index_t; ++/** A mask of layout indices. */ ++typedef uint32_t xkb_layout_mask_t; ++ ++/** ++ * Index of a shift level. ++ * ++ * Any key, in any layout, can have several shift levels. Each ++ * shift level can assign different keysyms to the key. The shift level ++ * to use is chosen according to the current keyboard state; for example, ++ * if no keys are pressed, the first level may be used; if the Left Shift ++ * key is pressed, the second; if Num Lock is pressed, the third; and ++ * many such combinations are possible (see xkb_mod_index_t). ++ * ++ * Level indices are consecutive. The first level has index 0. ++ */ ++typedef uint32_t xkb_level_index_t; ++ ++/** ++ * Index of a modifier. ++ * ++ * A @e modifier is a state component which changes the way keys are ++ * interpreted. A keymap defines a set of modifiers, such as Alt, Shift, ++ * Num Lock or Meta, and specifies which keys may @e activate which ++ * modifiers (in a many-to-many relationship, i.e. a key can activate ++ * several modifiers, and a modifier may be activated by several keys. ++ * Different keymaps do this differently). ++ * ++ * When retrieving the keysyms for a key, the active modifier set is ++ * consulted; this detemines the correct shift level to use within the ++ * currently active layout (see xkb_level_index_t). ++ * ++ * Modifier indices are consecutive. The first modifier has index 0. ++ * ++ * Each modifier must have a name, and the names are unique. Therefore, it ++ * is safe to use the name as a unique identifier for a modifier. The names ++ * of some common modifiers are provided in the xkbcommon/xkbcommon-names.h ++ * header file. Modifier names are case-sensitive. ++ * ++ * @sa xkb_keymap_num_mods() ++ */ ++typedef uint32_t xkb_mod_index_t; ++/** A mask of modifier indices. */ ++typedef uint32_t xkb_mod_mask_t; ++ ++/** ++ * Index of a keyboard LED. ++ * ++ * LEDs are logical objects which may be @e active or @e inactive. They ++ * typically correspond to the lights on the keyboard. Their state is ++ * determined by the current keyboard state. ++ * ++ * LED indices are non-consecutive. The first LED has index 0. ++ * ++ * Each LED must have a name, and the names are unique. Therefore, ++ * it is safe to use the name as a unique identifier for a LED. The names ++ * of some common LEDs are provided in the xkbcommon/xkbcommon-names.h ++ * header file. LED names are case-sensitive. ++ * ++ * @warning A given keymap may specify an exact index for a given LED. ++ * Therefore, LED indexing is not necessarily sequential, as opposed to ++ * modifiers and layouts. This means that when iterating over the LEDs ++ * in a keymap using e.g. xkb_keymap_num_leds(), some indices might be ++ * invalid. Given such an index, functions like xkb_keymap_led_get_name() ++ * will return NULL, and xkb_state_led_index_is_active() will return -1. ++ * ++ * LEDs are also called "indicators" by XKB. ++ * ++ * @sa xkb_keymap_num_leds() ++ */ ++typedef uint32_t xkb_led_index_t; ++/** A mask of LED indices. */ ++typedef uint32_t xkb_led_mask_t; ++ ++#define XKB_KEYCODE_INVALID (0xffffffff) ++#define XKB_LAYOUT_INVALID (0xffffffff) ++#define XKB_LEVEL_INVALID (0xffffffff) ++#define XKB_MOD_INVALID (0xffffffff) ++#define XKB_LED_INVALID (0xffffffff) ++ ++#define XKB_KEYCODE_MAX (0xffffffff - 1) ++ ++/** ++ * Test whether a value is a valid extended keycode. ++ * @sa xkb_keycode_t ++ **/ ++#define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX) ++ ++/** ++ * Test whether a value is a valid X11 keycode. ++ * @sa xkb_keycode_t ++ */ ++#define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255) ++ ++/** ++ * Names to compile a keymap with, also known as RMLVO. ++ * ++ * The names are the common configuration values by which a user picks ++ * a keymap. ++ * ++ * If the entire struct is NULL, then each field is taken to be NULL. ++ * You should prefer passing NULL instead of choosing your own defaults. ++ */ ++struct xkb_rule_names { ++ /** ++ * The rules file to use. The rules file describes how to interpret ++ * the values of the model, layout, variant and options fields. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_RULES environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *rules; ++ /** ++ * The keyboard model by which to interpret keycodes and LEDs. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_MODEL environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *model; ++ /** ++ * A comma separated list of layouts (languages) to include in the ++ * keymap. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_LAYOUT environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *layout; ++ /** ++ * A comma separated list of variants, one per layout, which may ++ * modify or augment the respective layout in various ways. ++ * ++ * If NULL or the empty string "", and a default value is also used ++ * for the layout, a default value is used. Otherwise no variant is ++ * used. ++ * If the XKB_DEFAULT_VARIANT environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *variant; ++ /** ++ * A comma separated list of options, through which the user specifies ++ * non-layout related preferences, like which key combinations are used ++ * for switching layouts, or which key is the Compose key. ++ * ++ * If NULL, a default value is used. If the empty string "", no ++ * options are used. ++ * If the XKB_DEFAULT_OPTIONS environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *options; ++}; ++ ++/** ++ * @defgroup keysyms Keysyms ++ * Utility functions related to keysyms. ++ * ++ * @{ ++ */ ++ ++/** ++ * @page keysym-transformations Keysym Transformations ++ * ++ * Keysym translation is subject to several "keysym transformations", ++ * as described in the XKB specification. These are: ++ * ++ * - Capitalization transformation. If the Caps Lock modifier is ++ * active and was not consumed by the translation process, a single ++ * keysym is transformed to its upper-case form (if applicable). ++ * Similarly, the UTF-8/UTF-32 string produced is capitalized. ++ * ++ * This is described in: ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier ++ * ++ * - Control transformation. If the Control modifier is active and ++ * was not consumed by the translation process, the string produced ++ * is transformed to its matching ASCII control character (if ++ * applicable). Keysyms are not affected. ++ * ++ * This is described in: ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier ++ * ++ * Each relevant function discusses which transformations it performs. ++ * ++ * These transformations are not applicable when a key produces multiple ++ * keysyms. ++ */ ++ ++ ++/** ++ * Get the name of a keysym. ++ * ++ * For a description of how keysyms are named, see @ref xkb_keysym_t. ++ * ++ * @param[in] keysym The keysym. ++ * @param[out] buffer A string buffer to write the name into. ++ * @param[in] size Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated); a size of at least 64 bytes is recommended. ++ * ++ * @returns The number of bytes in the name, excluding the NUL byte. If ++ * the keysym is invalid, returns -1. ++ * ++ * You may check if truncation has occurred by comparing the return value ++ * with the length of buffer, similarly to the snprintf(3) function. ++ * ++ * @sa xkb_keysym_t ++ */ ++int ++xkb_keysym_get_name(xkb_keysym_t keysym, char *buffer, size_t size); ++ ++/** Flags for xkb_keysym_from_name(). */ ++enum xkb_keysym_flags { ++ /** Do not apply any flags. */ ++ XKB_KEYSYM_NO_FLAGS = 0, ++ /** Find keysym by case-insensitive search. */ ++ XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0) ++}; ++ ++/** ++ * Get a keysym from its name. ++ * ++ * @param name The name of a keysym. See remarks in xkb_keysym_get_name(); ++ * this function will accept any name returned by that function. ++ * @param flags A set of flags controlling how the search is done. If ++ * invalid flags are passed, this will fail with XKB_KEY_NoSymbol. ++ * ++ * If you use the XKB_KEYSYM_CASE_INSENSITIVE flag and two keysym names ++ * differ only by case, then the lower-case keysym is returned. For ++ * instance, for KEY_a and KEY_A, this function would return KEY_a for the ++ * case-insensitive search. If this functionality is needed, it is ++ * recommended to first call this function without this flag; and if that ++ * fails, only then to try with this flag, while possibly warning the user ++ * he had misspelled the name, and might get wrong results. ++ * ++ * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol. ++ * ++ * @sa xkb_keysym_t ++ */ ++xkb_keysym_t ++xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags); ++ ++/** ++ * Get the Unicode/UTF-8 representation of a keysym. ++ * ++ * @param[in] keysym The keysym. ++ * @param[out] buffer A buffer to write the UTF-8 string into. ++ * @param[in] size The size of buffer. Must be at least 7. ++ * ++ * @returns The number of bytes written to the buffer (including the ++ * terminating byte). If the keysym does not have a Unicode ++ * representation, returns 0. If the buffer is too small, returns -1. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * Therefore, prefer to use xkb_state_key_get_utf8() if possible. ++ * ++ * @sa xkb_state_key_get_utf8() ++ */ ++int ++xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size); ++ ++/** ++ * Get the Unicode/UTF-32 representation of a keysym. ++ * ++ * @returns The Unicode/UTF-32 representation of keysym, which is also ++ * compatible with UCS-4. If the keysym does not have a Unicode ++ * representation, returns 0. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * Therefore, prefer to use xkb_state_key_get_utf32() if possible. ++ * ++ * @sa xkb_state_key_get_utf32() ++ */ ++uint32_t ++xkb_keysym_to_utf32(xkb_keysym_t keysym); ++ ++/** @} */ ++ ++/** ++ * @defgroup context Library Context ++ * Creating, destroying and using library contexts. ++ * ++ * Every keymap compilation request must have a context associated with ++ * it. The context keeps around state such as the include path. ++ * ++ * @{ ++ */ ++ ++/** Flags for context creation. */ ++enum xkb_context_flags { ++ /** Do not apply any context flags. */ ++ XKB_CONTEXT_NO_FLAGS = 0, ++ /** Create this context with an empty include path. */ ++ XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0), ++ /** ++ * Don't take RMLVO names from the environment. ++ * @since 0.3.0 ++ */ ++ XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1) ++}; ++ ++/** ++ * Create a new context. ++ * ++ * @param flags Optional flags for the context, or 0. ++ * ++ * @returns A new context, or NULL on failure. ++ * ++ * The user may set some environment variables to affect default values in ++ * the context. See e.g. xkb_context_set_log_level() and ++ * xkb_context_set_log_verbosity(). ++ * ++ * @memberof xkb_context ++ */ ++struct xkb_context * ++xkb_context_new(enum xkb_context_flags flags); ++ ++/** ++ * Take a new reference on a context. ++ * ++ * @returns The passed in context. ++ * ++ * @memberof xkb_context ++ */ ++struct xkb_context * ++xkb_context_ref(struct xkb_context *context); ++ ++/** ++ * Release a reference on a context, and possibly free it. ++ * ++ * @param context The context. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_unref(struct xkb_context *context); ++ ++/** ++ * Store custom user data in the context. ++ * ++ * This may be useful in conjunction with xkb_context_set_log_fn() or other ++ * callbacks. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_user_data(struct xkb_context *context, void *user_data); ++ ++/** ++ * Retrieves stored user data from the context. ++ * ++ * @returns The stored user data. If the user data wasn't set, or the ++ * passed in context is NULL, returns NULL. ++ * ++ * This may be useful to access private user data from callbacks like a ++ * custom logging function. ++ * ++ * @memberof xkb_context ++ **/ ++void * ++xkb_context_get_user_data(struct xkb_context *context); ++ ++/** @} */ ++ ++/** ++ * @defgroup include-path Include Paths ++ * Manipulating the include paths in a context. ++ * ++ * The include paths are the file-system paths that are searched when an ++ * include statement is encountered during keymap compilation. ++ * In most cases, the default include paths are sufficient. ++ * ++ * @{ ++ */ ++ ++/** ++ * Append a new entry to the context's include path. ++ * ++ * @returns 1 on success, or 0 if the include path could not be added or is ++ * inaccessible. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_append(struct xkb_context *context, const char *path); ++ ++/** ++ * Append the default include paths to the context's include path. ++ * ++ * @returns 1 on success, or 0 if the primary include path could not be added. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_append_default(struct xkb_context *context); ++ ++/** ++ * Reset the context's include path to the default. ++ * ++ * Removes all entries from the context's include path, and inserts the ++ * default paths. ++ * ++ * @returns 1 on success, or 0 if the primary include path could not be added. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_reset_defaults(struct xkb_context *context); ++ ++/** ++ * Remove all entries from the context's include path. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_include_path_clear(struct xkb_context *context); ++ ++/** ++ * Get the number of paths in the context's include path. ++ * ++ * @memberof xkb_context ++ */ ++unsigned int ++xkb_context_num_include_paths(struct xkb_context *context); ++ ++/** ++ * Get a specific include path from the context's include path. ++ * ++ * @returns The include path at the specified index. If the index is ++ * invalid, returns NULL. ++ * ++ * @memberof xkb_context ++ */ ++const char * ++xkb_context_include_path_get(struct xkb_context *context, unsigned int index); ++ ++/** @} */ ++ ++/** ++ * @defgroup logging Logging Handling ++ * Manipulating how logging from this library is handled. ++ * ++ * @{ ++ */ ++ ++/** Specifies a logging level. */ ++enum xkb_log_level { ++ XKB_LOG_LEVEL_CRITICAL = 10, /**< Log critical internal errors only. */ ++ XKB_LOG_LEVEL_ERROR = 20, /**< Log all errors. */ ++ XKB_LOG_LEVEL_WARNING = 30, /**< Log warnings and errors. */ ++ XKB_LOG_LEVEL_INFO = 40, /**< Log information, warnings, and errors. */ ++ XKB_LOG_LEVEL_DEBUG = 50 /**< Log everything. */ ++}; ++ ++/** ++ * Set the current logging level. ++ * ++ * @param context The context in which to set the logging level. ++ * @param level The logging level to use. Only messages from this level ++ * and below will be logged. ++ * ++ * The default level is XKB_LOG_LEVEL_ERROR. The environment variable ++ * XKB_LOG_LEVEL, if set in the time the context was created, overrides the ++ * default value. It may be specified as a level number or name. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_level(struct xkb_context *context, ++ enum xkb_log_level level); ++ ++/** ++ * Get the current logging level. ++ * ++ * @memberof xkb_context ++ */ ++enum xkb_log_level ++xkb_context_get_log_level(struct xkb_context *context); ++ ++/** ++ * Sets the current logging verbosity. ++ * ++ * The library can generate a number of warnings which are not helpful to ++ * ordinary users of the library. The verbosity may be increased if more ++ * information is desired (e.g. when developing a new keymap). ++ * ++ * The default verbosity is 0. The environment variable XKB_LOG_VERBOSITY, ++ * if set in the time the context was created, overrides the default value. ++ * ++ * @param context The context in which to use the set verbosity. ++ * @param verbosity The verbosity to use. Currently used values are ++ * 1 to 10, higher values being more verbose. 0 would result in no verbose ++ * messages being logged. ++ * ++ * Most verbose messages are of level XKB_LOG_LEVEL_WARNING or lower. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_verbosity(struct xkb_context *context, int verbosity); ++ ++/** ++ * Get the current logging verbosity of the context. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_get_log_verbosity(struct xkb_context *context); ++ ++/** ++ * Set a custom function to handle logging messages. ++ * ++ * @param context The context in which to use the set logging function. ++ * @param log_fn The function that will be called for logging messages. ++ * Passing NULL restores the default function, which logs to stderr. ++ * ++ * By default, log messages from this library are printed to stderr. This ++ * function allows you to replace the default behavior with a custom ++ * handler. The handler is only called with messages which match the ++ * current logging level and verbosity settings for the context. ++ * level is the logging level of the message. @a format and @a args are ++ * the same as in the vprintf(3) function. ++ * ++ * You may use xkb_context_set_user_data() on the context, and then call ++ * xkb_context_get_user_data() from within the logging function to provide ++ * it with additional private context. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_fn(struct xkb_context *context, ++ void (*log_fn)(struct xkb_context *context, ++ enum xkb_log_level level, ++ const char *format, va_list args)); ++ ++/** @} */ ++ ++/** ++ * @defgroup keymap Keymap Creation ++ * Creating and destroying keymaps. ++ * ++ * @{ ++ */ ++ ++/** Flags for keymap compilation. */ ++enum xkb_keymap_compile_flags { ++ /** Do not apply any flags. */ ++ XKB_KEYMAP_COMPILE_NO_FLAGS = 0 ++}; ++ ++/** ++ * Create a keymap from RMLVO names. ++ * ++ * The primary keymap entry point: creates a new XKB keymap from a set of ++ * RMLVO (Rules + Model + Layouts + Variants + Options) names. ++ * ++ * @param context The context in which to create the keymap. ++ * @param names The RMLVO names to use. See xkb_rule_names. ++ * @param flags Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap compiled according to the RMLVO names, or NULL if ++ * the compilation failed. ++ * ++ * @sa xkb_rule_names ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_names(struct xkb_context *context, ++ const struct xkb_rule_names *names, ++ enum xkb_keymap_compile_flags flags); ++ ++/** The possible keymap formats. */ ++enum xkb_keymap_format { ++ /** The current/classic XKB text format, as generated by xkbcomp -xkb. */ ++ XKB_KEYMAP_FORMAT_TEXT_V1 = 1 ++}; ++ ++/** ++ * Create a keymap from a keymap file. ++ * ++ * @param context The context in which to create the keymap. ++ * @param file The keymap file to compile. ++ * @param format The text format of the keymap file to compile. ++ * @param flags Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap compiled from the given XKB keymap file, or NULL if ++ * the compilation failed. ++ * ++ * The file must contain a complete keymap. For example, in the ++ * XKB_KEYMAP_FORMAT_TEXT_V1 format, this means the file must contain one ++ * top level '%xkb_keymap' section, which in turn contains other required ++ * sections. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_file(struct xkb_context *context, FILE *file, ++ enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a keymap from a keymap string. ++ * ++ * This is just like xkb_keymap_new_from_file(), but instead of a file, gets ++ * the keymap as one enormous string. ++ * ++ * @see xkb_keymap_new_from_file() ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_string(struct xkb_context *context, const char *string, ++ enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a keymap from a memory buffer. ++ * ++ * This is just like xkb_keymap_new_from_string(), but takes a length argument ++ * so the input string does not have to be zero-terminated. ++ * ++ * @see xkb_keymap_new_from_string() ++ * @memberof xkb_keymap ++ * @since 0.3.0 ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_buffer(struct xkb_context *context, const char *buffer, ++ size_t length, enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Take a new reference on a keymap. ++ * ++ * @returns The passed in keymap. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_ref(struct xkb_keymap *keymap); ++ ++/** ++ * Release a reference on a keymap, and possibly free it. ++ * ++ * @param keymap The keymap. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_keymap ++ */ ++void ++xkb_keymap_unref(struct xkb_keymap *keymap); ++ ++/** ++ * Get the keymap as a string in the format from which it was created. ++ * @sa xkb_keymap_get_as_string() ++ **/ ++#define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1) ++ ++/** ++ * Get the compiled keymap as a string. ++ * ++ * @param keymap The keymap to get as a string. ++ * @param format The keymap format to use for the string. You can pass ++ * in the special value XKB_KEYMAP_USE_ORIGINAL_FORMAT to use the format ++ * from which the keymap was originally created. ++ * ++ * @returns The keymap as a NUL-terminated string, or NULL if unsuccessful. ++ * ++ * The returned string may be fed back into xkb_map_new_from_string() to get ++ * the exact same keymap (possibly in another process, etc.). ++ * ++ * The returned string is dynamically allocated and should be freed by the ++ * caller. ++ * ++ * @memberof xkb_keymap ++ */ ++char * ++xkb_keymap_get_as_string(struct xkb_keymap *keymap, ++ enum xkb_keymap_format format); ++ ++/** @} */ ++ ++/** ++ * @defgroup components Keymap Components ++ * Enumeration of state components in a keymap. ++ * ++ * @{ ++ */ ++ ++/** ++ * Get the minimum keycode in the keymap. ++ * ++ * @sa xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++xkb_keycode_t ++xkb_keymap_min_keycode(struct xkb_keymap *keymap); ++ ++/** ++ * Get the maximum keycode in the keymap. ++ * ++ * @sa xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++xkb_keycode_t ++xkb_keymap_max_keycode(struct xkb_keymap *keymap); ++ ++/** ++ * The iterator used by xkb_keymap_key_for_each(). ++ * ++ * @sa xkb_keymap_key_for_each ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++typedef void ++(*xkb_keymap_key_iter_t)(struct xkb_keymap *keymap, xkb_keycode_t key, ++ void *data); ++ ++/** ++ * Run a specified function for every valid keycode in the keymap. If a ++ * keymap is sparse, this function may be called fewer than ++ * (max_keycode - min_keycode + 1) times. ++ * ++ * @sa xkb_keymap_min_keycode() xkb_keymap_max_keycode() xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++void ++xkb_keymap_key_for_each(struct xkb_keymap *keymap, xkb_keymap_key_iter_t iter, ++ void *data); ++ ++/** ++ * Get the number of modifiers in the keymap. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_mod_index_t ++xkb_keymap_num_mods(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a modifier by index. ++ * ++ * @returns The name. If the index is invalid, returns NULL. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_mod_get_name(struct xkb_keymap *keymap, xkb_mod_index_t idx); ++ ++/** ++ * Get the index of a modifier by name. ++ * ++ * @returns The index. If no modifier with this name exists, returns ++ * XKB_MOD_INVALID. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_mod_index_t ++xkb_keymap_mod_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of layouts in the keymap. ++ * ++ * @sa xkb_layout_index_t xkb_rule_names xkb_keymap_num_layouts_for_key() ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_num_layouts(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a layout by index. ++ * ++ * @returns The name. If the index is invalid, or the layout does not have ++ * a name, returns NULL. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx); ++ ++/** ++ * Get the index of a layout by name. ++ * ++ * @returns The index. If no layout exists with this name, returns ++ * XKB_LAYOUT_INVALID. If more than one layout in the keymap has this name, ++ * returns the lowest index among them. ++ * ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of LEDs in the keymap. ++ * ++ * @warning The range [ 0...xkb_keymap_num_leds() ) includes all of the LEDs ++ * in the keymap, but may also contain inactive LEDs. When iterating over ++ * this range, you need the handle this case when calling functions such as ++ * xkb_keymap_led_get_name() or xkb_state_led_index_is_active(). ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_led_index_t ++xkb_keymap_num_leds(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a LED by index. ++ * ++ * @returns The name. If the index is invalid, returns NULL. ++ * ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_led_get_name(struct xkb_keymap *keymap, xkb_led_index_t idx); ++ ++/** ++ * Get the index of a LED by name. ++ * ++ * @returns The index. If no LED with this name exists, returns ++ * XKB_LED_INVALID. ++ * ++ * @memberof xkb_keymap ++ */ ++xkb_led_index_t ++xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of layouts for a specific key. ++ * ++ * This number can be different from xkb_keymap_num_layouts(), but is always ++ * smaller. It is the appropriate value to use when iterating over the ++ * layouts of a key. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_num_layouts_for_key(struct xkb_keymap *keymap, xkb_keycode_t key); ++ ++/** ++ * Get the number of shift levels for a specific key and layout. ++ * ++ * If @c layout is out of range for this key (that is, larger or equal to ++ * the value returned by xkb_keymap_num_layouts_for_key()), it is brought ++ * back into range in a manner consistent with xkb_state_key_get_layout(). ++ * ++ * @sa xkb_level_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_level_index_t ++xkb_keymap_num_levels_for_key(struct xkb_keymap *keymap, xkb_keycode_t key, ++ xkb_layout_index_t layout); ++ ++/** ++ * Get the keysyms obtained from pressing a key in a given layout and ++ * shift level. ++ * ++ * This function is like xkb_state_key_get_syms(), only the layout and ++ * shift level are not derived from the keyboard state but are instead ++ * specified explicitly. ++ * ++ * @param[in] keymap The keymap. ++ * @param[in] key The keycode of the key. ++ * @param[in] layout The layout for which to get the keysyms. ++ * @param[in] level The shift level in the layout for which to get the ++ * keysyms. This must be smaller than: ++ * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode ++ * @param[out] syms_out An immutable array of keysyms corresponding to the ++ * key in the given layout and shift level. ++ * ++ * If @c layout is out of range for this key (that is, larger or equal to ++ * the value returned by xkb_keymap_num_layouts_for_key()), it is brought ++ * back into range in a manner consistent with xkb_state_key_get_layout(). ++ * ++ * @returns The number of keysyms in the syms_out array. If no keysyms ++ * are produced by the key in the given layout and shift level, returns 0 ++ * and sets syms_out to NULL. ++ * ++ * @sa xkb_state_key_get_syms() ++ * @memberof xkb_keymap ++ */ ++int ++xkb_keymap_key_get_syms_by_level(struct xkb_keymap *keymap, ++ xkb_keycode_t key, ++ xkb_layout_index_t layout, ++ xkb_level_index_t level, ++ const xkb_keysym_t **syms_out); ++ ++/** ++ * Determine whether a key should repeat or not. ++ * ++ * A keymap may specify different repeat behaviors for different keys. ++ * Most keys should generally exhibit repeat behavior; for example, holding ++ * the 'a' key down in a text editor should normally insert a single 'a' ++ * character every few milliseconds, until the key is released. However, ++ * there are keys which should not or do not need to be repeated. For ++ * example, repeating modifier keys such as Left/Right Shift or Caps Lock ++ * is not generally useful or desired. ++ * ++ * @returns 1 if the key should repeat, 0 otherwise. ++ * ++ * @memberof xkb_keymap ++ */ ++int ++xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key); ++ ++/** @} */ ++ ++/** ++ * @defgroup state Keyboard State ++ * Creating, destroying and manipulating keyboard state objects. ++ * ++ * @{ ++ */ ++ ++/** ++ * Create a new keyboard state object. ++ * ++ * @param keymap The keymap which the state will use. ++ * ++ * @returns A new keyboard state object, or NULL on failure. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_state_new(struct xkb_keymap *keymap); ++ ++/** ++ * Take a new reference on a keyboard state object. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_state_ref(struct xkb_state *state); ++ ++/** ++ * Release a reference on a keybaord state object, and possibly free it. ++ * ++ * @param state The state. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_state ++ */ ++void ++xkb_state_unref(struct xkb_state *state); ++ ++/** ++ * Get the keymap which a keyboard state object is using. ++ * ++ * @returns The keymap which was passed to xkb_state_new() when creating ++ * this state object. ++ * ++ * This function does not take a new reference on the keymap; you must ++ * explicitly reference it yourself if you plan to use it beyond the ++ * lifetime of the state. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_keymap * ++xkb_state_get_keymap(struct xkb_state *state); ++ ++/** Specifies the direction of the key (press / release). */ ++enum xkb_key_direction { ++ XKB_KEY_UP, /**< The key was released. */ ++ XKB_KEY_DOWN /**< The key was pressed. */ ++}; ++ ++/** ++ * Modifier and layout types for state objects. This enum is bitmaskable, ++ * e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to ++ * exclude locked modifiers. ++ * ++ * In XKB, the DEPRESSED components are also known as 'base'. ++ */ ++enum xkb_state_component { ++ /** Depressed modifiers, i.e. a key is physically holding them. */ ++ XKB_STATE_MODS_DEPRESSED = (1 << 0), ++ /** Latched modifiers, i.e. will be unset after the next non-modifier ++ * key press. */ ++ XKB_STATE_MODS_LATCHED = (1 << 1), ++ /** Locked modifiers, i.e. will be unset after the key provoking the ++ * lock has been pressed again. */ ++ XKB_STATE_MODS_LOCKED = (1 << 2), ++ /** Effective modifiers, i.e. currently active and affect key ++ * processing (derived from the other state components). ++ * Use this unless you explictly care how the state came about. */ ++ XKB_STATE_MODS_EFFECTIVE = (1 << 3), ++ /** Depressed layout, i.e. a key is physically holding it. */ ++ XKB_STATE_LAYOUT_DEPRESSED = (1 << 4), ++ /** Latched layout, i.e. will be unset after the next non-modifier ++ * key press. */ ++ XKB_STATE_LAYOUT_LATCHED = (1 << 5), ++ /** Locked layout, i.e. will be unset after the key provoking the lock ++ * has been pressed again. */ ++ XKB_STATE_LAYOUT_LOCKED = (1 << 6), ++ /** Effective layout, i.e. currently active and affects key processing ++ * (derived from the other state components). ++ * Use this unless you explictly care how the state came about. */ ++ XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7), ++ /** LEDs (derived from the other state components). */ ++ XKB_STATE_LEDS = (1 << 8) ++}; ++ ++/** ++ * Update the keyboard state to reflect a given key being pressed or ++ * released. ++ * ++ * This entry point is intended for programs which track the keyboard state ++ * explictly (like an evdev client). If the state is serialized to you by ++ * a master process (like a Wayland compositor) using functions like ++ * xkb_state_serialize_mods(), you should use xkb_state_update_mask() instead. ++ * The two functins should not generally be used together. ++ * ++ * A series of calls to this function should be consistent; that is, a call ++ * with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key ++ * is pressed twice, it should be released twice; etc. Otherwise (e.g. due ++ * to missed input events), situations like "stuck modifiers" may occur. ++ * ++ * This function is often used in conjunction with the function ++ * xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example, ++ * when handling a key event. In this case, you should prefer to get the ++ * keysyms *before* updating the key, such that the keysyms reported for ++ * the key event are not affected by the event itself. This is the ++ * conventional behavior. ++ * ++ * @returns A mask of state components that have changed as a result of ++ * the update. If nothing in the state has changed, returns 0. ++ * ++ * @memberof xkb_state ++ * ++ * @sa xkb_state_update_mask() ++ */ ++enum xkb_state_component ++xkb_state_update_key(struct xkb_state *state, xkb_keycode_t key, ++ enum xkb_key_direction direction); ++ ++/** ++ * Update a keyboard state from a set of explicit masks. ++ * ++ * This entry point is intended for window systems and the like, where a ++ * master process holds an xkb_state, then serializes it over a wire ++ * protocol, and clients then use the serialization to feed in to their own ++ * xkb_state. ++ * ++ * All parameters must always be passed, or the resulting state may be ++ * incoherent. ++ * ++ * The serialization is lossy and will not survive round trips; it must only ++ * be used to feed slave state objects, and must not be used to update the ++ * master state. ++ * ++ * If you do not fit the description above, you should use ++ * xkb_state_update_key() instead. The two functions should not generally be ++ * used together. ++ * ++ * @returns A mask of state components that have changed as a result of ++ * the update. If nothing in the state has changed, returns 0. ++ * ++ * @memberof xkb_state ++ * ++ * @sa xkb_state_component ++ * @sa xkb_state_update_key ++ */ ++enum xkb_state_component ++xkb_state_update_mask(struct xkb_state *state, ++ xkb_mod_mask_t depressed_mods, ++ xkb_mod_mask_t latched_mods, ++ xkb_mod_mask_t locked_mods, ++ xkb_layout_index_t depressed_layout, ++ xkb_layout_index_t latched_layout, ++ xkb_layout_index_t locked_layout); ++ ++/** ++ * Get the keysyms obtained from pressing a particular key in a given ++ * keyboard state. ++ * ++ * Get the keysyms for a key according to the current active layout, ++ * modifiers and shift level for the key, as determined by a keyboard ++ * state. ++ * ++ * @param[in] state The keyboard state object. ++ * @param[in] key The keycode of the key. ++ * @param[out] syms_out An immutable array of keysyms corresponding the ++ * key in the given keyboard state. ++ * ++ * As an extension to XKB, this function can return more than one keysym. ++ * If you do not want to handle this case, you can use ++ * xkb_state_key_get_one_sym() for a simpler interface. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * (This might change). ++ * ++ * @returns The number of keysyms in the syms_out array. If no keysyms ++ * are produced by the key in the given keyboard state, returns 0 and sets ++ * syms_out to NULL. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key, ++ const xkb_keysym_t **syms_out); ++ ++/** ++ * Get the Unicode/UTF-8 string obtained from pressing a particular key ++ * in a given keyboard state. ++ * ++ * @param[in] state The keyboard state object. ++ * @param[in] key The keycode of the key. ++ * @param[out] buffer A buffer to write the string into. ++ * @param[in] size Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated). ++ * ++ * @returns The number of bytes required for the string, excluding the ++ * NUL byte. If there is nothing to write, returns 0. ++ * ++ * You may check if truncation has occurred by comparing the return value ++ * with the size of @p buffer, similarly to the snprintf(3) function. ++ * You may safely pass NULL and 0 to @p buffer and @p size to find the ++ * required size (without the NUL-byte). ++ * ++ * This function performs Capitalization and Control @ref ++ * keysym-transformations. ++ * ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++int ++xkb_state_key_get_utf8(struct xkb_state *state, xkb_keycode_t key, ++ char *buffer, size_t size); ++ ++/** ++ * Get the Unicode/UTF-32 codepoint obtained from pressing a particular ++ * key in a a given keyboard state. ++ * ++ * @returns The UTF-32 representation for the key, if it consists of only ++ * a single codepoint. Otherwise, returns 0. ++ * ++ * This function performs Capitalization and Control @ref ++ * keysym-transformations. ++ * ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++uint32_t ++xkb_state_key_get_utf32(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the single keysym obtained from pressing a particular key in a ++ * given keyboard state. ++ * ++ * This function is similar to xkb_state_key_get_syms(), but intended ++ * for users which cannot or do not want to handle the case where ++ * multiple keysyms are returned (in which case this function is ++ * preferred). ++ * ++ * @returns The keysym. If the key does not have exactly one keysym, ++ * returns XKB_KEY_NoSymbol ++ * ++ * This function performs Capitalization @ref keysym-transformations. ++ * ++ * @sa xkb_state_key_get_syms() ++ * @memberof xkb_state ++ */ ++xkb_keysym_t ++xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the effective layout index for a key in a given keyboard state. ++ * ++ * @returns The layout index for the key in the given keyboard state. If ++ * the given keycode is invalid, or if the key is not included in any ++ * layout at all, returns XKB_LAYOUT_INVALID. ++ * ++ * @invariant If the returned layout is valid, the following always holds: ++ * @code ++ * xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key) ++ * @endcode ++ * ++ * @memberof xkb_state ++ */ ++xkb_layout_index_t ++xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the effective shift level for a key in a given keyboard state and ++ * layout. ++ * ++ * @param state The keyboard state. ++ * @param key The keycode of the key. ++ * @param layout The layout for which to get the shift level. This must be ++ * smaller than: ++ * @code xkb_keymap_num_layouts_for_key(keymap, key) @endcode ++ * usually it would be: ++ * @code xkb_state_key_get_layout(state, key) @endcode ++ * ++ * @return The shift level index. If the key or layout are invalid, ++ * returns XKB_LEVEL_INVALID. ++ * ++ * @invariant If the returned level is valid, the following always holds: ++ * @code ++ * xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout) ++ * @endcode ++ * ++ * @memberof xkb_state ++ */ ++xkb_level_index_t ++xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key, ++ xkb_layout_index_t layout); ++ ++/** ++ * Match flags for xkb_state_mod_indices_are_active() and ++ * xkb_state_mod_names_are_active(), specifying the conditions for a ++ * successful match. XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with ++ * the other modes. ++ */ ++enum xkb_state_match { ++ /** Returns true if any of the modifiers are active. */ ++ XKB_STATE_MATCH_ANY = (1 << 0), ++ /** Returns true if all of the modifiers are active. */ ++ XKB_STATE_MATCH_ALL = (1 << 1), ++ /** Makes matching non-exclusive, i.e. will not return false if a ++ * modifier not specified in the arguments is active. */ ++ XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16) ++}; ++ ++/** ++ * The counterpart to xkb_state_update_mask for modifiers, to be used on ++ * the server side of serialization. ++ * ++ * @param state The keyboard state. ++ * @param components A mask of the modifier state components to serialize. ++ * State components other than XKB_STATE_MODS_* are ignored. ++ * If XKB_STATE_MODS_EFFECTIVE is included, all other state components are ++ * ignored. ++ * ++ * @returns A xkb_mod_mask_t representing the given components of the ++ * modifier state. ++ * ++ * This function should not be used in regular clients; please use the ++ * xkb_state_mod_*_is_active API instead. ++ * ++ * @memberof xkb_state ++ */ ++xkb_mod_mask_t ++xkb_state_serialize_mods(struct xkb_state *state, ++ enum xkb_state_component components); ++ ++/** ++ * The counterpart to xkb_state_update_mask for layouts, to be used on ++ * the server side of serialization. ++ * ++ * @param state The keyboard state. ++ * @param components A mask of the layout state components to serialize. ++ * State components other than XKB_STATE_LAYOUT_* are ignored. ++ * If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are ++ * ignored. ++ * ++ * @returns A layout index representing the given components of the ++ * layout state. ++ * ++ * This function should not be used in regular clients; please use the ++ * xkb_state_layout_*_is_active API instead. ++ * ++ * @memberof xkb_state ++ */ ++xkb_layout_index_t ++xkb_state_serialize_layout(struct xkb_state *state, ++ enum xkb_state_component components); ++ ++/** ++ * Test whether a modifier is active in a given keyboard state by name. ++ * ++ * @returns 1 if the modifier is active, 0 if it is not. If the modifier ++ * name does not exist in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_name_is_active(struct xkb_state *state, const char *name, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a set of modifiers are active in a given keyboard state by ++ * name. ++ * ++ * @param state The keyboard state. ++ * @param type The component of the state against which to match the ++ * given modifiers. ++ * @param match The manner by which to match the state against the ++ * given modifiers. ++ * @param ... The set of of modifier names to test, terminated by a NULL ++ * argument (sentinel). ++ * ++ * @returns 1 if the modifiers are active, 0 if they are not. If any of ++ * the modifier names do not exist in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_names_are_active(struct xkb_state *state, ++ enum xkb_state_component type, ++ enum xkb_state_match match, ++ ...); ++ ++/** ++ * Test whether a modifier is active in a given keyboard state by index. ++ * ++ * @returns 1 if the modifier is active, 0 if it is not. If the modifier ++ * index is invalid in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_index_is_active(struct xkb_state *state, xkb_mod_index_t idx, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a set of modifiers are active in a given keyboard state by ++ * index. ++ * ++ * @param state The keyboard state. ++ * @param type The component of the state against which to match the ++ * given modifiers. ++ * @param match The manner by which to match the state against the ++ * given modifiers. ++ * @param ... The set of of modifier indices to test, terminated by a ++ * XKB_MOD_INVALID argument (sentinel). ++ * ++ * @returns 1 if the modifiers are active, 0 if they are not. If any of ++ * the modifier indices are invalid in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_indices_are_active(struct xkb_state *state, ++ enum xkb_state_component type, ++ enum xkb_state_match match, ++ ...); ++ ++/** ++ * @page consumed-modifiers Consumed Modifiers ++ * @parblock ++ * ++ * Some functions, like xkb_state_key_get_syms(), look at the state of ++ * the modifiers in the keymap and derive from it the correct shift level ++ * to use for the key. For example, in a US layout, pressing the key ++ * labeled \ while the Shift modifier is active, generates the keysym ++ * 'A'. In this case, the Shift modifier is said to be "consumed". ++ * However, the Num Lock modifier does not affect this translation at all, ++ * even if it is active, so it is not consumed by this translation. ++ * ++ * It may be desirable for some application to not reuse consumed modifiers ++ * for further processing, e.g. for hotkeys or keyboard shortcuts. To ++ * understand why, consider some requirements from a standard shortcut ++ * mechanism, and how they are implemented: ++ * ++ * 1. The shortcut's modifiers must match exactly to the state. For ++ * example, it is possible to bind separate actions to \\ ++ * and to \\\. Further, if only \\ is ++ * bound to an action, pressing \\\ should not ++ * trigger the shortcut. ++ * Effectively, this means that the modifiers are compared using the ++ * equality operator (==). ++ * ++ * 2. Only relevant modifiers are considered for the matching. For example, ++ * Caps Lock and Num Lock should not generally affect the matching, e.g. ++ * when matching \\ against the state, it does not matter ++ * whether Num Lock is active or not. These relevant, or "significant", ++ * modifiers usually include Alt, Control, Shift, Super and similar. ++ * Effectively, this means that non-significant modifiers are masked out, ++ * before doing the comparison as described above. ++ * ++ * 3. The matching must be independent of the layout/keymap. For example, ++ * the \ (+) symbol is found on the first level on some layouts, ++ * but requires holding Shift on others. If you simply bind the action ++ * to the \ keysym, it would work for the unshifted kind, but ++ * not for the others, because the match against Shift would fail. If ++ * you bind the action to \\, only the shifted kind would ++ * work. So what is needed is to recognize that Shift is used up in the ++ * translation of the keysym itself, and therefore should not be included ++ * in the matching. ++ * Effectively, this means that consumed modifiers (Shift in this example) ++ * are masked out as well, before doing the comparison. ++ * ++ * In summary, this is how the matching would be performed: ++ * @code ++ * (keysym == shortcut_keysym) && ++ * ((state_mods & ~consumed_mods & significant_mods) == shortcut_mods) ++ * @endcode ++ * ++ * @c state_mods are the modifiers reported by ++ * xkb_state_mod_index_is_active() and similar functions. ++ * @c consumed_mods are the modifiers reported by ++ * xkb_state_mod_index_is_consumed() and similar functions. ++ * @c significant_mods are decided upon by the application/toolkit/user; ++ * it is up to them to decide whether these are configurable or hard-coded. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * Test whether a modifier is consumed by keyboard state translation for ++ * a key. ++ * ++ * @returns 1 if the modifier is consumed, 0 if it is not. If the modifier ++ * index is not valid in the keymap, returns -1. ++ * ++ * @sa xkb_state_mod_mask_remove_consumed() ++ * @sa xkb_state_key_get_consumed_mods() ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_index_is_consumed(struct xkb_state *state, xkb_keycode_t key, ++ xkb_mod_index_t idx); ++ ++/** ++ * Remove consumed modifiers from a modifier mask for a key. ++ * ++ * Takes the given modifier mask, and removes all modifiers which are ++ * consumed for that particular key (as in xkb_state_mod_index_is_consumed()). ++ * ++ * @sa xkb_state_mod_index_is_consumed() ++ * @memberof xkb_state ++ */ ++xkb_mod_mask_t ++xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key, ++ xkb_mod_mask_t mask); ++ ++/** ++ * Get the mask of modifiers consumed by translating a given key. ++ * ++ * @returns a mask of the consumed modifiers. ++ * ++ * @sa xkb_state_mod_index_is_consumed() ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++xkb_mod_mask_t ++xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Test whether a layout is active in a given keyboard state by name. ++ * ++ * @returns 1 if the layout is active, 0 if it is not. If no layout with ++ * this name exists in the keymap, return -1. ++ * ++ * If multiple layouts in the keymap have this name, the one with the lowest ++ * index is tested. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_layout_name_is_active(struct xkb_state *state, const char *name, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a layout is active in a given keyboard state by index. ++ * ++ * @returns 1 if the layout is active, 0 if it is not. If the layout index ++ * is not valid in the keymap, returns -1. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_layout_index_is_active(struct xkb_state *state, ++ xkb_layout_index_t idx, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a LED is active in a given keyboard state by name. ++ * ++ * @returns 1 if the LED is active, 0 if it not. If no LED with this name ++ * exists in the keymap, returns -1. ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_led_name_is_active(struct xkb_state *state, const char *name); ++ ++/** ++ * Test whether a LED is active in a given keyboard state by index. ++ * ++ * @returns 1 if the LED is active, 0 if it not. If the LED index is not ++ * valid in the keymap, returns -1. ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_led_index_is_active(struct xkb_state *state, xkb_led_index_t idx); ++ ++/** @} */ ++ ++/* Leave this include last, so it can pick up our types, etc. */ ++#include ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_H_ */ +diff --git a/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro b/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro +index faea54b..0967cb3 100644 +--- a/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro ++++ b/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro +@@ -1,6 +1,7 @@ + TEMPLATE = subdirs + + qtHaveModule(dbus) { ++!mac:!win32:SUBDIRS += fcitx + !mac:!win32:SUBDIRS += ibus + } + +diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +index f3a0216..643ebdd 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm ++++ b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +@@ -210,7 +210,7 @@ QT_END_NAMESPACE + if (reflectionDelegate) { + if ([reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)]) + return [reflectionDelegate applicationShouldTerminate:sender]; +- return NSTerminateNow; ++ //return NSTerminateNow; + } + + if ([self canQuit]) { +diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm +index 713758c..9c695aa 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm ++++ b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm +@@ -94,6 +94,7 @@ QT_USE_NAMESPACE + QCocoaSystemTrayIcon *systray; + NSStatusItem *item; + QCocoaMenu *menu; ++ bool menuVisible, iconSelected; + QIcon icon; + QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; + } +@@ -197,7 +198,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) + // (device independent pixels). The menu height on past and + // current OS X versions is 22 points. Provide some future-proofing + // by deriving the icon height from the menu height. +- const int padding = 4; ++ const int padding = 0; + const int menuHeight = [[[NSApplication sharedApplication] mainMenu] menuBarHeight]; + const int maxImageHeight = menuHeight - padding; + +@@ -207,8 +208,9 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) + // devicePixelRatio for the "best" screen on the system. + qreal devicePixelRatio = qApp->devicePixelRatio(); + const int maxPixmapHeight = maxImageHeight * devicePixelRatio; ++ const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; + QSize selectedSize; +- Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes())) { ++ Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { + // Select a pixmap based on the height. We want the largest pixmap + // with a height smaller or equal to maxPixmapHeight. The pixmap + // may rectangular; assume it has a reasonable size. If there is +@@ -224,9 +226,9 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) + + // Handle SVG icons, which do not return anything for availableSizes(). + if (!selectedSize.isValid()) +- selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight)); ++ selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight), mode); + +- QPixmap pixmap = icon.pixmap(selectedSize); ++ QPixmap pixmap = icon.pixmap(selectedSize, mode); + + // Draw a low-resolution icon if there is not enough pixels for a retina + // icon. This prevents showing a small icon on retina displays. +@@ -373,6 +375,10 @@ QT_END_NAMESPACE + Q_UNUSED(notification); + down = NO; + ++ parent->iconSelected = false; ++ parent->systray->updateIcon(parent->icon); ++ parent->menuVisible = false; ++ + [self setNeedsDisplay:YES]; + } + +@@ -381,6 +387,9 @@ QT_END_NAMESPACE + down = YES; + int clickCount = [mouseEvent clickCount]; + [self setNeedsDisplay:YES]; ++ ++ parent->iconSelected = (clickCount != 2) && parent->menu; ++ parent->systray->updateIcon(parent->icon); + + if (clickCount == 2) { + [self menuTrackingDone:nil]; +@@ -398,6 +407,10 @@ QT_END_NAMESPACE + -(void)mouseUp:(NSEvent *)mouseEvent + { + Q_UNUSED(mouseEvent); ++ ++ parent->iconSelected = false; ++ parent->systray->updateIcon(parent->icon); ++ + [self menuTrackingDone:nil]; + } + +@@ -409,6 +422,10 @@ QT_END_NAMESPACE + -(void)rightMouseUp:(NSEvent *)mouseEvent + { + Q_UNUSED(mouseEvent); ++ ++ parent->iconSelected = false; ++ parent->systray->updateIcon(parent->icon); ++ + [self menuTrackingDone:nil]; + } + +@@ -424,7 +441,7 @@ QT_END_NAMESPACE + } + + -(void)drawRect:(NSRect)rect { +- [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:down]; ++ [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; + [super drawRect:rect]; + } + @end +@@ -437,6 +454,7 @@ QT_END_NAMESPACE + if (self) { + item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; + menu = 0; ++ menuVisible = false; + systray = sys; + imageCell = [[QNSImageView alloc] initWithParent:self]; + [item setView: imageCell]; +@@ -481,6 +499,7 @@ QT_END_NAMESPACE + selector:@selector(menuTrackingDone:) + name:NSMenuDidEndTrackingNotification + object:m]; ++ menuVisible = true; + [item popUpStatusItemMenu: m]; + } + } +diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +index 92fc66a..d18884a 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm ++++ b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +@@ -142,7 +142,7 @@ static bool isMouseEvent(NSEvent *ev) + if (!self.window.delegate) + return; // Already detached, pending NSAppKitDefined event + +- if (pw && pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) { ++ if (pw && pw->frameStrutEventsEnabled() && pw->m_synchedWindowState != Qt::WindowMinimized && pw->m_isExposed && isMouseEvent(theEvent)) { + NSPoint loc = [theEvent locationInWindow]; + NSRect windowFrame = [self.window convertRectFromScreen:[self.window frame]]; + NSRect contentFrame = [[self.window contentView] frame]; +@@ -924,6 +924,14 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) + [m_nsWindow setRepresentedFilename: fi.exists() ? QCFString::toNSString(filePath) : @""]; + } + ++qreal _win_devicePixelRatio() { ++ qreal result = 1.0; ++ foreach (QScreen *screen, QGuiApplication::screens()) { ++ result = qMax(result, screen->devicePixelRatio()); ++ } ++ return result; ++} ++ + void QCocoaWindow::setWindowIcon(const QIcon &icon) + { + QCocoaAutoReleasePool pool; +@@ -939,7 +947,8 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon) + if (icon.isNull()) { + [iconButton setImage:nil]; + } else { +- QPixmap pixmap = icon.pixmap(QSize(22, 22)); ++ CGFloat hgt = 16. * _win_devicePixelRatio(); ++ QPixmap pixmap = icon.pixmap(QSize(hgt, hgt)); + NSImage *image = static_cast(qt_mac_create_nsimage(pixmap)); + [iconButton setImage:image]; + [image release]; +diff --git a/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/qtbase/src/plugins/platforms/cocoa/qnsview.mm +index d44cdb3..cfc8705 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qnsview.mm ++++ b/qtbase/src/plugins/platforms/cocoa/qnsview.mm +@@ -1348,7 +1348,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) + #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 + if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { + // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. +- if (phase == NSEventPhaseMayBegin) { ++ if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) { + m_scrolling = true; + ph = Qt::ScrollBegin; + } +@@ -1489,6 +1489,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) + && qtKey == Qt::Key_Period) { + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; + return YES; ++ } else if ([nsevent modifierFlags] & NSControlKeyMask ++ && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { ++ [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; ++ return YES; + } + } + return [super performKeyEquivalent:nsevent]; +diff --git a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +index da0ba27..1d42b79 100644 +--- a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp ++++ b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +@@ -713,6 +713,8 @@ public: + QList selectedFiles() const; + void setSelectedFiles(const QList &); + QString selectedFile() const; ++ void setSelectedRemoteContent(const QByteArray &); ++ QByteArray selectedRemoteContent() const; + + private: + class Data : public QSharedData { +@@ -720,6 +722,7 @@ private: + QUrl directory; + QString selectedNameFilter; + QList selectedFiles; ++ QByteArray selectedRemoteContent; + QMutex mutex; + }; + QExplicitlySharedDataPointer m_data; +@@ -773,6 +776,20 @@ inline void QWindowsFileDialogSharedData::setSelectedFiles(const QList &ur + m_data->selectedFiles = urls; + } + ++inline QByteArray QWindowsFileDialogSharedData::selectedRemoteContent() const ++{ ++ m_data->mutex.lock(); ++ const QByteArray result = m_data->selectedRemoteContent; ++ m_data->mutex.unlock(); ++ return result; ++} ++ ++inline void QWindowsFileDialogSharedData::setSelectedRemoteContent(const QByteArray &c) ++{ ++ QMutexLocker(&m_data->mutex); ++ m_data->selectedRemoteContent = c; ++} ++ + inline void QWindowsFileDialogSharedData::fromOptions(const QSharedPointer &o) + { + QMutexLocker (&m_data->mutex); +@@ -896,6 +913,7 @@ public: + // Return the result for tracking in OnFileOk(). Differs from selection for + // example by appended default suffixes, etc. + virtual QList dialogResult() const = 0; ++ virtual QByteArray dialogRemoteContent() const { return QByteArray(); } + + inline void onFolderChange(IShellItem *); + inline void onSelectionChange(); +@@ -1332,8 +1350,15 @@ void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const + { + // Hack to prevent CLSIDs from being set as file name due to + // QFileDialogPrivate::initialSelection() being QString-based. +- if (!isClsid(fileName)) +- m_fileDialog->SetFileName((wchar_t*)fileName.utf16()); ++ if (!isClsid(fileName)) ++ { ++ QString file = QDir::toNativeSeparators(fileName); ++ int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); ++ if (lastBackSlash >= 0) { ++ file = file.mid(lastBackSlash + 1); ++ } ++ m_fileDialog->SetFileName((wchar_t*)file.utf16());; ++ } + } + + // Return the index of the selected filter, accounting for QFileDialog +@@ -1403,6 +1428,7 @@ bool QWindowsNativeFileDialogBase::onFileOk() + { + // Store selected files as GetResults() returns invalid data after the dialog closes. + m_data.setSelectedFiles(dialogResult()); ++ m_data.setSelectedRemoteContent(dialogRemoteContent()); + return true; + } + +@@ -1531,6 +1557,7 @@ public: + QWindowsNativeFileDialogBase(data) {} + virtual QList selectedFiles() const; + virtual QList dialogResult() const; ++ virtual QByteArray dialogRemoteContent() const; + + private: + inline IFileOpenDialog *openFileDialog() const +@@ -1546,6 +1573,54 @@ QList QWindowsNativeOpenFileDialog::dialogResult() const + return result; + } + ++QByteArray QWindowsNativeOpenFileDialog::dialogRemoteContent() const { ++ QByteArray result; ++ IShellItemArray *items = 0; ++ if (FAILED(openFileDialog()->GetResults(&items)) || !items) ++ return result; ++ DWORD itemCount = 0; ++ if (FAILED(items->GetCount(&itemCount)) || !itemCount) ++ return result; ++ for (DWORD i = 0; i < itemCount; ++i) { ++ IShellItem *item = 0; ++ if (SUCCEEDED(items->GetItemAt(i, &item))) { ++ SFGAOF attributes = 0; ++ // Check whether it has a file system representation? ++ if (FAILED(item->GetAttributes(SFGAO_FILESYSTEM, &attributes)) || (attributes & SFGAO_FILESYSTEM)) { ++ LPWSTR name = 0; ++ if (SUCCEEDED(item->GetDisplayName(SIGDN_FILESYSPATH, &name))) { ++ CoTaskMemFree(name); ++ continue; ++ } ++ } ++ if (FAILED(item->GetAttributes(SFGAO_STREAM, &attributes)) || !(attributes & SFGAO_STREAM)) ++ continue; ++ ++ IBindCtx *bind = 0; ++ if (FAILED(CreateBindCtx(0, &bind))) ++ continue; ++ ++ IStream *stream = 0; ++ if (FAILED(item->BindToHandler(bind, BHID_Stream, IID_IStream, reinterpret_cast(&stream)))) ++ continue; ++ ++ STATSTG stat = { 0 }; ++ if (FAILED(stream->Stat(&stat, STATFLAG_NONAME)) || !stat.cbSize.QuadPart) ++ continue; ++ ++ quint64 fullSize = stat.cbSize.QuadPart; ++ result.resize(fullSize); ++ ULONG read = 0; ++ HRESULT r = stream->Read(result.data(), fullSize, &read); ++ if (r == S_FALSE || r == S_OK) ++ return result; ++ ++ result.clear(); ++ } ++ } ++ return result; ++} ++ + QList QWindowsNativeOpenFileDialog::selectedFiles() const + { + QList result; +@@ -1609,6 +1684,7 @@ public: + virtual QUrl directory() const Q_DECL_OVERRIDE; + virtual void selectFile(const QUrl &filename) Q_DECL_OVERRIDE; + virtual QList selectedFiles() const Q_DECL_OVERRIDE; ++ virtual QByteArray selectedRemoteContent() const Q_DECL_OVERRIDE; + virtual void setFilter() Q_DECL_OVERRIDE; + virtual void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE; + virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; +@@ -1702,6 +1778,11 @@ QList QWindowsFileDialogHelper::selectedFiles() const + return m_data.selectedFiles(); + } + ++QByteArray QWindowsFileDialogHelper::selectedRemoteContent() const ++{ ++ return m_data.selectedRemoteContent(); ++} ++ + void QWindowsFileDialogHelper::setFilter() + { + qCDebug(lcQpaDialogs) << __FUNCTION__; +@@ -1992,6 +2073,7 @@ public: + virtual QUrl directory() const Q_DECL_OVERRIDE; + virtual void selectFile(const QUrl &url) Q_DECL_OVERRIDE; + virtual QList selectedFiles() const Q_DECL_OVERRIDE; ++ virtual QByteArray selectedRemoteContent() const Q_DECL_OVERRIDE; + virtual void setFilter() Q_DECL_OVERRIDE {} + virtual void selectNameFilter(const QString &) Q_DECL_OVERRIDE; + virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; +@@ -2035,6 +2117,11 @@ QList QWindowsXpFileDialogHelper::selectedFiles() const + return m_data.selectedFiles(); + } + ++QByteArray QWindowsXpFileDialogHelper::selectedRemoteContent() const ++{ ++ return m_data.selectedRemoteContent(); ++} ++ + void QWindowsXpFileDialogHelper::selectNameFilter(const QString &f) + { + m_data.setSelectedNameFilter(f); // Dialog cannot be updated at run-time. +diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +index 543c081..d80429b 100644 +--- a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp ++++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +@@ -973,7 +973,7 @@ void QWindowsWindow::destroyWindow() + // Clear any transient child relationships as Windows will otherwise destroy them (QTBUG-35499, QTBUG-36666) + if (QWindow *transientChild = findTransientChild(window())) + if (QWindowsWindow *tw = QWindowsWindow::baseWindowOf(transientChild)) +- tw->updateTransientParent(); ++ tw->clearTransientParent(); + QWindowsContext *context = QWindowsContext::instance(); + if (context->windowUnderMouse() == window()) + context->clearWindowUnderMouse(); +@@ -1178,11 +1178,24 @@ void QWindowsWindow::updateTransientParent() const + if (const QWindowsWindow *tw = QWindowsWindow::baseWindowOf(tp)) + if (!tw->testFlag(WithinDestroy)) // Prevent destruction by parent window (QTBUG-35499, QTBUG-36666) + newTransientParent = tw->handle(); +- if (newTransientParent != oldTransientParent) ++ if (newTransientParent && newTransientParent != oldTransientParent) + SetWindowLongPtr(m_data.hwnd, GWL_HWNDPARENT, (LONG_PTR)newTransientParent); + #endif // !Q_OS_WINCE + } + ++void QWindowsWindow::clearTransientParent() const ++{ ++#ifndef Q_OS_WINCE ++ if (window()->type() == Qt::Popup) ++ return; // QTBUG-34503, // a popup stays on top, no parent, see also WindowCreationData::fromWindow(). ++ // Update transient parent. ++ const HWND oldTransientParent = transientParentHwnd(m_data.hwnd); ++ HWND newTransientParent = 0; ++ if (newTransientParent != oldTransientParent) ++ SetWindowLongPtr(m_data.hwnd, GWL_HWNDPARENT, (LONG_PTR)newTransientParent); ++#endif // !Q_OS_WINCE ++} ++ + static inline bool testShowWithoutActivating(const QWindow *window) + { + // QWidget-attribute Qt::WA_ShowWithoutActivating . +diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/qtbase/src/plugins/platforms/windows/qwindowswindow.h +index fff90b4..71d060b 100644 +--- a/qtbase/src/plugins/platforms/windows/qwindowswindow.h ++++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.h +@@ -273,6 +273,7 @@ private: + inline void setWindowState_sys(Qt::WindowState newState); + inline void setParent_sys(const QPlatformWindow *parent); + inline void updateTransientParent() const; ++ inline void clearTransientParent() const; + void destroyWindow(); + inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } + void setDropSiteEnabled(bool enabled); +diff --git a/qtbase/src/widgets/dialogs/qfiledialog.cpp b/qtbase/src/widgets/dialogs/qfiledialog.cpp +index a9d5574..ea8aa43 100644 +--- a/qtbase/src/widgets/dialogs/qfiledialog.cpp ++++ b/qtbase/src/widgets/dialogs/qfiledialog.cpp +@@ -1199,6 +1199,14 @@ QList QFileDialogPrivate::userSelectedFiles() const + return files; + } + ++QByteArray QFileDialogPrivate::userSelectedRemoteContent() const ++{ ++ if (nativeDialogInUse) ++ return selectedRemoteContent_sys(); ++ ++ return QByteArray(); ++} ++ + QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList &filesToFix) const + { + QStringList files; +@@ -1262,6 +1270,13 @@ QStringList QFileDialog::selectedFiles() const + return files; + } + ++QByteArray QFileDialog::selectedRemoteContent() const ++{ ++ Q_D(const QFileDialog); ++ ++ return d->userSelectedRemoteContent(); ++} ++ + /*! + Returns a list of urls containing the selected files in the dialog. + If no files are selected, or the mode is not ExistingFiles or +diff --git a/qtbase/src/widgets/dialogs/qfiledialog.h b/qtbase/src/widgets/dialogs/qfiledialog.h +index 95209bc..0dca0ef 100644 +--- a/qtbase/src/widgets/dialogs/qfiledialog.h ++++ b/qtbase/src/widgets/dialogs/qfiledialog.h +@@ -106,6 +106,7 @@ public: + + void selectFile(const QString &filename); + QStringList selectedFiles() const; ++ QByteArray selectedRemoteContent() const; + + void selectUrl(const QUrl &url); + QList selectedUrls() const; +diff --git a/qtbase/src/widgets/dialogs/qfiledialog_p.h b/qtbase/src/widgets/dialogs/qfiledialog_p.h +index f610e46..16fa44e 100644 +--- a/qtbase/src/widgets/dialogs/qfiledialog_p.h ++++ b/qtbase/src/widgets/dialogs/qfiledialog_p.h +@@ -123,6 +123,7 @@ public: + static QString initialSelection(const QUrl &path); + QStringList typedFiles() const; + QList userSelectedFiles() const; ++ QByteArray userSelectedRemoteContent() const; + QStringList addDefaultSuffixToFiles(const QStringList &filesToFix) const; + QList addDefaultSuffixToUrls(const QList &urlsToFix) const; + bool removeDirectory(const QString &path); +@@ -256,6 +257,7 @@ public: + QUrl directory_sys() const; + void selectFile_sys(const QUrl &filename); + QList selectedFiles_sys() const; ++ QByteArray selectedRemoteContent_sys() const; + void setFilter_sys(); + void selectNameFilter_sys(const QString &filter); + QString selectedNameFilter_sys() const; +@@ -393,6 +395,13 @@ inline QList QFileDialogPrivate::selectedFiles_sys() const + return QList(); + } + ++inline QByteArray QFileDialogPrivate::selectedRemoteContent_sys() const ++{ ++ if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) ++ return helper->selectedRemoteContent(); ++ return QByteArray(); ++} ++ + inline void QFileDialogPrivate::setFilter_sys() + { + if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) +diff --git a/qtbase/src/widgets/kernel/qwidget.cpp b/qtbase/src/widgets/kernel/qwidget.cpp +index e701eb0..1bdaff5 100644 +--- a/qtbase/src/widgets/kernel/qwidget.cpp ++++ b/qtbase/src/widgets/kernel/qwidget.cpp +@@ -8683,7 +8683,7 @@ bool QWidget::event(QEvent *event) + case QEvent::KeyPress: { + QKeyEvent *k = (QKeyEvent *)event; + bool res = false; +- if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) { //### Add MetaModifier? ++ if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? + if (k->key() == Qt::Key_Backtab + || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier))) + res = focusNextPrevChild(false); +diff --git a/qtbase/src/widgets/util/qsystemtrayicon.cpp b/qtbase/src/widgets/util/qsystemtrayicon.cpp +index dc2737c..aa9bc91 100644 +--- a/qtbase/src/widgets/util/qsystemtrayicon.cpp ++++ b/qtbase/src/widgets/util/qsystemtrayicon.cpp +@@ -711,6 +711,8 @@ void QSystemTrayIconPrivate::updateMenu_sys_qpa() + if (menu) { + addPlatformMenu(menu); + qpa_sys->updateMenu(menu->platformMenu()); ++ } else { ++ qpa_sys->updateMenu(0); + } + } + +diff --git a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp +index 759e41a..fbd3064 100644 +--- a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp ++++ b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp +@@ -1884,7 +1884,7 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) + && event->modifiers() != Qt::ControlModifier + && event->modifiers() != (Qt::ControlModifier | Qt::ShiftModifier)) { + QString t = event->text(); +- if (!t.isEmpty() && t.at(0).isPrint()) { ++ if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { + insert(t); + #ifndef QT_NO_COMPLETER + complete(event->key()); +diff --git a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +index faa63cb..f3de539 100644 +--- a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp ++++ b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +@@ -1348,7 +1348,7 @@ process: + return; + } + QString text = e->text(); +- if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t'))) { ++ if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { + if (overwriteMode + // no need to call deleteChar() if we have a selection, insertText + // does it already diff --git a/Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf b/Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf similarity index 59% rename from Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf rename to Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf index 6d0e9b9a5..e44ee5e8d 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf +++ b/Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf @@ -1,60 +1,59 @@ # -# qmake configuration for win32-msvc2013 -# -# Written for Microsoft Visual C++ 2013 +# qmake configuration for Microsoft Visual Studio C/C++ Compiler +# This mkspec is used for all win32-msvcXXXX specs # -MAKEFILE_GENERATOR = MSBUILD +isEmpty(MSC_VER)|isEmpty(MSVC_VER): error("Source mkspec must set both MSC_VER and MSVC_VER.") + +# +# Baseline: Visual Studio 2005 (8.0), VC++ 14.0 +# + +MAKEFILE_GENERATOR = MSVC.NET QMAKE_PLATFORM = win32 +QMAKE_COMPILER = msvc CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe DEFINES += UNICODE WIN32 -MSVC_VER = 12.0 -QMAKE_COMPILER_DEFINES += _MSC_VER=1800 _WIN32 +QMAKE_COMPILER_DEFINES += _MSC_VER=$$MSC_VER _WIN32 contains(QMAKE_TARGET.arch, x86_64) { DEFINES += WIN64 QMAKE_COMPILER_DEFINES += _WIN64 } -QMAKE_COMPILER = msvc - QMAKE_CC = cl QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t -FS +QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -QMAKE_CFLAGS_RELEASE = -O2 -MT -Zc:strictStrings -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -Zc:strictStrings +QMAKE_CFLAGS_RELEASE = -O2 -MT +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL -QMAKE_CFLAGS_MP = -MP QMAKE_CFLAGS_SSE2 = -arch:SSE2 QMAKE_CFLAGS_SSE3 = -arch:SSE2 QMAKE_CFLAGS_SSSE3 = -arch:SSE2 QMAKE_CFLAGS_SSE4_1 = -arch:SSE2 QMAKE_CFLAGS_SSE4_2 = -arch:SSE2 -QMAKE_CFLAGS_AVX = -arch:AVX -QMAKE_CFLAGS_AVX2 = -arch:AVX QMAKE_CXX = $$QMAKE_CC QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 -w44996 QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP QMAKE_CXXFLAGS_STL_ON = -EHsc QMAKE_CXXFLAGS_STL_OFF = QMAKE_CXXFLAGS_RTTI_ON = -GR QMAKE_CXXFLAGS_RTTI_OFF = QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc -QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0 +QMAKE_CXXFLAGS_EXCEPTIONS_OFF = QMAKE_INCDIR = @@ -70,8 +69,8 @@ QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO QMAKE_LFLAGS_DEBUG = /DEBUG -QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@ -QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@ +QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE +QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS QMAKE_LFLAGS_EXE = \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" QMAKE_LFLAGS_DLL = /DLL QMAKE_LFLAGS_LTCG = /LTCG @@ -91,9 +90,58 @@ QMAKE_IDL = midl QMAKE_LIB = lib /NOLOGO QMAKE_RC = rc -include(../common/shell-win32.conf) - -VCPROJ_EXTENSION = .vcxproj +VCPROJ_EXTENSION = .vcproj VCSOLUTION_EXTENSION = .sln VCPROJ_KEYWORD = Qt4VSv1.0 -load(qt_config) + +# +# Version-specific changes +# +greaterThan(MSC_VER, 1499) { + # Visual Studio 2008 (9.0) / Visual C++ 15.0 and up + QMAKE_CFLAGS_MP = -MP + QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP +} + +greaterThan(MSC_VER, 1599) { + # Visual Studio 2010 (10.0) / Visual C++ 16.0 and up + MAKEFILE_GENERATOR = MSBUILD + + QMAKE_CFLAGS_AVX = -arch:AVX + QMAKE_CFLAGS_AVX2 = -arch:AVX + + VCPROJ_EXTENSION = .vcxproj +} + +greaterThan(MSC_VER, 1699) { + # Visual Studio 2012 (11.0) / Visual C++ 17.0 and up + QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0 + QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@ + QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@ + QT_CONFIG += c++11 + CONFIG += c++11 +} + +greaterThan(MSC_VER, 1799) { + # Visual Studio 2013 (12.0) / Visual C++ 18.0 and up + QMAKE_CFLAGS += -FS + QMAKE_CXXFLAGS += -FS + + equals(MSC_VER, 1800) { + QMAKE_CFLAGS_RELEASE += -Zc:strictStrings + QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings + QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings + } +} + +greaterThan(MSC_VER, 1899) { + # Visual Studio 2015 (14.0) / Visual C++ 19.0 and up + QMAKE_CFLAGS += -Zc:strictStrings + QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458 + QMAKE_CFLAGS_AVX2 = -arch:AVX2 + QMAKE_CXXFLAGS += -Zc:strictStrings + QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 +} + +unset(MSC_VER) diff --git a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp similarity index 84% rename from Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp index 9ed555ca6..a0fe0163b 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the qmake application of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -105,7 +105,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) { if(project->isActiveConfig("generate_pbxbuild_makefile")) { QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), - qmake_getpwd()); + FileFixifyToIndir); QFile mkwrapf(mkwrap); if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { debug_msg(1, "pbuilder: Creating file: %s", mkwrap.toLatin1().constData()); @@ -151,7 +151,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) subdir += Option::dir_sep; tmp = subdir + tmp; } - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true))); + QFileInfo fi(fileInfo(Option::normalizePath(tmp))); if(fi.exists()) { if(fi.isDir()) { QString profile = tmp; @@ -184,13 +184,13 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) bool in_root = true; QString name = qmake_getpwd(); if(project->isActiveConfig("flat")) { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(flat_file.indexOf(Option::dir_sep) != -1) { QStringList dirs = flat_file.split(Option::dir_sep); name = dirs.back(); } } else { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { QString last_grp("QMAKE_SUBDIR_PBX_HEIR_GROUP"); QStringList dirs = flat_file.split(Option::dir_sep); @@ -215,7 +215,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << project_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.pb-project") << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(tmp_proj.first("TARGET") + projectSuffix())) << ";\n" + << "\t\t\t" << writeSettings("name", tmp_proj.first("TARGET") + projectSuffix()) << ";\n" << "\t\t\t" << writeSettings("path", pbxproj) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -283,7 +283,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << keyFor(grp_it.key()) << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -307,7 +307,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) ProString name = l.at(i); const ProKey buildKey(name + ".build"); if (!project->isEmpty(buildKey)) { - const QString build = project->values(buildKey).first().toQString(); + const QString build = project->first(buildKey).toQString(); if (build.toLower() != configName.toLower()) continue; } @@ -344,7 +344,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_AGGREGATE_TARGET") << " = {\n" << "\t\t\t" << writeSettings("buildPhases", ProStringList(), SettingsAsList, 4) << ";\n" << "\t\t\tbuildSettings = {\n" - << "\t\t\t\t" << writeSettings("PRODUCT_NAME", project->values("TARGET").first()) << ";\n" + << "\t\t\t\t" << writeSettings("PRODUCT_NAME", project->first("TARGET")) << ";\n" << "\t\t\t};\n"; { ProStringList dependencies; @@ -354,8 +354,8 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t\t" << writeSettings("dependencies", dependencies, SettingsAsList, 4) << ";\n" } t << "\t\t\t" << writeSettings("isa", "PBXAggregateTarget", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", project->values("TARGET").first()) << ";\n" - << "\t\t\t" << writeSettings("productName", project->values("TARGET").first()) << ";\n" + << "\t\t\t" << writeSettings("name", project->first("TARGET")) << ";\n" + << "\t\t\t" << writeSettings("productName", project->first("TARGET")) << ";\n" << "\t\t};\n"; #endif @@ -455,8 +455,8 @@ ProjectBuilderSources::files(QMakeProject *project) const { QStringList ret = project->values(ProKey(key)).toQStringList(); if(key == "QMAKE_INTERNAL_INCLUDED_FILES") { - QString qtPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectivePaths) + '/'); - QString qtSrcPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectiveSourcePaths) + '/'); + QString qtPrefix(project->propertyValue(ProKey("QT_INSTALL_PREFIX/get")).toQString() + '/'); + QString qtSrcPrefix(project->propertyValue(ProKey("QT_INSTALL_PREFIX/src")).toQString() + '/'); QStringList newret; for(int i = 0; i < ret.size(); ++i) { @@ -507,14 +507,6 @@ static QString xcodeFiletypeForFilename(const QString &filename) bool ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) { - // The code in this function assumes that the current directory matches - // the output directory, which is not actually the case when we are called - // from the generic generator code. Instead of changing every single - // assumption and fileFixify we cheat by moving into the output directory - // for the duration of this function. - QString input_dir = qmake_getpwd(); - qmake_setpwd(Option::output_dir); - ProStringList tmp; bool did_preprocess = false; @@ -536,7 +528,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QFile mkf(mkfile); if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; - qmake_setpwd(input_dir); // Makefile generation assumes input_dir as pwd debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); @@ -545,10 +536,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt.flush(); mkf.close(); writingUnixMakefileGenerator = false; - qmake_setpwd(Option::output_dir); } QString phase_key = keyFor("QMAKE_PBX_MAKEQMAKE_BUILDPHASE"); - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" @@ -557,16 +547,20 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Qmake") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } // FIXME: Move all file resolving logic out of ProjectBuilderSources::files(), as it // doesn't have access to any of the information it needs to resolve relative paths. - project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(fileFixify(project->projectFile(), qmake_getpwd(), input_dir)); + project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(project->projectFile()); // Since we can't fileFixify inside ProjectBuilderSources::files(), we resolve the absolute paths here - project->values("QMAKE_INTERNAL_INCLUDED_FILES") = ProStringList(fileFixify(project->values("QMAKE_INTERNAL_INCLUDED_FILES").toQStringList(), FileFixifyAbsolute)); + project->values("QMAKE_INTERNAL_INCLUDED_FILES") = ProStringList( + fileFixify(project->values("QMAKE_INTERNAL_INCLUDED_FILES").toQStringList(), + FileFixifyFromOutdir | FileFixifyAbsolute)); //DUMP SOURCES QMap groups; @@ -623,11 +617,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProStringList &src_list = project->values(ProKey("QMAKE_PBX_" + sources.at(source).keyName())); ProStringList &root_group_list = project->values("QMAKE_PBX_GROUPS"); - const QStringList &files = fileFixify(sources.at(source).files(project)); + const QStringList &files = fileFixify(sources.at(source).files(project), + FileFixifyFromOutdir | FileFixifyAbsolute); for(int f = 0; f < files.count(); ++f) { QString file = files[f]; - if(file.length() >= 2 && (file[0] == '"' || file[0] == '\'') && file[(int) file.length()-1] == file[0]) - file = file.mid(1, file.length()-2); if(!sources.at(source).compilerName().isNull() && !verifyExtraCompiler(sources.at(source).compilerName(), file)) continue; @@ -637,12 +630,11 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) bool in_root = true; QString src_key = keyFor(file); - file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyAbsolute); QString name = file.split(Option::dir_sep).back(); if (!project->isActiveConfig("flat")) { // Build group hierarchy for file references that match the source our build dir - QString relativePath = fileFixify(file, input_dir, qmake_getpwd(), FileFixifyRelative); + QString relativePath = fileFixify(file, FileFixifyToIndir | FileFixifyRelative); if (QDir::isRelativePath(relativePath) && relativePath.startsWith(QLatin1String("../"))) relativePath = fileFixify(file, FileFixifyRelative); // Try build dir @@ -678,9 +670,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) //source reference t << "\t\t" << src_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(file)) << ";\n"; + << "\t\t\t" << writeSettings("path", file) << ";\n"; if (name != file) - t << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n"; + t << "\t\t\t" << writeSettings("name", name) << ";\n"; t << "\t\t\t" << writeSettings("sourceTree", "") << ";\n"; QString filetype = xcodeFiletypeForFilename(file); if (!filetype.isNull()) @@ -715,7 +707,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << keyFor(grp_it.key()) << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -730,8 +722,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); - mkt << "MOC = " << Option::fixPathToTargetOS(var("QMAKE_MOC")) << endl; - mkt << "UIC = " << Option::fixPathToTargetOS(var("QMAKE_UIC")) << endl; + mkt << "MOC = " << var("QMAKE_MOC") << endl; + mkt << "UIC = " << var("QMAKE_UIC") << endl; mkt << "LEX = " << var("QMAKE_LEX") << endl; mkt << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; mkt << "YACC = " << var("QMAKE_YACC") << endl; @@ -739,13 +731,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt << "DEFINES = " << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") << varGlue("DEFINES","-D"," -D","") << endl; - mkt << "INCPATH = -I" << specdir(); - if(!project->isActiveConfig("no_include_pwd")) { - QString pwd = escapeFilePath(fileFixify(qmake_getpwd())); - if(pwd.isEmpty()) - pwd = "."; - mkt << " -I" << pwd; - } + mkt << "INCPATH ="; { const ProStringList &incs = project->values("INCLUDEPATH"); for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) @@ -756,30 +742,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt << endl; mkt << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; mkt << "MOVE = " << var("QMAKE_MOVE") << endl << endl; - mkt << "IMAGES = " << varList("QMAKE_IMAGE_COLLECTION") << endl; - mkt << "PARSERS ="; - if(!project->isEmpty("YACCSOURCES")) { - const ProStringList &yaccs = project->values("YACCSOURCES"); - for (ProStringList::ConstIterator yit = yaccs.begin(); yit != yaccs.end(); ++yit) { - QFileInfo fi(fileInfo((*yit).toQString())); - mkt << " " << fi.path() << Option::dir_sep << fi.baseName() - << Option::yacc_mod << Option::cpp_ext.first(); - } - } - if(!project->isEmpty("LEXSOURCES")) { - const ProStringList &lexs = project->values("LEXSOURCES"); - for (ProStringList::ConstIterator lit = lexs.begin(); lit != lexs.end(); ++lit) { - QFileInfo fi(fileInfo((*lit).toQString())); - mkt << " " << fi.path() << Option::dir_sep << fi.baseName() - << Option::lex_mod << Option::cpp_ext.first(); - } - } - mkt << "\n"; - mkt << "preprocess: $(PARSERS) compilers\n"; - mkt << "clean preprocess_clean: parser_clean compiler_clean\n\n"; - mkt << "parser_clean:\n"; - if(!project->isEmpty("YACCSOURCES") || !project->isEmpty("LEXSOURCES")) - mkt << "\t-rm -f $(PARSERS)\n"; + mkt << "preprocess: compilers\n"; + mkt << "clean preprocess_clean: compiler_clean\n\n"; writeExtraTargets(mkt); if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { mkt << "compilers:"; @@ -800,8 +764,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(added && !(added % 3)) mkt << "\\\n\t"; ++added; - const QString file_name = fileFixify(fn, Option::output_dir, Option::output_dir); - mkt << " " << replaceExtraCompilerVariables(Option::fixPathToTargetOS(tmp_out.first().toQString(), false), file_name, QString()); + const QString file_name = fileFixify(fn, FileFixifyFromOutdir); + mkt << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out.first().toQString(), file_name, QString(), NoShell))); } } } @@ -812,7 +777,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt.flush(); mkf.close(); } - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); QString phase_key = keyFor("QMAKE_PBX_PREPROCESS_TARGET"); // project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); @@ -823,7 +788,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Preprocessors") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -843,22 +810,17 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(!project->isActiveConfig("staticlib")) { //DUMP LIBRARIES ProStringList &libdirs = project->values("QMAKE_PBX_LIBPATHS"), &frameworkdirs = project->values("QMAKE_FRAMEWORKPATH"); - static const char * const libs[] = { "QMAKE_LFLAGS", "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; + static const char * const libs[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; for (int i = 0; libs[i]; i++) { tmp = project->values(libs[i]); for(int x = 0; x < tmp.count();) { bool remove = false; QString library, name; ProString opt = tmp[x].trimmed(); - if (opt.length() >= 2 && (opt.at(0) == '"' || opt.at(0) == '\'') && opt.endsWith(opt.at(0))) - opt = opt.mid(1, opt.length()-2); if(opt.startsWith("-L")) { QString r = opt.mid(2).toQString(); fixForOutput(r); libdirs.append(r); - } else if(opt == "-prebind") { - project->values("QMAKE_DO_PREBINDING").append("TRUE"); - remove = true; } else if(opt.startsWith("-l")) { name = opt.mid(2).toQString(); QString lib("lib" + name); @@ -887,10 +849,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QString librarySuffix = project->first("QMAKE_XCODE_LIBRARY_SUFFIX").toQString(); suffixSetting = "$(" + suffixSetting + ")"; if (!librarySuffix.isEmpty()) { - library = library.replace(librarySuffix, suffixSetting); - name = name.remove(librarySuffix); + library.replace(librarySuffix, suffixSetting); + name.remove(librarySuffix); } else { - library = library.replace(name, name + suffixSetting); + library.replace(name, name + suffixSetting); } } } @@ -956,15 +918,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(!path.isEmpty() && !libdirs.contains(path)) libdirs += path; } - library = fileFixify(library); - QString filetype = xcodeFiletypeForFilename(library); + library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute); QString key = keyFor(library); if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) { bool is_frmwrk = (library.endsWith(".framework")); t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(library)) << ";\n" + << "\t\t\t" << writeSettings("name", name) << ";\n" + << "\t\t\t" << writeSettings("path", library) << ";\n" << "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(library)), SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n"; if (is_frmwrk) @@ -999,21 +960,22 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QTextStream mkt(&mkf); writeHeader(mkt); mkt << "SUBLIBS= "; + // ### This is missing the parametrization found in unixmake2.cpp tmp = project->values("SUBLIBS"); for(int i = 0; i < tmp.count(); i++) - t << "tmp/lib" << tmp[i] << ".a "; + t << escapeFilePath("tmp/lib" + tmp[i] + ".a") << ' '; t << endl << endl; mkt << "sublibs: $(SUBLIBS)\n\n"; tmp = project->values("SUBLIBS"); for(int i = 0; i < tmp.count(); i++) - t << "tmp/lib" << tmp[i] << ".a:\n\t" + t << escapeFilePath("tmp/lib" + tmp[i] + ".a") + ":\n\t" << var(ProKey("MAKELIB" + tmp[i])) << endl << endl; mkt.flush(); mkf.close(); writingUnixMakefileGenerator = false; } QString phase_key = keyFor("QMAKE_PBX_SUBLIBS_BUILDPHASE"); - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" @@ -1022,7 +984,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Sublibs") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << "\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -1058,6 +1022,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("name", "Qt Prelink") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_PRE_LINK")) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -1070,7 +1035,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_LIBRARIES"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -1083,7 +1048,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("files", project->values("QMAKE_PBX_BUILD_LIBRARIES"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXFrameworksBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t};\n"; } @@ -1101,14 +1066,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("name", "Qt Postlink") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_POST_LINK")) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } if (!project->isEmpty("DESTDIR")) { QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE"); - QString destDir = project->first("DESTDIR").toQString(); - destDir = fixForOutput(destDir); - destDir = fileInfo(Option::fixPathToLocalOS(destDir)).absoluteFilePath(); + QString destDir = fileFixify(project->first("DESTDIR").toQString(), + FileFixifyFromOutdir | FileFixifyAbsolute); project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" @@ -1119,7 +1084,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("outputPaths", ProStringList(), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + escapeFilePath(destDir))) << ";\n" + << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + IoUtils::shellQuoteUnix(destDir))) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } bool copyBundleResources = project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app"; @@ -1137,13 +1103,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) //all files const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files")); for(int file = 0; file < files.count(); file++) { - QString fn = fileFixify(files[file].toQString(), Option::output_dir, input_dir, FileFixifyAbsolute); + QString fn = fileFixify(files[file].toQString(), FileFixifyAbsolute); QString name = fn.split(Option::dir_sep).back(); QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn); bundle_file_refs += file_ref_key; t << "\t\t" << file_ref_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(fn)) << ";\n" + << "\t\t\t" << writeSettings("path", fn) << ";\n" << "\t\t\t" << writeSettings("name", name) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -1169,7 +1135,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("name", "Copy '" + bundle_data[i] + "' Files to Bundle") << ";\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";\n" + << "\t\t\t" << writeSettings("dstPath", path) << ";\n" << "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("files", bundle_files, SettingsAsList, 4) << ";\n" @@ -1193,8 +1159,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (copyBundleResources) { if (!project->isEmpty("ICON")) { ProString icon = project->first("ICON"); - if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0))) - icon = icon.mid(1, icon.length() - 2); bundle_resources_files += keyFor(icon + ".BUILDABLE"); } @@ -1207,7 +1171,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("files", bundle_resources_files, SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t};\n"; } @@ -1232,9 +1196,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } else { t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.executable") << ";\n"; } - QString app = (!project->isEmpty("DESTDIR") ? project->first("DESTDIR") + project->first("QMAKE_ORIG_TARGET") : - qmake_getpwd()) + Option::dir_sep + targ; - t << "\t\t\t" << writeSettings("path", escapeFilePath(targ)) << ";\n"; + t << "\t\t\t" << writeSettings("path", targ) << ";\n"; } else { ProString lib = project->first("QMAKE_ORIG_TARGET"); if(project->isActiveConfig("staticlib")) { @@ -1262,7 +1224,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } else { t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.dylib") << ";\n"; } - t << "\t\t\t" << writeSettings("path", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t" << writeSettings("path", lib) << ";\n"; } t << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" << "\t\t};\n"; @@ -1282,7 +1244,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << keyFor("QMAKE_PBX_ROOT_GROUP") << " = {\n" << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_GROUPS"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" + << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -1328,14 +1290,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) else t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.tool") << ";\n"; } - t << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" - << "\t\t\t" << writeSettings("productName", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n"; + t << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n" + << "\t\t\t" << writeSettings("productName", project->first("QMAKE_ORIG_TARGET")) << ";\n"; } else { ProString lib = project->first("QMAKE_ORIG_TARGET"); if(!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - t << "\t\t\t" << writeSettings("name", escapeFilePath(lib)) << ";\n" - << "\t\t\t" << writeSettings("productName", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t" << writeSettings("name", lib) << ";\n" + << "\t\t\t" << writeSettings("productName", lib) << ";\n"; if (!project->isEmpty("QMAKE_PBX_PRODUCT_TYPE")) t << "\t\t\t" << writeSettings("productType", project->first("QMAKE_PBX_PRODUCT_TYPE")) << ";\n"; else if (project->isActiveConfig("staticlib")) @@ -1346,8 +1308,98 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.library.dynamic") << ";\n"; } if(!project->isEmpty("DESTDIR")) - t << "\t\t\t" << writeSettings("productInstallPath", escapeFilePath(project->first("DESTDIR"))) << ";\n"; + t << "\t\t\t" << writeSettings("productInstallPath", project->first("DESTDIR")) << ";\n"; t << "\t\t};\n"; + + // Test target for running Qt unit tests under XCTest + if (project->isActiveConfig("testcase") && project->isActiveConfig("app_bundle")) { + QString devNullFileReferenceKey = keyFor(pbx_dir + "QMAKE_PBX_DEV_NULL_FILE_REFERENCE"); + t << "\t\t" << devNullFileReferenceKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "/dev/null") << ";\n" + << "\t\t\t" << writeSettings("path", "/dev/null") << ";\n" + << "\t\t\t" << writeSettings("lastKnownFileType", "sourcecode.c.c") << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + + QString devNullBuildFileKey = keyFor(pbx_dir + "QMAKE_PBX_DEV_NULL_BUILD_FILE"); + t << "\t\t" << devNullBuildFileKey << " = {\n" + << "\t\t\t" << writeSettings("fileRef", devNullFileReferenceKey) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString dummySourceBuildPhaseKey = keyFor(pbx_dir + "QMAKE_PBX_DUMMY_SOURCE_BUILD_PHASE"); + t << "\t\t" << dummySourceBuildPhaseKey << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", devNullBuildFileKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXSourcesBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + ProStringList testBundleBuildConfigs; + + ProString targetName = project->first("QMAKE_ORIG_TARGET"); + ProString testHost = "$(BUILT_PRODUCTS_DIR)/" + targetName + ".app/"; + if (!project->isActiveConfig("ios")) + testHost.append("Contents/MacOS/"); + testHost.append(targetName); + + static const char * const configs[] = { "Debug", "Release", 0 }; + for (int i = 0; configs[i]; i++) { + QString testBundleBuildConfig = keyFor(pbx_dir + "QMAKE_PBX_TEST_BUNDLE_BUILDCONFIG_" + configs[i]); + t << "\t\t" << testBundleBuildConfig << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" + << "\t\t\tbuildSettings = {\n" + << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", project->first("QMAKE_XCODE_SPECDIR") + "/QtTest.plist") << ";\n" + << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS", "") << ";\n" + << "\t\t\t\t" << writeSettings("TEST_HOST", testHost) << ";\n" + << "\t\t\t\t" << writeSettings("DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym") << ";\n" + << "\t\t\t};\n" + << "\t\t\t" << writeSettings("name", configs[i], SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + testBundleBuildConfigs.append(testBundleBuildConfig); + } + + QString testBundleBuildConfigurationListKey = keyFor(pbx_dir + "QMAKE_PBX_TEST_BUNDLE_BUILDCONFIG_LIST"); + t << "\t\t" << testBundleBuildConfigurationListKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCConfigurationList", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurations", testBundleBuildConfigs, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationIsVisible", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationName", "Debug", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString primaryTargetDependencyKey = keyFor(pbx_dir + "QMAKE_PBX_PRIMARY_TARGET_DEP"); + t << "\t\t" << primaryTargetDependencyKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXTargetDependency", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("target", keyFor(pbx_dir + "QMAKE_PBX_TARGET")) << ";\n" + << "\t\t};\n"; + + QString testBundleReferenceKey = keyFor("QMAKE_TEST_BUNDLE_REFERENCE"); + t << "\t\t" << testBundleReferenceKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("explicitFileType", "wrapper.cfbundle") << ";\n" + << "\t\t\t" << writeSettings("includeInIndex", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString testTargetKey = keyFor(pbx_dir + "QMAKE_PBX_TEST_TARGET"); + project->values("QMAKE_PBX_TARGETS").append(testTargetKey); + t << "\t\t" << testTargetKey << " = {\n" + << "\t\t\t" << writeSettings("buildPhases", dummySourceBuildPhaseKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("dependencies", primaryTargetDependencyKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurationList", testBundleBuildConfigurationListKey) << ";\n" + << "\t\t\t" << writeSettings("productType", "com.apple.product-type.bundle.unit-test") << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXNativeTarget", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("productReference", testBundleReferenceKey) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Test") << ";\n" + << "\t\t};\n"; + + QLatin1Literal testTargetID("TestTargetID"); + project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + testTargetKey + "_" + testTargetID)).append(keyFor(pbx_dir + "QMAKE_PBX_TARGET")); + project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + testTargetKey)).append(ProKey(testTargetID)); + } + //DEBUG/RELEASE QString defaultConfig; for(int as_release = 0; as_release < 2; as_release++) @@ -1356,6 +1408,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QMap settings; settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); + // Bitcode is only supported with a deployment target >= iOS 6.0. + // Disable it for now, and consider switching it on when later + // bumping the deployment target. + settings.insert("ENABLE_BITCODE", "NO"); settings.insert("GCC_GENERATE_DEBUGGING_SYMBOLS", as_release ? "NO" : "YES"); if(!as_release) settings.insert("GCC_OPTIMIZATION_LEVEL", "0"); @@ -1367,14 +1423,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString name = l.at(i); const ProKey buildKey(name + ".build"); if (!project->isEmpty(buildKey)) { - const QString build = project->values(buildKey).first().toQString(); + const QString build = project->first(buildKey).toQString(); if (build.toLower() != configName.toLower()) continue; } const QString value = project->values(ProKey(name + ".value")).join(QString(Option::field_sep)); const ProKey nkey(name + ".name"); if (!project->isEmpty(nkey)) - name = project->values(nkey).first(); + name = project->first(nkey); settings.insert(name.toQString(), value); } } @@ -1384,7 +1440,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString lib = project->first("QMAKE_ORIG_TARGET"); if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - settings.insert("PRODUCT_NAME", escapeFilePath(lib.toQString())); + settings.insert("PRODUCT_NAME", lib.toQString()); } if (project->isActiveConfig("debug") != (bool)as_release) @@ -1415,10 +1471,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if ((project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) || (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && project->isActiveConfig("lib_bundle"))) { - QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), Option::output_dir, input_dir); + QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), FileFixifyToIndir); if (!plist.isEmpty()) { if (exists(plist)) - t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", plist) << ";\n"; + t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fileFixify(plist)) << ";\n"; else warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.", plist.toLatin1().constData()); } else { @@ -1427,30 +1483,29 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (plist_in_file.open(QIODevice::ReadOnly)) { QTextStream plist_in(&plist_in_file); QString plist_in_text = plist_in.readAll(); - plist_in_text = plist_in_text.replace("@ICON@", + plist_in_text.replace("@ICON@", (project->isEmpty("ICON") ? QString("") : project->first("ICON").toQString().section(Option::dir_sep, -1))); if (project->first("TEMPLATE") == "app") { - plist_in_text = plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET").toQString()); + plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET").toQString()); } else { - plist_in_text = plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET").toQString()); + plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET").toQString()); } QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString(); if (bundlePrefix.isEmpty()) bundlePrefix = "com.yourcompany"; - plist_in_text = plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + "." + QLatin1String("${PRODUCT_NAME:rfc1034identifier}")); + plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + '.' + QLatin1String("${PRODUCT_NAME:rfc1034identifier}")); if (!project->values("VERSION").isEmpty()) { - plist_in_text = plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + - project->first("VER_MIN")); + plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + project->first("VER_MIN")); } - plist_in_text = plist_in_text.replace("@TYPEINFO@", + plist_in_text.replace("@TYPEINFO@", (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); QString plist_dir; if (!project->isEmpty("PLIST_DIR")) plist_dir = project->first("PLIST_DIR").toQString(); QString plist_in_filename = QFileInfo(plist_in_file).fileName(); - QFile plist_out_file(plist_dir + plist_in_filename); - if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QFile plist_out_file(Option::output_dir + "/" + plist_dir + plist_in_filename); + if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream plist_out(&plist_out_file); plist_out << plist_in_text; t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; @@ -1459,12 +1514,12 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } - t << "\t\t\t\t" << writeSettings("SYMROOT", escapeFilePath(qmake_getpwd())) << ";\n"; + t << "\t\t\t\t" << writeSettings("SYMROOT", Option::output_dir) << ";\n"; if (!project->isEmpty("DESTDIR")) { ProString dir = project->first("DESTDIR"); if (QDir::isRelativePath(dir.toQString())) - dir.prepend(qmake_getpwd() + Option::dir_sep); + dir.prepend(Option::output_dir + Option::dir_sep); t << "\t\t\t\t" << writeSettings("INSTALL_DIR", dir) << ";\n"; } @@ -1495,13 +1550,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QString var = tmp[i].toQString(), val = QString::fromLocal8Bit(qgetenv(var.toLatin1().constData())); if (val.isEmpty() && var == "TB") val = "/usr/bin/"; - t << "\t\t\t\t" << writeSettings(var, escapeFilePath(val)) << ";\n"; + t << "\t\t\t\t" << writeSettings(var, val) << ";\n"; } if (!project->isEmpty("PRECOMPILED_HEADER")) { t << "\t\t\t\t" << writeSettings("GCC_PRECOMPILE_PREFIX_HEADER", "YES") << ";\n" - << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", escapeFilePath(project->first("PRECOMPILED_HEADER"))) << ";\n"; + << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", project->first("PRECOMPILED_HEADER")) << ";\n"; } - t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH") + ProStringList(fixForOutput(specdir())), SettingsAsList, 5) << ";\n" + t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH"), SettingsAsList, 5) << ";\n" << "\t\t\t\t" << writeSettings("LIBRARY_SEARCH_PATHS", fixListForOutput("QMAKE_PBX_LIBPATHS"), SettingsAsList, 5) << ";\n" << "\t\t\t\t" << writeSettings("FRAMEWORK_SEARCH_PATHS", fixListForOutput("QMAKE_FRAMEWORKPATH"), !project->values("QMAKE_FRAMEWORKPATH").isEmpty() ? SettingsAsList : 0, 5) << ";\n"; @@ -1530,8 +1585,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS", fixListForOutput("SUBLIBS") + fixListForOutput("QMAKE_LFLAGS") - + fixListForOutput("QMAKE_LIBS") - + fixListForOutput("QMAKE_LIBS_PRIVATE"), + + fixListForOutput(fixLibFlags("QMAKE_LIBS")) + + fixListForOutput(fixLibFlags("QMAKE_LIBS_PRIVATE")), SettingsAsList, 6) << ";\n"; } const ProStringList &archs = !project->values("QMAKE_XCODE_ARCHS").isEmpty() ? @@ -1539,7 +1594,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (!archs.isEmpty()) t << "\t\t\t\t" << writeSettings("ARCHS", archs) << ";\n"; if (!project->isEmpty("OBJECTS_DIR")) - t << "\t\t\t\t" << writeSettings("OBJROOT", escapeFilePath(project->first("OBJECTS_DIR").toQString())) << ";\n"; + t << "\t\t\t\t" << writeSettings("OBJROOT", project->first("OBJECTS_DIR")) << ";\n"; } else { if (project->first("TEMPLATE") == "app") { t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", fixForOutput(project->first("QMAKE_ORIG_TARGET").toQString())) << ";\n"; @@ -1551,7 +1606,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString lib = project->first("QMAKE_ORIG_TARGET"); if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", lib) << ";\n"; } } t << "\t\t\t};\n" @@ -1578,6 +1633,19 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t" << writeSettings("projectDirPath", ProStringList()) << ";\n" << "\t\t\t" << writeSettings("projectRoot", "") << ";\n" << "\t\t\t" << writeSettings("targets", project->values("QMAKE_PBX_TARGETS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << "attributes = {\n" + << "\t\t\t\tTargetAttributes = {\n"; + foreach (const ProString &target, project->values("QMAKE_PBX_TARGETS")) { + const ProStringList &attributes = project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + target)); + if (attributes.isEmpty()) + continue; + t << "\t\t\t\t\t" << target << " = {\n"; + foreach (const ProString &attribute, attributes) + t << "\t\t\t\t\t\t" << writeSettings(attribute.toQString(), project->first(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + target + "_" + attribute))) << ";\n"; + t << "\t\t\t\t\t};\n"; + } + t << "\t\t\t\t};\n" + << "\t\t\t};\n" << "\t\t};\n"; // FIXME: Deal with developmentRegion and knownRegions for QMAKE_PBX_ROOT @@ -1588,8 +1656,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "}\n"; if(project->isActiveConfig("generate_pbxbuild_makefile")) { - QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), - qmake_getpwd()); + QString mkwrap = Option::output_dir + project->first("/MAKEFILE"); QFile mkwrapf(mkwrap); if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; @@ -1597,13 +1664,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QTextStream mkwrapt(&mkwrapf); writeHeader(mkwrapt); const char cleans[] = "preprocess_clean "; + const QString cmd = escapeFilePath(project->first("QMAKE_ORIG_TARGET") + projectSuffix() + "/") + " && " + pbxbuild(); mkwrapt << "#This is a makefile wrapper for PROJECT BUILDER\n" << "all:\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << "\n" + << "cd " << cmd << "\n" << "install: all\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " install\n" + << "cd " << cmd << " install\n" << "distclean clean: preprocess_clean\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " clean\n" + << "cd " << cmd << " clean\n" << (!did_preprocess ? cleans : "") << ":\n"; if(did_preprocess) mkwrapt << cleans << ":\n\t" @@ -1613,7 +1681,52 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } - qmake_setpwd(input_dir); + // Scheme + { + QString xcodeSpecDir = project->first("QMAKE_XCODE_SPECDIR").toQString(); + + bool wroteCustomScheme = false; + + QString projectSharedSchemesPath = pbx_dir + "/xcshareddata/xcschemes"; + if (mkdir(projectSharedSchemesPath)) { + QString target = project->first("QMAKE_ORIG_TARGET").toQString(); + + QFile defaultSchemeFile(xcodeSpecDir + "/default.xcscheme"); + QFile outputSchemeFile(projectSharedSchemesPath + Option::dir_sep + target + ".xcscheme"); + + if (defaultSchemeFile.open(QIODevice::ReadOnly) + && outputSchemeFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + + QTextStream defaultSchemeStream(&defaultSchemeFile); + QString schemeData = defaultSchemeStream.readAll(); + + schemeData.replace("@QMAKE_ORIG_TARGET@", target); + schemeData.replace("@TARGET_PBX_KEY@", keyFor(pbx_dir + "QMAKE_PBX_TARGET")); + schemeData.replace("@TEST_BUNDLE_PBX_KEY@", keyFor("QMAKE_TEST_BUNDLE_REFERENCE")); + + QTextStream outputSchemeStream(&outputSchemeFile); + outputSchemeStream << schemeData; + + wroteCustomScheme = true; + } + } + + if (wroteCustomScheme) { + // Prevent Xcode from auto-generating schemes + QString workspaceSettingsFilename("WorkspaceSettings.xcsettings"); + QString workspaceSharedDataPath = pbx_dir + "/project.xcworkspace/xcshareddata"; + if (mkdir(workspaceSharedDataPath)) { + QFile::copy(xcodeSpecDir + Option::dir_sep + workspaceSettingsFilename, + workspaceSharedDataPath + Option::dir_sep + workspaceSettingsFilename); + } else { + wroteCustomScheme = false; + } + } + + if (!wroteCustomScheme) + warn_msg(WarnLogic, "Failed to generate schemes in '%s', " \ + "falling back to Xcode auto-generated schemes", qPrintable(projectSharedSchemesPath)); + } return true; } @@ -1703,13 +1816,15 @@ ProjectBuilderMakefileGenerator::openOutput(QFile &file, const QString &build) c output += QDir::separator(); } output += QString("project.pbxproj"); - output = unescapeFilePath(output); file.setFileName(output); + bool ret = UnixMakefileGenerator::openOutput(file, build); + ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir.section(Option::dir_sep, 0, -1); + Option::output_dir = pbx_dir.section(Option::dir_sep, 0, -2); + return ret; } - bool ret = UnixMakefileGenerator::openOutput(file, build); - ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir.section(Option::dir_sep, 0, -1); - Option::output_dir = pbx_dir.section(Option::dir_sep, 0, -2); - return ret; + + ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir; + return UnixMakefileGenerator::openOutput(file, build); } /* This function is such a hack it is almost pointless, but it @@ -1760,8 +1875,6 @@ ProjectBuilderMakefileGenerator::pbuilderVersion() const else version_plist = "/Developer/Applications/Project Builder.app/Contents/version.plist"; #endif - } else { - version_plist = version_plist.replace(QRegExp("\""), ""); } if (ret.isEmpty()) { QFile version_file(version_plist); @@ -1822,7 +1935,7 @@ int ProjectBuilderMakefileGenerator::reftypeForFile(const QString &where) { int ret = 0; //absolute is the default.. - if(QDir::isRelativePath(unescapeFilePath(where))) + if (QDir::isRelativePath(where)) ret = 4; //relative return ret; } @@ -1848,26 +1961,6 @@ ProjectBuilderMakefileGenerator::pbxbuild() return (pbuilderVersion() >= 38 ? "xcodebuild" : "pbxbuild"); } -QString -ProjectBuilderMakefileGenerator::escapeFilePath(const QString &path) const -{ -#if 1 - //in the middle of generating a Makefile! - if(writingUnixMakefileGenerator) - return UnixMakefileGenerator::escapeFilePath(path); - - //generating stuff for the xml file! - QString ret = path; - if(!ret.isEmpty()) { - ret = unescapeFilePath(ret); - debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData()); - } - return ret; -#else - return UnixMakefileGenerator::escapeFilePath(path); -#endif -} - static QString quotedStringLiteral(const QString &value) { QString result; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp similarity index 88% rename from Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp index 0216f5cfa..2c18c48b9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the qmake application of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -45,7 +45,6 @@ #include #include #include -#include #include #if defined(Q_OS_UNIX) @@ -62,6 +61,8 @@ QT_BEGIN_NAMESPACE +using namespace QMakeInternal; + bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const { int argv0 = -1; @@ -74,7 +75,7 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const if(a) *a = argv0; if(argv0 != -1) { - const QString c = Option::fixPathToLocalOS(cmdline.at(argv0), true); + const QString c = Option::normalizePath(cmdline.at(argv0)); if(exists(c)) return true; } @@ -89,50 +90,16 @@ QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) con bool MakefileGenerator::mkdir(const QString &in_path) const { - QString path = Option::fixPathToLocalOS(in_path); + QString path = Option::normalizePath(in_path); if(QFile::exists(path)) return true; - QDir d; - if(path.startsWith(QDir::separator())) { - d.cd(QString(QDir::separator())); - path.remove(0, 1); - } - bool ret = true; -#ifdef Q_OS_WIN - bool driveExists = true; - if(!QDir::isRelativePath(path)) { - if(QFile::exists(path.left(3))) { - d.cd(path.left(3)); - path.remove(0, 3); - } else { - warn_msg(WarnLogic, "Cannot access drive '%s' (%s)", - path.left(3).toLatin1().data(), path.toLatin1().data()); - driveExists = false; - } - } - if(driveExists) -#endif - { - QStringList subs = path.split(QDir::separator()); - for(QStringList::Iterator subit = subs.begin(); subit != subs.end(); ++subit) { - if(!d.cd(*subit)) { - d.mkdir((*subit)); - if(d.exists((*subit))) { - d.cd((*subit)); - } else { - ret = false; - break; - } - } - } - } - return ret; + return QDir().mkpath(path); } // ** base makefile generator MakefileGenerator::MakefileGenerator() : - init_opath_already(false), init_already(false), no_io(false), project(0) + no_io(false), project(0) { } @@ -168,10 +135,6 @@ MakefileGenerator::verifyCompilers() void MakefileGenerator::initOutPaths() { - if(init_opath_already) - return; - verifyCompilers(); - init_opath_already = true; ProValueMap &v = project->variables(); //for shadow builds if(!v.contains("QMAKE_ABSOLUTE_SOURCE_PATH")) { @@ -199,8 +162,6 @@ MakefileGenerator::initOutPaths() v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); } - QString currentDir = qmake_getpwd(); //just to go back to - //some builtin directories if(project->isEmpty("PRECOMPILED_DIR") && !project->isEmpty("OBJECTS_DIR")) v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; @@ -214,7 +175,7 @@ MakefileGenerator::initOutPaths() const ProString orig_path = v[dkey].first(); ProString &pathRef = v[dkey].first(); - pathRef = fileFixify(pathRef.toQString(), Option::output_dir, Option::output_dir); + pathRef = fileFixify(pathRef.toQString(), FileFixifyFromOutdir); #ifdef Q_OS_WIN // We don't want to add a separator for DLLDESTDIR on Windows (###why?) @@ -229,7 +190,7 @@ MakefileGenerator::initOutPaths() continue; QString path = project->first(dkey).toQString(); //not to be changed any further - path = fileFixify(path, currentDir, Option::output_dir); + path = fileFixify(path, FileFixifyBackwards); debug_msg(3, "Fixed output_dir %s (%s) into %s", dirs[x], orig_path.toLatin1().constData(), path.toLatin1().constData()); if(!mkdir(path)) @@ -247,17 +208,17 @@ MakefileGenerator::initOutPaths() for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { ProStringList &inputs = project->values((*it2).toKey()); for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) { - QString finp = fileFixify((*input).toQString(), Option::output_dir, Option::output_dir); + QString finp = fileFixify((*input).toQString(), FileFixifyFromOutdir); *input = ProString(finp); - QString path = unescapeFilePath(replaceExtraCompilerVariables(tmp_out, finp, QString())); - path = Option::fixPathToTargetOS(path); - int slash = path.lastIndexOf(Option::dir_sep); + QString path = replaceExtraCompilerVariables(tmp_out, finp, QString(), NoShell); + path = Option::normalizePath(path); + int slash = path.lastIndexOf('/'); if(slash != -1) { path = path.left(slash); // Make out path only if it does not contain makefile variables if(!path.contains("${")) if(path != "." && - !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) + !mkdir(fileFixify(path, FileFixifyBackwards))) warn_msg(WarnLogic, "%s: Cannot access directory '%s'", (*it).toLatin1().constData(), path.toLatin1().constData()); } @@ -267,7 +228,7 @@ MakefileGenerator::initOutPaths() if(!v["DESTDIR"].isEmpty()) { QDir d(v["DESTDIR"].first().toQString()); - if(Option::fixPathToLocalOS(d.absolutePath()) == Option::fixPathToLocalOS(Option::output_dir)) + if (Option::normalizePath(d.absolutePath()) == Option::normalizePath(Option::output_dir)) v.remove("DESTDIR"); } } @@ -313,9 +274,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString continue; } if(!(flags & VPATH_NoFixify)) - file = fileFixify(file, qmake_getpwd(), Option::output_dir); - if (file.at(0) == '\"' && file.at(file.length() - 1) == '\"') - file = file.mid(1, file.length() - 2); + file = fileFixify(file, FileFixifyBackwards); if(exists(file)) { ++val_it; @@ -332,8 +291,8 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString } for (ProStringList::Iterator vpath_it = vpath.begin(); vpath_it != vpath.end(); ++vpath_it) { - QString real_dir = Option::fixPathToLocalOS((*vpath_it).toQString()); - if(exists(real_dir + QDir::separator() + val)) { + QString real_dir = Option::normalizePath((*vpath_it).toQString()); + if (exists(real_dir + '/' + val)) { ProString dir = (*vpath_it); if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; @@ -353,7 +312,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); real_dir = dir; if(!(flags & VPATH_NoFixify)) - real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/'; + real_dir = fileFixify(real_dir, FileFixifyBackwards) + '/'; regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { @@ -413,11 +372,8 @@ MakefileGenerator::initCompiler(const MakefileGenerator::Compiler &comp) void MakefileGenerator::init() { - initOutPaths(); - if(init_already) - return; verifyCompilers(); - init_already = true; + initOutPaths(); ProValueMap &v = project->variables(); @@ -444,6 +400,41 @@ MakefileGenerator::init() setSystemIncludes(v["QMAKE_DEFAULT_INCDIRS"]); + ProStringList &incs = project->values("INCLUDEPATH"); + if (!project->isActiveConfig("no_include_pwd")) { + if (Option::output_dir != qmake_getpwd()) { + // Pretend that the build dir is the source dir for #include purposes, + // consistently with the "transparent shadow builds" strategy. This is + // also consistent with #include "foo.h" falling back to #include + // behavior if it doesn't find the file in the source dir. + incs.prepend(Option::output_dir); + } + // This makes #include work if the header lives in the source dir. + // The benefit of that is questionable, as generally the user should use the + // correct include style, and extra compilers that put stuff in the source dir + // should add the dir themselves. + // More importantly, it makes #include "foo.h" work with MSVC when shadow-building, + // as this compiler looks files up relative to %CD%, not the source file's parent. + incs.prepend(qmake_getpwd()); + } + incs.append(project->specDir()); + + const char * const cacheKeys[] = { "_QMAKE_STASH_", "_QMAKE_SUPER_CACHE_", 0 }; + for (int i = 0; cacheKeys[i]; ++i) { + if (v[cacheKeys[i]].isEmpty()) + continue; + const ProString &file = v[cacheKeys[i]].first(); + if (file.isEmpty()) + continue; + + QFileInfo fi(fileInfo(file.toQString())); + + // If the file lives in the output dir we treat it as 'owned' by + // the current project, so it should be distcleaned by it as well. + if (fi.path() == Option::output_dir) + v["QMAKE_DISTCLEAN"].append(fi.fileName()); + } + ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"]; //make sure the COMPILERS are in the correct input/output chain order @@ -502,10 +493,10 @@ MakefileGenerator::init() sub.toLatin1().constData()); continue; } - inn = fileFixify(tinn.first().toQString(), qmake_getpwd()); - outn = fileFixify(toutn.first().toQString(), qmake_getpwd(), Option::output_dir); + inn = fileFixify(tinn.first().toQString(), FileFixifyToIndir); + outn = fileFixify(toutn.first().toQString(), FileFixifyBackwards); } else { - inn = fileFixify(sub, qmake_getpwd()); + inn = fileFixify(sub, FileFixifyToIndir); if (!QFile::exists(inn)) { // random insanity for backwards compat: .in file specified with absolute out dir inn = fileFixify(sub); @@ -515,7 +506,7 @@ MakefileGenerator::init() inn.toLatin1().constData()); continue; } - outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir); + outn = fileFixify(inn.left(inn.length() - 3), FileFixifyBackwards); } const ProKey confign(sub + ".CONFIG"); @@ -582,10 +573,12 @@ MakefileGenerator::init() contentBytes = contents.toUtf8(); } QFile out(outn); + QFileInfo outfi(out); if (out.exists() && out.open(QFile::ReadOnly)) { QByteArray old = out.readAll(); if (contentBytes == old) { v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + v["QMAKE_DISTCLEAN"].append(outfi.absoluteFilePath()); continue; } out.close(); @@ -595,9 +588,10 @@ MakefileGenerator::init() continue; } } - mkdir(QFileInfo(out).absolutePath()); + mkdir(outfi.absolutePath()); if(out.open(QFile::WriteOnly)) { v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + v["QMAKE_DISTCLEAN"].append(outfi.absoluteFilePath()); out.write(contentBytes); } else { warn_msg(WarnLogic, "Cannot open substitute for output '%s'", @@ -683,7 +677,7 @@ MakefileGenerator::init() const ProKey ikey(*it + ".input"); const ProKey vokey(*it + ".variable_out"); const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); - const ProString &tmp_out = project->values(ProKey(*it + ".output")).first(); + const ProString &tmp_out = project->first(ProKey(*it + ".output")); if(tmp_out.isEmpty()) continue; if (config.indexOf("combine") != -1) { @@ -694,7 +688,7 @@ MakefileGenerator::init() if(tmp_out.indexOf("$") == -1) { if(!verifyExtraCompiler((*it), QString())) //verify continue; - QString out = fileFixify(tmp_out.toQString(), Option::output_dir, Option::output_dir); + QString out = fileFixify(tmp_out.toQString(), FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = v.value(vokey); @@ -732,11 +726,10 @@ MakefileGenerator::init() if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = Option::fixPathToTargetOS(inpf, false); - if (!verifyExtraCompiler((*it).toQString(), in)) //verify + if (!verifyExtraCompiler((*it).toQString(), inpf)) //verify continue; - QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString()); - out = fileFixify(out, Option::output_dir, Option::output_dir); + QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell); + out = fileFixify(out, FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = project->values(vokey); @@ -777,15 +770,9 @@ MakefileGenerator::init() ProStringList incDirs = v["DEPENDPATH"] + v["QMAKE_ABSOLUTE_SOURCE_PATH"]; if(project->isActiveConfig("depend_includepath")) incDirs += v["INCLUDEPATH"]; - if(!project->isActiveConfig("no_include_pwd")) { - QString pwd = qmake_getpwd(); - if(pwd.isEmpty()) - pwd = "."; - incDirs += pwd; - } QList deplist; for (ProStringList::Iterator it = incDirs.begin(); it != incDirs.end(); ++it) - deplist.append(QMakeLocalFileName(unescapeFilePath((*it).toQString()))); + deplist.append(QMakeLocalFileName((*it).toQString())); QMakeSourceFileInfo::setDependencyPaths(deplist); debug_msg(1, "Dependency Directories: %s", incDirs.join(" :: ").toLatin1().constData()); //cache info @@ -831,12 +818,7 @@ MakefileGenerator::init() if(!project->isEmpty("TRANSLATIONS")) { ProStringList &trf = project->values("TRANSLATIONS"); for (ProStringList::Iterator it = trf.begin(); it != trf.end(); ++it) - (*it) = Option::fixPathToLocalOS((*it).toQString()); - } - - if(!project->isActiveConfig("no_include_pwd")) { //get the output_dir into the pwd - if(Option::output_dir != qmake_getpwd()) - project->values("INCLUDEPATH").append("."); + (*it) = Option::fixPathToTargetOS((*it).toQString()); } //fix up the target deps @@ -845,7 +827,7 @@ MakefileGenerator::init() ProStringList &l = v[fixpaths[path]]; for (ProStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) { if(!(*val_it).isEmpty()) - (*val_it) = escapeDependencyPath(Option::fixPathToTargetOS((*val_it).toQString(), false, false)); + (*val_it) = Option::fixPathToTargetOS((*val_it).toQString(), false, false); } } @@ -862,9 +844,9 @@ MakefileGenerator::init() if (exists(dep)) { out_deps.append(dep); } else { - QString dir, regex = Option::fixPathToLocalOS(dep); - if(regex.lastIndexOf(Option::dir_sep) != -1) { - dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); + QString dir, regex = Option::normalizePath(dep); + if (regex.lastIndexOf('/') != -1) { + dir = regex.left(regex.lastIndexOf('/') + 1); regex.remove(0, dir.length()); } QStringList files = QDir(dir).entryList(QStringList(regex)); @@ -903,9 +885,9 @@ MakefileGenerator::processPrlFile(QString &file) meta_file = tmp; } // meta_file = fileFixify(meta_file); - QString real_meta_file = Option::fixPathToLocalOS(meta_file); + QString real_meta_file = Option::normalizePath(meta_file); if(!meta_file.isEmpty()) { - QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir); + QString f = fileFixify(real_meta_file, FileFixifyBackwards); if(QMakeMetaInfo::libExists(f)) { QMakeMetaInfo libinfo(project); debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData()); @@ -923,7 +905,7 @@ MakefileGenerator::processPrlFile(QString &file) defs.append(def); if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) { QString dir; - int slsh = real_meta_file.lastIndexOf(Option::dir_sep); + int slsh = real_meta_file.lastIndexOf('/'); if(slsh != -1) dir = real_meta_file.left(slsh+1); file = libinfo.first("QMAKE_PRL_TARGET").toQString(); @@ -968,6 +950,21 @@ MakefileGenerator::processPrlFiles() qFatal("MakefileGenerator::processPrlFiles() called!"); } +static QString +qv(const ProString &val) +{ + return ' ' + QMakeEvaluator::quoteValue(val); +} + +static QString +qv(const ProStringList &val) +{ + QString ret; + foreach (const ProString &v, val) + ret += qv(v); + return ret; +} + void MakefileGenerator::writePrlFile(QTextStream &t) { @@ -978,21 +975,21 @@ MakefileGenerator::writePrlFile(QTextStream &t) QString bdir = Option::output_dir; if(bdir.isEmpty()) bdir = qmake_getpwd(); - t << "QMAKE_PRL_BUILD_DIR = " << bdir << endl; + t << "QMAKE_PRL_BUILD_DIR =" << qv(bdir) << endl; - t << "QMAKE_PRO_INPUT = " << project->projectFile().section('/', -1) << endl; + t << "QMAKE_PRO_INPUT =" << qv(project->projectFile().section('/', -1)) << endl; if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH")) - t << "QMAKE_PRL_SOURCE_DIR = " << project->first("QMAKE_ABSOLUTE_SOURCE_PATH") << endl; - t << "QMAKE_PRL_TARGET = " << target << endl; + t << "QMAKE_PRL_SOURCE_DIR =" << qv(project->first("QMAKE_ABSOLUTE_SOURCE_PATH")) << endl; + t << "QMAKE_PRL_TARGET =" << qv(target) << endl; if(!project->isEmpty("PRL_EXPORT_DEFINES")) - t << "QMAKE_PRL_DEFINES = " << project->values("PRL_EXPORT_DEFINES").join(' ') << endl; + t << "QMAKE_PRL_DEFINES =" << qv(project->values("PRL_EXPORT_DEFINES")) << endl; if(!project->isEmpty("PRL_EXPORT_CFLAGS")) - t << "QMAKE_PRL_CFLAGS = " << project->values("PRL_EXPORT_CFLAGS").join(' ') << endl; + t << "QMAKE_PRL_CFLAGS =" << qv(project->values("PRL_EXPORT_CFLAGS")) << endl; if(!project->isEmpty("PRL_EXPORT_CXXFLAGS")) - t << "QMAKE_PRL_CXXFLAGS = " << project->values("PRL_EXPORT_CXXFLAGS").join(' ') << endl; + t << "QMAKE_PRL_CXXFLAGS =" << qv(project->values("PRL_EXPORT_CXXFLAGS")) << endl; if(!project->isEmpty("CONFIG")) - t << "QMAKE_PRL_CONFIG = " << project->values("CONFIG").join(' ') << endl; + t << "QMAKE_PRL_CONFIG =" << qv(project->values("CONFIG")) << endl; if(!project->isEmpty("TARGET_VERSION_EXT")) t << "QMAKE_PRL_VERSION = " << project->first("TARGET_VERSION_EXT") << endl; else if(!project->isEmpty("VERSION")) @@ -1005,9 +1002,9 @@ MakefileGenerator::writePrlFile(QTextStream &t) libs << "QMAKE_LIBS"; //obvious one if(project->isActiveConfig("staticlib")) libs << "QMAKE_LIBS_PRIVATE"; - t << "QMAKE_PRL_LIBS = "; + t << "QMAKE_PRL_LIBS ="; for (ProStringList::Iterator it = libs.begin(); it != libs.end(); ++it) - t << project->values((*it).toKey()).join(' ').replace('\\', "\\\\") << " "; + t << qv(project->values((*it).toKey())); t << endl; } } @@ -1055,9 +1052,9 @@ MakefileGenerator::writeProjectMakefile() writeSubTargets(t, targets, SubTargetsNoFlags); if(!project->isActiveConfig("no_autoqmake")) { + QString mkf = escapeDependencyPath(fileFixify(Option::output.fileName())); for(QList::Iterator it = targets.begin(); it != targets.end(); ++it) - t << (*it)->makefile << ": " << - Option::fixPathToTargetOS(fileFixify(Option::output.fileName())) << endl; + t << escapeDependencyPath((*it)->makefile) << ": " << mkf << endl; } qDeleteAll(targets); return true; @@ -1105,7 +1102,7 @@ MakefileGenerator::prlFileName(bool fixify) if(fixify) { if(!project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } @@ -1127,6 +1124,7 @@ MakefileGenerator::writePrlFile() if(ft.open(QIODevice::WriteOnly)) { project->values("ALL_DEPS").append(prl); project->values("QMAKE_INTERNAL_PRL_FILE").append(prl); + project->values("QMAKE_DISTCLEAN").append(prl); QTextStream t(&ft); writePrlFile(t); } @@ -1152,30 +1150,16 @@ MakefileGenerator::writeObj(QTextStream &t, const char *src) t << escapeDependencyPath(dstf) << ": " << escapeDependencyPath(srcf) << " " << escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t"); - ProKey comp, cimp; + ProKey comp; for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { if((*sit).endsWith((*cppit))) { comp = "QMAKE_RUN_CXX"; - cimp = "QMAKE_RUN_CXX_IMP"; break; } } - if(comp.isEmpty()) { + if (comp.isEmpty()) comp = "QMAKE_RUN_CC"; - cimp = "QMAKE_RUN_CC_IMP"; - } - bool use_implicit_rule = !project->isEmpty(cimp); - use_implicit_rule = false; - if(use_implicit_rule) { - if(!project->isEmpty("OBJECTS_DIR")) { - use_implicit_rule = false; - } else { - int dot = (*sit).lastIndexOf('.'); - if(dot == -1 || ((*sit).left(dot) + Option::obj_ext != (*oit))) - use_implicit_rule = false; - } - } - if (!use_implicit_rule && !project->isEmpty(comp)) { + if (!project->isEmpty(comp)) { QString p = var(comp); p.replace(stringSrc, escapeFilePath(srcf)); p.replace(stringObj, escapeFilePath(dstf)); @@ -1188,11 +1172,13 @@ MakefileGenerator::writeObj(QTextStream &t, const char *src) QString MakefileGenerator::filePrefixRoot(const QString &root, const QString &path) { - QString ret(root + path); + QString ret(path); if(path.length() > 2 && path[1] == ':') //c:\foo - ret = QString(path.mid(0, 2) + root + path.mid(2)); - while(ret.endsWith("\\")) - ret = ret.left(ret.length()-1); + ret.insert(2, root); + else + ret.prepend(root); + while (ret.endsWith('\\')) + ret.chop(1); return ret; } @@ -1221,7 +1207,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) QString dst; if (installConfigValues.indexOf("no_path") == -1 && installConfigValues.indexOf("dummy_install") == -1) { - dst = fileFixify(unescapeFilePath(project->first(pvar).toQString()), FileFixifyAbsolute, false); + dst = fileFixify(project->first(pvar).toQString(), FileFixifyAbsolute, false); if(!dst.endsWith(Option::dir_sep)) dst += Option::dir_sep; } @@ -1309,7 +1295,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false)))); continue; } - QString local_dirstr = Option::fixPathToLocalOS(dirstr, true); + QString local_dirstr = Option::normalizePath(dirstr); QStringList files = QDir(local_dirstr).entryList(QStringList(filestr), QDir::NoDotAndDotDot | QDir::AllEntries); if (installConfigValues.contains("no_check_exist") && files.isEmpty()) { @@ -1388,7 +1374,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) t << "uninstall_" << (*it) << ": FORCE"; for (int i = uninst.size(); --i >= 0; ) t << "\n\t" << uninst.at(i); - t << "\n\t-$(DEL_DIR) " << filePrefixRoot(root, dst) << " \n\n"; + t << "\n\t-$(DEL_DIR) " << escapeFilePath(filePrefixRoot(root, dst)) << " \n\n"; } t << endl; @@ -1401,8 +1387,8 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) debug_msg(1, "no definition for install %s: install target not created",(*it).toLatin1().constData()); } } - t << "install: " << var("INSTALLDEPS") << " " << all_installs - << " FORCE\n\nuninstall: " << all_uninstalls << " " << var("UNINSTALLDEPS") + t << "install:" << depVar("INSTALLDEPS") << ' ' << all_installs + << " FORCE\n\nuninstall: " << all_uninstalls << depVar("UNINSTALLDEPS") << " FORCE\n\n"; } @@ -1412,6 +1398,24 @@ MakefileGenerator::var(const ProKey &var) const return val(project->values(var)); } +QString +MakefileGenerator::fileVar(const ProKey &var) const +{ + return val(escapeFilePaths(project->values(var))); +} + +QString +MakefileGenerator::fileVarList(const ProKey &var) const +{ + return valList(escapeFilePaths(project->values(var))); +} + +QString +MakefileGenerator::depVar(const ProKey &var) const +{ + return val(escapeDependencyPaths(project->values(var))); +} + QString MakefileGenerator::val(const ProStringList &varList) const { @@ -1432,6 +1436,12 @@ MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QStri QString MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const +{ + return valGlue(escapeFilePaths(project->values(var)), before, glue, after); +} + +QString +MakefileGenerator::fixFileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { ProStringList varList; foreach (const ProString &val, project->values(var)) @@ -1495,12 +1505,11 @@ MakefileGenerator::createObjectList(const ProStringList &sources) objdir = project->first("OBJECTS_DIR").toQString(); for (ProStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) { QString sfn = (*it).toQString(); - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(sfn))); + QFileInfo fi(fileInfo(Option::normalizePath(sfn))); QString dir; if (project->isActiveConfig("object_parallel_to_source")) { // The source paths are relative to the output dir, but we need source-relative paths - QString sourceRelativePath = fileFixify(sfn, qmake_getpwd(), Option::output_dir); - sourceRelativePath = Option::fixPathToTargetOS(sourceRelativePath, false); + QString sourceRelativePath = fileFixify(sfn, FileFixifyBackwards); if (sourceRelativePath.startsWith(".." + Option::dir_sep)) sourceRelativePath = fileFixify(sourceRelativePath, FileFixifyAbsolute); @@ -1516,7 +1525,7 @@ MakefileGenerator::createObjectList(const ProStringList &sources) if (!noIO()) { // Ensure that the final output directory of each object exists - QString outRelativePath = fileFixify(dir, qmake_getpwd(), Option::output_dir); + QString outRelativePath = fileFixify(dir, FileFixifyBackwards); if (!mkdir(outRelativePath)) warn_msg(WarnLogic, "Cannot create directory '%s'", outRelativePath.toLatin1().constData()); } @@ -1528,7 +1537,8 @@ MakefileGenerator::createObjectList(const ProStringList &sources) return ret; } -ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o) +ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey( + const QString &v, const QStringList &i, const QStringList &o, MakefileGenerator::ReplaceFor s) { static QString doubleColon = QLatin1String("::"); @@ -1545,11 +1555,13 @@ ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, con ol.sort(); out = ol.join(doubleColon); } + forShell = s; } bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey &f) const { return (hashCode() == f.hashCode() && + f.forShell == forShell && f.in == in && f.out == out && f.var == var && @@ -1558,10 +1570,11 @@ bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey QString -MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const QStringList &in, const QStringList &out) +MakefileGenerator::replaceExtraCompilerVariables( + const QString &orig_var, const QStringList &in, const QStringList &out, ReplaceFor forShell) { //lazy cache - ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out); + ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out, forShell); QString cacheVal = extraCompilerVariablesCache.value(cacheKey); if(!cacheVal.isNull()) return cacheVal; @@ -1591,7 +1604,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) { //filePath = true; for(int i = 0; i < in.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(in.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); @@ -1600,7 +1613,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_EXT")) { filePath = true; for(int i = 0; i < in.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(in.at(i)))); QString ext; // Ensure complementarity with QMAKE_FILE_BASE int baseLen = fi.completeBaseName().length(); @@ -1613,11 +1626,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) { filePath = true; for(int i = 0; i < in.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(in.at(i))).path(); + val += fileInfo(Option::normalizePath(in.at(i))).path(); } else if(var == QLatin1String("QMAKE_FILE_NAME") || var == QLatin1String("QMAKE_FILE_IN")) { filePath = true; for(int i = 0; i < in.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(in.at(i))).filePath(); + val += fileInfo(Option::normalizePath(in.at(i))).filePath(); } } @@ -1629,11 +1642,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_OUT")) { filePath = true; for(int i = 0; i < out.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(out.at(i))).filePath(); + val += fileInfo(Option::normalizePath(out.at(i))).filePath(); } else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) { //filePath = true; for(int i = 0; i < out.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(out.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(out.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); @@ -1648,12 +1661,14 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const if(!val.isEmpty()) { QString fullVal; - if(filePath) { + if (filePath && forShell != NoShell) { for(int i = 0; i < val.size(); ++i) { - const QString file = Option::fixPathToTargetOS(unescapeFilePath(val.at(i)), false); if(!fullVal.isEmpty()) fullVal += " "; - fullVal += escapeFilePath(file); + if (forShell == LocalShell) + fullVal += IoUtils::shellQuote(Option::fixPathToLocalOS(val.at(i), false)); + else + fullVal += escapeFilePath(Option::fixPathToTargetOS(val.at(i), false)); } } else { fullVal = val.join(' '); @@ -1675,7 +1690,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil { if(noIO()) return false; - const QString file = Option::fixPathToLocalOS(file_unfixed); + const QString file = Option::normalizePath(file_unfixed); const ProStringList &config = project->values(ProKey(comp + ".CONFIG")); if (config.indexOf("moc_verify") != -1) { @@ -1688,7 +1703,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil } } } else if (config.indexOf("function_verify") != -1) { - ProString tmp_out = project->values(ProKey(comp + ".output")).first(); + ProString tmp_out = project->first(ProKey(comp + ".output")); if(tmp_out.isEmpty()) return false; ProStringList verify_function = project->values(ProKey(comp + ".verify_function")); @@ -1717,10 +1732,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + QString in = fileFixify(inpf); if(in == file) { bool pass = project->test(verify.toKey(), - QList() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString())) << + QList() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell)) << ProStringList(file)); if(invert) pass = !pass; @@ -1733,12 +1748,12 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil } } } else if (config.indexOf("verify") != -1) { - QString tmp_out = project->values(ProKey(comp + ".output")).first().toQString(); + QString tmp_out = project->first(ProKey(comp + ".output")).toQString(); if(tmp_out.isEmpty()) return false; const QString tmp_cmd = project->values(ProKey(comp + ".commands")).join(' '); if (config.indexOf("combine") != -1) { - QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out, LocalShell); if(system(cmd.toLatin1().constData())) return false; } else { @@ -1749,10 +1764,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + QString in = fileFixify(inpf); if(in == file) { - QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString()); - QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out); + QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out, LocalShell); if(system(cmd.toLatin1().constData())) return false; break; @@ -1782,7 +1797,7 @@ MakefileGenerator::writeExtraTargets(QTextStream &t) } const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); if (config.indexOf("fix_target") != -1) - targ = fileFixify(targ, Option::output_dir, Option::output_dir); + targ = fileFixify(targ, FileFixifyFromOutdir); if (config.indexOf("phony") != -1) deps += QLatin1String(" FORCE"); t << escapeDependencyPath(targ) << ":" << deps; @@ -1799,7 +1814,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { QString tmp_out = fileFixify(project->first(ProKey(*it + ".output")).toQString(), - Option::output_dir, Option::output_dir); + FileFixifyFromOutdir); const QString tmp_cmd = project->values(ProKey(*it + ".commands")).join(' '); const QString tmp_dep_cmd = project->values(ProKey(*it + ".depend_command")).join(' '); QString dep_cd_cmd; @@ -1817,8 +1832,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) for (ProStringList::ConstIterator it2 = comp_inputs.begin(); it2 != comp_inputs.end(); ++it2) { const ProStringList &tmp = project->values((*it2).toKey()); for (ProStringList::ConstIterator input = tmp.begin(); input != tmp.end(); ++input) { - QString in = Option::fixPathToTargetOS((*input).toQString(), false); - if(verifyExtraCompiler((*it), in)) + if (verifyExtraCompiler((*it), (*input).toQString())) tmp_inputs.append((*input)); } } @@ -1829,16 +1843,23 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) if (config.indexOf("combine") != -1) { // compilers with a combined input only have one output QString input = project->first(ProKey(*it + ".output")).toQString(); - t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, input, QString()))); + t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out, input, QString(), NoShell))); } else { for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { - t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString()))); + t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString(), NoShell))); } } t << endl; if (config.indexOf("no_clean") == -1) { - QString tmp_clean = project->values(ProKey(*it + ".clean")).join(' '); + QStringList raw_clean = project->values(ProKey(*it + ".clean")).toQStringList(); + if (raw_clean.isEmpty()) + raw_clean << tmp_out; + QString tmp_clean; + foreach (const QString &rc, raw_clean) + tmp_clean += ' ' + escapeFilePath(Option::fixPathToTargetOS(rc)); QString tmp_clean_cmds = project->values(ProKey(*it + ".clean_commands")).join(' '); if(!tmp_inputs.isEmpty()) clean_targets += QString("compiler_" + (*it) + "_clean "); @@ -1850,35 +1871,35 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) t << "\n\t" << tmp_clean_cmds; wrote_clean_cmds = true; } - if(tmp_clean.isEmpty()) - tmp_clean = tmp_out; if(tmp_clean.indexOf("${QMAKE_") == -1) { - t << "\n\t-$(DEL_FILE) " << tmp_clean; + t << "\n\t-$(DEL_FILE)" << tmp_clean; wrote_clean = true; } if(!wrote_clean_cmds || !wrote_clean) { - ProStringList cleans; + QStringList cleans; const QString del_statement("-$(DEL_FILE)"); if(!wrote_clean) { - if(project->isActiveConfig("no_delete_multiple_files")) { - for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { - QString tinp = (*input).toQString(); - cleans.append(" " + Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_clean, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())))); + QStringList dels; + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString tinp = (*input).toQString(); + QString out = replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell); + foreach (const QString &rc, raw_clean) { + dels << ' ' + escapeFilePath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(rc, tinp, out, NoShell), false)); } + } + if(project->isActiveConfig("no_delete_multiple_files")) { + cleans = dels; } else { - QString files, file; + QString files; const int commandlineLimit = 2047; // NT limit, expanded - for(int input = 0; input < tmp_inputs.size(); ++input) { - QString tinp = tmp_inputs.at(input).toQString(); - file = " " + replaceExtraCompilerVariables(tmp_clean, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())); + foreach (const QString &file, dels) { if(del_statement.length() + files.length() + qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) { cleans.append(files); files.clear(); } - files += Option::fixPathToTargetOS(file); + files += file; } if(!files.isEmpty()) cleans.append(files); @@ -1890,7 +1911,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { QString tinp = (*input).toQString(); t << "\n\t" << replaceExtraCompilerVariables(tmp_clean_cmds, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())); + replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell), TargetShell); } } } @@ -1905,14 +1926,14 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QStringList deps, inputs; if(!tmp_dep.isEmpty()) - deps += fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + deps += fileFixify(tmp_dep, FileFixifyFromOutdir); for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { QString inpf = (*input).toQString(); deps += findDependencies(inpf); inputs += Option::fixPathToTargetOS(inpf, false); if(!tmp_dep_cmd.isEmpty() && doDepends()) { char buff[256]; - QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out); + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out, LocalShell); dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; @@ -1924,6 +1945,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QT_PCLOSE(proc); if(!indeps.isEmpty()) { + // ### This is basically fubar. Add 'lines' flag to CONFIG? QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { QString &file = dep_cmd_deps[i]; @@ -1935,8 +1957,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QList depdirs = QMakeSourceFileInfo::dependencyPaths(); for (QList::Iterator dit = depdirs.begin(); dit != depdirs.end(); ++dit) { - if (exists((*dit).real() + Option::dir_sep + file)) { - localFile = (*dit).local() + Option::dir_sep + file; + if (exists((*dit).local() + '/' + file)) { + localFile = (*dit).local() + '/' + file; break; } } @@ -1974,12 +1996,12 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) if (inputs.isEmpty()) continue; - QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString()); - QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList() << out); + QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, inputs, QStringList() << out, TargetShell); t << escapeDependencyPath(Option::fixPathToTargetOS(out)) << ":"; // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies if (config.indexOf("explicit_dependencies") != -1) { - t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); + t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, FileFixifyFromOutdir))); } else { t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); } @@ -1990,20 +2012,20 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QString inpf = (*input).toQString(); QString in = Option::fixPathToTargetOS(inpf, false); QStringList deps = findDependencies(inpf); - deps += escapeDependencyPath(in); - QString out = unescapeFilePath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString()))); + deps << in; + QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell)); if(!tmp_dep.isEmpty()) { - QStringList pre_deps = fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + QStringList pre_deps = fileFixify(tmp_dep, FileFixifyFromOutdir); for(int i = 0; i < pre_deps.size(); ++i) - deps += replaceExtraCompilerVariables(pre_deps.at(i), inpf, out); + deps << replaceExtraCompilerVariables(pre_deps.at(i), inpf, out, NoShell); } - QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out, TargetShell); // NOTE: The var -> QMAKE_COMP_var replace feature is unsupported, do not use! for (ProStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3) cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")"); if(!tmp_dep_cmd.isEmpty() && doDepends()) { char buff[256]; - QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out); + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out, LocalShell); dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; @@ -2015,6 +2037,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QT_PCLOSE(proc); if(!indeps.isEmpty()) { + // ### This is basically fubar. Add 'lines' flag to CONFIG? QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { QString &file = dep_cmd_deps[i]; @@ -2026,8 +2049,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QList depdirs = QMakeSourceFileInfo::dependencyPaths(); for (QList::Iterator dit = depdirs.begin(); dit != depdirs.end(); ++dit) { - if (exists((*dit).real() + Option::dir_sep + file)) { - localFile = (*dit).local() + Option::dir_sep + file; + if (exists((*dit).local() + '/' + file)) { + localFile = (*dit).local() + '/' + file; break; } } @@ -2092,7 +2115,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } for(int i = 0; i < deps.size(); ) { QString &dep = deps[i]; - dep = Option::fixPathToTargetOS(unescapeFilePath(dep), false); + dep = Option::fixPathToTargetOS(dep, false); if(out == dep) deps.removeAt(i); else @@ -2212,25 +2235,18 @@ MakefileGenerator::writeDefaultVariables(QTextStream &t) t << "MOVE = " << var("QMAKE_MOVE") << endl; } -QString MakefileGenerator::fixifySpecdir(const QString &spec, const QString &outdir) -{ - if (QFileInfo(spec).isAbsolute()) - return fileFixify(spec, outdir); - return spec; -} - QString MakefileGenerator::buildArgs() { QString ret; foreach (const QString &arg, Option::globals->qmake_args) - ret += " " + escapeFilePath(arg); + ret += " " + shellQuote(arg); return ret; } //could get stored argv, but then it would have more options than are //probably necesary this will try to guess the bare minimum.. -QString MakefileGenerator::build_args(const QString &outdir) +QString MakefileGenerator::build_args() { QString ret = "$(QMAKE)"; @@ -2238,12 +2254,12 @@ QString MakefileGenerator::build_args(const QString &outdir) ret += buildArgs(); //output - QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + QString ofile = fileFixify(Option::output.fileName()); if(!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE")) ret += " -o " + escapeFilePath(ofile); //inputs - ret += " " + escapeFilePath(fileFixify(project->projectFile(), outdir)); + ret += " " + escapeFilePath(fileFixify(project->projectFile())); return ret; } @@ -2263,7 +2279,7 @@ MakefileGenerator::writeHeader(QTextStream &t) QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); if (ofile.lastIndexOf(Option::dir_sep) != -1) ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1); - t << "MAKEFILE = " << ofile << endl << endl; + t << "MAKEFILE = " << escapeFilePath(ofile) << endl << endl; } QList @@ -2276,7 +2292,7 @@ MakefileGenerator::findSubDirsSubTargets() const ProString ofile = subdirs[subdir]; QString oname = ofile.toQString(); QString fixedSubdir = oname; - fixedSubdir = fixedSubdir.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + fixedSubdir.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); SubTarget *st = new SubTarget; st->name = oname; @@ -2317,7 +2333,7 @@ MakefileGenerator::findSubDirsSubTargets() const if(fileInfo(st->in_directory).isRelative()) st->out_directory = st->in_directory; else - st->out_directory = fileFixify(st->in_directory, qmake_getpwd(), Option::output_dir); + st->out_directory = fileFixify(st->in_directory, FileFixifyBackwards); const ProKey mkey(fixedSubdir + ".makefile"); if (!project->isEmpty(mkey)) { st->makefile = project->first(mkey).toQString(); @@ -2341,12 +2357,12 @@ MakefileGenerator::findSubDirsSubTargets() const if(subdirs[subDep] == depends.at(depend)) { QString subName = subdirs[subDep].toQString(); QString fixedSubDep = subName; - fixedSubDep = fixedSubDep.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + fixedSubDep.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); const ProKey dtkey(fixedSubDep + ".target"); if (!project->isEmpty(dtkey)) { st->depends += project->first(dtkey); } else { - QString d = Option::fixPathToLocalOS(subName); + QString d = Option::fixPathToTargetOS(subName); const ProKey dfkey(fixedSubDep + ".file"); if (!project->isEmpty(dfkey)) { d = project->first(dfkey).toQString(); @@ -2372,7 +2388,7 @@ MakefileGenerator::findSubDirsSubTargets() const st->target = project->first(tkey).toQString(); } else { st->target = "sub-" + file; - st->target = st->target.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + st->target.replace(QRegExp("[^a-zA-Z0-9_]"), "-"); } } } @@ -2453,8 +2469,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListmakefile; + : "\n\tcd " + escapeFilePath(out_directory) + " && "; + QString makefilein = " -f " + escapeFilePath(subtarget->makefile); //qmake it QString out; @@ -2464,6 +2480,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListprofile, FileFixifyAbsolute)); if(out.startsWith(in_directory)) out = out.mid(in_directory.length()); + out = escapeFilePath(out); t << subtarget->target << "-qmake_all: "; if (flags & SubTargetOrdered) { if (target) @@ -2557,19 +2574,19 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList recurse; @@ -2614,8 +2631,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListmakefile; + : "\n\tcd " + escapeFilePath(out_directory) + " && "; + QString makefilein = " -f " + escapeFilePath(subtarget->makefile); QString out; QString in; @@ -2624,6 +2641,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListprofile, FileFixifyAbsolute)); if (out.startsWith(in_directory)) out = out.mid(in_directory.length()); + out = escapeFilePath(out); } //write the rule/depends @@ -2669,16 +2687,16 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListisEmpty("QMAKE_FAILED_REQUIREMENTS") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) { - QStringList files = fileFixify(Option::mkfile::project_files); + QStringList files = escapeFilePaths(fileFixify(Option::mkfile::project_files)); t << escapeDependencyPath(project->first("QMAKE_INTERNAL_PRL_FILE").toQString()) << ": \n\t" << "@$(QMAKE) -prl " << buildArgs() << " " << files.join(' ') << endl; } QString qmake = build_args(); if(!ofile.isEmpty() && !project->isActiveConfig("no_autoqmake")) { - t << escapeFilePath(ofile) << ": " + t << escapeDependencyPath(ofile) << ": " << escapeDependencyPath(fileFixify(project->projectFile())) << " "; if (Option::globals->do_cache) { if (!project->confFile().isEmpty()) @@ -2687,11 +2705,11 @@ MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll) t << escapeDependencyPath(fileFixify(project->cacheFile())) << " "; } if(!specdir().isEmpty()) { - if(exists(Option::fixPathToLocalOS(specdir()+QDir::separator()+"qmake.conf"))) + if (exists(Option::normalizePath(specdir() + "/qmake.conf"))) t << escapeDependencyPath(specdir() + Option::dir_sep + "qmake.conf") << " "; } - const ProStringList &included = project->values("QMAKE_INTERNAL_INCLUDED_FILES"); - t << escapeDependencyPaths(included).join(" \\\n\t\t") << "\n\t" + const ProStringList &included = escapeDependencyPaths(project->values("QMAKE_INTERNAL_INCLUDED_FILES")); + t << included.join(" \\\n\t\t") << "\n\t" << qmake << endl; for(int include = 0; include < included.size(); ++include) { const ProString &i = included.at(include); @@ -2726,19 +2744,22 @@ MakefileGenerator::fileInfo(QString file) const return fi; } -QString -MakefileGenerator::unescapeFilePath(const QString &path) const +ProStringList +MakefileGenerator::fixLibFlags(const ProKey &var) { - QString ret = path; - ret.replace(QLatin1String("\\ "), QLatin1String(" ")); - ret.remove(QLatin1Char('\"')); + ProStringList in = project->values(var); + ProStringList ret; + + ret.reserve(in.length()); + foreach (const ProString &v, in) + ret << fixLibFlag(v); return ret; } -ProString -MakefileGenerator::unescapeFilePath(const ProString &path) const +ProString MakefileGenerator::fixLibFlag(const ProString &) { - return ProString(unescapeFilePath(path.toQString())); + qFatal("MakefileGenerator::fixLibFlag() called"); + return ProString(); } ProString @@ -2765,6 +2786,12 @@ MakefileGenerator::escapeFilePaths(const ProStringList &paths) const return ret; } +ProString +MakefileGenerator::escapeDependencyPath(const ProString &path) const +{ + return ProString(escapeDependencyPath(path.toQString())); +} + QStringList MakefileGenerator::escapeDependencyPaths(const QStringList &paths) const { @@ -2784,44 +2811,24 @@ MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const } QStringList -MakefileGenerator::unescapeFilePaths(const QStringList &paths) const -{ - QStringList ret; - for(int i = 0; i < paths.size(); ++i) - ret.append(unescapeFilePath(paths.at(i))); - return ret; -} - -ProStringList -MakefileGenerator::unescapeFilePaths(const ProStringList &paths) const -{ - ProStringList ret; - for (int i = 0; i < paths.size(); ++i) - ret.append(unescapeFilePath(paths.at(i))); - return ret; -} - -QStringList -MakefileGenerator::fileFixify(const QStringList& files, const QString &out_dir, const QString &in_dir, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QStringList &files, FileFixifyTypes fix, bool canon) const { if(files.isEmpty()) return files; QStringList ret; for(QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) { if(!(*it).isEmpty()) - ret << fileFixify((*it), out_dir, in_dir, fix, canon); + ret << fileFixify((*it), fix, canon); } return ret; } QString -MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const QString &in_d, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QString &file, FileFixifyTypes fix, bool canon) const { if(file.isEmpty()) return file; - QString ret = unescapeFilePath(file); + QString ret = file; //do the fixin' QString orig_file = ret; @@ -2831,17 +2838,23 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q else warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); } - if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) { - if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute - QString pwd = qmake_getpwd(); + if ((fix & FileFixifyAbsolute) + || (!(fix & FileFixifyRelative) && project->isActiveConfig("no_fixpath"))) { + if ((fix & FileFixifyAbsolute) && QDir::isRelativePath(ret)) { + QString pwd = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; + { + QFileInfo in_fi(fileInfo(pwd)); + if (in_fi.exists()) + pwd = in_fi.canonicalFilePath(); + } if (!pwd.endsWith(QLatin1Char('/'))) pwd += QLatin1Char('/'); ret.prepend(pwd); } ret = Option::fixPathToTargetOS(ret, false, canon); } else { //fix it.. - QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d); - QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d); + QString out_dir = (fix & FileFixifyToIndir) ? project->projectDir() : Option::output_dir; + QString in_dir = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; { QFileInfo in_fi(fileInfo(in_dir)); if(in_fi.exists()) @@ -2851,7 +2864,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q out_dir = out_fi.canonicalFilePath(); } - QString qfile(Option::fixPathToLocalOS(ret, true, canon)); + QString qfile(Option::normalizePath(ret)); QFileInfo qfileinfo(fileInfo(qfile)); if(out_dir != in_dir || !qfileinfo.isRelative()) { if(qfileinfo.isRelative()) { @@ -2859,9 +2872,6 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q qfileinfo.setFile(ret); } ret = Option::fixPathToTargetOS(ret, false, canon); - if(canon && qfileinfo.exists() && - file == Option::fixPathToTargetOS(ret, true, canon)) - ret = Option::fixPathToTargetOS(qfileinfo.canonicalFilePath()); QString match_dir = Option::fixPathToTargetOS(out_dir, false, canon); if(ret == match_dir) { ret = ""; @@ -2906,8 +2916,8 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q } if(ret.isEmpty()) ret = "."; - debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(), - ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(), + debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s]", + int(fix), canon, orig_file.toLatin1().constData(), ret.toLatin1().constData(), qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData()); return ret; } @@ -2916,7 +2926,7 @@ QMakeLocalFileName MakefileGenerator::fixPathForFile(const QMakeLocalFileName &file, bool forOpen) { if(forOpen) - return QMakeLocalFileName(fileFixify(file.real(), qmake_getpwd(), Option::output_dir)); + return QMakeLocalFileName(fileFixify(file.real(), FileFixifyBackwards)); return QMakeLocalFileName(fileFixify(file.real())); } @@ -2971,7 +2981,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca if(QDir::isRelativePath(dir)) { if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; - QString shadow = fileFixify(dir + dep.local(), pwd, Option::output_dir); + QString shadow = fileFixify(dir + dep.local(), FileFixifyBackwards); if(exists(shadow)) { ret = QMakeLocalFileName(shadow); goto found_dep_from_heuristic; @@ -2980,7 +2990,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca } } { //is it from an EXTRA_TARGET - const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const QString dep_basename = dep.local().section('/', -1); const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) { QString targ = var(ProKey(*it + ".target")); @@ -2994,7 +3004,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca } } { //is it from an EXTRA_COMPILER - const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const QString dep_basename = dep.local().section('/', -1); const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { const ProString &tmp_out = project->first(ProKey(*it + ".output")); @@ -3004,10 +3014,10 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { const ProStringList &inputs = project->values((*it2).toKey()); for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) { - QString out = Option::fixPathToTargetOS(unescapeFilePath( - replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString()))); + QString out = Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString(), NoShell)); if (out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) { - ret = QMakeLocalFileName(fileFixify(out, qmake_getpwd(), Option::output_dir)); + ret = QMakeLocalFileName(fileFixify(out, FileFixifyBackwards)); goto found_dep_from_heuristic; } } @@ -3124,7 +3134,7 @@ MakefileGenerator::pkgConfigFileName(bool fixify) if(fixify) { if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } @@ -3134,7 +3144,7 @@ MakefileGenerator::pkgConfigPrefix() const { if(!project->isEmpty("QMAKE_PKGCONFIG_PREFIX")) return project->first("QMAKE_PKGCONFIG_PREFIX").toQString(); - return QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::FinalPaths); + return project->propertyValue(ProKey("QT_INSTALL_PREFIX")).toQString(); } QString @@ -3142,7 +3152,7 @@ MakefileGenerator::pkgConfigFixPath(QString path) const { QString prefix = pkgConfigPrefix(); if(path.startsWith(prefix)) - path = path.replace(prefix, "${prefix}"); + path.replace(prefix, "${prefix}"); return path; } @@ -3154,7 +3164,9 @@ MakefileGenerator::writePkgConfigFile() QFile ft(fname); if(!ft.open(QIODevice::WriteOnly)) return; - project->values("ALL_DEPS").append(fileFixify(fname)); + QString ffname(fileFixify(fname)); + project->values("ALL_DEPS").append(ffname); + project->values("QMAKE_DISTCLEAN").append(ffname); QTextStream t(&ft); QString prefix = pkgConfigPrefix(); @@ -3235,9 +3247,9 @@ MakefileGenerator::writePkgConfigFile() } ProString bundle; if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME")) - bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME")); + bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"); else - bundle = unescapeFilePath(project->first("TARGET")); + bundle = project->first("TARGET"); int suffix = bundle.lastIndexOf(".framework"); if (suffix != -1) bundle = bundle.left(suffix); @@ -3245,11 +3257,11 @@ MakefileGenerator::writePkgConfigFile() } else { if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir)) t << "-L${libdir} "; - pkgConfiglibName = "-l" + unescapeFilePath(project->first("QMAKE_ORIG_TARGET")); + pkgConfiglibName = "-l" + project->first("QMAKE_ORIG_TARGET"); if (project->isActiveConfig("shared")) pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString(); } - t << pkgConfiglibName << " \n"; + t << shellQuote(pkgConfiglibName) << " \n"; ProStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) { @@ -3261,7 +3273,7 @@ MakefileGenerator::writePkgConfigFile() libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread? t << "Libs.private: "; for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) { - t << project->values((*it).toKey()).join(' ') << " "; + t << fixLibFlags((*it).toKey()).join(' ') << ' '; } t << endl; @@ -3299,7 +3311,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt QString ret; if (project->isEmpty(replace_rule) || project->isActiveConfig("no_sed_meta_install")) { - ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\""; + ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + escapeFilePath(dst); } else { ret += "-$(SED)"; const ProStringList &replace_rules = project->values(replace_rule); @@ -3313,7 +3325,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt + "," + windowsifyPath(replace.toQString()) + ",gi"); } } - ret += " \"" + src + "\" >\"" + dst + "\""; + ret += ' ' + escapeFilePath(src) + " > " + escapeFilePath(dst); } return ret; } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c similarity index 99% rename from Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c rename to Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c index 6b36e4fab..96f6e19f6 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c @@ -42,7 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. strings. */ -#ifdef PCRE_HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h new file mode 100644 index 000000000..9bee4732c --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h @@ -0,0 +1,509 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOBJECTDEFS_H +#define QOBJECTDEFS_H + +#if defined(__OBJC__) && !defined(__cplusplus) +# warning "File built in Objective-C mode (.m), but using Qt requires Objective-C++ (.mm)" +#endif + +#include + +#include + +QT_BEGIN_NAMESPACE + + +class QByteArray; +struct QArrayData; +typedef QArrayData QByteArrayData; + +class QString; + +#ifndef Q_MOC_OUTPUT_REVISION +#define Q_MOC_OUTPUT_REVISION 67 +#endif + +// The following macros are our "extensions" to C++ +// They are used, strictly speaking, only by the moc. + +#ifndef Q_MOC_RUN +#ifndef QT_NO_META_MACROS +# if defined(QT_NO_KEYWORDS) +# define QT_NO_EMIT +# else +# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS +# define slots +# define signals public +# endif +# endif +# define Q_SLOTS +# define Q_SIGNALS public +# define Q_PRIVATE_SLOT(d, signature) +# define Q_EMIT +#ifndef QT_NO_EMIT +# define emit +#endif +#define Q_CLASSINFO(name, value) +#define Q_PLUGIN_METADATA(x) +#define Q_INTERFACES(x) +#define Q_PROPERTY(text) +#define Q_PRIVATE_PROPERTY(d, text) +#define Q_REVISION(v) +#define Q_OVERRIDE(text) +#define Q_ENUMS(x) +#define Q_FLAGS(x) +#define Q_ENUM(ENUM) \ + friend Q_DECL_CONSTEXPR const QMetaObject *qt_getEnumMetaObject(ENUM) Q_DECL_NOEXCEPT { return &staticMetaObject; } \ + friend Q_DECL_CONSTEXPR const char *qt_getEnumName(ENUM) Q_DECL_NOEXCEPT { return #ENUM; } +#define Q_FLAG(ENUM) Q_ENUM(ENUM) +#define Q_SCRIPTABLE +#define Q_INVOKABLE +#define Q_SIGNAL +#define Q_SLOT +#endif // QT_NO_META_MACROS + +#ifndef QT_NO_TRANSLATION +// full set of tr functions +# define QT_TR_FUNCTIONS \ + static inline QString tr(const char *s, const char *c = Q_NULLPTR, int n = -1) \ + { return staticMetaObject.tr(s, c, n); } \ + QT_DEPRECATED static inline QString trUtf8(const char *s, const char *c = Q_NULLPTR, int n = -1) \ + { return staticMetaObject.tr(s, c, n); } +#else +// inherit the ones from QObject +# define QT_TR_FUNCTIONS +#endif + +#if defined(QT_NO_QOBJECT_CHECK) +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_CHECK +#else + +/* This is a compile time check that ensures that any class cast with qobject_cast + actually contains a Q_OBJECT macro. Note: qobject_cast will fail if a QObject + subclass doesn't contain Q_OBJECT. + + In qt_check_for_QOBJECT_macro, we call a dummy templated function with two + parameters, the first being "this" and the other the target of the qobject + cast. If the types are not identical, we know that a Q_OBJECT macro is missing. + + If you get a compiler error here, make sure that the class you are casting + to contains a Q_OBJECT macro. +*/ + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_CHECK \ + template inline void qt_check_for_QOBJECT_macro(const ThisObject &_q_argument) const \ + { int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); i = i + 1; } + +template +inline int qYouForgotTheQ_OBJECT_Macro(T, T) { return 0; } + +template +inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} +#endif // QT_NO_QOBJECT_CHECK + +#if defined(Q_CC_INTEL) +// Cannot redefine the visibility of a method in an exported class +# define Q_DECL_HIDDEN_STATIC_METACALL +#else +# define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN +#endif + +#if defined(Q_CC_CLANG) && (Q_CC_CLANG >= 306) && 0 +# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") +#else +# define Q_OBJECT_NO_OVERRIDE_WARNING +#endif + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT \ +public: \ + Q_OBJECT_CHECK \ + QT_WARNING_PUSH \ + Q_OBJECT_NO_OVERRIDE_WARNING \ + static const QMetaObject staticMetaObject; \ + virtual const QMetaObject *metaObject() const; \ + virtual void *qt_metacast(const char *); \ + virtual int qt_metacall(QMetaObject::Call, int, void **); \ + QT_WARNING_POP \ + QT_TR_FUNCTIONS \ +private: \ + Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ + struct QPrivateSignal {}; + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_FAKE Q_OBJECT + +#ifndef QT_NO_META_MACROS +/* qmake ignore Q_GADGET */ +#define Q_GADGET \ +public: \ + static const QMetaObject staticMetaObject; \ + void qt_check_for_QGADGET_macro(); \ + typedef void QtGadgetHelper; \ +private: \ + Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); +#endif // QT_NO_META_MACROS + +#else // Q_MOC_RUN +#define slots slots +#define signals signals +#define Q_SLOTS Q_SLOTS +#define Q_SIGNALS Q_SIGNALS +#define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value) +#define Q_INTERFACES(x) Q_INTERFACES(x) +#define Q_PROPERTY(text) Q_PROPERTY(text) +#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text) +#define Q_REVISION(v) Q_REVISION(v) +#define Q_OVERRIDE(text) Q_OVERRIDE(text) +#define Q_ENUMS(x) Q_ENUMS(x) +#define Q_FLAGS(x) Q_FLAGS(x) +#define Q_ENUM(x) Q_ENUM(x) +#define Q_FLAGS(x) Q_FLAGS(x) + /* qmake ignore Q_OBJECT */ +#define Q_OBJECT Q_OBJECT + /* qmake ignore Q_OBJECT */ +#define Q_OBJECT_FAKE Q_OBJECT_FAKE + /* qmake ignore Q_GADGET */ +#define Q_GADGET Q_GADGET +#define Q_SCRIPTABLE Q_SCRIPTABLE +#define Q_INVOKABLE Q_INVOKABLE +#define Q_SIGNAL Q_SIGNAL +#define Q_SLOT Q_SLOT +#endif //Q_MOC_RUN + +#ifndef QT_NO_META_MACROS +// macro for onaming members +#ifdef METHOD +#undef METHOD +#endif +#ifdef SLOT +#undef SLOT +#endif +#ifdef SIGNAL +#undef SIGNAL +#endif +#endif // QT_NO_META_MACROS + +Q_CORE_EXPORT const char *qFlagLocation(const char *method); + +#ifndef QT_NO_META_MACROS +#ifndef QT_NO_DEBUG +# define QLOCATION "\0" __FILE__ ":" QT_STRINGIFY(__LINE__) +# ifndef QT_NO_KEYWORDS +# define METHOD(a) qFlagLocation("0"#a QLOCATION) +# endif +# define SLOT(a) qFlagLocation("1"#a QLOCATION) +# define SIGNAL(a) qFlagLocation("2"#a QLOCATION) +#else +# ifndef QT_NO_KEYWORDS +# define METHOD(a) "0"#a +# endif +# define SLOT(a) "1"#a +# define SIGNAL(a) "2"#a +#endif + +#define QMETHOD_CODE 0 // member type codes +#define QSLOT_CODE 1 +#define QSIGNAL_CODE 2 +#endif // QT_NO_META_MACROS + +#define Q_ARG(type, data) QArgument(#type, data) +#define Q_RETURN_ARG(type, data) QReturnArgument(#type, data) + +class QObject; +class QMetaMethod; +class QMetaEnum; +class QMetaProperty; +class QMetaClassInfo; + + +class Q_CORE_EXPORT QGenericArgument +{ +public: + inline QGenericArgument(const char *aName = 0, const void *aData = 0) + : _data(aData), _name(aName) {} + inline void *data() const { return const_cast(_data); } + inline const char *name() const { return _name; } + +private: + const void *_data; + const char *_name; +}; + +class Q_CORE_EXPORT QGenericReturnArgument: public QGenericArgument +{ +public: + inline QGenericReturnArgument(const char *aName = 0, void *aData = 0) + : QGenericArgument(aName, aData) + {} +}; + +template +class QArgument: public QGenericArgument +{ +public: + inline QArgument(const char *aName, const T &aData) + : QGenericArgument(aName, static_cast(&aData)) + {} +}; +template +class QArgument: public QGenericArgument +{ +public: + inline QArgument(const char *aName, T &aData) + : QGenericArgument(aName, static_cast(&aData)) + {} +}; + + +template +class QReturnArgument: public QGenericReturnArgument +{ +public: + inline QReturnArgument(const char *aName, T &aData) + : QGenericReturnArgument(aName, static_cast(&aData)) + {} +}; + +struct Q_CORE_EXPORT QMetaObject +{ + class Connection; + const char *className() const; + const QMetaObject *superClass() const; + + QObject *cast(QObject *obj) const; + const QObject *cast(const QObject *obj) const; + +#ifndef QT_NO_TRANSLATION + QString tr(const char *s, const char *c, int n = -1) const; +#endif // QT_NO_TRANSLATION + + int methodOffset() const; + int enumeratorOffset() const; + int propertyOffset() const; + int classInfoOffset() const; + + int constructorCount() const; + int methodCount() const; + int enumeratorCount() const; + int propertyCount() const; + int classInfoCount() const; + + int indexOfConstructor(const char *constructor) const; + int indexOfMethod(const char *method) const; + int indexOfSignal(const char *signal) const; + int indexOfSlot(const char *slot) const; + int indexOfEnumerator(const char *name) const; + int indexOfProperty(const char *name) const; + int indexOfClassInfo(const char *name) const; + + QMetaMethod constructor(int index) const; + QMetaMethod method(int index) const; + QMetaEnum enumerator(int index) const; + QMetaProperty property(int index) const; + QMetaClassInfo classInfo(int index) const; + QMetaProperty userProperty() const; + + static bool checkConnectArgs(const char *signal, const char *method); + static bool checkConnectArgs(const QMetaMethod &signal, + const QMetaMethod &method); + static QByteArray normalizedSignature(const char *method); + static QByteArray normalizedType(const char *type); + + // internal index-based connect + static Connection connect(const QObject *sender, int signal_index, + const QObject *receiver, int method_index, + int type = 0, int *types = 0); + // internal index-based disconnect + static bool disconnect(const QObject *sender, int signal_index, + const QObject *receiver, int method_index); + static bool disconnectOne(const QObject *sender, int signal_index, + const QObject *receiver, int method_index); + // internal slot-name based connect + static void connectSlotsByName(QObject *o); + + // internal index-based signal activation + static void activate(QObject *sender, int signal_index, void **argv); + static void activate(QObject *sender, const QMetaObject *, int local_signal_index, void **argv); + static void activate(QObject *sender, int signal_offset, int local_signal_index, void **argv); + + static bool invokeMethod(QObject *obj, const char *member, + Qt::ConnectionType, + QGenericReturnArgument ret, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()); + + static inline bool invokeMethod(QObject *obj, const char *member, + QGenericReturnArgument ret, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, Qt::AutoConnection, ret, val0, val1, val2, val3, + val4, val5, val6, val7, val8, val9); + } + + static inline bool invokeMethod(QObject *obj, const char *member, + Qt::ConnectionType type, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2, + val3, val4, val5, val6, val7, val8, val9); + } + + static inline bool invokeMethod(QObject *obj, const char *member, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, Qt::AutoConnection, QGenericReturnArgument(), val0, + val1, val2, val3, val4, val5, val6, val7, val8, val9); + } + + QObject *newInstance(QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) const; + + enum Call { + InvokeMetaMethod, + ReadProperty, + WriteProperty, + ResetProperty, + QueryPropertyDesignable, + QueryPropertyScriptable, + QueryPropertyStored, + QueryPropertyEditable, + QueryPropertyUser, + CreateInstance, + IndexOfMethod, + RegisterPropertyMetaType, + RegisterMethodArgumentMetaType + }; + + int static_metacall(Call, int, void **) const; + static int metacall(QObject *, Call, int, void **); + + struct { // private data + const QMetaObject *superdata; + const QByteArrayData *stringdata; + const uint *data; + typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); + StaticMetacallFunction static_metacall; + const QMetaObject * const *relatedMetaObjects; + void *extradata; //reserved for future use + } d; +}; + +class Q_CORE_EXPORT QMetaObject::Connection { + void *d_ptr; //QObjectPrivate::Connection* + explicit Connection(void *data) : d_ptr(data) { } + friend class QObject; + friend class QObjectPrivate; + friend struct QMetaObject; +public: + ~Connection(); + Connection(); + Connection(const Connection &other); + Connection &operator=(const Connection &other); +#ifdef Q_QDOC + operator bool() const; +#else + typedef void *Connection::*RestrictedBool; + operator RestrictedBool() const { return d_ptr ? &Connection::d_ptr : 0; } +#endif + +#ifdef Q_COMPILER_RVALUE_REFS + inline Connection(Connection &&o) : d_ptr(o.d_ptr) { o.d_ptr = 0; } + inline Connection &operator=(Connection &&other) + { qSwap(d_ptr, other.d_ptr); return *this; } +#endif +}; + +inline const QMetaObject *QMetaObject::superClass() const +{ return d.superdata; } + +namespace QtPrivate { + /* Trait that tells is a the Object has a Q_OBJECT macro */ + template struct HasQ_OBJECT_Macro { + template + static char test(int (T::*)(QMetaObject::Call, int, void **)); + static int test(int (Object::*)(QMetaObject::Call, int, void **)); + enum { Value = sizeof(test(&Object::qt_metacall)) == sizeof(int) }; + }; +} + +QT_END_NAMESPACE + +#endif // QOBJECTDEFS_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp new file mode 100644 index 000000000..76c693360 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp @@ -0,0 +1,12111 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* This file is autogenerated from the Unicode 7.0 database. Do not edit */ + +#include "qunicodetables_p.h" + +QT_BEGIN_NAMESPACE + +namespace QUnicodeTables { + +static const unsigned short uc_property_trie[] = { + // 0 - 0x11000 + + 6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480, + 6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736, + 6768, 6800, 6832, 6864, 6896, 6928, 6960, 6992, + 7024, 7056, 7088, 7120, 7152, 7184, 7216, 7248, + 7280, 7312, 7344, 7376, 7408, 7440, 7472, 7504, + 7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760, + 7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016, + 8048, 8080, 8112, 8144, 8176, 8208, 8240, 8272, + 8304, 8336, 8368, 8400, 8400, 8432, 8464, 8496, + 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752, + 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008, + 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9264, + 9296, 9328, 9360, 9392, 9424, 9456, 9488, 9520, + 9552, 9584, 9616, 9648, 9680, 9712, 9744, 9776, + 9808, 9840, 9872, 9904, 9936, 9968, 10000, 9904, + 10032, 10064, 10096, 10128, 10160, 10192, 10224, 9904, + + 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480, + 10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704, + 10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928, + 10960, 10768, 10992, 11024, 11056, 11088, 11088, 11120, + 11152, 11184, 11184, 11184, 11184, 11184, 11184, 11184, + 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, + 11184, 11184, 11184, 11216, 11248, 11280, 11280, 11312, + 11344, 11376, 11408, 11440, 11472, 11504, 11536, 11568, + 11600, 11632, 11664, 11696, 11728, 11760, 11792, 11824, + 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080, + 12112, 12144, 12176, 12208, 12240, 12272, 9904, 9904, + 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528, + 12560, 12592, 12624, 12656, 9904, 9904, 12688, 12720, + 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976, + 13008, 13008, 13008, 13008, 13040, 13008, 13008, 13072, + 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328, + + 13360, 13392, 13424, 13456, 13488, 13520, 13552, 13584, + 13616, 13648, 13680, 13712, 13744, 13776, 13808, 13840, + 13872, 13904, 13936, 13968, 14000, 14032, 14064, 14096, + 14128, 14160, 14192, 14224, 14256, 14288, 14320, 14352, + 14384, 14416, 14448, 14480, 14512, 14544, 14576, 14608, + 14384, 14384, 14384, 14384, 14640, 14672, 14704, 14736, + 14768, 14800, 14384, 14832, 14864, 14896, 14928, 14960, + 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216, + 15248, 15248, 15248, 15248, 15248, 15248, 15248, 15248, + 15280, 15280, 15280, 15280, 15312, 15344, 15376, 15408, + 15440, 15472, 15280, 15504, 15536, 15568, 15600, 15632, + 15664, 15696, 15728, 15760, 15792, 15824, 15856, 9904, + 15888, 15920, 15952, 15984, 16016, 16016, 16016, 16048, + 16080, 16112, 16144, 16176, 16208, 16240, 16240, 16272, + 16304, 16336, 16368, 9904, 16400, 16432, 16432, 16464, + 16496, 16496, 16496, 16496, 16496, 16496, 16528, 16560, + + 16592, 16624, 16656, 16688, 16720, 16752, 16784, 16816, + 16848, 16880, 16912, 16912, 16944, 16976, 17008, 17040, + 17072, 17104, 17136, 17168, 17104, 17200, 17232, 17264, + 17296, 17296, 17328, 17360, 17392, 17392, 17424, 17456, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17520, 17552, 17552, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17616, 17648, 17680, + + 17712, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17776, 17808, 17840, 17872, + 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904, + 17936, 17968, 18000, 18032, 18064, 18096, 18096, 18128, + 18160, 18192, 18224, 18256, 18288, 18320, 9904, 18352, + 18384, 18416, 18448, 18480, 18512, 18544, 18576, 18608, + 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18864, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 19120, + 19152, 19184, 19216, 19248, 9904, 9904, 19280, 19312, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19568, 19600, 19632, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19728, 19728, 19728, 19728, 19728, 19728, 19728, 19728, + 19760, 19792, 19824, 19856, 19888, 19888, 19920, 17680, + 19952, 19984, 20016, 20048, 20048, 20080, 20112, 20048, + 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048, + 20048, 20144, 20176, 20048, 20208, 20048, 20240, 20272, + 20304, 20336, 20368, 20400, 20048, 20048, 20048, 20432, + 20464, 20496, 20528, 20560, 20592, 20624, 20656, 20688, + + 20720, 20752, 20784, 9904, 20816, 20816, 20816, 20848, + 20880, 20912, 20944, 20976, 21008, 21040, 21072, 21104, + 9904, 9904, 9904, 9904, 21136, 21168, 21200, 21232, + 21264, 21296, 21328, 21360, 21392, 21424, 21456, 9904, + 21488, 21520, 21552, 21584, 21616, 21648, 9904, 9904, + 21680, 21712, 21744, 21776, 9904, 9904, 9904, 9904, + 21808, 21808, 21808, 21808, 21808, 21808, 21808, 21808, + 21808, 21840, 21872, 21904, 9904, 9904, 9904, 9904, + 21936, 21968, 22000, 22032, 22064, 22096, 8400, 8400, + 22128, 22160, 8400, 8400, 22192, 22224, 8400, 8400, + 22256, 22288, 22320, 22352, 22384, 8400, 22416, 22448, + 22480, 22512, 22544, 22576, 22608, 22640, 8400, 8400, + 22672, 22672, 22704, 8400, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 22736, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, + + // 0x11000 - 0x110000 + + 22768, 23024, 23280, 23536, 23792, 24048, 24304, 24560, + 24816, 24560, 25072, 24560, 24560, 24560, 24560, 24560, + 25328, 25328, 25328, 25584, 25840, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 26096, 26096, 26352, 26608, 26864, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 27120, 27120, 27376, 27632, 24560, 24560, 24560, 27888, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 28144, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 28400, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 28656, 28912, 29168, 29424, 29680, 29936, 30192, 30448, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 30704, 30960, 30960, 30960, 30960, 30960, 31216, 30960, + 31472, 31728, 31984, 32240, 32496, 32752, 33008, 33264, + 33520, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34288, 34544, + 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34544, + 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34800, + 35056, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35568, 35568, 35824, 35312, 35312, 35312, 35312, 36080, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 36080, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 36336, 36592, 36848, 36848, 36848, 36848, 36848, 36848, + 36848, 36848, 36848, 36848, 36848, 36848, 36848, 36848, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360, + + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 7, + + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 14, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 9, + + 14, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 39, 40, 41, 42, 43, + + 42, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 39, 45, 46, 36, 0, + + 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 48, 49, 50, 12, 12, 12, 51, 14, + 52, 51, 53, 54, 36, 55, 51, 52, + 56, 57, 58, 59, 60, 61, 14, 62, + 52, 63, 53, 64, 65, 65, 65, 49, + + 66, 66, 66, 66, 66, 66, 38, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 38, 66, 66, 66, 66, 66, 66, 36, + 38, 66, 66, 66, 66, 66, 38, 67, + + 68, 68, 68, 68, 68, 68, 44, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 44, 68, 68, 68, 68, 68, 68, 36, + 44, 68, 68, 68, 68, 68, 44, 69, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 72, 73, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 72, 73, + 70, 71, 70, 71, 70, 71, 70, 71, + 74, 75, 76, 77, 70, 71, 70, 71, + 78, 70, 71, 70, 71, 70, 71, 76, + + 77, 72, 73, 70, 71, 70, 71, 70, + 71, 79, 72, 73, 70, 71, 70, 71, + 70, 71, 72, 73, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 72, 73, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 80, 70, 71, 70, 71, 70, 71, 81, + + 82, 83, 72, 73, 72, 73, 84, 72, + 73, 85, 85, 72, 73, 78, 86, 87, + 88, 72, 73, 85, 89, 90, 91, 92, + 72, 73, 93, 78, 91, 94, 95, 96, + + 70, 71, 72, 73, 72, 73, 97, 72, + 73, 97, 78, 78, 72, 73, 97, 70, + 71, 98, 98, 72, 73, 72, 73, 99, + 72, 73, 78, 100, 72, 73, 78, 101, + + 100, 100, 100, 100, 102, 103, 104, 102, + 103, 104, 102, 103, 104, 70, 71, 70, + 71, 70, 71, 70, 71, 70, 71, 70, + 71, 70, 71, 70, 71, 105, 70, 71, + + 70, 71, 70, 71, 72, 73, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 106, 102, 103, 104, 70, 71, 107, 108, + 109, 110, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 109, 110, 109, 110, 111, 112, 109, 110, + + 113, 114, 111, 112, 111, 112, 109, 110, + 109, 110, 109, 110, 109, 110, 109, 110, + 109, 110, 109, 110, 114, 114, 114, 115, + 115, 115, 116, 117, 118, 119, 120, 121, + + 122, 117, 123, 124, 125, 126, 127, 123, + 127, 123, 127, 123, 127, 123, 127, 123, + 128, 129, 130, 131, 132, 78, 133, 133, + 78, 134, 78, 135, 136, 78, 78, 78, + + 133, 137, 78, 138, 78, 139, 140, 78, + 141, 142, 78, 143, 144, 78, 78, 142, + 78, 145, 146, 78, 78, 147, 78, 78, + 78, 78, 78, 78, 78, 148, 78, 78, + + 149, 78, 78, 149, 78, 78, 78, 150, + 149, 151, 152, 152, 153, 78, 78, 78, + 78, 78, 154, 78, 100, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 155, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 156, 156, 156, 156, 156, 114, 114, + 157, 157, 157, 157, 157, 157, 157, 157, + 157, 158, 158, 159, 159, 159, 159, 159, + + 160, 160, 42, 42, 42, 42, 158, 158, + 161, 158, 158, 158, 161, 158, 158, 158, + 159, 159, 42, 42, 42, 42, 42, 162, + 52, 52, 52, 52, 52, 52, 42, 163, + + 157, 157, 157, 157, 157, 42, 42, 42, + 42, 42, 164, 164, 165, 166, 167, 168, + 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, + + 169, 169, 169, 169, 169, 170, 169, 169, + 169, 169, 169, 169, 169, 170, 170, 169, + 170, 169, 170, 169, 169, 171, 172, 172, + 172, 172, 171, 173, 172, 172, 172, 172, + + 172, 174, 174, 175, 175, 175, 175, 176, + 176, 172, 172, 172, 172, 175, 175, 172, + 175, 175, 172, 172, 177, 177, 177, 177, + 178, 172, 172, 172, 172, 170, 170, 170, + + 179, 179, 169, 179, 179, 180, 181, 182, + 182, 182, 181, 181, 181, 182, 182, 183, + 184, 184, 184, 185, 185, 185, 185, 184, + 186, 187, 187, 188, 189, 190, 190, 191, + + 192, 192, 193, 194, 194, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, + 195, 196, 195, 196, 197, 198, 195, 196, + 199, 199, 200, 201, 201, 201, 202, 203, + + 199, 199, 199, 199, 204, 205, 206, 207, + 208, 208, 208, 199, 209, 199, 210, 210, + 211, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + + 212, 212, 199, 212, 212, 212, 212, 212, + 212, 212, 213, 213, 214, 215, 215, 215, + 216, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, + + 217, 217, 218, 217, 217, 217, 217, 217, + 217, 217, 219, 219, 220, 221, 221, 222, + 223, 224, 225, 226, 226, 227, 228, 229, + 230, 231, 232, 233, 232, 233, 232, 233, + + 232, 233, 234, 235, 234, 235, 234, 235, + 234, 235, 234, 235, 234, 235, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 243, 244, 246, 247, 247, 247, + + 248, 249, 250, 249, 250, 250, 250, 249, + 250, 250, 250, 250, 249, 248, 249, 250, + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 252, 251, 251, 251, 251, 251, 251, + + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, + 253, 253, 253, 253, 253, 253, 253, 253, + 253, 254, 253, 253, 253, 253, 253, 253, + + 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, + 255, 256, 257, 256, 257, 257, 257, 256, + 257, 257, 257, 257, 256, 255, 256, 257, + + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 260, 261, + 258, 259, 258, 259, 258, 259, 258, 259, + + 258, 259, 262, 263, 263, 170, 170, 264, + 265, 265, 266, 267, 268, 269, 268, 269, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + + 270, 260, 261, 258, 259, 266, 267, 258, + 259, 266, 267, 258, 259, 266, 267, 271, + 260, 261, 260, 261, 258, 259, 260, 261, + 258, 259, 260, 261, 260, 261, 260, 261, + + 258, 259, 260, 261, 260, 261, 260, 261, + 258, 259, 260, 261, 272, 273, 260, 261, + 260, 261, 260, 261, 260, 261, 274, 275, + 260, 261, 276, 277, 276, 277, 276, 277, + + 266, 267, 266, 267, 266, 267, 266, 267, + 266, 267, 266, 267, 266, 267, 266, 267, + 276, 277, 276, 277, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + + 278, 279, 278, 279, 280, 281, 282, 283, + 284, 285, 284, 285, 284, 285, 284, 285, + 199, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, + + 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 199, + 199, 287, 288, 288, 288, 289, 288, 288, + + 199, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + + 290, 290, 290, 290, 290, 290, 290, 291, + 199, 292, 293, 199, 199, 294, 294, 295, + 296, 297, 298, 298, 298, 298, 297, 298, + 298, 298, 299, 297, 298, 298, 298, 298, + + 298, 298, 300, 297, 297, 297, 297, 297, + 298, 298, 297, 298, 298, 299, 301, 298, + 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, + + 318, 319, 320, 318, 298, 300, 321, 322, + 296, 296, 296, 296, 296, 296, 296, 296, + 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, + + 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 296, 296, 296, 296, 296, + 323, 323, 323, 324, 325, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 326, 326, 326, 326, 327, 328, 329, 329, + 330, 331, 331, 332, 19, 333, 334, 334, + 335, 335, 335, 335, 335, 335, 336, 336, + 337, 338, 339, 340, 341, 342, 343, 344, + + 345, 346, 347, 347, 347, 347, 348, 349, + 350, 349, 350, 350, 350, 350, 350, 349, + 349, 349, 349, 350, 350, 350, 350, 350, + 350, 350, 350, 351, 351, 351, 351, 351, + + 352, 350, 350, 350, 350, 350, 350, 350, + 349, 350, 350, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 361, 362, 363, 335, + 335, 364, 364, 364, 365, 364, 364, 366, + + 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 381, + 382, 349, 349, 349, 346, 383, 383, 383, + 384, 350, 350, 350, 350, 350, 350, 350, + + 350, 350, 350, 350, 350, 350, 350, 350, + 349, 349, 349, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 349, + 349, 349, 350, 350, 350, 350, 350, 350, + + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 385, 385, 350, 350, 350, 350, 350, 385, + + 347, 350, 348, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 350, 349, 350, 386, + 350, 350, 349, 347, 387, 349, 388, 388, + 388, 388, 388, 388, 388, 389, 390, 388, + + 388, 388, 388, 391, 388, 392, 392, 388, + 388, 390, 391, 388, 388, 391, 393, 393, + 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 385, 385, 385, 404, 404, 405, + + 406, 406, 406, 407, 407, 407, 407, 407, + 407, 407, 407, 407, 407, 407, 342, 408, + 409, 410, 411, 411, 411, 409, 409, 409, + 409, 409, 411, 411, 411, 411, 409, 411, + + 411, 411, 411, 411, 411, 411, 411, 411, + 409, 411, 409, 411, 409, 412, 412, 413, + 414, 415, 414, 414, 415, 414, 414, 415, + 415, 415, 414, 415, 415, 414, 415, 414, + + 414, 414, 415, 414, 415, 414, 415, 414, + 415, 414, 414, 342, 342, 413, 412, 412, + 416, 416, 416, 416, 416, 416, 416, 416, + 416, 417, 417, 417, 416, 416, 416, 416, + + 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 417, 417, 416, 351, 351, + 351, 418, 351, 418, 418, 351, 351, 351, + 418, 418, 351, 351, 351, 351, 351, 351, + + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, + 420, 421, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 433, 433, 433, 433, 433, + 433, 433, 434, 433, 435, 435, 436, 437, + 438, 439, 440, 296, 296, 296, 296, 296, + + 441, 441, 441, 441, 441, 441, 441, 441, + 441, 441, 441, 441, 441, 441, 441, 441, + 441, 441, 441, 441, 441, 441, 442, 442, + 442, 442, 443, 442, 442, 442, 442, 442, + + 442, 442, 442, 442, 443, 442, 442, 442, + 443, 442, 442, 442, 442, 442, 296, 296, + 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 296, + + 445, 446, 446, 446, 446, 446, 445, 446, + 446, 445, 446, 446, 446, 446, 446, 445, + 446, 446, 446, 446, 445, 446, 447, 447, + 447, 448, 448, 448, 296, 296, 449, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 450, 451, 450, 450, 450, 450, 450, 450, + 450, 450, 452, 452, 452, 453, 454, 451, + 451, 454, 454, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 342, 342, 342, 342, 455, 455, 456, 455, + 455, 456, 455, 455, 455, 456, 456, 456, + 457, 458, 459, 455, 455, 455, 456, 455, + 455, 456, 456, 455, 455, 455, 455, 460, + + 461, 462, 462, 463, 464, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 466, 465, 465, 465, 465, 465, 465, + 465, 466, 465, 465, 466, 465, 465, 465, + 465, 465, 467, 468, 469, 465, 463, 463, + + 463, 462, 462, 462, 462, 462, 462, 462, + 462, 463, 463, 463, 463, 470, 471, 468, + 465, 170, 172, 472, 472, 461, 467, 467, + 473, 473, 473, 473, 473, 473, 473, 473, + + 465, 465, 462, 462, 474, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 488, 488, 488, 488, + 489, 490, 490, 491, 491, 492, 491, 491, + + 493, 494, 495, 495, 199, 496, 496, 496, + 496, 496, 496, 496, 496, 199, 199, 496, + 496, 199, 199, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, + + 496, 496, 496, 496, 496, 496, 496, 496, + 496, 199, 496, 496, 496, 496, 496, 496, + 496, 199, 496, 199, 199, 199, 496, 496, + 496, 496, 199, 199, 497, 498, 499, 495, + + 495, 494, 494, 494, 494, 199, 199, 495, + 495, 199, 199, 500, 500, 501, 502, 199, + 199, 199, 199, 199, 199, 199, 199, 499, + 199, 199, 199, 199, 503, 503, 199, 503, + + 496, 496, 494, 494, 199, 199, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, + 496, 496, 514, 514, 515, 515, 515, 515, + 515, 516, 517, 518, 199, 199, 199, 199, + + 199, 519, 520, 521, 199, 522, 522, 522, + 522, 522, 522, 199, 199, 199, 199, 522, + 522, 199, 199, 522, 522, 522, 522, 522, + 522, 522, 522, 522, 522, 522, 522, 522, + + 522, 522, 522, 522, 522, 522, 522, 522, + 522, 199, 522, 522, 522, 522, 522, 522, + 522, 199, 522, 523, 199, 522, 523, 199, + 522, 522, 199, 199, 524, 199, 525, 525, + + 525, 520, 520, 199, 199, 199, 199, 520, + 520, 199, 199, 520, 520, 526, 199, 199, + 199, 527, 199, 199, 199, 199, 199, 199, + 199, 523, 523, 523, 522, 199, 523, 199, + + 199, 199, 199, 199, 199, 199, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, + 520, 520, 522, 522, 522, 527, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 538, 538, 539, 199, 540, 540, 540, + 540, 540, 540, 540, 541, 540, 199, 540, + 540, 540, 199, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, + + 540, 540, 540, 540, 540, 540, 540, 540, + 540, 199, 540, 540, 540, 540, 540, 540, + 540, 199, 540, 540, 199, 540, 540, 540, + 540, 540, 199, 199, 542, 540, 539, 539, + + 539, 538, 538, 538, 538, 538, 199, 538, + 538, 539, 199, 539, 539, 543, 199, 199, + 540, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 540, 541, 544, 544, 199, 199, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 557, 558, 558, 199, 559, 559, 559, + 559, 559, 559, 559, 559, 199, 199, 559, + 559, 199, 199, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, + 559, 199, 559, 559, 559, 559, 559, 559, + 559, 199, 559, 559, 199, 560, 559, 559, + 559, 559, 199, 199, 561, 559, 562, 557, + + 558, 557, 557, 557, 563, 199, 199, 558, + 564, 199, 199, 564, 564, 565, 199, 199, + 199, 199, 199, 199, 199, 199, 566, 562, + 199, 199, 199, 199, 567, 567, 199, 559, + + 559, 559, 563, 563, 199, 199, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, + 578, 560, 579, 579, 579, 579, 579, 579, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 580, 581, 199, 581, 581, 581, + 581, 581, 581, 199, 199, 199, 581, 581, + 581, 199, 581, 581, 582, 581, 199, 199, + 199, 581, 581, 199, 581, 199, 581, 581, + + 199, 199, 199, 581, 581, 199, 199, 199, + 581, 581, 581, 199, 199, 199, 581, 581, + 581, 581, 581, 581, 581, 581, 583, 581, + 581, 581, 199, 199, 199, 199, 584, 585, + + 580, 585, 585, 199, 199, 199, 585, 585, + 585, 199, 586, 586, 586, 587, 199, 199, + 588, 199, 199, 199, 199, 199, 199, 584, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, + 599, 599, 599, 600, 600, 600, 600, 600, + 600, 601, 600, 199, 199, 199, 199, 199, + + 602, 603, 603, 603, 199, 604, 604, 604, + 604, 604, 604, 604, 604, 199, 604, 604, + 604, 199, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 199, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 605, 604, 604, 604, + 604, 604, 199, 199, 199, 606, 607, 607, + + 607, 603, 603, 603, 603, 199, 607, 607, + 608, 199, 607, 607, 607, 609, 199, 199, + 199, 199, 199, 199, 199, 610, 611, 199, + 606, 606, 199, 199, 199, 199, 199, 199, + + 604, 604, 612, 612, 199, 199, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, + 199, 199, 199, 199, 199, 199, 199, 199, + 623, 623, 623, 623, 623, 623, 623, 624, + + 199, 625, 626, 626, 199, 627, 627, 627, + 627, 627, 627, 627, 627, 199, 627, 627, + 627, 199, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, + + 627, 627, 627, 627, 627, 627, 627, 627, + 627, 199, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 199, 627, 627, 627, + 627, 627, 199, 199, 628, 629, 626, 630, + + 631, 626, 632, 626, 626, 199, 630, 631, + 631, 199, 631, 631, 633, 634, 199, 199, + 199, 199, 199, 199, 199, 632, 632, 199, + 199, 199, 199, 199, 199, 199, 627, 199, + + 627, 627, 635, 635, 199, 199, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, + 199, 646, 646, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 647, 648, 648, 199, 649, 649, 649, + 649, 649, 649, 649, 649, 199, 649, 649, + 649, 199, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, + + 649, 649, 649, 649, 649, 649, 649, 649, + 649, 650, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, + 649, 649, 650, 199, 199, 651, 652, 648, + + 648, 653, 653, 653, 654, 199, 648, 648, + 648, 199, 655, 655, 655, 656, 650, 199, + 199, 199, 199, 199, 199, 199, 199, 652, + 199, 199, 199, 199, 199, 199, 199, 199, + + 649, 649, 654, 654, 199, 199, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, + 667, 667, 667, 667, 667, 667, 199, 199, + 199, 668, 651, 651, 651, 651, 651, 651, + + 199, 199, 669, 669, 199, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 199, + 199, 199, 670, 670, 670, 670, 670, 670, + + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 199, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 199, 670, 199, 199, + + 670, 670, 670, 670, 670, 670, 670, 199, + 199, 199, 671, 199, 199, 199, 199, 672, + 669, 669, 673, 673, 673, 199, 673, 199, + 669, 669, 674, 669, 674, 674, 674, 672, + + 199, 199, 199, 199, 199, 199, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, + 199, 199, 669, 669, 685, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 687, 686, 688, 687, 687, 687, 687, + 689, 689, 690, 199, 199, 199, 199, 12, + + 686, 686, 686, 686, 686, 686, 691, 687, + 692, 692, 692, 692, 687, 687, 687, 693, + 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 704, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 705, 705, 199, 705, 199, 199, 705, + 705, 199, 705, 199, 199, 705, 199, 199, + 199, 199, 199, 199, 705, 705, 705, 705, + 199, 705, 705, 705, 705, 705, 705, 705, + + 199, 705, 705, 705, 199, 705, 199, 705, + 199, 199, 705, 705, 199, 705, 705, 705, + 705, 706, 705, 707, 706, 706, 706, 706, + 708, 708, 199, 706, 706, 705, 199, 199, + + 705, 705, 705, 705, 705, 199, 709, 199, + 710, 710, 710, 710, 706, 706, 199, 199, + 711, 712, 713, 714, 715, 716, 717, 718, + 719, 720, 199, 199, 721, 721, 722, 722, + + 723, 724, 724, 724, 725, 726, 725, 725, + 727, 725, 725, 728, 729, 730, 730, 730, + 730, 730, 727, 731, 730, 731, 731, 731, + 732, 732, 731, 731, 731, 731, 731, 731, + + 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 743, 743, 743, 743, 743, + 743, 743, 743, 743, 744, 732, 731, 732, + 731, 745, 746, 747, 746, 747, 748, 748, + + 723, 723, 723, 749, 723, 723, 723, 723, + 199, 723, 723, 723, 723, 749, 723, 723, + 723, 723, 749, 723, 723, 723, 723, 749, + 723, 723, 723, 723, 749, 723, 723, 723, + + 723, 723, 723, 723, 723, 723, 723, 723, + 723, 749, 750, 751, 751, 199, 199, 199, + 199, 752, 753, 754, 755, 754, 754, 756, + 754, 756, 753, 753, 753, 753, 757, 758, + + 753, 754, 759, 759, 760, 728, 759, 759, + 723, 723, 723, 723, 761, 762, 762, 762, + 757, 757, 757, 754, 757, 757, 763, 757, + 199, 757, 757, 757, 757, 754, 757, 757, + + 757, 757, 754, 757, 757, 757, 757, 754, + 757, 757, 757, 757, 754, 757, 763, 763, + 763, 757, 757, 757, 757, 757, 757, 757, + 763, 754, 763, 763, 763, 199, 764, 764, + + 765, 765, 765, 765, 765, 765, 766, 765, + 765, 765, 765, 765, 765, 199, 767, 765, + 768, 768, 769, 770, 771, 772, 772, 772, + 772, 773, 773, 199, 199, 199, 199, 199, + + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + + 774, 774, 775, 774, 774, 774, 776, 774, + 775, 774, 774, 777, 778, 779, 780, 779, + 779, 781, 779, 782, 782, 782, 779, 783, + 778, 784, 785, 786, 786, 782, 782, 775, + + 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 797, 798, 798, 798, 798, + 774, 774, 774, 774, 774, 774, 781, 781, + 779, 779, 775, 775, 775, 775, 782, 782, + + 782, 775, 777, 777, 777, 775, 775, 777, + 777, 777, 777, 777, 777, 777, 775, 775, + 775, 782, 782, 782, 782, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, + + 775, 775, 782, 777, 786, 782, 782, 777, + 777, 777, 777, 777, 777, 799, 775, 777, + 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 810, 810, 811, 812, 812, + + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + + 813, 813, 813, 813, 813, 813, 199, 814, + 199, 199, 199, 199, 199, 814, 199, 199, + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 815, + + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 816, + 816, 817, 817, 818, 819, 820, 820, 820, + + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 822, 822, 822, 822, 822, 821, + + 823, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + + 823, 823, 823, 825, 825, 825, 825, 825, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + + 826, 826, 826, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 828, 828, 828, 828, 828, 828, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 199, + 829, 199, 829, 829, 829, 829, 199, 199, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 199, + + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 199, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 830, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 199, 199, 831, 831, 832, + + 833, 834, 835, 836, 836, 836, 836, 835, + 835, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 199, 199, 199, + + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, + 847, 847, 847, 847, 847, 847, 847, 847, + 847, 847, 199, 199, 199, 199, 199, 199, + + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 849, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 851, 852, 850, + 850, 850, 850, 850, 850, 850, 850, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 854, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 856, 857, 199, 199, 199, + + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 859, 859, 859, 860, 860, + 860, 861, 861, 861, 861, 861, 861, 861, + 861, 199, 199, 199, 199, 199, 199, 199, + + 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 199, 862, 862, + 862, 862, 863, 863, 864, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 866, 866, 867, 868, 868, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 870, 870, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 199, 871, 871, + 871, 199, 872, 872, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 874, 874, 875, 874, + 874, 874, 874, 874, 874, 874, 875, 875, + + 875, 875, 875, 875, 875, 875, 874, 875, + 875, 874, 874, 874, 874, 874, 874, 874, + 874, 874, 876, 874, 877, 877, 878, 879, + 877, 880, 877, 881, 873, 882, 199, 199, + + 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 199, 199, 199, 199, 199, 199, + 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 199, 199, 199, 199, 199, 199, + + 894, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 904, 904, 905, 199, + 906, 907, 908, 909, 910, 911, 912, 913, + 914, 915, 199, 199, 199, 199, 199, 199, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 917, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 199, 199, 199, 199, 199, 199, 199, 199, + + 918, 918, 918, 918, 918, 918, 918, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 919, 920, 199, 199, 199, 199, 199, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 922, 922, 199, + + 923, 923, 923, 924, 924, 924, 924, 923, + 923, 924, 924, 924, 199, 199, 199, 199, + 924, 924, 923, 924, 924, 924, 924, 924, + 924, 925, 926, 927, 199, 199, 199, 199, + + 928, 199, 199, 199, 929, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, + 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, + + 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 199, 199, + 940, 940, 940, 940, 940, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 942, 942, 199, 199, 199, 199, + 943, 943, 943, 943, 943, 944, 944, 944, + 943, 943, 944, 943, 943, 943, 943, 943, + + 943, 941, 941, 941, 941, 941, 941, 941, + 943, 943, 199, 199, 199, 199, 199, 199, + 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 199, 199, 199, 956, 956, + + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + + 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 959, + 960, 961, 961, 962, 199, 199, 963, 963, + + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 965, 966, 965, + 966, 966, 966, 966, 966, 966, 966, 199, + + 967, 968, 966, 968, 968, 966, 966, 966, + 966, 966, 966, 966, 966, 965, 965, 965, + 965, 965, 965, 966, 966, 969, 969, 969, + 969, 969, 969, 969, 969, 199, 199, 970, + + 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 199, 199, 199, 199, 199, 199, + 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 199, 199, 199, 199, 199, 199, + + 981, 981, 981, 981, 981, 981, 981, 982, + 983, 983, 983, 983, 981, 981, 199, 199, + 984, 984, 984, 984, 984, 985, 985, 985, + 985, 985, 985, 984, 984, 985, 986, 199, + + 987, 987, 987, 987, 988, 989, 990, 989, + 990, 989, 990, 989, 990, 989, 990, 989, + 989, 989, 990, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 989, + + 989, 989, 989, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 991, 992, 987, 987, + 987, 987, 987, 993, 987, 993, 988, 988, + + 993, 993, 987, 993, 994, 989, 989, 989, + 989, 989, 989, 989, 199, 199, 199, 199, + 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003, 1004, 1005, 1005, 1006, 1007, 1005, 1005, + + 1007, 1008, 1008, 1008, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1009, 1010, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1008, 199, 199, 199, + + 1011, 1011, 1012, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + + 1013, 1012, 1011, 1011, 1011, 1011, 1012, 1012, + 1011, 1011, 1014, 1015, 1016, 1016, 1013, 1013, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1027, 1027, 1027, 1027, 1027, + + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + + 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1030, + 1031, 1031, 1030, 1030, 1030, 1031, 1030, 1031, + 1031, 1031, 1032, 1032, 199, 199, 199, 199, + 199, 199, 199, 199, 1033, 1033, 1033, 1033, + + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + + 1034, 1034, 1034, 1034, 1035, 1035, 1035, 1035, + 1035, 1035, 1035, 1035, 1036, 1036, 1036, 1036, + 1036, 1036, 1036, 1036, 1035, 1035, 1036, 1037, + 199, 199, 199, 1038, 1038, 1039, 1039, 1039, + + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 199, 199, 199, 1034, 1034, 1034, + 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, + 1058, 1059, 1060, 1060, 1060, 1060, 1060, 1060, + + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1061, 1061, 1061, 1061, 1061, 1061, 1062, 1062, + + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 199, 199, 199, 199, 199, 199, 199, 199, + 1064, 1064, 1064, 1065, 1066, 1067, 1067, 1067, + 1067, 1067, 1064, 1064, 1067, 1067, 1067, 1067, + + 1064, 1068, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1069, 1069, 1069, 1069, 1067, 1069, 1069, + 1069, 1069, 1068, 1070, 1071, 1072, 1072, 199, + 984, 984, 199, 199, 199, 199, 199, 199, + + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 1073, 1073, + 1073, 1073, 1073, 1074, 1075, 1075, 1075, 1076, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1076, 1075, 1075, 1075, 1075, + + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1077, 1077, 1077, + + 1077, 1077, 1075, 1075, 1075, 1075, 1077, 1077, + 1077, 1077, 1077, 114, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 1078, 1079, 115, 115, 115, 1080, 115, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 1081, 1081, 1081, 1081, 1081, + + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082, + + 188, 188, 187, 188, 1083, 1083, 1083, 1083, + 1083, 1083, 1084, 1085, 1085, 1086, 1087, 1088, + 1089, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 984, + 984, 984, 984, 984, 984, 984, 984, 984, + 984, 984, 984, 984, 984, 984, 199, 199, + 199, 199, 199, 199, 1090, 1067, 1083, 1084, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 1091, 1092, + 1093, 1094, 1095, 1096, 1097, 1097, 1098, 1097, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 1099, 1100, 1099, 1100, 1099, 1100, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1101, 1101, 1101, 1101, 1101, 1101, 199, 199, + 1102, 1102, 1102, 1102, 1102, 1102, 199, 199, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + + 1101, 1101, 1101, 1101, 1101, 1101, 199, 199, + 1102, 1102, 1102, 1102, 1102, 1102, 199, 199, + 1103, 1101, 1104, 1101, 1105, 1101, 1106, 1101, + 199, 1102, 199, 1102, 199, 1102, 199, 1102, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1107, 1108, 1109, 1110, 1109, 1110, 1111, 1112, + 1113, 1114, 1115, 1116, 1117, 1118, 199, 199, + + 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, + 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, + 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, + + 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, + 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, + 1101, 1101, 1167, 1168, 1169, 199, 1170, 1171, + 1102, 1102, 1172, 1173, 1174, 204, 1175, 204, + + 204, 1176, 1177, 1178, 1179, 199, 1180, 1181, + 1182, 1183, 1182, 1183, 1184, 1176, 1176, 1176, + 1101, 1101, 1185, 1186, 199, 199, 1187, 1188, + 1102, 1102, 1189, 1190, 199, 1176, 1176, 1176, + + 1101, 1101, 1191, 1192, 1193, 1194, 1195, 1196, + 1102, 1102, 1197, 1198, 1199, 1176, 1200, 1200, + 199, 199, 1201, 1202, 1203, 199, 1204, 1205, + 1206, 1207, 1208, 1209, 1210, 1211, 204, 199, + + 1212, 1212, 1213, 1213, 1213, 1213, 1213, 1214, + 1213, 1213, 1213, 1215, 1216, 1217, 1218, 1219, + 1220, 1221, 1220, 1222, 1223, 1224, 14, 1225, + 1226, 1227, 1228, 1229, 1229, 1230, 1228, 1229, + + 14, 14, 14, 14, 1231, 1232, 1232, 1233, + 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, + 13, 13, 13, 1242, 1242, 1243, 1244, 1244, + 14, 1245, 1246, 14, 1247, 1248, 1225, 43, + + 43, 14, 14, 14, 1249, 16, 1250, 1251, + 1252, 1252, 1253, 1253, 1253, 1253, 1254, 1254, + 1254, 1254, 1255, 1256, 1257, 1258, 1259, 1260, + 1259, 1259, 1259, 1259, 1258, 1259, 1259, 1261, + + 1262, 1263, 1263, 1263, 1264, 1265, 1266, 1267, + 1268, 1269, 1270, 1270, 1270, 1270, 1270, 1270, + 1271, 1272, 199, 199, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1279, 1280, 1281, 1282, 157, + + 1271, 63, 58, 59, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1279, 1280, 1281, 1282, 199, + 1081, 1081, 1081, 1081, 1081, 1283, 1283, 1283, + 1283, 1283, 1283, 1283, 1283, 199, 199, 199, + + 12, 12, 12, 12, 12, 12, 12, 50, + 1284, 12, 12, 1285, 1286, 1287, 1287, 1287, + 1288, 1288, 1289, 1289, 1289, 1289, 1290, 1291, + 1291, 1292, 1293, 1294, 1295, 1295, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 170, 170, 177, 177, 170, 170, 170, 170, + 177, 177, 177, 170, 170, 1297, 1297, 1297, + + 1297, 170, 1298, 1298, 1299, 1300, 1300, 194, + 1301, 194, 1300, 1302, 1084, 1084, 1084, 1084, + 1085, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1303, 1303, 1304, 1305, 51, 1303, 1303, 1304, + 51, 1305, 1306, 1304, 1304, 1304, 1306, 1306, + 1304, 1304, 1304, 1306, 51, 1304, 1307, 51, + 36, 1304, 1304, 1304, 1304, 1304, 51, 51, + + 1303, 1303, 1303, 51, 1304, 51, 1308, 51, + 1304, 51, 1309, 1310, 1304, 1304, 1311, 1306, + 1304, 1304, 1312, 1304, 1306, 1313, 1313, 1313, + 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1319, + + 1320, 1255, 1255, 1255, 1255, 1319, 1318, 1318, + 1318, 1318, 1321, 1255, 1322, 1323, 1324, 1325, + 1326, 1326, 1326, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, + 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, + + 1329, 1329, 1329, 111, 123, 1330, 1330, 1330, + 1330, 1326, 199, 199, 199, 199, 199, 199, + 36, 36, 36, 36, 36, 51, 51, 51, + 51, 51, 1331, 1331, 51, 51, 51, 51, + + 36, 51, 51, 36, 51, 51, 36, 51, + 51, 51, 51, 51, 51, 51, 1331, 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, 1332, 1331, 1331, + 51, 51, 36, 51, 36, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 36, 36, 36, 36, 1331, 36, 36, 36, + 1333, 1334, 1333, 1335, 1336, 1335, 36, 36, + 36, 36, 18, 57, 36, 1337, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 36, 36, 1331, 36, 1331, 36, + 36, 36, 36, 36, 1280, 1280, 36, 1280, + 1280, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 1338, 1339, 36, 36, + + 36, 1331, 36, 1340, 1331, 36, 36, 1331, + 36, 1331, 36, 36, 36, 36, 36, 36, + 36, 36, 1338, 1339, 1338, 1339, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + + 1331, 36, 1331, 36, 1338, 1339, 1338, 1339, + 1338, 1339, 1338, 1339, 36, 1331, 1341, 1342, + 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339, + 1341, 1342, 1338, 1339, 1338, 1339, 1338, 1339, + + 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339, + 1341, 1342, 1338, 1339, 36, 36, 36, 1338, + 1339, 1338, 1339, 36, 36, 36, 36, 36, + 1343, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 1338, 1339, 36, 36, 1344, 36, + 1345, 1346, 36, 1346, 1331, 1331, 1331, 1331, + 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339, + 36, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 1338, 1339, 1338, 1339, 1347, 36, 36, + 1338, 1339, 36, 36, 36, 36, 1338, 1339, + 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339, + + 1341, 1342, 1341, 1342, 1338, 1339, 1338, 1339, + 1338, 1339, 1341, 1342, 1341, 1342, 36, 36, + 1338, 1339, 1348, 1348, 1348, 1255, 1349, 1349, + 1255, 1255, 1350, 1350, 1350, 1351, 1351, 1255, + + 51, 1315, 51, 51, 51, 51, 51, 51, + 16, 1250, 16, 1250, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 1352, 1352, 51, 51, 51, 51, + + 36, 36, 51, 51, 51, 51, 51, 51, + 51, 1353, 1354, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1315, 1255, 1315, 1315, 1315, + + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1356, 1315, 1315, + 1315, 1315, 1315, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1357, + 1357, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1358, 1358, 1358, 1358, + + 1358, 1358, 1323, 1323, 1323, 1323, 1323, 1323, + 1359, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1361, 1361, 1361, 1361, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 199, 199, 199, 199, 199, + + 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, 1315, 1315, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, + 1371, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 1363, 1364, 1365, 1366, + 1367, 1368, 1369, 1370, 1371, 65, 65, 65, + + 65, 65, 65, 65, 65, 65, 65, 65, + 63, 58, 59, 1273, 1274, 1275, 1276, 1277, + 1278, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1373, 1373, 1373, 1373, + + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + 1375, 1375, 1376, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1378, 1379, 1380, + 1381, 1382, 1383, 1384, 1385, 1386, 1377, 1387, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 36, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 36, 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, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1352, 1352, 1352, 1352, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 1388, 1388, 1321, 1321, + 1389, 1315, 1352, 1352, 1352, 1352, 1352, 1352, + + 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, 1352, 1352, 1352, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 1352, 51, 51, 51, 51, 51, 51, 36, + 1315, 1315, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1322, 1389, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1322, 1390, 1359, 1359, + + 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1391, 1322, 1322, 1322, + 1322, 1322, 1323, 1390, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 1390, 1392, 1392, 1392, + + 1393, 1393, 1393, 1393, 1392, 1392, 1392, 1392, + 1392, 1359, 1359, 1359, 1359, 1392, 1360, 1392, + 1392, 1392, 1359, 1392, 1392, 1359, 1359, 1359, + 1392, 1392, 1359, 1359, 1392, 1359, 1359, 1392, + + 1392, 1392, 1360, 1359, 1360, 1360, 1360, 1360, + 1359, 1359, 1392, 1359, 1359, 1359, 1359, 1359, + 1359, 1392, 1392, 1392, 1392, 1392, 1359, 1392, + 1392, 1392, 1392, 1359, 1359, 1392, 1392, 1392, + + 1394, 1352, 1352, 1352, 1352, 1360, 51, 51, + 1352, 1352, 1361, 1361, 1352, 1352, 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, + 1360, 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, 1360, 51, 1360, 51, + 51, 51, 51, 1360, 1360, 1360, 51, 1359, + 51, 51, 51, 1395, 1395, 1395, 1395, 1396, + + 1396, 51, 1397, 1397, 51, 51, 51, 51, + 1398, 1399, 1398, 1399, 1398, 1399, 1398, 1399, + 1398, 1399, 1398, 1399, 1398, 1399, 1400, 1401, + 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, + + 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, + 1408, 1409, 1400, 1401, 1402, 1403, 1404, 1405, + 1406, 1407, 1408, 1409, 51, 1360, 1360, 1360, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 1360, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 1360, + + 1410, 1410, 1410, 1411, 1412, 1413, 1414, 1358, + 1415, 1416, 1358, 1417, 1418, 1419, 1420, 1420, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255, + + 1255, 1255, 1421, 1422, 1421, 1422, 1398, 1399, + 1398, 1399, 1398, 1399, 1423, 1424, 1423, 1424, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1398, 1399, 1398, 1399, 1398, + 1399, 1398, 1399, 1398, 1399, 1426, 1427, 1428, + 1429, 1398, 1399, 1398, 1399, 1398, 1399, 1398, + 1399, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1430, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1421, 1422, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421, + 1422, 1421, 1422, 1255, 1421, 1422, 1255, 1255, + 1398, 1399, 1398, 1399, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1431, 1255, 1255, + 1421, 1422, 1255, 1255, 1398, 1399, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1320, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1320, 1320, 1320, 1255, + 1255, 1421, 1422, 1255, 1255, 1421, 1422, 1421, + + 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1255, 1255, 1255, + 1255, 1421, 1422, 1421, 1422, 1421, 1422, 1421, + 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255, + + 1255, 1421, 1422, 1255, 1255, 1255, 1421, 1422, + 1421, 1422, 1421, 1422, 1421, 1422, 1255, 1421, + 1422, 1255, 1255, 1421, 1422, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1421, + + 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1421, + 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1432, 1255, 1433, 1255, + + 1255, 1255, 1255, 1434, 1435, 1434, 1255, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421, + 1422, 1421, 1422, 1255, 1255, 1255, 1255, 1255, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1322, 1322, + 1322, 1322, 1322, 1322, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1390, 1390, 1390, 1390, 1390, + + 1323, 1323, 1323, 1323, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, + 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, + 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, + + 1418, 1418, 1418, 1418, 1418, 1390, 1390, 1418, + 1418, 1418, 1418, 1418, 1418, 1362, 1362, 1362, + 1390, 1390, 1390, 1390, 1390, 1359, 1359, 1359, + 1359, 1359, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 199, 199, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 199, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 199, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 199, + + 127, 123, 1438, 1439, 1440, 1441, 1442, 127, + 123, 127, 123, 127, 123, 1443, 1444, 1445, + 1446, 1097, 1099, 1100, 1447, 127, 123, 1447, + 1097, 1097, 1097, 1097, 1448, 1448, 1449, 1450, + + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + + 1451, 1452, 1451, 1452, 1453, 1454, 1454, 1454, + 1454, 1454, 1454, 1455, 1456, 1455, 1456, 1457, + 1457, 1457, 1458, 1459, 199, 199, 199, 199, + 199, 1460, 1461, 1461, 1461, 1462, 1460, 1461, + + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + + 1463, 1463, 1463, 1463, 1463, 1463, 199, 1464, + 199, 199, 199, 199, 199, 1464, 199, 199, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + + 1465, 1465, 1465, 1465, 1465, 1465, 1466, 1466, + 199, 199, 199, 199, 199, 199, 199, 1467, + 1468, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1469, + + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + + 1470, 1470, 1471, 1472, 1471, 1472, 1470, 1470, + 1470, 1471, 1472, 1470, 1471, 1472, 1259, 1259, + 1259, 1259, 1259, 1259, 1259, 1259, 1258, 1473, + 1474, 1475, 1476, 1477, 1471, 1472, 1477, 1477, + + 1478, 1479, 1423, 1424, 1423, 1424, 1423, 1424, + 1423, 1424, 1475, 1475, 1475, 1475, 1480, 1481, + 1475, 1482, 1483, 1484, 1484, 1483, 1483, 1483, + 1483, 1483, 1485, 1485, 1486, 1487, 1487, 1488, + + 1489, 1487, 1490, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 199, 1491, 1491, 1491, 1491, 1492, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1492, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, + 1493, 1493, 1493, 1493, 199, 199, 199, 199, + + 1213, 1494, 1495, 1496, 1352, 1497, 1498, 1499, + 16, 1250, 16, 1250, 16, 1250, 16, 1250, + 16, 1250, 1352, 1352, 16, 1250, 16, 1250, + 16, 1250, 16, 1250, 1500, 1228, 1501, 1501, + + 1352, 1499, 1499, 1499, 1499, 1499, 1499, 1499, + 1499, 1499, 1502, 1503, 171, 1504, 1505, 1505, + 1506, 1507, 1507, 1507, 1507, 1508, 1509, 1352, + 1510, 1510, 1510, 1511, 1512, 1513, 1493, 1352, + + 199, 1514, 1515, 1514, 1515, 1514, 1515, 1514, + 1515, 1514, 1515, 1515, 1516, 1515, 1516, 1515, + 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515, + 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515, + + 1516, 1515, 1516, 1514, 1515, 1516, 1515, 1516, + 1515, 1516, 1515, 1515, 1515, 1515, 1515, 1515, + 1516, 1516, 1515, 1516, 1516, 1515, 1516, 1516, + 1515, 1516, 1516, 1515, 1516, 1516, 1515, 1515, + + 1515, 1515, 1515, 1514, 1515, 1514, 1515, 1514, + 1515, 1515, 1515, 1515, 1515, 1515, 1514, 1515, + 1515, 1515, 1515, 1515, 1516, 1517, 1517, 199, + 199, 1518, 1518, 1519, 1519, 1520, 1521, 1522, + + 1523, 1524, 1525, 1524, 1525, 1524, 1525, 1524, + 1525, 1524, 1525, 1525, 1526, 1525, 1526, 1525, + 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525, + 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525, + + 1526, 1525, 1526, 1524, 1525, 1526, 1525, 1526, + 1525, 1526, 1525, 1525, 1525, 1525, 1525, 1525, + 1526, 1526, 1525, 1526, 1526, 1525, 1526, 1526, + 1525, 1526, 1526, 1525, 1526, 1526, 1525, 1525, + + 1525, 1525, 1525, 1524, 1525, 1524, 1525, 1524, + 1525, 1525, 1525, 1525, 1525, 1525, 1524, 1525, + 1525, 1525, 1525, 1525, 1526, 1524, 1524, 1526, + 1526, 1526, 1526, 1527, 1528, 1529, 1530, 1531, + + 199, 199, 199, 199, 199, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1533, 199, 199, + 199, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 199, + 1535, 1535, 1536, 1536, 1536, 1536, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1539, 1539, 1539, 199, 199, 199, 199, 199, + + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, + 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, + + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1542, 1542, 199, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1543, 1543, 1543, 1543, + 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, + 1545, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1542, 1542, 1547, 1535, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1545, 1545, 1545, 1545, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 199, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545, + 1545, 1545, 1545, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1545, 1545, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545, + + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + + 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552, + 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, + 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, + 1552, 1552, 1552, 1552, 1553, 1553, 1553, 1553, + + 1553, 1553, 1553, 1553, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1555, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1557, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 199, 199, 199, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + + 1558, 1558, 1559, 1559, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1559, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + + 1558, 1559, 1558, 1558, 1558, 1559, 1558, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1563, + + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1565, 1566, 1567, 1568, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + + 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1577, 1578, 1564, 1564, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + + 282, 283, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 1579, 264, + 1580, 1580, 1580, 1581, 1582, 1582, 1582, 1582, + 1582, 1582, 1582, 1582, 264, 264, 1581, 1583, + + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 284, 285, 284, 285, 1584, 1584, 199, 1582, + + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + + 1585, 1585, 1585, 1585, 1585, 1585, 1586, 1586, + 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, + 1587, 1587, 1588, 1589, 1590, 1590, 1590, 1589, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1592, + 1592, 1592, 1592, 1481, 1481, 1481, 1481, 1481, + + 1593, 1593, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1097, 1097, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1448, 1097, 1097, 1097, 1097, 1097, 1097, 1097, + 1097, 1099, 1100, 1099, 1100, 1594, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1481, 1595, 1595, 1099, 1100, 1596, 1597, 199, + 1598, 1599, 1600, 1601, 1602, 1602, 1603, 1604, + 1603, 1604, 1603, 1604, 1603, 1604, 1603, 1604, + + 1598, 1599, 1598, 1599, 1598, 1599, 1598, 1599, + 1598, 1599, 1605, 1606, 1607, 1608, 199, 199, + 1609, 1610, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1611, + 1612, 1612, 1597, 1613, 1613, 1613, 1613, 1613, + + 1614, 1614, 1615, 1614, 1614, 1614, 1616, 1614, + 1614, 1614, 1614, 1615, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + + 1614, 1614, 1614, 1617, 1617, 1615, 1615, 1617, + 1618, 1618, 1618, 1618, 199, 199, 199, 199, + 1544, 1544, 1544, 1544, 1544, 1544, 772, 772, + 1290, 1619, 199, 199, 199, 199, 199, 199, + + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1621, 1622, 1623, 1623, 1624, 1624, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1625, 1625, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1625, 1625, 1625, 1625, + 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, + + 1625, 1625, 1625, 1625, 1627, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 1628, 1628, + 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, + 1637, 1638, 199, 199, 199, 199, 199, 199, + + 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1639, 1639, 490, 490, 490, 490, 490, 490, + 1640, 1640, 1640, 490, 199, 199, 199, 199, + + 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, + 1649, 1650, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + + 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, + 1652, 1652, 1652, 1653, 1653, 1653, 1654, 1655, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657, + 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + 1657, 1657, 1658, 1659, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1660, + + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 199, 199, 199, + + 1661, 1661, 1661, 1662, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1664, 1662, 1662, 1661, 1661, + 1661, 1661, 1662, 1662, 1661, 1662, 1662, 1662, + + 1665, 1666, 1666, 1666, 1666, 1666, 1666, 1667, + 1668, 1668, 1666, 1666, 1666, 1666, 199, 1669, + 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, + 1678, 1679, 199, 199, 199, 199, 1666, 1666, + + 1680, 1680, 1680, 1680, 1680, 1681, 1682, 1680, + 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, + 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, + 1691, 1692, 1680, 1680, 1680, 1680, 1680, 199, + + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1694, 1694, 1694, 1694, 1694, 1694, 1695, + 1695, 1694, 1694, 1695, 1695, 1694, 1694, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1693, 1693, 1693, 1694, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1694, 1695, 199, 199, + 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, + 1704, 1705, 199, 199, 1706, 1707, 1707, 1707, + + 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + 1709, 1708, 1708, 1708, 1708, 1708, 1708, 1710, + 1710, 1710, 1708, 810, 1681, 1711, 1680, 1680, + + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1713, 1712, 1713, 1713, 1714, 1712, 1712, 1713, + 1713, 1712, 1712, 1712, 1712, 1712, 1713, 1713, + + 1712, 1713, 1712, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 1712, 1712, 1715, 1716, 1716, + + 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, + 1717, 1717, 1717, 1718, 1719, 1719, 1718, 1718, + 1720, 1720, 1717, 1721, 1721, 1718, 1722, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1724, 1725, 1725, 1725, 1725, + + 199, 199, 199, 199, 1602, 1726, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + + 1727, 1727, 1727, 1728, 1728, 1729, 1728, 1728, + 1729, 1728, 1728, 1730, 1728, 1731, 199, 199, + 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, + 1740, 1741, 199, 199, 199, 199, 199, 199, + + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 825, 825, 825, 825, 825, 825, 825, 825, + 825, 825, 825, 825, 825, 825, 825, 825, + + 825, 825, 825, 825, 825, 825, 825, 199, + 199, 199, 199, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 199, 199, 199, 199, + + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1551, 1551, + 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1551, + + 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1551, + 1551, 1551, 1746, 1746, 1746, 1746, 1747, 1747, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1749, 1749, 1749, 1550, 1550, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1550, 1550, 1550, 1550, 1550, 1550, + + 1751, 1752, 1753, 1754, 1755, 1756, 1756, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 1757, 1758, 1759, 1760, 1761, + 199, 199, 199, 199, 199, 1762, 1763, 1764, + + 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, + 1765, 1766, 1764, 1764, 1764, 1764, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1764, 1764, 296, + 1764, 1764, 1764, 1764, 1764, 296, 1764, 296, + + 1764, 1764, 296, 1764, 1764, 296, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, + 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, + + 1768, 1768, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1501, 1228, + + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 342, 342, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 342, 342, 342, 342, 342, 342, 342, 342, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1770, 334, 342, 342, + + 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, + 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1777, 1778, + 1779, 1780, 199, 199, 199, 199, 199, 199, + + 170, 170, 170, 170, 1085, 1085, 1085, 985, + 985, 985, 985, 985, 985, 985, 199, 199, + 1781, 1782, 1782, 1783, 1783, 1784, 1785, 1784, + 1785, 1784, 1785, 1784, 1785, 1784, 1785, 1784, + + 1785, 1784, 1785, 1784, 1785, 1513, 1513, 1786, + 1787, 1781, 1781, 1781, 1781, 1783, 1783, 1783, + 1788, 1789, 1790, 199, 1791, 1792, 1793, 1793, + 1782, 1281, 1282, 1281, 1282, 1281, 1282, 1794, + + 1781, 1781, 1795, 1796, 1797, 1798, 1799, 199, + 1781, 1284, 1242, 1781, 199, 199, 199, 199, + 1767, 1767, 1767, 1800, 1767, 342, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 342, 342, 1801, + + 199, 1793, 1781, 1794, 1284, 1242, 1781, 1802, + 1281, 1282, 1781, 1795, 1788, 1796, 1790, 1803, + 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1792, 1791, 1814, 1799, 1815, 1793, + + 1781, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1817, 1781, 1818, 1819, 1783, + + 1819, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1817, 1799, 1818, 1799, 1821, + + 1822, 1823, 1281, 1282, 1824, 1825, 1826, 1827, + 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, + 1828, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1829, 1829, + + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 199, + + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 199, 199, 199, + + 1831, 1284, 1799, 1819, 1509, 1284, 1284, 199, + 1303, 1280, 1280, 1280, 1280, 1303, 1303, 199, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1832, 1832, 1832, 1833, 51, 1834, 1834, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 199, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 199, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 199, 1835, 1835, 199, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 199, 199, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 199, 199, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 199, 199, 199, 199, 199, + + 1836, 1837, 1836, 199, 199, 199, 199, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 199, 199, 199, 1839, + 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, + + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1841, 1841, 1841, + 1841, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1841, 1843, 1844, 199, 199, 199, + 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 199, 199, 199, 199, + + 1844, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1088, 199, 199, + + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 199, 199, 199, + + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 985, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 199, 199, 199, 199, + + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1849, + + 1850, 1850, 1850, 1850, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, + 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, + + 1851, 1852, 1851, 1851, 1851, 1851, 1851, 1851, + 1851, 1851, 1852, 199, 199, 199, 199, 199, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1854, 1854, + 1854, 1854, 1854, 199, 199, 199, 199, 199, + + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 199, 1856, + + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + + 1857, 1857, 1857, 1857, 199, 199, 199, 199, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1858, 1859, 1859, 1859, 1859, 1859, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + + 1860, 1860, 1860, 1860, 1860, 1860, 1861, 1861, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1863, 1863, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 199, 199, + + 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, + 1874, 1875, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 199, 199, 199, 199, 199, 199, 199, 199, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + + 1877, 1877, 1877, 1877, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1878, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1880, 1880, 1880, 1880, 1880, 1880, 296, 296, + 1880, 296, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 296, 1880, + 1880, 296, 296, 296, 1880, 296, 296, 1880, + + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 296, 1882, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1885, + 1885, 1886, 1886, 1886, 1886, 1886, 1886, 1886, + + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 296, + + 296, 296, 296, 296, 296, 296, 296, 1888, + 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, + 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, + 1889, 1889, 1889, 1889, 1889, 1889, 1890, 1890, + 1890, 1890, 1891, 1891, 296, 296, 296, 1892, + + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 296, 296, 296, 296, 296, 1894, + + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 296, 296, 296, 296, 296, 296, 1896, 1896, + + 1897, 1898, 1898, 1898, 296, 1898, 1898, 296, + 296, 296, 296, 296, 1898, 1899, 1898, 1900, + 1897, 1897, 1897, 1897, 296, 1897, 1897, 1897, + 296, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + + 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + 1897, 1897, 1897, 1897, 296, 296, 296, 296, + 1900, 1901, 1899, 296, 296, 296, 296, 1902, + + 1903, 1904, 1905, 1906, 1907, 1907, 1907, 1907, + 296, 296, 296, 296, 296, 296, 296, 296, + 1908, 1908, 1908, 1908, 1908, 1908, 1909, 1909, + 1910, 296, 296, 296, 296, 296, 296, 296, + + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1912, 1912, 1913, + + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1915, 1915, 1915, + + 1916, 1916, 1916, 1916, 1916, 1917, 1918, 1917, + 1919, 1917, 1917, 1918, 1918, 1920, 1917, 1917, + 1917, 1917, 1917, 1916, 1916, 1916, 1916, 1920, + 1916, 1916, 1916, 1916, 1916, 1917, 1916, 1916, + + 1916, 1917, 1918, 1918, 1917, 1921, 1922, 296, + 296, 296, 296, 1923, 1923, 1923, 1923, 1924, + 1925, 1925, 1925, 1925, 1925, 1925, 1926, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 296, 296, + 296, 1928, 1928, 1928, 1928, 1928, 1928, 1928, + + 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, + 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, + 1929, 1929, 1929, 1929, 1929, 1929, 296, 296, + 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, + + 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, + 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, + 1931, 1931, 1931, 296, 296, 296, 296, 296, + 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, + + 1933, 1934, 1933, 1934, 1934, 1934, 1933, 1933, + 1933, 1934, 1933, 1933, 1934, 1933, 1934, 1934, + 1933, 1934, 296, 296, 296, 296, 296, 296, + 296, 1935, 1935, 1935, 1935, 296, 296, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 1936, 1936, 1936, 1936, 1937, 1937, 1938, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1949, 1949, 1949, 1949, 1949, 1949, + 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, + 1949, 1949, 1949, 1949, 1949, 1949, 1949, 296, + + 1950, 1951, 1950, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, + 1951, 1951, 1951, 1951, 1951, 1951, 1953, 1954, + 1954, 1955, 1955, 1955, 1955, 1955, 199, 199, + 199, 199, 1956, 1957, 1958, 1959, 1960, 1961, + 1962, 1963, 1964, 1965, 1965, 1965, 1965, 1965, + 1965, 1965, 1965, 1965, 1965, 1965, 1966, 1967, + 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1976, + 1977, 1977, 1978, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1980, 1979, 1980, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1980, 1979, 1979, 1979, 1979, + 1978, 1978, 1978, 1977, 1977, 1977, 1977, 1978, + 1978, 1981, 1982, 1983, 1983, 1984, 1985, 1985, + 1985, 1985, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 199, 199, 199, 199, 199, 199, 199, + 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, + 1995, 1996, 199, 199, 199, 199, 199, 199, + + 1997, 1997, 1997, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1999, + 2000, 2000, 2000, 2000, 2001, 2000, 2002, 2002, + 2000, 2000, 2000, 2003, 2003, 199, 2004, 2005, + 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, + 2014, 2015, 2015, 2015, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2017, 2018, 2019, 2016, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2020, 2020, 2021, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2021, 2021, 2021, 2020, 2020, + 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021, + 2023, 2022, 2022, 2022, 2022, 2024, 2024, 2025, + 2026, 199, 199, 199, 199, 2027, 199, 199, + 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, + 2036, 2037, 2038, 199, 199, 199, 199, 199, + 199, 2039, 2039, 2039, 2039, 2039, 2039, 2039, + 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, + 2039, 2039, 2039, 2039, 2039, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 199, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2041, 2041, 2041, 2042, + 2042, 2042, 2041, 2041, 2042, 2043, 2044, 2042, + 2045, 2045, 2046, 2045, 2045, 2046, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2048, + 2049, 2049, 2049, 2048, 2048, 2048, 2048, 2048, + 2048, 2050, 2051, 199, 199, 199, 199, 199, + 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 199, 199, 199, 199, 199, 199, + + 199, 2062, 2063, 2063, 199, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 199, 199, 2064, + 2064, 199, 199, 2064, 2064, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 199, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 199, 2064, 2064, 199, 2064, 2064, 2064, + 2064, 2064, 199, 199, 2065, 2064, 2066, 2063, + 2062, 2063, 2063, 2063, 2063, 199, 199, 2063, + 2063, 199, 199, 2067, 2067, 2068, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2066, + 199, 199, 199, 199, 199, 2064, 2064, 2064, + 2064, 2064, 2063, 2063, 199, 199, 2069, 2069, + 2069, 2069, 2069, 2069, 2069, 199, 199, 199, + 2069, 2069, 2069, 2069, 2069, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2071, 2072, 2072, 2073, 2073, 2073, 2073, 2073, + 2073, 2072, 2074, 2075, 2075, 2071, 2075, 2073, + 2073, 2072, 2076, 2077, 2070, 2070, 2078, 2070, + 199, 199, 199, 199, 199, 199, 199, 199, + 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, + 2087, 2088, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2090, + 2091, 2091, 2092, 2092, 2092, 2092, 199, 199, + 2091, 2091, 2093, 2093, 2092, 2092, 2091, 2094, + 2095, 2096, 2097, 2097, 2098, 2098, 2099, 2099, + 2099, 2097, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2101, 2101, 2101, 2102, 2102, 2102, 2102, 2102, + 2102, 2102, 2102, 2101, 2101, 2102, 2101, 2103, + 2102, 2104, 2104, 2105, 2100, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, + 2114, 2115, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2117, 2118, 2117, 2118, 2118, + 2117, 2117, 2117, 2117, 2117, 2117, 2119, 2120, + 199, 199, 199, 199, 199, 199, 199, 199, + 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, + 2129, 2130, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, + 2141, 2142, 2143, 2143, 2143, 2143, 2143, 2143, + 2143, 2143, 2143, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2144, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 199, 199, 199, 199, 199, 199, 199, + + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 199, + 2150, 2150, 2150, 2150, 2151, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2153, 2153, 2153, 2154, 2154, 2154, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2154, 2152, 2152, 2152, 2153, 2154, + 2153, 2154, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2153, 2154, 2154, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 199, 199, 199, 199, 199, 199, 199, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 199, + 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, + 2165, 2166, 199, 199, 199, 199, 2167, 2167, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 199, 199, + 2169, 2169, 2169, 2169, 2169, 2170, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2173, + 2173, 2174, 2175, 2175, 2176, 2176, 2176, 2176, + 2177, 2177, 2177, 2177, 2173, 2176, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, + 2186, 2187, 199, 2188, 2188, 2188, 2188, 2188, + 2188, 2188, 199, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 199, 199, 199, 199, 199, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2189, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2191, + 2191, 2191, 2191, 2192, 2192, 2192, 2192, 2192, + 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2193, 2194, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 199, 199, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 199, 199, 199, 199, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 199, 199, 2196, 2197, 2198, 2199, + 2200, 2200, 2200, 2200, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 199, + 199, 1325, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2202, 2202, + 2202, 2202, 2202, 2202, 2202, 2203, 2204, 2205, + 2205, 2205, 2201, 2201, 2201, 2206, 2203, 2203, + 2203, 2203, 2203, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2208, 2208, 2208, 2208, 2208, + 2208, 2208, 2208, 2201, 2201, 2209, 2209, 2209, + 2209, 2209, 2208, 2208, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2209, 2209, 2209, 2209, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2202, 2202, 2202, 2202, 2202, + 2202, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 2210, 2210, 2210, 1842, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, + 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, + 2211, 2211, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 199, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 199, 2212, 2212, + 199, 199, 2212, 199, 199, 2212, 2212, 199, + 199, 2212, 2212, 2212, 2212, 199, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 199, 2213, 199, 2213, 2213, 2213, + 2213, 2214, 2213, 2213, 199, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2212, 2212, 199, 2212, + 2212, 2212, 2212, 199, 199, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 199, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 199, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 199, 2212, 2212, 2212, 2212, 199, + 2212, 2212, 2212, 2212, 2212, 199, 2212, 199, + 199, 199, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 199, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 1317, 1317, 199, 199, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213, + 2213, 2213, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2215, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2216, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2215, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2216, + 2213, 2213, 2213, 2213, 2213, 2213, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2215, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2216, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213, + 2213, 2213, 2217, 2218, 199, 199, 2219, 2220, + 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, + 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, + 2227, 2228, 2219, 2220, 2221, 2222, 2223, 2224, + 2225, 2226, 2227, 2228, 2219, 2220, 2221, 2222, + 2223, 2224, 2225, 2226, 2227, 2228, 2219, 2220, + 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, + + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 296, 296, 2230, + 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, + 2231, 2231, 2231, 2231, 2231, 2231, 2231, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 2232, 2232, 2232, 2232, 342, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 342, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 342, 2232, 342, 2232, 342, 342, 342, 342, + 342, 342, 2232, 342, 342, 342, 342, 2232, + 342, 2232, 342, 2232, 342, 2232, 2232, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 342, 2232, 342, 2232, 342, 2232, 342, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 342, 2232, 2232, 2232, 2232, 342, 2232, 342, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 342, 342, 342, 342, + 342, 2232, 2232, 2232, 342, 2232, 2232, 2232, + 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 2233, 2233, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 199, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2234, 2234, 2235, 2236, 2237, 2238, 2239, 2240, + 2241, 2242, 2243, 2244, 2244, 199, 199, 199, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 199, + 2246, 2247, 2246, 2246, 2246, 2246, 2246, 2246, + 2246, 2246, 2246, 2246, 2246, 2247, 2246, 2247, + 2246, 2246, 2247, 2246, 2246, 2246, 2247, 2246, + 2246, 2246, 2245, 2245, 2245, 2245, 2245, 2248, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2249, 2251, 2251, 199, 199, 199, 199, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2250, 2249, 2250, 2250, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2249, 772, 772, 772, 772, 2252, 2252, + 2245, 2252, 2252, 2252, 2252, 2252, 2252, 2252, + 2252, 2252, 2252, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + + 2254, 2255, 2255, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 2255, 2255, 2255, 2255, 2255, 2255, + 2255, 2255, 2255, 199, 199, 199, 199, 199, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 199, 199, 199, 199, 199, 199, 199, + 2255, 2255, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1394, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1394, 1394, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1360, 1360, 1361, + 1361, 1361, 1361, 1361, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1394, 1361, 1361, + 1361, 1361, 1361, 1394, 1394, 1394, 1394, 199, + 199, 199, 199, 199, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394, + 1361, 1394, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1360, 1361, 1360, 1361, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360, + 1361, 1360, 1360, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1361, 1361, 1361, 1361, 1394, 1394, 199, + + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1362, 1362, + 2256, 2256, 2256, 2256, 1362, 1362, 1362, 1362, + 1362, 1362, 1394, 199, 199, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 199, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 199, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362, + 1362, 1362, 1394, 1361, 1361, 1361, 1361, 1361, + + 2257, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 2257, 1361, 1361, 1361, 2257, 1361, 2257, + 1361, 2257, 1361, 2257, 1361, 1361, 1361, 2257, + 1361, 1361, 1361, 1361, 1361, 1361, 2257, 2257, + 1361, 1361, 1361, 1361, 2257, 1361, 2257, 2257, + 1361, 1361, 1361, 1361, 2257, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 199, 199, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 2258, 2258, + 2258, 2259, 2259, 2259, 1362, 1362, 1362, 1362, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 199, 199, 199, + 1394, 1394, 1394, 1394, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 2260, 2260, + + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 2260, 2260, + + 1265, 2207, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2260, 2260, +}; + +#define GET_PROP_INDEX(ucs4) \ + (ucs4 < 0x11000 \ + ? (uc_property_trie[uc_property_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ + : (uc_property_trie[uc_property_trie[((ucs4 - 0x11000)>>8) + 0x880] + (ucs4 & 0xff)])) + +#define GET_PROP_INDEX_UCS2(ucs2) \ + (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) + +static const Properties uc_properties[] = { + { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 5, 17, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 34, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, + { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 33, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 32, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 13, 3, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 11, 8, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 16, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 10, 8, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 3 }, + { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 17, 2 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 18, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 743, 0, 743, 0, 775, 1, 80, 0, 8, 6, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 80, 1, 77, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 121, 0, 121, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -232, 0, -232, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 162, 1, 162, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -121, 0, 0, 0, 0, 0, -121, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -300, 0, -300, 0, -268, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 195, 0, 195, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 210, 0, 0, 0, 0, 0, 210, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 206, 0, 0, 0, 0, 0, 206, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 205, 0, 0, 0, 0, 0, 205, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 79, 0, 0, 0, 0, 0, 79, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 202, 0, 0, 0, 0, 0, 202, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 203, 0, 0, 0, 0, 0, 203, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 207, 0, 0, 0, 0, 0, 207, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 97, 0, 97, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 211, 0, 0, 0, 0, 0, 211, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 209, 0, 0, 0, 0, 0, 209, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 163, 0, 163, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 213, 0, 0, 0, 0, 0, 213, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 214, 0, 0, 0, 0, 0, 214, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 218, 0, 0, 0, 0, 0, 218, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 217, 0, 0, 0, 0, 0, 217, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 219, 0, 0, 0, 0, 0, 219, 1, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 56, 0, 56, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 1, 0, 2, 1, 80, 0, 8, 7, 12, 3 }, + { 16, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -79, 0, -79, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 173, 1, 173, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -97, 0, 0, 0, 0, 0, -97, 4, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -56, 0, 0, 0, 0, 0, -56, 4, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 6, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 8, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -163, 0, 0, 0, 0, 0, -163, 8, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 3, 0, 0, 0, 0, 1, 3, 8, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 5, 1, 5, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 7, 1, 7, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -195, 0, 0, 0, 0, 0, -195, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 69, 0, 0, 0, 0, 0, 69, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 71, 0, 0, 0, 0, 0, 71, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 9, 1, 9, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 11, 1, 11, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 13, 1, 13, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -210, 0, -210, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -206, 0, -206, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -205, 0, -205, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -202, 0, -202, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -203, 0, -203, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 15, 1, 15, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 17, 1, 17, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -207, 0, -207, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 19, 1, 19, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 21, 1, 21, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -209, 0, -209, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -211, 0, -211, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 23, 1, 23, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 25, 1, 25, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 27, 1, 27, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -213, 0, -213, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -214, 0, -214, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 29, 1, 29, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -218, 0, -218, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 31, 1, 31, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -69, 0, -69, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -217, 0, -217, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -71, 0, -71, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -219, 0, -219, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 33, 1, 33, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 36 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 4, 4, 4, 21, 1 }, + { 0, 17, 240, 5, -1, 0, 0, 0, 0, 84, 0, 84, 0, 116, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 4 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 4 }, + { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 9, 0, 0, 8, 6, 12, 4 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 13, 0, 8, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 116, 0, 0, 0, 0, 0, 116, 16, 0, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 38, 0, 0, 0, 0, 0, 38, 1, 17, 0, 8, 7, 12, 4 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 12, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 37, 0, 0, 0, 0, 0, 37, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 63, 0, 0, 0, 0, 0, 63, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -38, 0, -38, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -37, 0, -37, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -31, 0, -31, 0, 1, 1, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -63, 0, -63, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 8, 10, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -62, 0, -62, 0, -30, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -57, 0, -57, 0, -25, 1, 80, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -47, 0, -47, 0, -15, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -54, 0, -54, 0, -22, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -86, 0, -86, 0, -54, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, -48, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -116, 0, -116, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -60, 0, 0, 0, 0, 0, -60, 5, 80, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -96, 0, -96, 0, -64, 5, 80, 0, 8, 6, 12, 4 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 7, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 7, 80, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 8, 0, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 4, 17, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 17, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 0, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 15, 0, 0, 0, 0, 0, 15, 1, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -15, 0, -15, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 1, 0, 0, 8, 7, 12, 6 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 1, 0, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 129, 1, 126, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 6 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 9, 6 }, + { 13, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 10, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 11, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 12, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 13, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 14, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 15, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 16, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 17, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 20, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 21, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 22, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 7 }, + { 0, 17, 23, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 7 }, + { 0, 17, 24, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 25, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 7 }, + { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 8, 13, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 7 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 3, 4, 4, 12, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 4, 4, 12, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, + { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 8 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 10, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 11, 8, 8 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, + { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, + { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 33, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 34, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 }, + { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, + { 0, 17, 35, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, + { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 9 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 9 }, + { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 12, 9 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, + { 0, 17, 36, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 10 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 10 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 10 }, + { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 13, 11, 8, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 66 }, + { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 82 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 82 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 95 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 95 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 11 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 11 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 11 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 11 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 12 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 12 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 12 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 12 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 12 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 13 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 13 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 13 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 13 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 13 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 14 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 14 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 14 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 14 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 15 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 15 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 15 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 15 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 16 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 16 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 16 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 16 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 16 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 17 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 4, 4, 21, 17 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 18 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 18 }, + { 0, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 18 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 19 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 21, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 20 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 20 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 7, 4, 4, 21, 20 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 21 }, + { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, + { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 21 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 22 }, + { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, + { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 8, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 0, 0, 0, 4, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, + { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 0, 23 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 1, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 8, 8, 12, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 23 }, + { 0, 17, 129, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 130, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 4, 4, 4, 21, 23 }, + { 0, 17, 132, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 17, 23 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 24 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 24 }, + { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 1, 0, 0, 8, 7, 12, 25 }, + { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 13, 0, 0, 8, 7, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 25 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 8, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 8, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 27 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 27 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 28 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 29 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 17, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 30 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 30 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 1, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 31 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 42 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 43 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 17, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 44 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 44 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 45 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 45 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 32 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 32 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 32 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 32 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 30, 32 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 33 }, + { 25, 10, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 33 }, + { 25, 10, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 4, 33 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 47 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 47 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 47 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 47 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 6, 47 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 4, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 30, 56 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 55 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 55 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 55 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 30, 78 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 78 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 78 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 78 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 30, 78 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 62 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 8, 8, 12, 62 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 7, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 7, 4, 4, 21, 62 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 17, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 62 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 67 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 67 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 93 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 93 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 68 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 68 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 67 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 2 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 1 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 5 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 3814, 0, 3814, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 214, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 176, 1, 176, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 179, 1, 179, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 182, 1, 182, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 185, 1, 185, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 188, 1, 188, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -59, 0, -59, 0, -58, 2, 81, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -7615, 0, 0, 0, 0, 0, -7615, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 8, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -8, 0, 0, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 191, 1, 191, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 194, 1, 194, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 198, 1, 198, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 202, 1, 202, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 240, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 243, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 246, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 252, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 258, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 240, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 243, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 246, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 249, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 252, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 255, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 258, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 261, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 264, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 270, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 276, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 282, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 264, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 267, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 270, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 273, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 276, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 279, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 282, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 285, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 288, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 294, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 300, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 306, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 288, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 291, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 294, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 297, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 300, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 303, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 306, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 309, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 324, 1, 321, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 312, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 330, 1, 327, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 206, 1, 206, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 357, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 312, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7205, 0, -7205, 0, -7173, 1, 85, 0, 8, 6, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 336, 1, 333, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 342, 1, 339, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 209, 1, 209, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 365, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 315, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 212, 1, 212, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 216, 1, 216, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 219, 1, 219, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 85, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 223, 1, 223, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 227, 1, 227, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 230, 1, 230, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 233, 1, 233, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 1, 17, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 348, 1, 345, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 318, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 354, 1, 351, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 237, 1, 237, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 373, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 318, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 4, 20, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 4, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 19, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 17, 2 }, + { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 5, 4, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5, 2 }, + { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 5, 17, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 22, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 12, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 4, 4, 12, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 }, + { 10, 19, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 20, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 21, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 22, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 3 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 6, 12, 3 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 10, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 10, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 9, 2 }, + { 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, + { 14, 0, 0, 0, -1, 0, 0, -7517, 0, 0, 0, 0, 0, -7517, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 37, 0, 0, 0, 0, 1, 37, 1, 85, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 1, 39, 1, 85, 0, 8, 7, 12, 3 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 28, 0, 0, 0, 0, 0, 28, 1, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 8, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 7, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -28, 0, -28, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 16, 0, 0, 0, 0, 0, 16, 1, 80, 0, 8, 7, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, -16, 0, -16, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 1, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 26, 0, 0, 0, 0, 0, 26, 1, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, -26, 0, -26, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 1, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 54 }, + { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 8, 0, 0, 8, 7, 12, 57 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 8, 0, 0, 8, 6, 12, 57 }, + { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 1, 41, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -3814, 0, 0, 0, 0, 0, -3814, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 1, 43, 9, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 45, 1, 45, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 47, 1, 47, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 1, 49, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 1, 51, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 1, 53, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 1, 55, 11, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 1, 57, 11, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 1, 59, 11, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 46 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 46 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 46 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 8, 0, 0, 8, 6, 12, 25 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 13, 0, 0, 8, 6, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 58 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 58 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 58 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 17, 58 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 58 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 0, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 37 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 0, 14, 37 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 0, 17, 218, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 26 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 21, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 8, 14, 37 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 5, 34 }, + { 0, 17, 8, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 8, 14, 34 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 14, 35 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 8, 5, 35 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 26 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 14, 37 }, + { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 38 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 83 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 70 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 5 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 84 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 1, 61, 10, 0, 0, 8, 7, 12, 3 }, + { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 1, 63, 12, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 1, 65, 13, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 1, 67, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 1, 69, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 1, 71, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 1, 73, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 1, 75, 16, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 59 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 59 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 59 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 18, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 65 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 71 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 71 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 71 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 71 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 72 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 73 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 73 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 73 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 85 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 85 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 30, 24 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 77 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 77 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 77 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 77 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 4, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 79 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 86 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 }, + { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 4 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 86 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 11, 8, 8, 23, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 8, 8, 24, 26 }, + { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 31, 0 }, + { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 89, 1, 86, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 95, 1, 92, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 101, 1, 98, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 108, 1, 104, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 116, 1, 112, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 123, 1, 120, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 135, 1, 132, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 141, 1, 138, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 147, 1, 144, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 153, 1, 150, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 159, 1, 156, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 }, + { 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 7, 8, 13, 7 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 7 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 8 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 10, 8 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 12, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 0, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 14, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 1, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 5, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 12, 11, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 6, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 22, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 0, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 80, 0, 8, 7, 14, 3 }, + { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 80, 0, 8, 6, 14, 3 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 12, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 35 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 4, 4, 4, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 26 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 21, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 29, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 49 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 4 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 74 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 75 }, + { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 39 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 39 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 39 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 120 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 120 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 50 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 50 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 60 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, + { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 5, 0, 0, 8, 7, 12, 41 }, + { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 7, 0, 0, 8, 7, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 5, 0, 0, 8, 6, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 7, 0, 0, 8, 6, 12, 41 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 51 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 52 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 106 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 103 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 103 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 110 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 53 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 87 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 87 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 87 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 118 }, + { 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 117 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 117 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 64 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 76 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 88 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 116 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 116 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 18, 1, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 }, + { 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 112 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 15, 112 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 80 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 80 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 89 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 89 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 90 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 90 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 }, + { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 94 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 94 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 17, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 94 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 8, 8, 12, 92 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 204, 4, 4, 4, 21, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 92 }, + { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 3, 4, 4, 12, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 101 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 204, 4, 4, 4, 21, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 4, 4, 21, 96 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 96 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 111 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 111 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 111 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 111 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 100 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 100 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 12, 100 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 100 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 109 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 109 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 109 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 123 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 123 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 107 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 107 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 124 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 124 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 124 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 122 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 122 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 6, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 122 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 114 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 114 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 114 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 114 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 102 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 16, 0, 0, 8, 7, 12, 125 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 16, 0, 0, 8, 6, 12, 125 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 125 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 125 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 119 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 63 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 115 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 115 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 104 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 104 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 104 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 99 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 99 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 105 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 105 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 105 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 21, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 0, 12, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 2 }, + { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 6, 12, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 113 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 113 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 113 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 8, 12, 8 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 8 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 5, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 8, 14, 37 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 } +}; + +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) Q_DECL_NOTHROW +{ + const int index = GET_PROP_INDEX(ucs4); + return uc_properties + index; +} + +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) Q_DECL_NOTHROW +{ + const int index = GET_PROP_INDEX_UCS2(ucs2); + return uc_properties + index; +} + +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW +{ + return qGetProp(ucs4); +} + +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) Q_DECL_NOTHROW +{ + return qGetProp(ucs2); +} + +Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass; +} + +Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (WordBreakClass)qGetProp(ucs4)->wordBreakClass; +} + +Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass; +} + +Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (LineBreakClass)qGetProp(ucs4)->lineBreakClass; +} + + +static const ushort specialCaseMap[] = { + 0x0, // placeholder + 0x1, 0x2c65, + 0x1, 0x2c66, + 0x1, 0x2c7e, + 0x1, 0x2c7f, + 0x1, 0x2c6f, + 0x1, 0x2c6d, + 0x1, 0x2c70, + 0x1, 0xa7ab, + 0x1, 0xa7ac, + 0x1, 0xa78d, + 0x1, 0xa7aa, + 0x1, 0x2c62, + 0x1, 0xa7ad, + 0x1, 0x2c6e, + 0x1, 0x2c64, + 0x1, 0xa7b1, + 0x1, 0xa7b0, + 0x1, 0xa77d, + 0x1, 0x6b, + 0x1, 0xe5, + 0x1, 0x26b, + 0x1, 0x27d, + 0x1, 0x23a, + 0x1, 0x23e, + 0x1, 0x251, + 0x1, 0x271, + 0x1, 0x250, + 0x1, 0x252, + 0x1, 0x23f, + 0x1, 0x240, + 0x1, 0x1d79, + 0x1, 0x265, + 0x1, 0x266, + 0x1, 0x25c, + 0x1, 0x261, + 0x1, 0x26c, + 0x1, 0x29e, + 0x1, 0x287, + 0x2, 0x53, 0x73, + 0x2, 0x53, 0x53, + 0x2, 0x69, 0x307, + 0x2, 0x46, 0x66, + 0x2, 0x46, 0x46, + 0x2, 0x46, 0x69, + 0x2, 0x46, 0x49, + 0x2, 0x46, 0x6c, + 0x2, 0x46, 0x4c, + 0x3, 0x46, 0x66, 0x69, + 0x3, 0x46, 0x46, 0x49, + 0x3, 0x46, 0x66, 0x6c, + 0x3, 0x46, 0x46, 0x4c, + 0x2, 0x53, 0x74, + 0x2, 0x53, 0x54, + 0x2, 0x535, 0x582, + 0x2, 0x535, 0x552, + 0x2, 0x544, 0x576, + 0x2, 0x544, 0x546, + 0x2, 0x544, 0x565, + 0x2, 0x544, 0x535, + 0x2, 0x544, 0x56b, + 0x2, 0x544, 0x53b, + 0x2, 0x54e, 0x576, + 0x2, 0x54e, 0x546, + 0x2, 0x544, 0x56d, + 0x2, 0x544, 0x53d, + 0x2, 0x2bc, 0x4e, + 0x3, 0x399, 0x308, 0x301, + 0x3, 0x3a5, 0x308, 0x301, + 0x2, 0x4a, 0x30c, + 0x2, 0x48, 0x331, + 0x2, 0x54, 0x308, + 0x2, 0x57, 0x30a, + 0x2, 0x59, 0x30a, + 0x2, 0x41, 0x2be, + 0x2, 0x3a5, 0x313, + 0x3, 0x3a5, 0x313, 0x300, + 0x3, 0x3a5, 0x313, 0x301, + 0x3, 0x3a5, 0x313, 0x342, + 0x2, 0x391, 0x342, + 0x2, 0x397, 0x342, + 0x3, 0x399, 0x308, 0x300, + 0x2, 0x399, 0x342, + 0x3, 0x399, 0x308, 0x342, + 0x3, 0x3a5, 0x308, 0x300, + 0x2, 0x3a1, 0x313, + 0x2, 0x3a5, 0x342, + 0x3, 0x3a5, 0x308, 0x342, + 0x2, 0x3a9, 0x342, + 0x2, 0x1f08, 0x399, + 0x2, 0x1f09, 0x399, + 0x2, 0x1f0a, 0x399, + 0x2, 0x1f0b, 0x399, + 0x2, 0x1f0c, 0x399, + 0x2, 0x1f0d, 0x399, + 0x2, 0x1f0e, 0x399, + 0x2, 0x1f0f, 0x399, + 0x2, 0x1f28, 0x399, + 0x2, 0x1f29, 0x399, + 0x2, 0x1f2a, 0x399, + 0x2, 0x1f2b, 0x399, + 0x2, 0x1f2c, 0x399, + 0x2, 0x1f2d, 0x399, + 0x2, 0x1f2e, 0x399, + 0x2, 0x1f2f, 0x399, + 0x2, 0x1f68, 0x399, + 0x2, 0x1f69, 0x399, + 0x2, 0x1f6a, 0x399, + 0x2, 0x1f6b, 0x399, + 0x2, 0x1f6c, 0x399, + 0x2, 0x1f6d, 0x399, + 0x2, 0x1f6e, 0x399, + 0x2, 0x1f6f, 0x399, + 0x2, 0x391, 0x399, + 0x2, 0x397, 0x399, + 0x2, 0x3a9, 0x399, + 0x2, 0x1fba, 0x345, + 0x2, 0x1fba, 0x399, + 0x2, 0x386, 0x345, + 0x2, 0x386, 0x399, + 0x2, 0x1fca, 0x345, + 0x2, 0x1fca, 0x399, + 0x2, 0x389, 0x345, + 0x2, 0x389, 0x399, + 0x2, 0x1ffa, 0x345, + 0x2, 0x1ffa, 0x399, + 0x2, 0x38f, 0x345, + 0x2, 0x38f, 0x399, + 0x3, 0x391, 0x342, 0x345, + 0x3, 0x391, 0x342, 0x399, + 0x3, 0x397, 0x342, 0x345, + 0x3, 0x397, 0x342, 0x399, + 0x3, 0x3a9, 0x342, 0x345, + 0x3, 0x3a9, 0x342, 0x399 +}; + + +static const unsigned short uc_decomposition_trie[] = { + // 0 - 0x3400 + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1564, 1580, 1596, 1612, 1628, 1644, + 1660, 1676, 1692, 1708, 1724, 1740, 1756, 1772, + 1548, 1548, 1788, 1804, 1820, 1836, 1852, 1868, + 1884, 1900, 1916, 1932, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1948, 1548, 1964, 1980, 1548, + 1548, 1548, 1548, 1548, 1996, 1548, 1548, 2012, + 2028, 2044, 2060, 2076, 2092, 2108, 1548, 2124, + 2140, 2156, 1548, 2172, 1548, 2188, 1548, 2204, + 1548, 1548, 1548, 1548, 2220, 2236, 2252, 2268, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 2284, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2300, 1548, 1548, 1548, 1548, 2316, + 1548, 1548, 1548, 1548, 2332, 2348, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2364, 2380, 1548, 2396, 1548, 1548, + 1548, 1548, 1548, 1548, 2412, 2428, 1548, 1548, + 1548, 1548, 1548, 2444, 1548, 2460, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2476, 2492, 1548, 1548, + 1548, 2508, 1548, 1548, 2524, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2540, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2556, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2572, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 2588, 1548, 1548, + 1548, 1548, 1548, 2604, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 2620, 1548, 2636, 1548, 1548, + 2652, 1548, 1548, 1548, 2668, 2684, 2700, 2716, + 2732, 2748, 2764, 2780, 1548, 1548, 1548, 1548, + + 1548, 1548, 2796, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 2812, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 2828, 2844, 1548, 2860, 2876, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2892, 2908, 2924, 2940, 2956, 2972, + 1548, 2988, 3004, 3020, 1548, 1548, 1548, 1548, + 3036, 3052, 3068, 3084, 3100, 3116, 3132, 3148, + 3164, 3180, 3196, 3212, 3228, 3244, 3260, 3276, + 3292, 3308, 3324, 3340, 3356, 3372, 3388, 3404, + 3420, 3436, 3452, 3468, 3484, 3500, 3516, 3532, + + 3548, 3564, 3580, 3596, 3612, 3628, 1548, 3644, + 3660, 3676, 3692, 1548, 1548, 1548, 1548, 1548, + 3708, 3724, 3740, 3756, 3772, 3788, 3804, 3820, + 3836, 3852, 3868, 1548, 3884, 1548, 1548, 1548, + 3900, 1548, 3916, 3932, 3948, 1548, 3964, 3980, + 3996, 1548, 4012, 1548, 1548, 1548, 4028, 1548, + 1548, 1548, 4044, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 4060, 4076, + 4092, 4108, 4124, 4140, 4156, 4172, 4188, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 4204, 1548, 1548, 1548, 1548, 1548, 1548, 4220, + 1548, 1548, 1548, 1548, 1548, 4236, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 4252, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 4268, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 4284, 1548, 1548, 1548, 1548, 1548, 4300, + 4316, 4332, 4348, 4364, 4380, 4396, 4412, 4428, + 4444, 4460, 4476, 4492, 4508, 4524, 1548, 1548, + + 4540, 1548, 1548, 4556, 4572, 4588, 4604, 4620, + 1548, 4636, 4652, 4668, 4684, 4700, 1548, 4716, + 1548, 1548, 1548, 4732, 4748, 4764, 4780, 4796, + 4812, 4828, 1548, 1548, 1548, 1548, 1548, 1548, + 4844, 4860, 4876, 4892, 4908, 4924, 4940, 4956, + 4972, 4988, 5004, 5020, 5036, 5052, 5068, 5084, + 5100, 5116, 5132, 5148, 5164, 5180, 5196, 5212, + 5228, 5244, 5260, 5276, 5292, 5308, 5324, 5340, + + // 0x3400 - 0x30000 + + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5612, 5868, 5356, 5356, 5356, 6124, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + + 5356, 5356, 5356, 5356, 5356, 6380, 6636, 6892, + 7148, 7404, 7660, 7916, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 8172, 8428, 5356, 8684, + 8940, 9196, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 9452, 5356, 5356, + 9708, 9964, 10220, 10476, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 10732, 5356, 5356, 10988, 11244, 5356, + + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + + 5356, 5356, 5356, 5356, 11500, 11756, 12012, 5356, + 5356, 5356, 5356, 5356, + + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2, 0xffff, 0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0x7, + + 0xffff, 0xffff, 0xa, 0xc, 0xe, 0x11, 0xffff, 0xffff, + 0x13, 0x16, 0x18, 0xffff, 0x1a, 0x1e, 0x22, 0xffff, + + 0x26, 0x29, 0x2c, 0x2f, 0x32, 0x35, 0xffff, 0x38, + 0x3b, 0x3e, 0x41, 0x44, 0x47, 0x4a, 0x4d, 0x50, + + 0xffff, 0x53, 0x56, 0x59, 0x5c, 0x5f, 0x62, 0xffff, + 0xffff, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0xffff, 0xffff, + + 0x74, 0x77, 0x7a, 0x7d, 0x80, 0x83, 0xffff, 0x86, + 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9b, 0x9e, + + 0xffff, 0xa1, 0xa4, 0xa7, 0xaa, 0xad, 0xb0, 0xffff, + 0xffff, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xffff, 0xc2, + + 0xc5, 0xc8, 0xcb, 0xce, 0xd1, 0xd4, 0xd7, 0xda, + 0xdd, 0xe0, 0xe3, 0xe6, 0xe9, 0xec, 0xef, 0xf2, + + 0xffff, 0xffff, 0xf5, 0xf8, 0xfb, 0xfe, 0x101, 0x104, + 0x107, 0x10a, 0x10d, 0x110, 0x113, 0x116, 0x119, 0x11c, + + 0x11f, 0x122, 0x125, 0x128, 0x12b, 0x12e, 0xffff, 0xffff, + 0x131, 0x134, 0x137, 0x13a, 0x13d, 0x140, 0x143, 0x146, + + 0x149, 0xffff, 0x14c, 0x14f, 0x152, 0x155, 0x158, 0x15b, + 0xffff, 0x15e, 0x161, 0x164, 0x167, 0x16a, 0x16d, 0x170, + + 0x173, 0xffff, 0xffff, 0x176, 0x179, 0x17c, 0x17f, 0x182, + 0x185, 0x188, 0xffff, 0xffff, 0x18b, 0x18e, 0x191, 0x194, + + 0x197, 0x19a, 0xffff, 0xffff, 0x19d, 0x1a0, 0x1a3, 0x1a6, + 0x1a9, 0x1ac, 0x1af, 0x1b2, 0x1b5, 0x1b8, 0x1bb, 0x1be, + + 0x1c1, 0x1c4, 0x1c7, 0x1ca, 0x1cd, 0x1d0, 0xffff, 0xffff, + 0x1d3, 0x1d6, 0x1d9, 0x1dc, 0x1df, 0x1e2, 0x1e5, 0x1e8, + + 0x1eb, 0x1ee, 0x1f1, 0x1f4, 0x1f7, 0x1fa, 0x1fd, 0x200, + 0x203, 0x206, 0x209, 0x20c, 0x20f, 0x212, 0x215, 0x218, + + 0x21a, 0x21d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x220, + + 0x223, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x226, 0x229, 0x22c, 0x22f, + 0x232, 0x235, 0x238, 0x23b, 0x23e, 0x241, 0x244, 0x247, + + 0x24a, 0x24d, 0x250, 0x253, 0x256, 0x259, 0x25c, 0x25f, + 0x262, 0x265, 0x268, 0x26b, 0x26e, 0xffff, 0x271, 0x274, + + 0x277, 0x27a, 0x27d, 0x280, 0xffff, 0xffff, 0x283, 0x286, + 0x289, 0x28c, 0x28f, 0x292, 0x295, 0x298, 0x29b, 0x29e, + + 0x2a1, 0x2a4, 0x2a7, 0x2aa, 0x2ad, 0x2b0, 0xffff, 0xffff, + 0x2b3, 0x2b6, 0x2b9, 0x2bc, 0x2bf, 0x2c2, 0x2c5, 0x2c8, + + 0x2cb, 0x2ce, 0x2d1, 0x2d4, 0x2d7, 0x2da, 0x2dd, 0x2e0, + 0x2e3, 0x2e6, 0x2e9, 0x2ec, 0x2ef, 0x2f2, 0x2f5, 0x2f8, + + 0x2fb, 0x2fe, 0x301, 0x304, 0x307, 0x30a, 0x30d, 0x310, + 0x313, 0x316, 0x319, 0x31c, 0xffff, 0xffff, 0x31f, 0x322, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x325, 0x328, + 0x32b, 0x32e, 0x331, 0x334, 0x337, 0x33a, 0x33d, 0x340, + + 0x343, 0x346, 0x349, 0x34c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x34f, 0x351, 0x353, 0x355, 0x357, 0x359, 0x35b, 0x35d, + 0x35f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x361, 0x364, 0x367, 0x36a, 0x36d, 0x370, 0xffff, 0xffff, + + 0x373, 0x375, 0x377, 0x379, 0x37b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x37d, 0x37f, 0xffff, 0x381, 0x383, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x386, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x388, 0xffff, 0xffff, 0xffff, 0x38b, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x38d, 0x390, 0x393, 0x396, + 0x398, 0x39b, 0x39e, 0xffff, 0x3a1, 0xffff, 0x3a4, 0x3a7, + + 0x3aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3ad, 0x3b0, 0x3b3, 0x3b6, 0x3b9, 0x3bc, + + 0x3bf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3c2, 0x3c5, 0x3c8, 0x3cb, 0x3ce, 0xffff, + + 0x3d1, 0x3d3, 0x3d5, 0x3d7, 0x3da, 0x3dd, 0x3df, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3e1, 0x3e3, 0x3e5, 0xffff, 0x3e7, 0x3e9, 0xffff, 0xffff, + 0xffff, 0x3eb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3ed, 0x3f0, 0xffff, 0x3f3, 0xffff, 0xffff, 0xffff, 0x3f6, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3f9, 0x3fc, 0x3ff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x402, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x405, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x408, 0x40b, 0xffff, 0x40e, 0xffff, 0xffff, 0xffff, 0x411, + 0xffff, 0xffff, 0xffff, 0xffff, 0x414, 0x417, 0x41a, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x41d, 0x420, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x423, 0x426, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x429, 0x42c, 0x42f, 0x432, 0xffff, 0xffff, 0x435, 0x438, + 0xffff, 0xffff, 0x43b, 0x43e, 0x441, 0x444, 0x447, 0x44a, + + 0xffff, 0xffff, 0x44d, 0x450, 0x453, 0x456, 0x459, 0x45c, + 0xffff, 0xffff, 0x45f, 0x462, 0x465, 0x468, 0x46b, 0x46e, + + 0x471, 0x474, 0x477, 0x47a, 0x47d, 0x480, 0xffff, 0xffff, + 0x483, 0x486, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x489, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x48c, 0x48f, 0x492, 0x495, 0x498, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x49b, 0x49e, 0x4a1, + 0x4a4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x4a7, 0xffff, 0x4aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x4ad, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4b0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x4b3, 0xffff, 0xffff, 0x4b6, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4b9, 0x4bc, 0x4bf, 0x4c2, 0x4c5, 0x4c8, 0x4cb, 0x4ce, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4d1, 0x4d4, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4d7, 0x4da, 0xffff, 0x4dd, + + 0xffff, 0xffff, 0xffff, 0x4e0, 0xffff, 0xffff, 0x4e3, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4e6, 0x4e9, 0x4ec, 0xffff, 0xffff, 0x4ef, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4f2, 0xffff, 0xffff, 0x4f5, 0x4f8, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4fb, 0x4fe, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x501, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x504, 0x507, 0x50a, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x50d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x510, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x513, + 0x516, 0xffff, 0x519, 0x51c, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x51f, 0x522, 0x525, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x528, 0xffff, 0x52b, 0x52e, 0x531, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x534, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x537, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x53a, 0x53d, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x540, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x542, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x545, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x548, 0xffff, 0xffff, 0xffff, 0xffff, 0x54b, + 0xffff, 0xffff, 0xffff, 0xffff, 0x54e, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x551, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x554, 0xffff, 0x557, 0x55a, 0x55d, + 0x560, 0x563, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x566, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x569, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x56c, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x56f, 0xffff, 0xffff, 0xffff, 0xffff, 0x572, + 0xffff, 0xffff, 0xffff, 0xffff, 0x575, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x578, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x57b, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x57e, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x580, 0xffff, + 0x583, 0xffff, 0x586, 0xffff, 0x589, 0xffff, 0x58c, 0xffff, + + 0xffff, 0xffff, 0x58f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x592, 0xffff, 0x595, 0xffff, 0xffff, + + 0x598, 0x59b, 0xffff, 0x59e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x5a1, 0x5a3, 0x5a5, 0xffff, + + 0x5a7, 0x5a9, 0x5ab, 0x5ad, 0x5af, 0x5b1, 0x5b3, 0x5b5, + 0x5b7, 0x5b9, 0x5bb, 0xffff, 0x5bd, 0x5bf, 0x5c1, 0x5c3, + + 0x5c5, 0x5c7, 0x5c9, 0x5cb, 0x5cd, 0x5cf, 0x5d1, 0x5d3, + 0x5d5, 0x5d7, 0x5d9, 0x5db, 0x5dd, 0x5df, 0xffff, 0x5e1, + + 0x5e3, 0x5e5, 0x5e7, 0x5e9, 0x5eb, 0x5ed, 0x5ef, 0x5f1, + 0x5f3, 0x5f5, 0x5f7, 0x5f9, 0x5fb, 0x5fd, 0x5ff, 0x601, + + 0x603, 0x605, 0x607, 0x609, 0x60b, 0x60d, 0x60f, 0x611, + 0x613, 0x615, 0x617, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x619, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x61b, 0x61d, 0x61f, 0x621, 0x623, + + 0x625, 0x627, 0x629, 0x62b, 0x62d, 0x62f, 0x631, 0x633, + 0x635, 0x637, 0x639, 0x63b, 0x63d, 0x63f, 0x641, 0x643, + + 0x645, 0x647, 0x649, 0x64b, 0x64d, 0x64f, 0x651, 0x653, + 0x655, 0x657, 0x659, 0x65b, 0x65d, 0x65f, 0x661, 0x663, + + 0x665, 0x668, 0x66b, 0x66e, 0x671, 0x674, 0x677, 0x67a, + 0x67d, 0x680, 0x683, 0x686, 0x689, 0x68c, 0x68f, 0x692, + + 0x695, 0x698, 0x69b, 0x69e, 0x6a1, 0x6a4, 0x6a7, 0x6aa, + 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6bc, 0x6bf, 0x6c2, + + 0x6c5, 0x6c8, 0x6cb, 0x6ce, 0x6d1, 0x6d4, 0x6d7, 0x6da, + 0x6dd, 0x6e0, 0x6e3, 0x6e6, 0x6e9, 0x6ec, 0x6ef, 0x6f2, + + 0x6f5, 0x6f8, 0x6fb, 0x6fe, 0x701, 0x704, 0x707, 0x70a, + 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71c, 0x71f, 0x722, + + 0x725, 0x728, 0x72b, 0x72e, 0x731, 0x734, 0x737, 0x73a, + 0x73d, 0x740, 0x743, 0x746, 0x749, 0x74c, 0x74f, 0x752, + + 0x755, 0x758, 0x75b, 0x75e, 0x761, 0x764, 0x767, 0x76a, + 0x76d, 0x770, 0x773, 0x776, 0x779, 0x77c, 0x77f, 0x782, + + 0x785, 0x788, 0x78b, 0x78e, 0x791, 0x794, 0x797, 0x79a, + 0x79d, 0x7a0, 0x7a3, 0x7a6, 0x7a9, 0x7ac, 0x7af, 0x7b2, + + 0x7b5, 0x7b8, 0x7bb, 0x7be, 0x7c1, 0x7c4, 0x7c7, 0x7ca, + 0x7cd, 0x7d0, 0x7d3, 0x7d6, 0x7d9, 0x7dc, 0x7df, 0x7e2, + + 0x7e5, 0x7e8, 0x7eb, 0x7ee, 0x7f1, 0x7f4, 0x7f7, 0x7fa, + 0x7fd, 0x800, 0x803, 0x806, 0x809, 0x80c, 0x80f, 0x812, + + 0x815, 0x818, 0x81b, 0x81e, 0x821, 0x824, 0x827, 0x82a, + 0x82d, 0x830, 0x833, 0x836, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x839, 0x83c, 0x83f, 0x842, 0x845, 0x848, 0x84b, 0x84e, + 0x851, 0x854, 0x857, 0x85a, 0x85d, 0x860, 0x863, 0x866, + + 0x869, 0x86c, 0x86f, 0x872, 0x875, 0x878, 0x87b, 0x87e, + 0x881, 0x884, 0x887, 0x88a, 0x88d, 0x890, 0x893, 0x896, + + 0x899, 0x89c, 0x89f, 0x8a2, 0x8a5, 0x8a8, 0x8ab, 0x8ae, + 0x8b1, 0x8b4, 0x8b7, 0x8ba, 0x8bd, 0x8c0, 0x8c3, 0x8c6, + + 0x8c9, 0x8cc, 0x8cf, 0x8d2, 0x8d5, 0x8d8, 0x8db, 0x8de, + 0x8e1, 0x8e4, 0x8e7, 0x8ea, 0x8ed, 0x8f0, 0x8f3, 0x8f6, + + 0x8f9, 0x8fc, 0x8ff, 0x902, 0x905, 0x908, 0x90b, 0x90e, + 0x911, 0x914, 0x917, 0x91a, 0x91d, 0x920, 0x923, 0x926, + + 0x929, 0x92c, 0x92f, 0x932, 0x935, 0x938, 0x93b, 0x93e, + 0x941, 0x944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x947, 0x94a, 0x94d, 0x950, 0x953, 0x956, 0x959, 0x95c, + 0x95f, 0x962, 0x965, 0x968, 0x96b, 0x96e, 0x971, 0x974, + + 0x977, 0x97a, 0x97d, 0x980, 0x983, 0x986, 0xffff, 0xffff, + 0x989, 0x98c, 0x98f, 0x992, 0x995, 0x998, 0xffff, 0xffff, + + 0x99b, 0x99e, 0x9a1, 0x9a4, 0x9a7, 0x9aa, 0x9ad, 0x9b0, + 0x9b3, 0x9b6, 0x9b9, 0x9bc, 0x9bf, 0x9c2, 0x9c5, 0x9c8, + + 0x9cb, 0x9ce, 0x9d1, 0x9d4, 0x9d7, 0x9da, 0x9dd, 0x9e0, + 0x9e3, 0x9e6, 0x9e9, 0x9ec, 0x9ef, 0x9f2, 0x9f5, 0x9f8, + + 0x9fb, 0x9fe, 0xa01, 0xa04, 0xa07, 0xa0a, 0xffff, 0xffff, + 0xa0d, 0xa10, 0xa13, 0xa16, 0xa19, 0xa1c, 0xffff, 0xffff, + + 0xa1f, 0xa22, 0xa25, 0xa28, 0xa2b, 0xa2e, 0xa31, 0xa34, + 0xffff, 0xa37, 0xffff, 0xa3a, 0xffff, 0xa3d, 0xffff, 0xa40, + + 0xa43, 0xa46, 0xa49, 0xa4c, 0xa4f, 0xa52, 0xa55, 0xa58, + 0xa5b, 0xa5e, 0xa61, 0xa64, 0xa67, 0xa6a, 0xa6d, 0xa70, + + 0xa73, 0xa76, 0xa78, 0xa7b, 0xa7d, 0xa80, 0xa82, 0xa85, + 0xa87, 0xa8a, 0xa8c, 0xa8f, 0xa91, 0xa94, 0xffff, 0xffff, + + 0xa96, 0xa99, 0xa9c, 0xa9f, 0xaa2, 0xaa5, 0xaa8, 0xaab, + 0xaae, 0xab1, 0xab4, 0xab7, 0xaba, 0xabd, 0xac0, 0xac3, + + 0xac6, 0xac9, 0xacc, 0xacf, 0xad2, 0xad5, 0xad8, 0xadb, + 0xade, 0xae1, 0xae4, 0xae7, 0xaea, 0xaed, 0xaf0, 0xaf3, + + 0xaf6, 0xaf9, 0xafc, 0xaff, 0xb02, 0xb05, 0xb08, 0xb0b, + 0xb0e, 0xb11, 0xb14, 0xb17, 0xb1a, 0xb1d, 0xb20, 0xb23, + + 0xb26, 0xb29, 0xb2c, 0xb2f, 0xb32, 0xffff, 0xb35, 0xb38, + 0xb3b, 0xb3e, 0xb41, 0xb44, 0xb46, 0xb49, 0xb4c, 0xb4e, + + 0xb51, 0xb54, 0xb57, 0xb5a, 0xb5d, 0xffff, 0xb60, 0xb63, + 0xb66, 0xb69, 0xb6b, 0xb6e, 0xb70, 0xb73, 0xb76, 0xb79, + + 0xb7c, 0xb7f, 0xb82, 0xb85, 0xffff, 0xffff, 0xb87, 0xb8a, + 0xb8d, 0xb90, 0xb93, 0xb96, 0xffff, 0xb98, 0xb9b, 0xb9e, + + 0xba1, 0xba4, 0xba7, 0xbaa, 0xbac, 0xbaf, 0xbb2, 0xbb5, + 0xbb8, 0xbbb, 0xbbe, 0xbc1, 0xbc3, 0xbc6, 0xbc9, 0xbcb, + + 0xffff, 0xffff, 0xbcd, 0xbd0, 0xbd3, 0xffff, 0xbd6, 0xbd9, + 0xbdc, 0xbdf, 0xbe1, 0xbe4, 0xbe6, 0xbe9, 0xbeb, 0xffff, + + 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, + 0xbfe, 0xc00, 0xc02, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xc04, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc06, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xc09, 0xc0b, 0xc0e, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc12, + + 0xffff, 0xffff, 0xffff, 0xc14, 0xc17, 0xffff, 0xc1b, 0xc1e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xc22, 0xffff, 0xc25, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc28, + 0xc2b, 0xc2e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc31, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc36, + + 0xc38, 0xc3a, 0xffff, 0xffff, 0xc3c, 0xc3e, 0xc40, 0xc42, + 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, + + 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, + 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xffff, + + 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, + 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xc8c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xc8f, 0xc93, 0xc97, 0xc99, 0xffff, 0xc9c, 0xca0, 0xca4, + 0xffff, 0xca6, 0xca9, 0xcab, 0xcad, 0xcaf, 0xcb1, 0xcb3, + + 0xcb5, 0xcb7, 0xcb9, 0xcbb, 0xffff, 0xcbd, 0xcbf, 0xffff, + 0xffff, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xffff, 0xffff, + + 0xccc, 0xccf, 0xcd3, 0xffff, 0xcd6, 0xffff, 0xcd8, 0xffff, + 0xcda, 0xffff, 0xcdc, 0xcde, 0xce0, 0xce2, 0xffff, 0xce4, + + 0xce6, 0xce8, 0xffff, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, + 0xcf4, 0xcf6, 0xffff, 0xcf8, 0xcfc, 0xcfe, 0xd00, 0xd02, + + 0xd04, 0xffff, 0xffff, 0xffff, 0xffff, 0xd06, 0xd08, 0xd0a, + 0xd0c, 0xd0e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xd10, 0xd14, 0xd18, 0xd1d, 0xd21, 0xd25, 0xd29, 0xd2d, + 0xd31, 0xd35, 0xd39, 0xd3d, 0xd41, 0xd45, 0xd49, 0xd4d, + + 0xd50, 0xd52, 0xd55, 0xd59, 0xd5c, 0xd5e, 0xd61, 0xd65, + 0xd6a, 0xd6d, 0xd6f, 0xd72, 0xd76, 0xd78, 0xd7a, 0xd7c, + + 0xd7e, 0xd80, 0xd83, 0xd87, 0xd8a, 0xd8c, 0xd8f, 0xd93, + 0xd98, 0xd9b, 0xd9d, 0xda0, 0xda4, 0xda6, 0xda8, 0xdaa, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xdac, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xdb0, 0xdb3, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb6, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb9, 0xdbc, 0xdbf, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xdc2, 0xffff, 0xffff, 0xffff, + 0xffff, 0xdc5, 0xffff, 0xffff, 0xdc8, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xdcb, 0xffff, 0xdce, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xdd1, 0xdd4, 0xffff, 0xdd8, + + 0xddb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xddf, 0xffff, 0xffff, 0xde2, 0xffff, 0xffff, 0xde5, + 0xffff, 0xde8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xdeb, 0xffff, 0xdee, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdf1, 0xdf4, 0xdf7, + + 0xdfa, 0xdfd, 0xffff, 0xffff, 0xe00, 0xe03, 0xffff, 0xffff, + 0xe06, 0xe09, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xe0c, 0xe0f, 0xffff, 0xffff, 0xe12, 0xe15, 0xffff, 0xffff, + 0xe18, 0xe1b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xe1e, 0xe21, 0xe24, 0xe27, + + 0xe2a, 0xe2d, 0xe30, 0xe33, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xe36, 0xe39, 0xe3c, 0xe3f, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xe42, 0xe44, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, + 0xe56, 0xe58, 0xe5b, 0xe5e, 0xe61, 0xe64, 0xe67, 0xe6a, + + 0xe6d, 0xe70, 0xe73, 0xe76, 0xe79, 0xe7d, 0xe81, 0xe85, + 0xe89, 0xe8d, 0xe91, 0xe95, 0xe99, 0xe9d, 0xea2, 0xea7, + + 0xeac, 0xeb1, 0xeb6, 0xebb, 0xec0, 0xec5, 0xeca, 0xecf, + 0xed4, 0xed7, 0xeda, 0xedd, 0xee0, 0xee3, 0xee6, 0xee9, + + 0xeec, 0xeef, 0xef3, 0xef7, 0xefb, 0xeff, 0xf03, 0xf07, + 0xf0b, 0xf0f, 0xf13, 0xf17, 0xf1b, 0xf1f, 0xf23, 0xf27, + + 0xf2b, 0xf2f, 0xf33, 0xf37, 0xf3b, 0xf3f, 0xf43, 0xf47, + 0xf4b, 0xf4f, 0xf53, 0xf57, 0xf5b, 0xf5f, 0xf63, 0xf67, + + 0xf6b, 0xf6f, 0xf73, 0xf77, 0xf7b, 0xf7f, 0xf83, 0xf85, + 0xf87, 0xf89, 0xf8b, 0xf8d, 0xf8f, 0xf91, 0xf93, 0xf95, + + 0xf97, 0xf99, 0xf9b, 0xf9d, 0xf9f, 0xfa1, 0xfa3, 0xfa5, + 0xfa7, 0xfa9, 0xfab, 0xfad, 0xfaf, 0xfb1, 0xfb3, 0xfb5, + + 0xfb7, 0xfb9, 0xfbb, 0xfbd, 0xfbf, 0xfc1, 0xfc3, 0xfc5, + 0xfc7, 0xfc9, 0xfcb, 0xfcd, 0xfcf, 0xfd1, 0xfd3, 0xfd5, + + 0xfd7, 0xfd9, 0xfdb, 0xfdd, 0xfdf, 0xfe1, 0xfe3, 0xfe5, + 0xfe7, 0xfe9, 0xfeb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xfed, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xff2, 0xff6, 0xff9, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffd, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1000, 0x1002, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1004, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1006, + + 0xffff, 0xffff, 0xffff, 0x1008, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x100a, 0x100c, 0x100e, 0x1010, 0x1012, 0x1014, 0x1016, 0x1018, + 0x101a, 0x101c, 0x101e, 0x1020, 0x1022, 0x1024, 0x1026, 0x1028, + + 0x102a, 0x102c, 0x102e, 0x1030, 0x1032, 0x1034, 0x1036, 0x1038, + 0x103a, 0x103c, 0x103e, 0x1040, 0x1042, 0x1044, 0x1046, 0x1048, + + 0x104a, 0x104c, 0x104e, 0x1050, 0x1052, 0x1054, 0x1056, 0x1058, + 0x105a, 0x105c, 0x105e, 0x1060, 0x1062, 0x1064, 0x1066, 0x1068, + + 0x106a, 0x106c, 0x106e, 0x1070, 0x1072, 0x1074, 0x1076, 0x1078, + 0x107a, 0x107c, 0x107e, 0x1080, 0x1082, 0x1084, 0x1086, 0x1088, + + 0x108a, 0x108c, 0x108e, 0x1090, 0x1092, 0x1094, 0x1096, 0x1098, + 0x109a, 0x109c, 0x109e, 0x10a0, 0x10a2, 0x10a4, 0x10a6, 0x10a8, + + 0x10aa, 0x10ac, 0x10ae, 0x10b0, 0x10b2, 0x10b4, 0x10b6, 0x10b8, + 0x10ba, 0x10bc, 0x10be, 0x10c0, 0x10c2, 0x10c4, 0x10c6, 0x10c8, + + 0x10ca, 0x10cc, 0x10ce, 0x10d0, 0x10d2, 0x10d4, 0x10d6, 0x10d8, + 0x10da, 0x10dc, 0x10de, 0x10e0, 0x10e2, 0x10e4, 0x10e6, 0x10e8, + + 0x10ea, 0x10ec, 0x10ee, 0x10f0, 0x10f2, 0x10f4, 0x10f6, 0x10f8, + 0x10fa, 0x10fc, 0x10fe, 0x1100, 0x1102, 0x1104, 0x1106, 0x1108, + + 0x110a, 0x110c, 0x110e, 0x1110, 0x1112, 0x1114, 0x1116, 0x1118, + 0x111a, 0x111c, 0x111e, 0x1120, 0x1122, 0x1124, 0x1126, 0x1128, + + 0x112a, 0x112c, 0x112e, 0x1130, 0x1132, 0x1134, 0x1136, 0x1138, + 0x113a, 0x113c, 0x113e, 0x1140, 0x1142, 0x1144, 0x1146, 0x1148, + + 0x114a, 0x114c, 0x114e, 0x1150, 0x1152, 0x1154, 0x1156, 0x1158, + 0x115a, 0x115c, 0x115e, 0x1160, 0x1162, 0x1164, 0x1166, 0x1168, + + 0x116a, 0x116c, 0x116e, 0x1170, 0x1172, 0x1174, 0x1176, 0x1178, + 0x117a, 0x117c, 0x117e, 0x1180, 0x1182, 0x1184, 0x1186, 0x1188, + + 0x118a, 0x118c, 0x118e, 0x1190, 0x1192, 0x1194, 0x1196, 0x1198, + 0x119a, 0x119c, 0x119e, 0x11a0, 0x11a2, 0x11a4, 0x11a6, 0x11a8, + + 0x11aa, 0x11ac, 0x11ae, 0x11b0, 0x11b2, 0x11b4, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x11b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x11b8, 0xffff, + 0x11ba, 0x11bc, 0x11be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11c0, 0xffff, 0x11c3, 0xffff, + + 0x11c6, 0xffff, 0x11c9, 0xffff, 0x11cc, 0xffff, 0x11cf, 0xffff, + 0x11d2, 0xffff, 0x11d5, 0xffff, 0x11d8, 0xffff, 0x11db, 0xffff, + + 0x11de, 0xffff, 0x11e1, 0xffff, 0xffff, 0x11e4, 0xffff, 0x11e7, + 0xffff, 0x11ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x11ed, 0x11f0, 0xffff, 0x11f3, 0x11f6, 0xffff, 0x11f9, 0x11fc, + 0xffff, 0x11ff, 0x1202, 0xffff, 0x1205, 0x1208, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x120b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x120e, 0x1211, 0xffff, 0x1214, 0x1217, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x121a, 0xffff, 0x121d, 0xffff, + + 0x1220, 0xffff, 0x1223, 0xffff, 0x1226, 0xffff, 0x1229, 0xffff, + 0x122c, 0xffff, 0x122f, 0xffff, 0x1232, 0xffff, 0x1235, 0xffff, + + 0x1238, 0xffff, 0x123b, 0xffff, 0xffff, 0x123e, 0xffff, 0x1241, + 0xffff, 0x1244, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1247, 0x124a, 0xffff, 0x124d, 0x1250, 0xffff, 0x1253, 0x1256, + 0xffff, 0x1259, 0x125c, 0xffff, 0x125f, 0x1262, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x1265, 0xffff, 0xffff, 0x1268, + 0x126b, 0x126e, 0x1271, 0xffff, 0xffff, 0xffff, 0x1274, 0x1277, + + 0xffff, 0x127a, 0x127c, 0x127e, 0x1280, 0x1282, 0x1284, 0x1286, + 0x1288, 0x128a, 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1296, + + 0x1298, 0x129a, 0x129c, 0x129e, 0x12a0, 0x12a2, 0x12a4, 0x12a6, + 0x12a8, 0x12aa, 0x12ac, 0x12ae, 0x12b0, 0x12b2, 0x12b4, 0x12b6, + + 0x12b8, 0x12ba, 0x12bc, 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, + 0x12c8, 0x12ca, 0x12cc, 0x12ce, 0x12d0, 0x12d2, 0x12d4, 0x12d6, + + 0x12d8, 0x12da, 0x12dc, 0x12de, 0x12e0, 0x12e2, 0x12e4, 0x12e6, + 0x12e8, 0x12ea, 0x12ec, 0x12ee, 0x12f0, 0x12f2, 0x12f4, 0x12f6, + + 0x12f8, 0x12fa, 0x12fc, 0x12fe, 0x1300, 0x1302, 0x1304, 0x1306, + 0x1308, 0x130a, 0x130c, 0x130e, 0x1310, 0x1312, 0x1314, 0x1316, + + 0x1318, 0x131a, 0x131c, 0x131e, 0x1320, 0x1322, 0x1324, 0x1326, + 0x1328, 0x132a, 0x132c, 0x132e, 0x1330, 0x1332, 0x1334, 0xffff, + + 0xffff, 0xffff, 0x1336, 0x1338, 0x133a, 0x133c, 0x133e, 0x1340, + 0x1342, 0x1344, 0x1346, 0x1348, 0x134a, 0x134c, 0x134e, 0x1350, + + 0x1352, 0x1356, 0x135a, 0x135e, 0x1362, 0x1366, 0x136a, 0x136e, + 0x1372, 0x1376, 0x137a, 0x137e, 0x1382, 0x1386, 0x138a, 0x138f, + + 0x1394, 0x1399, 0x139e, 0x13a3, 0x13a8, 0x13ad, 0x13b2, 0x13b7, + 0x13bc, 0x13c1, 0x13c6, 0x13cb, 0x13d0, 0x13d5, 0x13dd, 0xffff, + + 0x13e4, 0x13e8, 0x13ec, 0x13f0, 0x13f4, 0x13f8, 0x13fc, 0x1400, + 0x1404, 0x1408, 0x140c, 0x1410, 0x1414, 0x1418, 0x141c, 0x1420, + + 0x1424, 0x1428, 0x142c, 0x1430, 0x1434, 0x1438, 0x143c, 0x1440, + 0x1444, 0x1448, 0x144c, 0x1450, 0x1454, 0x1458, 0x145c, 0x1460, + + 0x1464, 0x1468, 0x146c, 0x1470, 0x1474, 0x1476, 0x1478, 0x147a, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x147c, 0x1480, 0x1483, 0x1486, 0x1489, 0x148c, 0x148f, 0x1492, + 0x1495, 0x1498, 0x149b, 0x149e, 0x14a1, 0x14a4, 0x14a7, 0x14aa, + + 0x14ad, 0x14af, 0x14b1, 0x14b3, 0x14b5, 0x14b7, 0x14b9, 0x14bb, + 0x14bd, 0x14bf, 0x14c1, 0x14c3, 0x14c5, 0x14c7, 0x14c9, 0x14cc, + + 0x14cf, 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, + 0x14e7, 0x14ea, 0x14ed, 0x14f0, 0x14f3, 0x14f9, 0x14fe, 0xffff, + + 0x1501, 0x1503, 0x1505, 0x1507, 0x1509, 0x150b, 0x150d, 0x150f, + 0x1511, 0x1513, 0x1515, 0x1517, 0x1519, 0x151b, 0x151d, 0x151f, + + 0x1521, 0x1523, 0x1525, 0x1527, 0x1529, 0x152b, 0x152d, 0x152f, + 0x1531, 0x1533, 0x1535, 0x1537, 0x1539, 0x153b, 0x153d, 0x153f, + + 0x1541, 0x1543, 0x1545, 0x1547, 0x1549, 0x154b, 0x154d, 0x154f, + 0x1551, 0x1553, 0x1555, 0x1557, 0x1559, 0x155b, 0x155d, 0x155f, + + 0x1561, 0x1563, 0x1566, 0x1569, 0x156c, 0x156f, 0x1572, 0x1575, + 0x1578, 0x157b, 0x157e, 0x1581, 0x1584, 0x1587, 0x158a, 0x158d, + + 0x1590, 0x1593, 0x1596, 0x1599, 0x159c, 0x159f, 0x15a2, 0x15a5, + 0x15a8, 0x15ab, 0x15af, 0x15b3, 0x15b7, 0x15ba, 0x15be, 0x15c1, + + 0x15c5, 0x15c7, 0x15c9, 0x15cb, 0x15cd, 0x15cf, 0x15d1, 0x15d3, + 0x15d5, 0x15d7, 0x15d9, 0x15db, 0x15dd, 0x15df, 0x15e1, 0x15e3, + + 0x15e5, 0x15e7, 0x15e9, 0x15eb, 0x15ed, 0x15ef, 0x15f1, 0x15f3, + 0x15f5, 0x15f7, 0x15f9, 0x15fb, 0x15fd, 0x15ff, 0x1601, 0x1603, + + 0x1605, 0x1607, 0x1609, 0x160b, 0x160d, 0x160f, 0x1611, 0x1613, + 0x1615, 0x1617, 0x1619, 0x161b, 0x161d, 0x161f, 0x1621, 0xffff, + + 0x1623, 0x1628, 0x162d, 0x1632, 0x1636, 0x163b, 0x163f, 0x1643, + 0x1649, 0x164e, 0x1652, 0x1656, 0x165a, 0x165f, 0x1664, 0x1668, + + 0x166c, 0x166f, 0x1673, 0x1678, 0x167d, 0x1680, 0x1686, 0x168d, + 0x1693, 0x1697, 0x169d, 0x16a3, 0x16a8, 0x16ac, 0x16b0, 0x16b4, + + 0x16b9, 0x16bf, 0x16c4, 0x16c8, 0x16cc, 0x16d0, 0x16d3, 0x16d6, + 0x16d9, 0x16dc, 0x16e0, 0x16e4, 0x16ea, 0x16ee, 0x16f3, 0x16f9, + + 0x16fd, 0x1700, 0x1703, 0x1709, 0x170e, 0x1714, 0x1718, 0x171e, + 0x1721, 0x1725, 0x1729, 0x172d, 0x1731, 0x1735, 0x173a, 0x173e, + + 0x1741, 0x1745, 0x1749, 0x174d, 0x1752, 0x1756, 0x175a, 0x175e, + 0x1764, 0x1769, 0x176c, 0x1772, 0x1775, 0x177a, 0x177f, 0x1783, + + 0x1787, 0x178b, 0x1790, 0x1793, 0x1797, 0x179c, 0x179f, 0x17a5, + 0x17a9, 0x17ac, 0x17af, 0x17b2, 0x17b5, 0x17b8, 0x17bb, 0x17be, + + 0x17c1, 0x17c4, 0x17c7, 0x17cb, 0x17cf, 0x17d3, 0x17d7, 0x17db, + 0x17df, 0x17e3, 0x17e7, 0x17eb, 0x17ef, 0x17f3, 0x17f7, 0x17fb, + + 0x17ff, 0x1803, 0x1807, 0x180a, 0x180d, 0x1811, 0x1814, 0x1817, + 0x181a, 0x181e, 0x1822, 0x1825, 0x1828, 0x182b, 0x182e, 0x1831, + + 0x1836, 0x1839, 0x183c, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, + 0x184e, 0x1852, 0x1857, 0x185a, 0x185d, 0x1860, 0x1863, 0x1866, + + 0x1869, 0x186c, 0x1870, 0x1874, 0x1878, 0x187c, 0x187f, 0x1882, + 0x1885, 0x1888, 0x188b, 0x188e, 0x1891, 0x1894, 0x1897, 0x189a, + + 0x189e, 0x18a2, 0x18a5, 0x18a9, 0x18ad, 0x18b1, 0x18b4, 0x18b8, + 0x18bc, 0x18c1, 0x18c4, 0x18c8, 0x18cc, 0x18d0, 0x18d4, 0x18da, + + 0x18e1, 0x18e4, 0x18e7, 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, + 0x18f9, 0x18fc, 0x18ff, 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, + + 0x1911, 0x1914, 0x1917, 0x191c, 0x191f, 0x1922, 0x1925, 0x192a, + 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, 0x1940, 0x1943, + + 0x1946, 0x1949, 0x194c, 0x1950, 0x1953, 0x1956, 0x195a, 0x195e, + 0x1961, 0x1966, 0x196a, 0x196d, 0x1970, 0x1973, 0x1976, 0x197a, + + 0x197e, 0x1981, 0x1984, 0x1987, 0x198a, 0x198d, 0x1990, 0x1993, + 0x1996, 0x1999, 0x199d, 0x19a1, 0x19a5, 0x19a9, 0x19ad, 0x19b1, + + 0x19b5, 0x19b9, 0x19bd, 0x19c1, 0x19c5, 0x19c9, 0x19cd, 0x19d1, + 0x19d5, 0x19d9, 0x19dd, 0x19e1, 0x19e5, 0x19e9, 0x19ed, 0x19f1, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x19f5, 0x19f7, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19f9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19fb, 0x19fd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x19ff, 0x1a01, 0x1a03, 0x1a05, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1a07, 0x1a09, 0x1a0b, 0x1a0d, 0x1a0f, 0x1a11, 0x1a13, 0x1a15, + 0x1a17, 0x1a19, 0x1a1b, 0x1a1d, 0x1a1f, 0x1a21, 0x1a23, 0x1a25, + 0x1a27, 0x1a29, 0x1a2b, 0x1a2d, 0x1a2f, 0x1a31, 0x1a33, 0x1a35, + 0x1a37, 0x1a39, 0x1a3b, 0x1a3d, 0x1a3f, 0x1a41, 0x1a43, 0x1a45, + 0x1a47, 0x1a49, 0x1a4b, 0x1a4d, 0x1a4f, 0x1a51, 0x1a53, 0x1a55, + 0x1a57, 0x1a59, 0x1a5b, 0x1a5d, 0x1a5f, 0x1a61, 0x1a63, 0x1a65, + 0x1a67, 0x1a69, 0x1a6b, 0x1a6d, 0x1a6f, 0x1a71, 0x1a73, 0x1a75, + 0x1a77, 0x1a79, 0x1a7b, 0x1a7d, 0x1a7f, 0x1a81, 0x1a83, 0x1a85, + 0x1a87, 0x1a89, 0x1a8b, 0x1a8d, 0x1a8f, 0x1a91, 0x1a93, 0x1a95, + 0x1a97, 0x1a99, 0x1a9b, 0x1a9d, 0x1a9f, 0x1aa1, 0x1aa3, 0x1aa5, + 0x1aa7, 0x1aa9, 0x1aab, 0x1aad, 0x1aaf, 0x1ab1, 0x1ab3, 0x1ab5, + 0x1ab7, 0x1ab9, 0x1abb, 0x1abd, 0x1abf, 0x1ac1, 0x1ac3, 0x1ac5, + 0x1ac7, 0x1ac9, 0x1acb, 0x1acd, 0x1acf, 0x1ad1, 0x1ad3, 0x1ad5, + 0x1ad7, 0x1ad9, 0x1adb, 0x1add, 0x1adf, 0x1ae1, 0x1ae3, 0x1ae5, + 0x1ae7, 0x1ae9, 0x1aeb, 0x1aed, 0x1aef, 0x1af1, 0x1af3, 0x1af5, + 0x1af7, 0x1af9, 0x1afb, 0x1afd, 0x1aff, 0x1b01, 0x1b03, 0x1b05, + 0x1b07, 0x1b09, 0x1b0b, 0x1b0d, 0x1b0f, 0x1b11, 0x1b13, 0x1b15, + 0x1b17, 0x1b19, 0x1b1b, 0x1b1d, 0x1b1f, 0x1b21, 0x1b23, 0x1b25, + 0x1b27, 0x1b29, 0x1b2b, 0x1b2d, 0x1b2f, 0x1b31, 0x1b33, 0x1b35, + 0x1b37, 0x1b39, 0x1b3b, 0x1b3d, 0x1b3f, 0x1b41, 0x1b43, 0x1b45, + 0x1b47, 0x1b49, 0x1b4b, 0x1b4d, 0x1b4f, 0x1b51, 0x1b53, 0x1b55, + 0x1b57, 0x1b59, 0x1b5b, 0x1b5d, 0x1b5f, 0x1b61, 0x1b63, 0x1b65, + 0x1b67, 0x1b69, 0x1b6b, 0x1b6d, 0x1b6f, 0x1b71, 0x1b73, 0x1b75, + 0x1b77, 0x1b79, 0x1b7b, 0x1b7d, 0x1b7f, 0x1b81, 0x1b83, 0x1b85, + 0x1b87, 0x1b89, 0x1b8b, 0x1b8d, 0x1b8f, 0x1b91, 0x1b93, 0x1b95, + 0x1b97, 0x1b99, 0x1b9b, 0x1b9d, 0x1b9f, 0x1ba1, 0x1ba3, 0x1ba5, + 0x1ba7, 0x1ba9, 0x1bab, 0x1bad, 0x1baf, 0x1bb1, 0x1bb3, 0x1bb5, + 0x1bb7, 0x1bb9, 0x1bbb, 0x1bbd, 0x1bbf, 0x1bc1, 0x1bc3, 0x1bc5, + 0x1bc7, 0x1bc9, 0x1bcb, 0x1bcd, 0x1bcf, 0x1bd1, 0x1bd3, 0x1bd5, + 0x1bd7, 0x1bd9, 0x1bdb, 0x1bdd, 0x1bdf, 0x1be1, 0x1be3, 0x1be5, + 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3, 0x1bf5, + 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03, 0x1c05, + + 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13, 0x1c15, + 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21, 0xffff, 0xffff, + 0x1c23, 0xffff, 0x1c25, 0xffff, 0xffff, 0x1c27, 0x1c29, 0x1c2b, + 0x1c2d, 0x1c2f, 0x1c31, 0x1c33, 0x1c35, 0x1c37, 0x1c39, 0xffff, + 0x1c3b, 0xffff, 0x1c3d, 0xffff, 0xffff, 0x1c3f, 0x1c41, 0xffff, + 0xffff, 0xffff, 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, + 0x1c4f, 0x1c51, 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, + 0x1c5f, 0x1c61, 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, + 0x1c6f, 0x1c71, 0x1c73, 0x1c75, 0x1c77, 0x1c79, 0x1c7b, 0x1c7d, + 0x1c7f, 0x1c81, 0x1c83, 0x1c85, 0x1c87, 0x1c89, 0x1c8b, 0x1c8d, + 0x1c8f, 0x1c91, 0x1c93, 0x1c95, 0x1c97, 0x1c99, 0x1c9b, 0x1c9d, + 0x1c9f, 0x1ca1, 0x1ca3, 0x1ca5, 0x1ca7, 0x1ca9, 0x1cab, 0x1cad, + 0x1caf, 0x1cb1, 0x1cb3, 0x1cb5, 0x1cb7, 0x1cb9, 0x1cbb, 0x1cbd, + 0x1cbf, 0x1cc1, 0x1cc3, 0x1cc5, 0x1cc7, 0x1cca, 0xffff, 0xffff, + 0x1ccc, 0x1cce, 0x1cd0, 0x1cd2, 0x1cd4, 0x1cd6, 0x1cd8, 0x1cda, + 0x1cdc, 0x1cde, 0x1ce0, 0x1ce2, 0x1ce4, 0x1ce6, 0x1ce8, 0x1cea, + 0x1cec, 0x1cee, 0x1cf0, 0x1cf2, 0x1cf4, 0x1cf6, 0x1cf8, 0x1cfa, + 0x1cfc, 0x1cfe, 0x1d00, 0x1d02, 0x1d04, 0x1d06, 0x1d08, 0x1d0a, + 0x1d0c, 0x1d0e, 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, + 0x1d1c, 0x1d1e, 0x1d20, 0x1d22, 0x1d24, 0x1d26, 0x1d28, 0x1d2a, + 0x1d2c, 0x1d2e, 0x1d30, 0x1d32, 0x1d34, 0x1d36, 0x1d38, 0x1d3a, + 0x1d3c, 0x1d3e, 0x1d40, 0x1d42, 0x1d44, 0x1d46, 0x1d48, 0x1d4a, + 0x1d4c, 0x1d4e, 0x1d50, 0x1d52, 0x1d54, 0x1d56, 0x1d58, 0x1d5a, + 0x1d5c, 0x1d5e, 0x1d60, 0x1d62, 0x1d64, 0x1d66, 0x1d68, 0x1d6a, + 0x1d6c, 0x1d6e, 0x1d70, 0x1d72, 0x1d74, 0x1d76, 0x1d78, 0x1d7a, + 0x1d7c, 0x1d7e, 0x1d80, 0x1d82, 0x1d84, 0x1d86, 0x1d88, 0x1d8a, + 0x1d8d, 0x1d90, 0x1d93, 0x1d95, 0x1d97, 0x1d99, 0x1d9c, 0x1d9f, + 0x1da2, 0x1da4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1da6, 0x1da9, 0x1dac, 0x1daf, 0x1db3, 0x1db7, 0x1dba, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1dbd, 0x1dc0, 0x1dc3, 0x1dc6, 0x1dc9, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dcc, 0xffff, 0x1dcf, + 0x1dd2, 0x1dd4, 0x1dd6, 0x1dd8, 0x1dda, 0x1ddc, 0x1dde, 0x1de0, + 0x1de2, 0x1de4, 0x1de6, 0x1de9, 0x1dec, 0x1def, 0x1df2, 0x1df5, + 0x1df8, 0x1dfb, 0x1dfe, 0x1e01, 0x1e04, 0x1e07, 0x1e0a, 0xffff, + 0x1e0d, 0x1e10, 0x1e13, 0x1e16, 0x1e19, 0xffff, 0x1e1c, 0xffff, + 0x1e1f, 0x1e22, 0xffff, 0x1e25, 0x1e28, 0xffff, 0x1e2b, 0x1e2e, + 0x1e31, 0x1e34, 0x1e37, 0x1e3a, 0x1e3d, 0x1e40, 0x1e43, 0x1e46, + 0x1e49, 0x1e4b, 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, + 0x1e59, 0x1e5b, 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, + 0x1e69, 0x1e6b, 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, + 0x1e79, 0x1e7b, 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, + 0x1e89, 0x1e8b, 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0x1e97, + 0x1e99, 0x1e9b, 0x1e9d, 0x1e9f, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, + 0x1ea9, 0x1eab, 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, + 0x1eb9, 0x1ebb, 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, + 0x1ec9, 0x1ecb, 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, + 0x1ed9, 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, + 0x1ee9, 0x1eeb, 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, + 0x1ef9, 0x1efb, 0x1efd, 0x1eff, 0x1f01, 0x1f03, 0x1f05, 0x1f07, + 0x1f09, 0x1f0b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1f0d, 0x1f0f, 0x1f11, 0x1f13, 0x1f15, + 0x1f17, 0x1f19, 0x1f1b, 0x1f1d, 0x1f1f, 0x1f21, 0x1f23, 0x1f25, + 0x1f27, 0x1f29, 0x1f2b, 0x1f2d, 0x1f2f, 0x1f31, 0x1f33, 0x1f35, + 0x1f37, 0x1f39, 0x1f3b, 0x1f3e, 0x1f41, 0x1f44, 0x1f47, 0x1f4a, + 0x1f4d, 0x1f50, 0x1f53, 0x1f56, 0x1f59, 0x1f5c, 0x1f5f, 0x1f62, + 0x1f65, 0x1f68, 0x1f6b, 0x1f6e, 0x1f71, 0x1f73, 0x1f75, 0x1f77, + + 0x1f79, 0x1f7c, 0x1f7f, 0x1f82, 0x1f85, 0x1f88, 0x1f8b, 0x1f8e, + 0x1f91, 0x1f94, 0x1f97, 0x1f9a, 0x1f9d, 0x1fa0, 0x1fa3, 0x1fa6, + 0x1fa9, 0x1fac, 0x1faf, 0x1fb2, 0x1fb5, 0x1fb8, 0x1fbb, 0x1fbe, + 0x1fc1, 0x1fc4, 0x1fc7, 0x1fca, 0x1fcd, 0x1fd0, 0x1fd3, 0x1fd6, + 0x1fd9, 0x1fdc, 0x1fdf, 0x1fe2, 0x1fe5, 0x1fe8, 0x1feb, 0x1fee, + 0x1ff1, 0x1ff4, 0x1ff7, 0x1ffa, 0x1ffd, 0x2000, 0x2003, 0x2006, + 0x2009, 0x200c, 0x200f, 0x2012, 0x2015, 0x2018, 0x201b, 0x201e, + 0x2021, 0x2024, 0x2027, 0x202a, 0x202d, 0x2030, 0x2033, 0x2036, + 0x2039, 0x203c, 0x203f, 0x2042, 0x2045, 0x2048, 0x204b, 0x204e, + 0x2051, 0x2054, 0x2057, 0x205a, 0x205d, 0x2060, 0x2063, 0x2066, + 0x2069, 0x206c, 0x206f, 0x2072, 0x2075, 0x2078, 0x207b, 0x207e, + 0x2081, 0x2084, 0x2087, 0x208a, 0x208d, 0x2090, 0x2093, 0x2097, + 0x209b, 0x209f, 0x20a3, 0x20a7, 0x20ab, 0x20ae, 0x20b1, 0x20b4, + 0x20b7, 0x20ba, 0x20bd, 0x20c0, 0x20c3, 0x20c6, 0x20c9, 0x20cc, + 0x20cf, 0x20d2, 0x20d5, 0x20d8, 0x20db, 0x20de, 0x20e1, 0x20e4, + 0x20e7, 0x20ea, 0x20ed, 0x20f0, 0x20f3, 0x20f6, 0x20f9, 0x20fc, + 0x20ff, 0x2102, 0x2105, 0x2108, 0x210b, 0x210e, 0x2111, 0x2114, + 0x2117, 0x211a, 0x211d, 0x2120, 0x2123, 0x2126, 0x2129, 0x212c, + 0x212f, 0x2132, 0x2135, 0x2138, 0x213b, 0x213e, 0x2141, 0x2144, + 0x2147, 0x214a, 0x214d, 0x2150, 0x2153, 0x2156, 0x2159, 0x215c, + 0x215f, 0x2162, 0x2165, 0x2168, 0x216b, 0x216e, 0x2171, 0x2174, + 0x2177, 0x217a, 0x217d, 0x2180, 0x2183, 0x2186, 0x2189, 0x218c, + 0x218f, 0x2192, 0x2195, 0x2198, 0x219b, 0x219e, 0x21a1, 0x21a4, + 0x21a7, 0x21aa, 0x21ad, 0x21b0, 0x21b3, 0x21b6, 0x21b9, 0x21bc, + 0x21bf, 0x21c2, 0x21c5, 0x21c8, 0x21cb, 0x21ce, 0x21d1, 0x21d4, + 0x21d7, 0x21da, 0x21dd, 0x21e0, 0x21e3, 0x21e6, 0x21e9, 0x21ec, + 0x21ef, 0x21f2, 0x21f5, 0x21f8, 0x21fb, 0x21fe, 0x2201, 0x2204, + 0x2207, 0x220a, 0x220d, 0x2210, 0x2213, 0x2216, 0x2219, 0x221c, + 0x221f, 0x2222, 0x2225, 0x2228, 0x222b, 0x222e, 0x2231, 0x2234, + 0x2237, 0x223a, 0x223d, 0x2240, 0x2243, 0x2246, 0x2249, 0x224c, + 0x224f, 0x2252, 0x2255, 0x2259, 0x225d, 0x2261, 0x2264, 0x2267, + 0x226a, 0x226d, 0x2270, 0x2273, 0x2276, 0x2279, 0x227c, 0x227f, + + 0x2282, 0x2285, 0x2288, 0x228b, 0x228e, 0x2291, 0x2294, 0x2297, + 0x229a, 0x229d, 0x22a0, 0x22a3, 0x22a6, 0x22a9, 0x22ac, 0x22af, + 0x22b2, 0x22b5, 0x22b8, 0x22bb, 0x22be, 0x22c1, 0x22c4, 0x22c7, + 0x22ca, 0x22cd, 0x22d0, 0x22d3, 0x22d6, 0x22d9, 0x22dc, 0x22df, + 0x22e2, 0x22e5, 0x22e8, 0x22eb, 0x22ee, 0x22f1, 0x22f4, 0x22f7, + 0x22fa, 0x22fd, 0x2300, 0x2303, 0x2306, 0x2309, 0x230c, 0x230f, + 0x2312, 0x2315, 0x2318, 0x231b, 0x231e, 0x2321, 0x2324, 0x2327, + 0x232a, 0x232d, 0x2330, 0x2333, 0x2336, 0x2339, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x233c, 0x2340, 0x2344, 0x2348, 0x234c, 0x2350, 0x2354, 0x2358, + 0x235c, 0x2360, 0x2364, 0x2368, 0x236c, 0x2370, 0x2374, 0x2378, + 0x237c, 0x2380, 0x2384, 0x2388, 0x238c, 0x2390, 0x2394, 0x2398, + 0x239c, 0x23a0, 0x23a4, 0x23a8, 0x23ac, 0x23b0, 0x23b4, 0x23b8, + 0x23bc, 0x23c0, 0x23c4, 0x23c8, 0x23cc, 0x23d0, 0x23d4, 0x23d8, + 0x23dc, 0x23e0, 0x23e4, 0x23e8, 0x23ec, 0x23f0, 0x23f4, 0x23f8, + 0x23fc, 0x2400, 0x2404, 0x2408, 0x240c, 0x2410, 0x2414, 0x2418, + 0x241c, 0x2420, 0x2424, 0x2428, 0x242c, 0x2430, 0x2434, 0x2438, + 0xffff, 0xffff, 0x243c, 0x2440, 0x2444, 0x2448, 0x244c, 0x2450, + 0x2454, 0x2458, 0x245c, 0x2460, 0x2464, 0x2468, 0x246c, 0x2470, + 0x2474, 0x2478, 0x247c, 0x2480, 0x2484, 0x2488, 0x248c, 0x2490, + 0x2494, 0x2498, 0x249c, 0x24a0, 0x24a4, 0x24a8, 0x24ac, 0x24b0, + 0x24b4, 0x24b8, 0x24bc, 0x24c0, 0x24c4, 0x24c8, 0x24cc, 0x24d0, + 0x24d4, 0x24d8, 0x24dc, 0x24e0, 0x24e4, 0x24e8, 0x24ec, 0x24f0, + 0x24f4, 0x24f8, 0x24fc, 0x2500, 0x2504, 0x2508, 0x250c, 0x2510, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2514, 0x2518, 0x251c, 0x2521, 0x2526, 0x252b, 0x2530, 0x2535, + 0x253a, 0x253f, 0x2543, 0x2556, 0x255f, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2564, 0x2566, 0x2568, 0x256a, 0x256c, 0x256e, 0x2570, 0x2572, + 0x2574, 0x2576, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2578, 0x257a, 0x257c, 0x257e, 0x2580, 0x2582, 0x2584, 0x2586, + 0x2588, 0x258a, 0x258c, 0x258e, 0x2590, 0x2592, 0x2594, 0x2596, + 0x2598, 0x259a, 0x259c, 0x259e, 0x25a0, 0xffff, 0xffff, 0x25a2, + 0x25a4, 0x25a6, 0x25a8, 0x25aa, 0x25ac, 0x25ae, 0x25b0, 0x25b2, + 0x25b4, 0x25b6, 0x25b8, 0xffff, 0x25ba, 0x25bc, 0x25be, 0x25c0, + 0x25c2, 0x25c4, 0x25c6, 0x25c8, 0x25ca, 0x25cc, 0x25ce, 0x25d0, + 0x25d2, 0x25d4, 0x25d6, 0x25d8, 0x25da, 0x25dc, 0x25de, 0xffff, + 0x25e0, 0x25e2, 0x25e4, 0x25e6, 0xffff, 0xffff, 0xffff, 0xffff, + 0x25e8, 0x25eb, 0x25ee, 0xffff, 0x25f1, 0xffff, 0x25f4, 0x25f7, + 0x25fa, 0x25fd, 0x2600, 0x2603, 0x2606, 0x2609, 0x260c, 0x260f, + 0x2612, 0x2614, 0x2616, 0x2618, 0x261a, 0x261c, 0x261e, 0x2620, + 0x2622, 0x2624, 0x2626, 0x2628, 0x262a, 0x262c, 0x262e, 0x2630, + 0x2632, 0x2634, 0x2636, 0x2638, 0x263a, 0x263c, 0x263e, 0x2640, + 0x2642, 0x2644, 0x2646, 0x2648, 0x264a, 0x264c, 0x264e, 0x2650, + 0x2652, 0x2654, 0x2656, 0x2658, 0x265a, 0x265c, 0x265e, 0x2660, + 0x2662, 0x2664, 0x2666, 0x2668, 0x266a, 0x266c, 0x266e, 0x2670, + 0x2672, 0x2674, 0x2676, 0x2678, 0x267a, 0x267c, 0x267e, 0x2680, + 0x2682, 0x2684, 0x2686, 0x2688, 0x268a, 0x268c, 0x268e, 0x2690, + 0x2692, 0x2694, 0x2696, 0x2698, 0x269a, 0x269c, 0x269e, 0x26a0, + 0x26a2, 0x26a4, 0x26a6, 0x26a8, 0x26aa, 0x26ac, 0x26ae, 0x26b0, + 0x26b2, 0x26b4, 0x26b6, 0x26b8, 0x26ba, 0x26bc, 0x26be, 0x26c0, + 0x26c2, 0x26c4, 0x26c6, 0x26c8, 0x26ca, 0x26cc, 0x26ce, 0x26d0, + 0x26d2, 0x26d4, 0x26d6, 0x26d8, 0x26da, 0x26dc, 0x26de, 0x26e0, + 0x26e2, 0x26e4, 0x26e6, 0x26e8, 0x26ea, 0x26ec, 0x26ee, 0x26f0, + 0x26f2, 0x26f4, 0x26f6, 0x26f8, 0x26fa, 0x26fc, 0x26ff, 0x2702, + 0x2705, 0x2708, 0x270b, 0x270e, 0x2711, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x2714, 0x2716, 0x2718, 0x271a, 0x271c, 0x271e, 0x2720, + 0x2722, 0x2724, 0x2726, 0x2728, 0x272a, 0x272c, 0x272e, 0x2730, + 0x2732, 0x2734, 0x2736, 0x2738, 0x273a, 0x273c, 0x273e, 0x2740, + 0x2742, 0x2744, 0x2746, 0x2748, 0x274a, 0x274c, 0x274e, 0x2750, + 0x2752, 0x2754, 0x2756, 0x2758, 0x275a, 0x275c, 0x275e, 0x2760, + 0x2762, 0x2764, 0x2766, 0x2768, 0x276a, 0x276c, 0x276e, 0x2770, + 0x2772, 0x2774, 0x2776, 0x2778, 0x277a, 0x277c, 0x277e, 0x2780, + 0x2782, 0x2784, 0x2786, 0x2788, 0x278a, 0x278c, 0x278e, 0x2790, + 0x2792, 0x2794, 0x2796, 0x2798, 0x279a, 0x279c, 0x279e, 0x27a0, + 0x27a2, 0x27a4, 0x27a6, 0x27a8, 0x27aa, 0x27ac, 0x27ae, 0x27b0, + 0x27b2, 0x27b4, 0x27b6, 0x27b8, 0x27ba, 0x27bc, 0x27be, 0x27c0, + 0x27c2, 0x27c4, 0x27c6, 0x27c8, 0x27ca, 0x27cc, 0x27ce, 0x27d0, + 0x27d2, 0x27d4, 0x27d6, 0x27d8, 0x27da, 0x27dc, 0x27de, 0x27e0, + 0x27e2, 0x27e4, 0x27e6, 0x27e8, 0x27ea, 0x27ec, 0x27ee, 0x27f0, + 0x27f2, 0x27f4, 0x27f6, 0x27f8, 0x27fa, 0x27fc, 0x27fe, 0x2800, + 0x2802, 0x2804, 0x2806, 0x2808, 0x280a, 0x280c, 0x280e, 0x2810, + 0x2812, 0x2814, 0x2816, 0x2818, 0x281a, 0x281c, 0x281e, 0x2820, + 0x2822, 0x2824, 0x2826, 0x2828, 0x282a, 0x282c, 0x282e, 0x2830, + 0x2832, 0x2834, 0x2836, 0x2838, 0x283a, 0x283c, 0x283e, 0x2840, + 0x2842, 0x2844, 0x2846, 0x2848, 0x284a, 0x284c, 0x284e, 0x2850, + 0x2852, 0x2854, 0x2856, 0x2858, 0x285a, 0x285c, 0x285e, 0x2860, + 0x2862, 0x2864, 0x2866, 0x2868, 0x286a, 0x286c, 0x286e, 0x2870, + 0x2872, 0x2874, 0x2876, 0x2878, 0x287a, 0x287c, 0x287e, 0x2880, + 0x2882, 0x2884, 0x2886, 0x2888, 0x288a, 0x288c, 0x288e, 0xffff, + 0xffff, 0xffff, 0x2890, 0x2892, 0x2894, 0x2896, 0x2898, 0x289a, + 0xffff, 0xffff, 0x289c, 0x289e, 0x28a0, 0x28a2, 0x28a4, 0x28a6, + 0xffff, 0xffff, 0x28a8, 0x28aa, 0x28ac, 0x28ae, 0x28b0, 0x28b2, + 0xffff, 0xffff, 0x28b4, 0x28b6, 0x28b8, 0xffff, 0xffff, 0xffff, + 0x28ba, 0x28bc, 0x28be, 0x28c0, 0x28c2, 0x28c4, 0x28c6, 0xffff, + 0x28c8, 0x28ca, 0x28cc, 0x28ce, 0x28d0, 0x28d2, 0x28d4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x28d6, 0xffff, 0x28db, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28e0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28e5, 0x28ea, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28ef, 0x28f4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28f9, 0x28fe, 0xffff, 0x2903, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2908, 0x290d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2912, 0x2917, + 0x291c, 0x2921, 0x2926, 0x292b, 0x2930, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2935, 0x293a, 0x293f, 0x2944, 0x2949, + 0x294e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x2953, 0x2955, 0x2957, 0x2959, 0x295b, 0x295d, 0x295f, 0x2961, + 0x2963, 0x2965, 0x2967, 0x2969, 0x296b, 0x296d, 0x296f, 0x2971, + 0x2973, 0x2975, 0x2977, 0x2979, 0x297b, 0x297d, 0x297f, 0x2981, + 0x2983, 0x2985, 0x2987, 0x2989, 0x298b, 0x298d, 0x298f, 0x2991, + 0x2993, 0x2995, 0x2997, 0x2999, 0x299b, 0x299d, 0x299f, 0x29a1, + 0x29a3, 0x29a5, 0x29a7, 0x29a9, 0x29ab, 0x29ad, 0x29af, 0x29b1, + 0x29b3, 0x29b5, 0x29b7, 0x29b9, 0x29bb, 0x29bd, 0x29bf, 0x29c1, + 0x29c3, 0x29c5, 0x29c7, 0x29c9, 0x29cb, 0x29cd, 0x29cf, 0x29d1, + 0x29d3, 0x29d5, 0x29d7, 0x29d9, 0x29db, 0x29dd, 0x29df, 0x29e1, + 0x29e3, 0x29e5, 0x29e7, 0x29e9, 0x29eb, 0x29ed, 0x29ef, 0x29f1, + 0x29f3, 0x29f5, 0x29f7, 0x29f9, 0x29fb, 0xffff, 0x29fd, 0x29ff, + 0x2a01, 0x2a03, 0x2a05, 0x2a07, 0x2a09, 0x2a0b, 0x2a0d, 0x2a0f, + 0x2a11, 0x2a13, 0x2a15, 0x2a17, 0x2a19, 0x2a1b, 0x2a1d, 0x2a1f, + 0x2a21, 0x2a23, 0x2a25, 0x2a27, 0x2a29, 0x2a2b, 0x2a2d, 0x2a2f, + 0x2a31, 0x2a33, 0x2a35, 0x2a37, 0x2a39, 0x2a3b, 0x2a3d, 0x2a3f, + 0x2a41, 0x2a43, 0x2a45, 0x2a47, 0x2a49, 0x2a4b, 0x2a4d, 0x2a4f, + 0x2a51, 0x2a53, 0x2a55, 0x2a57, 0x2a59, 0x2a5b, 0x2a5d, 0x2a5f, + 0x2a61, 0x2a63, 0x2a65, 0x2a67, 0x2a69, 0x2a6b, 0x2a6d, 0x2a6f, + 0x2a71, 0x2a73, 0x2a75, 0x2a77, 0x2a79, 0x2a7b, 0x2a7d, 0x2a7f, + 0x2a81, 0x2a83, 0x2a85, 0x2a87, 0x2a89, 0xffff, 0x2a8b, 0x2a8d, + 0xffff, 0xffff, 0x2a8f, 0xffff, 0xffff, 0x2a91, 0x2a93, 0xffff, + 0xffff, 0x2a95, 0x2a97, 0x2a99, 0x2a9b, 0xffff, 0x2a9d, 0x2a9f, + 0x2aa1, 0x2aa3, 0x2aa5, 0x2aa7, 0x2aa9, 0x2aab, 0x2aad, 0x2aaf, + 0x2ab1, 0x2ab3, 0xffff, 0x2ab5, 0xffff, 0x2ab7, 0x2ab9, 0x2abb, + 0x2abd, 0x2abf, 0x2ac1, 0x2ac3, 0xffff, 0x2ac5, 0x2ac7, 0x2ac9, + 0x2acb, 0x2acd, 0x2acf, 0x2ad1, 0x2ad3, 0x2ad5, 0x2ad7, 0x2ad9, + 0x2adb, 0x2add, 0x2adf, 0x2ae1, 0x2ae3, 0x2ae5, 0x2ae7, 0x2ae9, + 0x2aeb, 0x2aed, 0x2aef, 0x2af1, 0x2af3, 0x2af5, 0x2af7, 0x2af9, + 0x2afb, 0x2afd, 0x2aff, 0x2b01, 0x2b03, 0x2b05, 0x2b07, 0x2b09, + 0x2b0b, 0x2b0d, 0x2b0f, 0x2b11, 0x2b13, 0x2b15, 0x2b17, 0x2b19, + 0x2b1b, 0x2b1d, 0x2b1f, 0x2b21, 0x2b23, 0x2b25, 0x2b27, 0x2b29, + 0x2b2b, 0x2b2d, 0x2b2f, 0x2b31, 0x2b33, 0x2b35, 0x2b37, 0x2b39, + + 0x2b3b, 0x2b3d, 0x2b3f, 0x2b41, 0x2b43, 0x2b45, 0xffff, 0x2b47, + 0x2b49, 0x2b4b, 0x2b4d, 0xffff, 0xffff, 0x2b4f, 0x2b51, 0x2b53, + 0x2b55, 0x2b57, 0x2b59, 0x2b5b, 0x2b5d, 0xffff, 0x2b5f, 0x2b61, + 0x2b63, 0x2b65, 0x2b67, 0x2b69, 0x2b6b, 0xffff, 0x2b6d, 0x2b6f, + 0x2b71, 0x2b73, 0x2b75, 0x2b77, 0x2b79, 0x2b7b, 0x2b7d, 0x2b7f, + 0x2b81, 0x2b83, 0x2b85, 0x2b87, 0x2b89, 0x2b8b, 0x2b8d, 0x2b8f, + 0x2b91, 0x2b93, 0x2b95, 0x2b97, 0x2b99, 0x2b9b, 0x2b9d, 0x2b9f, + 0x2ba1, 0x2ba3, 0xffff, 0x2ba5, 0x2ba7, 0x2ba9, 0x2bab, 0xffff, + 0x2bad, 0x2baf, 0x2bb1, 0x2bb3, 0x2bb5, 0xffff, 0x2bb7, 0xffff, + 0xffff, 0xffff, 0x2bb9, 0x2bbb, 0x2bbd, 0x2bbf, 0x2bc1, 0x2bc3, + 0x2bc5, 0xffff, 0x2bc7, 0x2bc9, 0x2bcb, 0x2bcd, 0x2bcf, 0x2bd1, + 0x2bd3, 0x2bd5, 0x2bd7, 0x2bd9, 0x2bdb, 0x2bdd, 0x2bdf, 0x2be1, + 0x2be3, 0x2be5, 0x2be7, 0x2be9, 0x2beb, 0x2bed, 0x2bef, 0x2bf1, + 0x2bf3, 0x2bf5, 0x2bf7, 0x2bf9, 0x2bfb, 0x2bfd, 0x2bff, 0x2c01, + 0x2c03, 0x2c05, 0x2c07, 0x2c09, 0x2c0b, 0x2c0d, 0x2c0f, 0x2c11, + 0x2c13, 0x2c15, 0x2c17, 0x2c19, 0x2c1b, 0x2c1d, 0x2c1f, 0x2c21, + 0x2c23, 0x2c25, 0x2c27, 0x2c29, 0x2c2b, 0x2c2d, 0x2c2f, 0x2c31, + 0x2c33, 0x2c35, 0x2c37, 0x2c39, 0x2c3b, 0x2c3d, 0x2c3f, 0x2c41, + 0x2c43, 0x2c45, 0x2c47, 0x2c49, 0x2c4b, 0x2c4d, 0x2c4f, 0x2c51, + 0x2c53, 0x2c55, 0x2c57, 0x2c59, 0x2c5b, 0x2c5d, 0x2c5f, 0x2c61, + 0x2c63, 0x2c65, 0x2c67, 0x2c69, 0x2c6b, 0x2c6d, 0x2c6f, 0x2c71, + 0x2c73, 0x2c75, 0x2c77, 0x2c79, 0x2c7b, 0x2c7d, 0x2c7f, 0x2c81, + 0x2c83, 0x2c85, 0x2c87, 0x2c89, 0x2c8b, 0x2c8d, 0x2c8f, 0x2c91, + 0x2c93, 0x2c95, 0x2c97, 0x2c99, 0x2c9b, 0x2c9d, 0x2c9f, 0x2ca1, + 0x2ca3, 0x2ca5, 0x2ca7, 0x2ca9, 0x2cab, 0x2cad, 0x2caf, 0x2cb1, + 0x2cb3, 0x2cb5, 0x2cb7, 0x2cb9, 0x2cbb, 0x2cbd, 0x2cbf, 0x2cc1, + 0x2cc3, 0x2cc5, 0x2cc7, 0x2cc9, 0x2ccb, 0x2ccd, 0x2ccf, 0x2cd1, + 0x2cd3, 0x2cd5, 0x2cd7, 0x2cd9, 0x2cdb, 0x2cdd, 0x2cdf, 0x2ce1, + 0x2ce3, 0x2ce5, 0x2ce7, 0x2ce9, 0x2ceb, 0x2ced, 0x2cef, 0x2cf1, + 0x2cf3, 0x2cf5, 0x2cf7, 0x2cf9, 0x2cfb, 0x2cfd, 0x2cff, 0x2d01, + 0x2d03, 0x2d05, 0x2d07, 0x2d09, 0x2d0b, 0x2d0d, 0x2d0f, 0x2d11, + 0x2d13, 0x2d15, 0x2d17, 0x2d19, 0x2d1b, 0x2d1d, 0x2d1f, 0x2d21, + + 0x2d23, 0x2d25, 0x2d27, 0x2d29, 0x2d2b, 0x2d2d, 0x2d2f, 0x2d31, + 0x2d33, 0x2d35, 0x2d37, 0x2d39, 0x2d3b, 0x2d3d, 0x2d3f, 0x2d41, + 0x2d43, 0x2d45, 0x2d47, 0x2d49, 0x2d4b, 0x2d4d, 0x2d4f, 0x2d51, + 0x2d53, 0x2d55, 0x2d57, 0x2d59, 0x2d5b, 0x2d5d, 0x2d5f, 0x2d61, + 0x2d63, 0x2d65, 0x2d67, 0x2d69, 0x2d6b, 0x2d6d, 0x2d6f, 0x2d71, + 0x2d73, 0x2d75, 0x2d77, 0x2d79, 0x2d7b, 0x2d7d, 0x2d7f, 0x2d81, + 0x2d83, 0x2d85, 0x2d87, 0x2d89, 0x2d8b, 0x2d8d, 0x2d8f, 0x2d91, + 0x2d93, 0x2d95, 0x2d97, 0x2d99, 0x2d9b, 0x2d9d, 0x2d9f, 0x2da1, + 0x2da3, 0x2da5, 0x2da7, 0x2da9, 0x2dab, 0x2dad, 0x2daf, 0x2db1, + 0x2db3, 0x2db5, 0x2db7, 0x2db9, 0x2dbb, 0x2dbd, 0x2dbf, 0x2dc1, + 0x2dc3, 0x2dc5, 0x2dc7, 0x2dc9, 0x2dcb, 0x2dcd, 0x2dcf, 0x2dd1, + 0x2dd3, 0x2dd5, 0x2dd7, 0x2dd9, 0x2ddb, 0x2ddd, 0x2ddf, 0x2de1, + 0x2de3, 0x2de5, 0x2de7, 0x2de9, 0x2deb, 0x2ded, 0x2def, 0x2df1, + 0x2df3, 0x2df5, 0x2df7, 0x2df9, 0x2dfb, 0x2dfd, 0x2dff, 0x2e01, + 0x2e03, 0x2e05, 0x2e07, 0x2e09, 0x2e0b, 0x2e0d, 0x2e0f, 0x2e11, + 0x2e13, 0x2e15, 0x2e17, 0x2e19, 0x2e1b, 0x2e1d, 0x2e1f, 0x2e21, + 0x2e23, 0x2e25, 0x2e27, 0x2e29, 0x2e2b, 0x2e2d, 0x2e2f, 0x2e31, + 0x2e33, 0x2e35, 0x2e37, 0x2e39, 0x2e3b, 0x2e3d, 0x2e3f, 0x2e41, + 0x2e43, 0x2e45, 0x2e47, 0x2e49, 0x2e4b, 0x2e4d, 0x2e4f, 0x2e51, + 0x2e53, 0x2e55, 0x2e57, 0x2e59, 0x2e5b, 0x2e5d, 0x2e5f, 0x2e61, + 0x2e63, 0x2e65, 0x2e67, 0x2e69, 0x2e6b, 0x2e6d, 0xffff, 0xffff, + 0x2e6f, 0x2e71, 0x2e73, 0x2e75, 0x2e77, 0x2e79, 0x2e7b, 0x2e7d, + 0x2e7f, 0x2e81, 0x2e83, 0x2e85, 0x2e87, 0x2e89, 0x2e8b, 0x2e8d, + 0x2e8f, 0x2e91, 0x2e93, 0x2e95, 0x2e97, 0x2e99, 0x2e9b, 0x2e9d, + 0x2e9f, 0x2ea1, 0x2ea3, 0x2ea5, 0x2ea7, 0x2ea9, 0x2eab, 0x2ead, + 0x2eaf, 0x2eb1, 0x2eb3, 0x2eb5, 0x2eb7, 0x2eb9, 0x2ebb, 0x2ebd, + 0x2ebf, 0x2ec1, 0x2ec3, 0x2ec5, 0x2ec7, 0x2ec9, 0x2ecb, 0x2ecd, + 0x2ecf, 0x2ed1, 0x2ed3, 0x2ed5, 0x2ed7, 0x2ed9, 0x2edb, 0x2edd, + 0x2edf, 0x2ee1, 0x2ee3, 0x2ee5, 0x2ee7, 0x2ee9, 0x2eeb, 0x2eed, + 0x2eef, 0x2ef1, 0x2ef3, 0x2ef5, 0x2ef7, 0x2ef9, 0x2efb, 0x2efd, + 0x2eff, 0x2f01, 0x2f03, 0x2f05, 0x2f07, 0x2f09, 0x2f0b, 0x2f0d, + 0x2f0f, 0x2f11, 0x2f13, 0x2f15, 0x2f17, 0x2f19, 0x2f1b, 0x2f1d, + + 0x2f1f, 0x2f21, 0x2f23, 0x2f25, 0x2f27, 0x2f29, 0x2f2b, 0x2f2d, + 0x2f2f, 0x2f31, 0x2f33, 0x2f35, 0x2f37, 0x2f39, 0x2f3b, 0x2f3d, + 0x2f3f, 0x2f41, 0x2f43, 0x2f45, 0x2f47, 0x2f49, 0x2f4b, 0x2f4d, + 0x2f4f, 0x2f51, 0x2f53, 0x2f55, 0x2f57, 0x2f59, 0x2f5b, 0x2f5d, + 0x2f5f, 0x2f61, 0x2f63, 0x2f65, 0x2f67, 0x2f69, 0x2f6b, 0x2f6d, + 0x2f6f, 0x2f71, 0x2f73, 0x2f75, 0x2f77, 0x2f79, 0x2f7b, 0x2f7d, + 0x2f7f, 0x2f81, 0x2f83, 0x2f85, 0x2f87, 0x2f89, 0x2f8b, 0x2f8d, + 0x2f8f, 0x2f91, 0x2f93, 0x2f95, 0x2f97, 0x2f99, 0x2f9b, 0x2f9d, + 0x2f9f, 0x2fa1, 0x2fa3, 0x2fa5, 0x2fa7, 0x2fa9, 0x2fab, 0x2fad, + 0x2faf, 0x2fb1, 0x2fb3, 0x2fb5, 0x2fb7, 0x2fb9, 0x2fbb, 0x2fbd, + 0x2fbf, 0x2fc1, 0x2fc3, 0x2fc5, 0x2fc7, 0x2fc9, 0x2fcb, 0x2fcd, + 0x2fcf, 0x2fd1, 0x2fd3, 0x2fd5, 0x2fd7, 0x2fd9, 0x2fdb, 0x2fdd, + 0x2fdf, 0x2fe1, 0x2fe3, 0x2fe5, 0x2fe7, 0x2fe9, 0x2feb, 0x2fed, + 0x2fef, 0x2ff1, 0x2ff3, 0x2ff5, 0x2ff7, 0x2ff9, 0x2ffb, 0x2ffd, + 0x2fff, 0x3001, 0x3003, 0x3005, 0x3007, 0x3009, 0x300b, 0x300d, + 0x300f, 0x3011, 0x3013, 0x3015, 0x3017, 0x3019, 0x301b, 0x301d, + 0x301f, 0x3021, 0x3023, 0x3025, 0x3027, 0x3029, 0x302b, 0x302d, + 0x302f, 0x3031, 0x3033, 0x3035, 0x3037, 0x3039, 0x303b, 0x303d, + 0x303f, 0x3041, 0x3043, 0x3045, 0x3047, 0x3049, 0x304b, 0x304d, + 0x304f, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305b, 0x305d, + 0x305f, 0x3061, 0x3063, 0x3065, 0x3067, 0x3069, 0x306b, 0x306d, + 0x306f, 0x3071, 0x3073, 0x3075, 0x3077, 0x3079, 0x307b, 0x307d, + 0x307f, 0x3081, 0x3083, 0x3085, 0x3087, 0x3089, 0x308b, 0x308d, + 0x308f, 0x3091, 0x3093, 0x3095, 0x3097, 0x3099, 0x309b, 0x309d, + 0x309f, 0x30a1, 0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30ab, 0x30ad, + 0x30af, 0x30b1, 0x30b3, 0x30b5, 0xffff, 0xffff, 0x30b7, 0x30b9, + 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c5, 0x30c7, 0x30c9, + 0x30cb, 0x30cd, 0x30cf, 0x30d1, 0x30d3, 0x30d5, 0x30d7, 0x30d9, + 0x30db, 0x30dd, 0x30df, 0x30e1, 0x30e3, 0x30e5, 0x30e7, 0x30e9, + 0x30eb, 0x30ed, 0x30ef, 0x30f1, 0x30f3, 0x30f5, 0x30f7, 0x30f9, + 0x30fb, 0x30fd, 0x30ff, 0x3101, 0x3103, 0x3105, 0x3107, 0x3109, + 0x310b, 0x310d, 0x310f, 0x3111, 0x3113, 0x3115, 0x3117, 0x3119, + + 0x311b, 0x311d, 0x311f, 0x3121, 0xffff, 0x3123, 0x3125, 0x3127, + 0x3129, 0x312b, 0x312d, 0x312f, 0x3131, 0x3133, 0x3135, 0x3137, + 0x3139, 0x313b, 0x313d, 0x313f, 0x3141, 0x3143, 0x3145, 0x3147, + 0x3149, 0x314b, 0x314d, 0x314f, 0x3151, 0x3153, 0x3155, 0x3157, + 0xffff, 0x3159, 0x315b, 0xffff, 0x315d, 0xffff, 0xffff, 0x315f, + 0xffff, 0x3161, 0x3163, 0x3165, 0x3167, 0x3169, 0x316b, 0x316d, + 0x316f, 0x3171, 0x3173, 0xffff, 0x3175, 0x3177, 0x3179, 0x317b, + 0xffff, 0x317d, 0xffff, 0x317f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3181, 0xffff, 0xffff, 0xffff, 0xffff, 0x3183, + 0xffff, 0x3185, 0xffff, 0x3187, 0xffff, 0x3189, 0x318b, 0x318d, + 0xffff, 0x318f, 0x3191, 0xffff, 0x3193, 0xffff, 0xffff, 0x3195, + 0xffff, 0x3197, 0xffff, 0x3199, 0xffff, 0x319b, 0xffff, 0x319d, + 0xffff, 0x319f, 0x31a1, 0xffff, 0x31a3, 0xffff, 0xffff, 0x31a5, + 0x31a7, 0x31a9, 0x31ab, 0xffff, 0x31ad, 0x31af, 0x31b1, 0x31b3, + 0x31b5, 0x31b7, 0x31b9, 0xffff, 0x31bb, 0x31bd, 0x31bf, 0x31c1, + 0xffff, 0x31c3, 0x31c5, 0x31c7, 0x31c9, 0xffff, 0x31cb, 0xffff, + 0x31cd, 0x31cf, 0x31d1, 0x31d3, 0x31d5, 0x31d7, 0x31d9, 0x31db, + 0x31dd, 0x31df, 0xffff, 0x31e1, 0x31e3, 0x31e5, 0x31e7, 0x31e9, + 0x31eb, 0x31ed, 0x31ef, 0x31f1, 0x31f3, 0x31f5, 0x31f7, 0x31f9, + 0x31fb, 0x31fd, 0x31ff, 0x3201, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3203, 0x3205, 0x3207, 0xffff, 0x3209, 0x320b, 0x320d, + 0x320f, 0x3211, 0xffff, 0x3213, 0x3215, 0x3217, 0x3219, 0x321b, + 0x321d, 0x321f, 0x3221, 0x3223, 0x3225, 0x3227, 0x3229, 0x322b, + 0x322d, 0x322f, 0x3231, 0x3233, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3235, 0x3238, 0x323b, 0x323e, 0x3241, 0x3244, 0x3247, 0x324a, + 0x324d, 0x3250, 0x3253, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3256, 0x325a, 0x325e, 0x3262, 0x3266, 0x326a, 0x326e, 0x3272, + 0x3276, 0x327a, 0x327e, 0x3282, 0x3286, 0x328a, 0x328e, 0x3292, + 0x3296, 0x329a, 0x329e, 0x32a2, 0x32a6, 0x32aa, 0x32ae, 0x32b2, + 0x32b6, 0x32ba, 0x32be, 0x32c2, 0x32c4, 0x32c6, 0x32c9, 0xffff, + 0x32cc, 0x32ce, 0x32d0, 0x32d2, 0x32d4, 0x32d6, 0x32d8, 0x32da, + 0x32dc, 0x32de, 0x32e0, 0x32e2, 0x32e4, 0x32e6, 0x32e8, 0x32ea, + 0x32ec, 0x32ee, 0x32f0, 0x32f2, 0x32f4, 0x32f6, 0x32f8, 0x32fa, + 0x32fc, 0x32fe, 0x3300, 0x3303, 0x3306, 0x3309, 0x330c, 0x3310, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3313, 0x3316, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3319, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x331c, 0x331f, 0x3322, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3324, 0x3326, 0x3328, 0x332a, 0x332c, 0x332e, 0x3330, 0x3332, + 0x3334, 0x3336, 0x3338, 0x333a, 0x333c, 0x333e, 0x3340, 0x3342, + 0x3344, 0x3346, 0x3348, 0x334a, 0x334c, 0x334e, 0x3350, 0x3352, + 0x3354, 0x3356, 0x3358, 0x335a, 0x335c, 0x335e, 0x3360, 0x3362, + 0x3364, 0x3366, 0x3368, 0x336a, 0x336c, 0x336e, 0x3370, 0x3372, + 0x3374, 0x3376, 0x3378, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x337a, 0x337e, 0x3382, 0x3386, 0x338a, 0x338e, 0x3392, 0x3396, + 0x339a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x339e, 0x33a0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x33a2, 0x33a4, 0x33a6, 0x33a8, 0x33ab, 0x33ad, 0x33af, 0x33b1, + 0x33b3, 0x33b5, 0x33b7, 0x33b9, 0x33bb, 0x33bd, 0x33c0, 0x33c2, + 0x33c4, 0x33c6, 0x33c8, 0x33cb, 0x33cd, 0x33cf, 0x33d1, 0x33d4, + 0x33d6, 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e1, 0x33e3, 0x33e5, + 0x33e7, 0x33e9, 0x33eb, 0x33ed, 0x33ef, 0x33f1, 0x33f3, 0x33f5, + 0x33f7, 0x33f9, 0x33fb, 0x33fd, 0x33ff, 0x3401, 0x3403, 0x3405, + 0x3407, 0x3409, 0x340b, 0x340d, 0x340f, 0x3412, 0x3414, 0x3416, + 0x3418, 0x341b, 0x341d, 0x341f, 0x3421, 0x3423, 0x3425, 0x3427, + 0x3429, 0x342b, 0x342d, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437, + 0x3439, 0x343b, 0x343d, 0x343f, 0x3441, 0x3443, 0x3445, 0x3447, + 0x3449, 0x344b, 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3457, + 0x3459, 0x345b, 0x345e, 0x3460, 0x3462, 0x3464, 0x3466, 0x3468, + 0x346a, 0x346d, 0x3470, 0x3472, 0x3474, 0x3476, 0x3478, 0x347a, + 0x347c, 0x347e, 0x3480, 0x3482, 0x3484, 0x3487, 0x3489, 0x348b, + 0x348d, 0x348f, 0x3492, 0x3494, 0x3496, 0x3498, 0x349a, 0x349c, + 0x349e, 0x34a0, 0x34a2, 0x34a4, 0x34a7, 0x34a9, 0x34ac, 0x34ae, + 0x34b0, 0x34b2, 0x34b4, 0x34b6, 0x34b8, 0x34ba, 0x34bc, 0x34be, + 0x34c0, 0x34c2, 0x34c5, 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf, + 0x34d2, 0x34d4, 0x34d7, 0x34da, 0x34dc, 0x34de, 0x34e0, 0x34e2, + 0x34e5, 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4, + 0x34f6, 0x34f8, 0x34fa, 0x34fc, 0x34fe, 0x3501, 0x3503, 0x3505, + 0x3507, 0x3509, 0x350b, 0x350d, 0x350f, 0x3511, 0x3513, 0x3515, + 0x3517, 0x3519, 0x351b, 0x351d, 0x351f, 0x3521, 0x3523, 0x3525, + 0x3527, 0x352a, 0x352c, 0x352e, 0x3530, 0x3532, 0x3534, 0x3537, + 0x3539, 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3547, + 0x3549, 0x354b, 0x354d, 0x3550, 0x3552, 0x3554, 0x3556, 0x3558, + 0x355a, 0x355c, 0x355e, 0x3560, 0x3562, 0x3564, 0x3566, 0x3568, + 0x356a, 0x356c, 0x356e, 0x3570, 0x3572, 0x3574, 0x3577, 0x3579, + 0x357b, 0x357d, 0x357f, 0x3581, 0x3584, 0x3586, 0x3588, 0x358a, + 0x358c, 0x358e, 0x3590, 0x3592, 0x3594, 0x3597, 0x3599, 0x359b, + 0x359d, 0x35a0, 0x35a2, 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac, + 0x35af, 0x35b2, 0x35b5, 0x35b7, 0x35ba, 0x35bc, 0x35be, 0x35c0, + + 0x35c2, 0x35c4, 0x35c6, 0x35c8, 0x35ca, 0x35cc, 0x35ce, 0x35d1, + 0x35d3, 0x35d5, 0x35d7, 0x35d9, 0x35db, 0x35dd, 0x35e0, 0x35e2, + 0x35e4, 0x35e7, 0x35ea, 0x35ec, 0x35ee, 0x35f0, 0x35f2, 0x35f4, + 0x35f6, 0x35f8, 0x35fa, 0x35fc, 0x35ff, 0x3601, 0x3604, 0x3606, + 0x3609, 0x360b, 0x360d, 0x360f, 0x3612, 0x3614, 0x3616, 0x3619, + 0x361c, 0x361e, 0x3620, 0x3622, 0x3624, 0x3626, 0x3628, 0x362a, + 0x362c, 0x362e, 0x3630, 0x3632, 0x3634, 0x3636, 0x3639, 0x363b, + 0x363e, 0x3640, 0x3643, 0x3645, 0x3648, 0x364b, 0x364e, 0x3650, + 0x3652, 0x3654, 0x3657, 0x365a, 0x365d, 0x3660, 0x3662, 0x3664, + 0x3666, 0x3668, 0x366a, 0x366c, 0x366e, 0x3670, 0x3673, 0x3675, + 0x3677, 0x3679, 0x367b, 0x367e, 0x3680, 0x3683, 0x3686, 0x3688, + 0x368a, 0x368c, 0x368e, 0x3690, 0x3692, 0x3695, 0x3698, 0x369b, + 0x369d, 0x369f, 0x36a2, 0x36a4, 0x36a6, 0x36a8, 0x36ab, 0x36ad, + 0x36af, 0x36b1, 0x36b3, 0x36b5, 0x36b8, 0x36ba, 0x36bc, 0x36be, + 0x36c0, 0x36c2, 0x36c4, 0x36c7, 0x36ca, 0x36cc, 0x36cf, 0x36d1, + 0x36d4, 0x36d6, 0x36d8, 0x36da, 0x36dd, 0x36e0, 0x36e2, 0x36e5, + 0x36e7, 0x36ea, 0x36ec, 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, + 0x36f9, 0x36fc, 0x36ff, 0x3702, 0x3704, 0x3706, 0x3708, 0x370a, + 0x370c, 0x370e, 0x3710, 0x3712, 0x3714, 0x3716, 0x3718, 0x371a, + 0x371d, 0x371f, 0x3721, 0x3723, 0x3725, 0x3727, 0x3729, 0x372b, + 0x372d, 0x372f, 0x3731, 0x3733, 0x3735, 0x3738, 0x373b, 0x373e, + 0x3740, 0x3742, 0x3744, 0x3746, 0x3749, 0x374b, 0x374e, 0x3750, + 0x3752, 0x3755, 0x3758, 0x375a, 0x375c, 0x375e, 0x3760, 0x3762, + 0x3764, 0x3766, 0x3768, 0x376a, 0x376c, 0x376e, 0x3770, 0x3772, + 0x3774, 0x3776, 0x3778, 0x377a, 0x377c, 0x377e, 0x3781, 0x3783, + 0x3785, 0x3787, 0x3789, 0x378b, 0x378e, 0x3791, 0x3793, 0x3795, + 0x3797, 0x3799, 0x379b, 0x379d, 0x37a0, 0x37a2, 0x37a4, 0x37a6, + 0x37a8, 0x37ab, 0x37ae, 0x37b0, 0x37b2, 0x37b4, 0x37b7, 0x37b9, + 0x37bb, 0x37be, 0x37c1, 0x37c3, 0x37c5, 0x37c7, 0x37ca, 0x37cc, + 0x37ce, 0x37d0, 0x37d2, 0x37d4, 0x37d6, 0x37d8, 0x37db, 0x37dd, + 0x37df, 0x37e1, 0x37e4, 0x37e6, 0x37e8, 0x37ea, 0x37ec, 0x37ef, + 0x37f2, 0x37f4, 0x37f6, 0x37f8, 0x37fb, 0x37fd, 0x3800, 0x3802, + + 0x3804, 0x3806, 0x3809, 0x380b, 0x380d, 0x380f, 0x3811, 0x3813, + 0x3815, 0x3817, 0x381a, 0x381c, 0x381e, 0x3820, 0x3822, 0x3824, + 0x3826, 0x3829, 0x382b, 0x382e, 0x3831, 0x3834, 0x3836, 0x3838, + 0x383a, 0x383c, 0x383e, 0x3840, 0x3842, 0x3844, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#define GET_DECOMPOSITION_INDEX(ucs4) \ + (ucs4 < 0x3400 \ + ? (uc_decomposition_trie[uc_decomposition_trie[ucs4>>4] + (ucs4 & 0xf)]) \ + : (ucs4 < 0x30000\ + ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)]\ + : 0xffff)) + +static const unsigned short uc_decomposition_map[] = { + 0x103, 0x20, 0x210, 0x20, 0x308, 0x109, 0x61, 0x210, + 0x20, 0x304, 0x109, 0x32, 0x109, 0x33, 0x210, 0x20, + 0x301, 0x110, 0x3bc, 0x210, 0x20, 0x327, 0x109, 0x31, + 0x109, 0x6f, 0x311, 0x31, 0x2044, 0x34, 0x311, 0x31, + 0x2044, 0x32, 0x311, 0x33, 0x2044, 0x34, 0x201, 0x41, + 0x300, 0x201, 0x41, 0x301, 0x201, 0x41, 0x302, 0x201, + 0x41, 0x303, 0x201, 0x41, 0x308, 0x201, 0x41, 0x30a, + 0x201, 0x43, 0x327, 0x201, 0x45, 0x300, 0x201, 0x45, + 0x301, 0x201, 0x45, 0x302, 0x201, 0x45, 0x308, 0x201, + 0x49, 0x300, 0x201, 0x49, 0x301, 0x201, 0x49, 0x302, + 0x201, 0x49, 0x308, 0x201, 0x4e, 0x303, 0x201, 0x4f, + 0x300, 0x201, 0x4f, 0x301, 0x201, 0x4f, 0x302, 0x201, + 0x4f, 0x303, 0x201, 0x4f, 0x308, 0x201, 0x55, 0x300, + 0x201, 0x55, 0x301, 0x201, 0x55, 0x302, 0x201, 0x55, + 0x308, 0x201, 0x59, 0x301, 0x201, 0x61, 0x300, 0x201, + 0x61, 0x301, 0x201, 0x61, 0x302, 0x201, 0x61, 0x303, + 0x201, 0x61, 0x308, 0x201, 0x61, 0x30a, 0x201, 0x63, + 0x327, 0x201, 0x65, 0x300, 0x201, 0x65, 0x301, 0x201, + 0x65, 0x302, 0x201, 0x65, 0x308, 0x201, 0x69, 0x300, + 0x201, 0x69, 0x301, 0x201, 0x69, 0x302, 0x201, 0x69, + 0x308, 0x201, 0x6e, 0x303, 0x201, 0x6f, 0x300, 0x201, + 0x6f, 0x301, 0x201, 0x6f, 0x302, 0x201, 0x6f, 0x303, + 0x201, 0x6f, 0x308, 0x201, 0x75, 0x300, 0x201, 0x75, + 0x301, 0x201, 0x75, 0x302, 0x201, 0x75, 0x308, 0x201, + 0x79, 0x301, 0x201, 0x79, 0x308, 0x201, 0x41, 0x304, + 0x201, 0x61, 0x304, 0x201, 0x41, 0x306, 0x201, 0x61, + 0x306, 0x201, 0x41, 0x328, 0x201, 0x61, 0x328, 0x201, + 0x43, 0x301, 0x201, 0x63, 0x301, 0x201, 0x43, 0x302, + 0x201, 0x63, 0x302, 0x201, 0x43, 0x307, 0x201, 0x63, + 0x307, 0x201, 0x43, 0x30c, 0x201, 0x63, 0x30c, 0x201, + 0x44, 0x30c, 0x201, 0x64, 0x30c, 0x201, 0x45, 0x304, + 0x201, 0x65, 0x304, 0x201, 0x45, 0x306, 0x201, 0x65, + 0x306, 0x201, 0x45, 0x307, 0x201, 0x65, 0x307, 0x201, + 0x45, 0x328, 0x201, 0x65, 0x328, 0x201, 0x45, 0x30c, + 0x201, 0x65, 0x30c, 0x201, 0x47, 0x302, 0x201, 0x67, + 0x302, 0x201, 0x47, 0x306, 0x201, 0x67, 0x306, 0x201, + 0x47, 0x307, 0x201, 0x67, 0x307, 0x201, 0x47, 0x327, + 0x201, 0x67, 0x327, 0x201, 0x48, 0x302, 0x201, 0x68, + 0x302, 0x201, 0x49, 0x303, 0x201, 0x69, 0x303, 0x201, + 0x49, 0x304, 0x201, 0x69, 0x304, 0x201, 0x49, 0x306, + 0x201, 0x69, 0x306, 0x201, 0x49, 0x328, 0x201, 0x69, + 0x328, 0x201, 0x49, 0x307, 0x210, 0x49, 0x4a, 0x210, + 0x69, 0x6a, 0x201, 0x4a, 0x302, 0x201, 0x6a, 0x302, + 0x201, 0x4b, 0x327, 0x201, 0x6b, 0x327, 0x201, 0x4c, + 0x301, 0x201, 0x6c, 0x301, 0x201, 0x4c, 0x327, 0x201, + 0x6c, 0x327, 0x201, 0x4c, 0x30c, 0x201, 0x6c, 0x30c, + 0x210, 0x4c, 0xb7, 0x210, 0x6c, 0xb7, 0x201, 0x4e, + 0x301, 0x201, 0x6e, 0x301, 0x201, 0x4e, 0x327, 0x201, + 0x6e, 0x327, 0x201, 0x4e, 0x30c, 0x201, 0x6e, 0x30c, + 0x210, 0x2bc, 0x6e, 0x201, 0x4f, 0x304, 0x201, 0x6f, + 0x304, 0x201, 0x4f, 0x306, 0x201, 0x6f, 0x306, 0x201, + 0x4f, 0x30b, 0x201, 0x6f, 0x30b, 0x201, 0x52, 0x301, + 0x201, 0x72, 0x301, 0x201, 0x52, 0x327, 0x201, 0x72, + 0x327, 0x201, 0x52, 0x30c, 0x201, 0x72, 0x30c, 0x201, + 0x53, 0x301, 0x201, 0x73, 0x301, 0x201, 0x53, 0x302, + 0x201, 0x73, 0x302, 0x201, 0x53, 0x327, 0x201, 0x73, + 0x327, 0x201, 0x53, 0x30c, 0x201, 0x73, 0x30c, 0x201, + 0x54, 0x327, 0x201, 0x74, 0x327, 0x201, 0x54, 0x30c, + 0x201, 0x74, 0x30c, 0x201, 0x55, 0x303, 0x201, 0x75, + 0x303, 0x201, 0x55, 0x304, 0x201, 0x75, 0x304, 0x201, + 0x55, 0x306, 0x201, 0x75, 0x306, 0x201, 0x55, 0x30a, + 0x201, 0x75, 0x30a, 0x201, 0x55, 0x30b, 0x201, 0x75, + 0x30b, 0x201, 0x55, 0x328, 0x201, 0x75, 0x328, 0x201, + 0x57, 0x302, 0x201, 0x77, 0x302, 0x201, 0x59, 0x302, + 0x201, 0x79, 0x302, 0x201, 0x59, 0x308, 0x201, 0x5a, + 0x301, 0x201, 0x7a, 0x301, 0x201, 0x5a, 0x307, 0x201, + 0x7a, 0x307, 0x201, 0x5a, 0x30c, 0x201, 0x7a, 0x30c, + 0x110, 0x73, 0x201, 0x4f, 0x31b, 0x201, 0x6f, 0x31b, + 0x201, 0x55, 0x31b, 0x201, 0x75, 0x31b, 0x210, 0x44, + 0x17d, 0x210, 0x44, 0x17e, 0x210, 0x64, 0x17e, 0x210, + 0x4c, 0x4a, 0x210, 0x4c, 0x6a, 0x210, 0x6c, 0x6a, + 0x210, 0x4e, 0x4a, 0x210, 0x4e, 0x6a, 0x210, 0x6e, + 0x6a, 0x201, 0x41, 0x30c, 0x201, 0x61, 0x30c, 0x201, + 0x49, 0x30c, 0x201, 0x69, 0x30c, 0x201, 0x4f, 0x30c, + 0x201, 0x6f, 0x30c, 0x201, 0x55, 0x30c, 0x201, 0x75, + 0x30c, 0x201, 0xdc, 0x304, 0x201, 0xfc, 0x304, 0x201, + 0xdc, 0x301, 0x201, 0xfc, 0x301, 0x201, 0xdc, 0x30c, + 0x201, 0xfc, 0x30c, 0x201, 0xdc, 0x300, 0x201, 0xfc, + 0x300, 0x201, 0xc4, 0x304, 0x201, 0xe4, 0x304, 0x201, + 0x226, 0x304, 0x201, 0x227, 0x304, 0x201, 0xc6, 0x304, + 0x201, 0xe6, 0x304, 0x201, 0x47, 0x30c, 0x201, 0x67, + 0x30c, 0x201, 0x4b, 0x30c, 0x201, 0x6b, 0x30c, 0x201, + 0x4f, 0x328, 0x201, 0x6f, 0x328, 0x201, 0x1ea, 0x304, + 0x201, 0x1eb, 0x304, 0x201, 0x1b7, 0x30c, 0x201, 0x292, + 0x30c, 0x201, 0x6a, 0x30c, 0x210, 0x44, 0x5a, 0x210, + 0x44, 0x7a, 0x210, 0x64, 0x7a, 0x201, 0x47, 0x301, + 0x201, 0x67, 0x301, 0x201, 0x4e, 0x300, 0x201, 0x6e, + 0x300, 0x201, 0xc5, 0x301, 0x201, 0xe5, 0x301, 0x201, + 0xc6, 0x301, 0x201, 0xe6, 0x301, 0x201, 0xd8, 0x301, + 0x201, 0xf8, 0x301, 0x201, 0x41, 0x30f, 0x201, 0x61, + 0x30f, 0x201, 0x41, 0x311, 0x201, 0x61, 0x311, 0x201, + 0x45, 0x30f, 0x201, 0x65, 0x30f, 0x201, 0x45, 0x311, + 0x201, 0x65, 0x311, 0x201, 0x49, 0x30f, 0x201, 0x69, + 0x30f, 0x201, 0x49, 0x311, 0x201, 0x69, 0x311, 0x201, + 0x4f, 0x30f, 0x201, 0x6f, 0x30f, 0x201, 0x4f, 0x311, + 0x201, 0x6f, 0x311, 0x201, 0x52, 0x30f, 0x201, 0x72, + 0x30f, 0x201, 0x52, 0x311, 0x201, 0x72, 0x311, 0x201, + 0x55, 0x30f, 0x201, 0x75, 0x30f, 0x201, 0x55, 0x311, + 0x201, 0x75, 0x311, 0x201, 0x53, 0x326, 0x201, 0x73, + 0x326, 0x201, 0x54, 0x326, 0x201, 0x74, 0x326, 0x201, + 0x48, 0x30c, 0x201, 0x68, 0x30c, 0x201, 0x41, 0x307, + 0x201, 0x61, 0x307, 0x201, 0x45, 0x327, 0x201, 0x65, + 0x327, 0x201, 0xd6, 0x304, 0x201, 0xf6, 0x304, 0x201, + 0xd5, 0x304, 0x201, 0xf5, 0x304, 0x201, 0x4f, 0x307, + 0x201, 0x6f, 0x307, 0x201, 0x22e, 0x304, 0x201, 0x22f, + 0x304, 0x201, 0x59, 0x304, 0x201, 0x79, 0x304, 0x109, + 0x68, 0x109, 0x266, 0x109, 0x6a, 0x109, 0x72, 0x109, + 0x279, 0x109, 0x27b, 0x109, 0x281, 0x109, 0x77, 0x109, + 0x79, 0x210, 0x20, 0x306, 0x210, 0x20, 0x307, 0x210, + 0x20, 0x30a, 0x210, 0x20, 0x328, 0x210, 0x20, 0x303, + 0x210, 0x20, 0x30b, 0x109, 0x263, 0x109, 0x6c, 0x109, + 0x73, 0x109, 0x78, 0x109, 0x295, 0x101, 0x300, 0x101, + 0x301, 0x101, 0x313, 0x201, 0x308, 0x301, 0x101, 0x2b9, + 0x210, 0x20, 0x345, 0x101, 0x3b, 0x210, 0x20, 0x301, + 0x201, 0xa8, 0x301, 0x201, 0x391, 0x301, 0x101, 0xb7, + 0x201, 0x395, 0x301, 0x201, 0x397, 0x301, 0x201, 0x399, + 0x301, 0x201, 0x39f, 0x301, 0x201, 0x3a5, 0x301, 0x201, + 0x3a9, 0x301, 0x201, 0x3ca, 0x301, 0x201, 0x399, 0x308, + 0x201, 0x3a5, 0x308, 0x201, 0x3b1, 0x301, 0x201, 0x3b5, + 0x301, 0x201, 0x3b7, 0x301, 0x201, 0x3b9, 0x301, 0x201, + 0x3cb, 0x301, 0x201, 0x3b9, 0x308, 0x201, 0x3c5, 0x308, + 0x201, 0x3bf, 0x301, 0x201, 0x3c5, 0x301, 0x201, 0x3c9, + 0x301, 0x110, 0x3b2, 0x110, 0x3b8, 0x110, 0x3a5, 0x201, + 0x3d2, 0x301, 0x201, 0x3d2, 0x308, 0x110, 0x3c6, 0x110, + 0x3c0, 0x110, 0x3ba, 0x110, 0x3c1, 0x110, 0x3c2, 0x110, + 0x398, 0x110, 0x3b5, 0x110, 0x3a3, 0x201, 0x415, 0x300, + 0x201, 0x415, 0x308, 0x201, 0x413, 0x301, 0x201, 0x406, + 0x308, 0x201, 0x41a, 0x301, 0x201, 0x418, 0x300, 0x201, + 0x423, 0x306, 0x201, 0x418, 0x306, 0x201, 0x438, 0x306, + 0x201, 0x435, 0x300, 0x201, 0x435, 0x308, 0x201, 0x433, + 0x301, 0x201, 0x456, 0x308, 0x201, 0x43a, 0x301, 0x201, + 0x438, 0x300, 0x201, 0x443, 0x306, 0x201, 0x474, 0x30f, + 0x201, 0x475, 0x30f, 0x201, 0x416, 0x306, 0x201, 0x436, + 0x306, 0x201, 0x410, 0x306, 0x201, 0x430, 0x306, 0x201, + 0x410, 0x308, 0x201, 0x430, 0x308, 0x201, 0x415, 0x306, + 0x201, 0x435, 0x306, 0x201, 0x4d8, 0x308, 0x201, 0x4d9, + 0x308, 0x201, 0x416, 0x308, 0x201, 0x436, 0x308, 0x201, + 0x417, 0x308, 0x201, 0x437, 0x308, 0x201, 0x418, 0x304, + 0x201, 0x438, 0x304, 0x201, 0x418, 0x308, 0x201, 0x438, + 0x308, 0x201, 0x41e, 0x308, 0x201, 0x43e, 0x308, 0x201, + 0x4e8, 0x308, 0x201, 0x4e9, 0x308, 0x201, 0x42d, 0x308, + 0x201, 0x44d, 0x308, 0x201, 0x423, 0x304, 0x201, 0x443, + 0x304, 0x201, 0x423, 0x308, 0x201, 0x443, 0x308, 0x201, + 0x423, 0x30b, 0x201, 0x443, 0x30b, 0x201, 0x427, 0x308, + 0x201, 0x447, 0x308, 0x201, 0x42b, 0x308, 0x201, 0x44b, + 0x308, 0x210, 0x565, 0x582, 0x201, 0x627, 0x653, 0x201, + 0x627, 0x654, 0x201, 0x648, 0x654, 0x201, 0x627, 0x655, + 0x201, 0x64a, 0x654, 0x210, 0x627, 0x674, 0x210, 0x648, + 0x674, 0x210, 0x6c7, 0x674, 0x210, 0x64a, 0x674, 0x201, + 0x6d5, 0x654, 0x201, 0x6c1, 0x654, 0x201, 0x6d2, 0x654, + 0x201, 0x928, 0x93c, 0x201, 0x930, 0x93c, 0x201, 0x933, + 0x93c, 0x201, 0x915, 0x93c, 0x201, 0x916, 0x93c, 0x201, + 0x917, 0x93c, 0x201, 0x91c, 0x93c, 0x201, 0x921, 0x93c, + 0x201, 0x922, 0x93c, 0x201, 0x92b, 0x93c, 0x201, 0x92f, + 0x93c, 0x201, 0x9c7, 0x9be, 0x201, 0x9c7, 0x9d7, 0x201, + 0x9a1, 0x9bc, 0x201, 0x9a2, 0x9bc, 0x201, 0x9af, 0x9bc, + 0x201, 0xa32, 0xa3c, 0x201, 0xa38, 0xa3c, 0x201, 0xa16, + 0xa3c, 0x201, 0xa17, 0xa3c, 0x201, 0xa1c, 0xa3c, 0x201, + 0xa2b, 0xa3c, 0x201, 0xb47, 0xb56, 0x201, 0xb47, 0xb3e, + 0x201, 0xb47, 0xb57, 0x201, 0xb21, 0xb3c, 0x201, 0xb22, + 0xb3c, 0x201, 0xb92, 0xbd7, 0x201, 0xbc6, 0xbbe, 0x201, + 0xbc7, 0xbbe, 0x201, 0xbc6, 0xbd7, 0x201, 0xc46, 0xc56, + 0x201, 0xcbf, 0xcd5, 0x201, 0xcc6, 0xcd5, 0x201, 0xcc6, + 0xcd6, 0x201, 0xcc6, 0xcc2, 0x201, 0xcca, 0xcd5, 0x201, + 0xd46, 0xd3e, 0x201, 0xd47, 0xd3e, 0x201, 0xd46, 0xd57, + 0x201, 0xdd9, 0xdca, 0x201, 0xdd9, 0xdcf, 0x201, 0xddc, + 0xdca, 0x201, 0xdd9, 0xddf, 0x210, 0xe4d, 0xe32, 0x210, + 0xecd, 0xeb2, 0x210, 0xeab, 0xe99, 0x210, 0xeab, 0xea1, + 0x103, 0xf0b, 0x201, 0xf42, 0xfb7, 0x201, 0xf4c, 0xfb7, + 0x201, 0xf51, 0xfb7, 0x201, 0xf56, 0xfb7, 0x201, 0xf5b, + 0xfb7, 0x201, 0xf40, 0xfb5, 0x201, 0xf71, 0xf72, 0x201, + 0xf71, 0xf74, 0x201, 0xfb2, 0xf80, 0x210, 0xfb2, 0xf81, + 0x201, 0xfb3, 0xf80, 0x210, 0xfb3, 0xf81, 0x201, 0xf71, + 0xf80, 0x201, 0xf92, 0xfb7, 0x201, 0xf9c, 0xfb7, 0x201, + 0xfa1, 0xfb7, 0x201, 0xfa6, 0xfb7, 0x201, 0xfab, 0xfb7, + 0x201, 0xf90, 0xfb5, 0x201, 0x1025, 0x102e, 0x109, 0x10dc, + 0x201, 0x1b05, 0x1b35, 0x201, 0x1b07, 0x1b35, 0x201, 0x1b09, + 0x1b35, 0x201, 0x1b0b, 0x1b35, 0x201, 0x1b0d, 0x1b35, 0x201, + 0x1b11, 0x1b35, 0x201, 0x1b3a, 0x1b35, 0x201, 0x1b3c, 0x1b35, + 0x201, 0x1b3e, 0x1b35, 0x201, 0x1b3f, 0x1b35, 0x201, 0x1b42, + 0x1b35, 0x109, 0x41, 0x109, 0xc6, 0x109, 0x42, 0x109, + 0x44, 0x109, 0x45, 0x109, 0x18e, 0x109, 0x47, 0x109, + 0x48, 0x109, 0x49, 0x109, 0x4a, 0x109, 0x4b, 0x109, + 0x4c, 0x109, 0x4d, 0x109, 0x4e, 0x109, 0x4f, 0x109, + 0x222, 0x109, 0x50, 0x109, 0x52, 0x109, 0x54, 0x109, + 0x55, 0x109, 0x57, 0x109, 0x61, 0x109, 0x250, 0x109, + 0x251, 0x109, 0x1d02, 0x109, 0x62, 0x109, 0x64, 0x109, + 0x65, 0x109, 0x259, 0x109, 0x25b, 0x109, 0x25c, 0x109, + 0x67, 0x109, 0x6b, 0x109, 0x6d, 0x109, 0x14b, 0x109, + 0x6f, 0x109, 0x254, 0x109, 0x1d16, 0x109, 0x1d17, 0x109, + 0x70, 0x109, 0x74, 0x109, 0x75, 0x109, 0x1d1d, 0x109, + 0x26f, 0x109, 0x76, 0x109, 0x1d25, 0x109, 0x3b2, 0x109, + 0x3b3, 0x109, 0x3b4, 0x109, 0x3c6, 0x109, 0x3c7, 0x10a, + 0x69, 0x10a, 0x72, 0x10a, 0x75, 0x10a, 0x76, 0x10a, + 0x3b2, 0x10a, 0x3b3, 0x10a, 0x3c1, 0x10a, 0x3c6, 0x10a, + 0x3c7, 0x109, 0x43d, 0x109, 0x252, 0x109, 0x63, 0x109, + 0x255, 0x109, 0xf0, 0x109, 0x25c, 0x109, 0x66, 0x109, + 0x25f, 0x109, 0x261, 0x109, 0x265, 0x109, 0x268, 0x109, + 0x269, 0x109, 0x26a, 0x109, 0x1d7b, 0x109, 0x29d, 0x109, + 0x26d, 0x109, 0x1d85, 0x109, 0x29f, 0x109, 0x271, 0x109, + 0x270, 0x109, 0x272, 0x109, 0x273, 0x109, 0x274, 0x109, + 0x275, 0x109, 0x278, 0x109, 0x282, 0x109, 0x283, 0x109, + 0x1ab, 0x109, 0x289, 0x109, 0x28a, 0x109, 0x1d1c, 0x109, + 0x28b, 0x109, 0x28c, 0x109, 0x7a, 0x109, 0x290, 0x109, + 0x291, 0x109, 0x292, 0x109, 0x3b8, 0x201, 0x41, 0x325, + 0x201, 0x61, 0x325, 0x201, 0x42, 0x307, 0x201, 0x62, + 0x307, 0x201, 0x42, 0x323, 0x201, 0x62, 0x323, 0x201, + 0x42, 0x331, 0x201, 0x62, 0x331, 0x201, 0xc7, 0x301, + 0x201, 0xe7, 0x301, 0x201, 0x44, 0x307, 0x201, 0x64, + 0x307, 0x201, 0x44, 0x323, 0x201, 0x64, 0x323, 0x201, + 0x44, 0x331, 0x201, 0x64, 0x331, 0x201, 0x44, 0x327, + 0x201, 0x64, 0x327, 0x201, 0x44, 0x32d, 0x201, 0x64, + 0x32d, 0x201, 0x112, 0x300, 0x201, 0x113, 0x300, 0x201, + 0x112, 0x301, 0x201, 0x113, 0x301, 0x201, 0x45, 0x32d, + 0x201, 0x65, 0x32d, 0x201, 0x45, 0x330, 0x201, 0x65, + 0x330, 0x201, 0x228, 0x306, 0x201, 0x229, 0x306, 0x201, + 0x46, 0x307, 0x201, 0x66, 0x307, 0x201, 0x47, 0x304, + 0x201, 0x67, 0x304, 0x201, 0x48, 0x307, 0x201, 0x68, + 0x307, 0x201, 0x48, 0x323, 0x201, 0x68, 0x323, 0x201, + 0x48, 0x308, 0x201, 0x68, 0x308, 0x201, 0x48, 0x327, + 0x201, 0x68, 0x327, 0x201, 0x48, 0x32e, 0x201, 0x68, + 0x32e, 0x201, 0x49, 0x330, 0x201, 0x69, 0x330, 0x201, + 0xcf, 0x301, 0x201, 0xef, 0x301, 0x201, 0x4b, 0x301, + 0x201, 0x6b, 0x301, 0x201, 0x4b, 0x323, 0x201, 0x6b, + 0x323, 0x201, 0x4b, 0x331, 0x201, 0x6b, 0x331, 0x201, + 0x4c, 0x323, 0x201, 0x6c, 0x323, 0x201, 0x1e36, 0x304, + 0x201, 0x1e37, 0x304, 0x201, 0x4c, 0x331, 0x201, 0x6c, + 0x331, 0x201, 0x4c, 0x32d, 0x201, 0x6c, 0x32d, 0x201, + 0x4d, 0x301, 0x201, 0x6d, 0x301, 0x201, 0x4d, 0x307, + 0x201, 0x6d, 0x307, 0x201, 0x4d, 0x323, 0x201, 0x6d, + 0x323, 0x201, 0x4e, 0x307, 0x201, 0x6e, 0x307, 0x201, + 0x4e, 0x323, 0x201, 0x6e, 0x323, 0x201, 0x4e, 0x331, + 0x201, 0x6e, 0x331, 0x201, 0x4e, 0x32d, 0x201, 0x6e, + 0x32d, 0x201, 0xd5, 0x301, 0x201, 0xf5, 0x301, 0x201, + 0xd5, 0x308, 0x201, 0xf5, 0x308, 0x201, 0x14c, 0x300, + 0x201, 0x14d, 0x300, 0x201, 0x14c, 0x301, 0x201, 0x14d, + 0x301, 0x201, 0x50, 0x301, 0x201, 0x70, 0x301, 0x201, + 0x50, 0x307, 0x201, 0x70, 0x307, 0x201, 0x52, 0x307, + 0x201, 0x72, 0x307, 0x201, 0x52, 0x323, 0x201, 0x72, + 0x323, 0x201, 0x1e5a, 0x304, 0x201, 0x1e5b, 0x304, 0x201, + 0x52, 0x331, 0x201, 0x72, 0x331, 0x201, 0x53, 0x307, + 0x201, 0x73, 0x307, 0x201, 0x53, 0x323, 0x201, 0x73, + 0x323, 0x201, 0x15a, 0x307, 0x201, 0x15b, 0x307, 0x201, + 0x160, 0x307, 0x201, 0x161, 0x307, 0x201, 0x1e62, 0x307, + 0x201, 0x1e63, 0x307, 0x201, 0x54, 0x307, 0x201, 0x74, + 0x307, 0x201, 0x54, 0x323, 0x201, 0x74, 0x323, 0x201, + 0x54, 0x331, 0x201, 0x74, 0x331, 0x201, 0x54, 0x32d, + 0x201, 0x74, 0x32d, 0x201, 0x55, 0x324, 0x201, 0x75, + 0x324, 0x201, 0x55, 0x330, 0x201, 0x75, 0x330, 0x201, + 0x55, 0x32d, 0x201, 0x75, 0x32d, 0x201, 0x168, 0x301, + 0x201, 0x169, 0x301, 0x201, 0x16a, 0x308, 0x201, 0x16b, + 0x308, 0x201, 0x56, 0x303, 0x201, 0x76, 0x303, 0x201, + 0x56, 0x323, 0x201, 0x76, 0x323, 0x201, 0x57, 0x300, + 0x201, 0x77, 0x300, 0x201, 0x57, 0x301, 0x201, 0x77, + 0x301, 0x201, 0x57, 0x308, 0x201, 0x77, 0x308, 0x201, + 0x57, 0x307, 0x201, 0x77, 0x307, 0x201, 0x57, 0x323, + 0x201, 0x77, 0x323, 0x201, 0x58, 0x307, 0x201, 0x78, + 0x307, 0x201, 0x58, 0x308, 0x201, 0x78, 0x308, 0x201, + 0x59, 0x307, 0x201, 0x79, 0x307, 0x201, 0x5a, 0x302, + 0x201, 0x7a, 0x302, 0x201, 0x5a, 0x323, 0x201, 0x7a, + 0x323, 0x201, 0x5a, 0x331, 0x201, 0x7a, 0x331, 0x201, + 0x68, 0x331, 0x201, 0x74, 0x308, 0x201, 0x77, 0x30a, + 0x201, 0x79, 0x30a, 0x210, 0x61, 0x2be, 0x201, 0x17f, + 0x307, 0x201, 0x41, 0x323, 0x201, 0x61, 0x323, 0x201, + 0x41, 0x309, 0x201, 0x61, 0x309, 0x201, 0xc2, 0x301, + 0x201, 0xe2, 0x301, 0x201, 0xc2, 0x300, 0x201, 0xe2, + 0x300, 0x201, 0xc2, 0x309, 0x201, 0xe2, 0x309, 0x201, + 0xc2, 0x303, 0x201, 0xe2, 0x303, 0x201, 0x1ea0, 0x302, + 0x201, 0x1ea1, 0x302, 0x201, 0x102, 0x301, 0x201, 0x103, + 0x301, 0x201, 0x102, 0x300, 0x201, 0x103, 0x300, 0x201, + 0x102, 0x309, 0x201, 0x103, 0x309, 0x201, 0x102, 0x303, + 0x201, 0x103, 0x303, 0x201, 0x1ea0, 0x306, 0x201, 0x1ea1, + 0x306, 0x201, 0x45, 0x323, 0x201, 0x65, 0x323, 0x201, + 0x45, 0x309, 0x201, 0x65, 0x309, 0x201, 0x45, 0x303, + 0x201, 0x65, 0x303, 0x201, 0xca, 0x301, 0x201, 0xea, + 0x301, 0x201, 0xca, 0x300, 0x201, 0xea, 0x300, 0x201, + 0xca, 0x309, 0x201, 0xea, 0x309, 0x201, 0xca, 0x303, + 0x201, 0xea, 0x303, 0x201, 0x1eb8, 0x302, 0x201, 0x1eb9, + 0x302, 0x201, 0x49, 0x309, 0x201, 0x69, 0x309, 0x201, + 0x49, 0x323, 0x201, 0x69, 0x323, 0x201, 0x4f, 0x323, + 0x201, 0x6f, 0x323, 0x201, 0x4f, 0x309, 0x201, 0x6f, + 0x309, 0x201, 0xd4, 0x301, 0x201, 0xf4, 0x301, 0x201, + 0xd4, 0x300, 0x201, 0xf4, 0x300, 0x201, 0xd4, 0x309, + 0x201, 0xf4, 0x309, 0x201, 0xd4, 0x303, 0x201, 0xf4, + 0x303, 0x201, 0x1ecc, 0x302, 0x201, 0x1ecd, 0x302, 0x201, + 0x1a0, 0x301, 0x201, 0x1a1, 0x301, 0x201, 0x1a0, 0x300, + 0x201, 0x1a1, 0x300, 0x201, 0x1a0, 0x309, 0x201, 0x1a1, + 0x309, 0x201, 0x1a0, 0x303, 0x201, 0x1a1, 0x303, 0x201, + 0x1a0, 0x323, 0x201, 0x1a1, 0x323, 0x201, 0x55, 0x323, + 0x201, 0x75, 0x323, 0x201, 0x55, 0x309, 0x201, 0x75, + 0x309, 0x201, 0x1af, 0x301, 0x201, 0x1b0, 0x301, 0x201, + 0x1af, 0x300, 0x201, 0x1b0, 0x300, 0x201, 0x1af, 0x309, + 0x201, 0x1b0, 0x309, 0x201, 0x1af, 0x303, 0x201, 0x1b0, + 0x303, 0x201, 0x1af, 0x323, 0x201, 0x1b0, 0x323, 0x201, + 0x59, 0x300, 0x201, 0x79, 0x300, 0x201, 0x59, 0x323, + 0x201, 0x79, 0x323, 0x201, 0x59, 0x309, 0x201, 0x79, + 0x309, 0x201, 0x59, 0x303, 0x201, 0x79, 0x303, 0x201, + 0x3b1, 0x313, 0x201, 0x3b1, 0x314, 0x201, 0x1f00, 0x300, + 0x201, 0x1f01, 0x300, 0x201, 0x1f00, 0x301, 0x201, 0x1f01, + 0x301, 0x201, 0x1f00, 0x342, 0x201, 0x1f01, 0x342, 0x201, + 0x391, 0x313, 0x201, 0x391, 0x314, 0x201, 0x1f08, 0x300, + 0x201, 0x1f09, 0x300, 0x201, 0x1f08, 0x301, 0x201, 0x1f09, + 0x301, 0x201, 0x1f08, 0x342, 0x201, 0x1f09, 0x342, 0x201, + 0x3b5, 0x313, 0x201, 0x3b5, 0x314, 0x201, 0x1f10, 0x300, + 0x201, 0x1f11, 0x300, 0x201, 0x1f10, 0x301, 0x201, 0x1f11, + 0x301, 0x201, 0x395, 0x313, 0x201, 0x395, 0x314, 0x201, + 0x1f18, 0x300, 0x201, 0x1f19, 0x300, 0x201, 0x1f18, 0x301, + 0x201, 0x1f19, 0x301, 0x201, 0x3b7, 0x313, 0x201, 0x3b7, + 0x314, 0x201, 0x1f20, 0x300, 0x201, 0x1f21, 0x300, 0x201, + 0x1f20, 0x301, 0x201, 0x1f21, 0x301, 0x201, 0x1f20, 0x342, + 0x201, 0x1f21, 0x342, 0x201, 0x397, 0x313, 0x201, 0x397, + 0x314, 0x201, 0x1f28, 0x300, 0x201, 0x1f29, 0x300, 0x201, + 0x1f28, 0x301, 0x201, 0x1f29, 0x301, 0x201, 0x1f28, 0x342, + 0x201, 0x1f29, 0x342, 0x201, 0x3b9, 0x313, 0x201, 0x3b9, + 0x314, 0x201, 0x1f30, 0x300, 0x201, 0x1f31, 0x300, 0x201, + 0x1f30, 0x301, 0x201, 0x1f31, 0x301, 0x201, 0x1f30, 0x342, + 0x201, 0x1f31, 0x342, 0x201, 0x399, 0x313, 0x201, 0x399, + 0x314, 0x201, 0x1f38, 0x300, 0x201, 0x1f39, 0x300, 0x201, + 0x1f38, 0x301, 0x201, 0x1f39, 0x301, 0x201, 0x1f38, 0x342, + 0x201, 0x1f39, 0x342, 0x201, 0x3bf, 0x313, 0x201, 0x3bf, + 0x314, 0x201, 0x1f40, 0x300, 0x201, 0x1f41, 0x300, 0x201, + 0x1f40, 0x301, 0x201, 0x1f41, 0x301, 0x201, 0x39f, 0x313, + 0x201, 0x39f, 0x314, 0x201, 0x1f48, 0x300, 0x201, 0x1f49, + 0x300, 0x201, 0x1f48, 0x301, 0x201, 0x1f49, 0x301, 0x201, + 0x3c5, 0x313, 0x201, 0x3c5, 0x314, 0x201, 0x1f50, 0x300, + 0x201, 0x1f51, 0x300, 0x201, 0x1f50, 0x301, 0x201, 0x1f51, + 0x301, 0x201, 0x1f50, 0x342, 0x201, 0x1f51, 0x342, 0x201, + 0x3a5, 0x314, 0x201, 0x1f59, 0x300, 0x201, 0x1f59, 0x301, + 0x201, 0x1f59, 0x342, 0x201, 0x3c9, 0x313, 0x201, 0x3c9, + 0x314, 0x201, 0x1f60, 0x300, 0x201, 0x1f61, 0x300, 0x201, + 0x1f60, 0x301, 0x201, 0x1f61, 0x301, 0x201, 0x1f60, 0x342, + 0x201, 0x1f61, 0x342, 0x201, 0x3a9, 0x313, 0x201, 0x3a9, + 0x314, 0x201, 0x1f68, 0x300, 0x201, 0x1f69, 0x300, 0x201, + 0x1f68, 0x301, 0x201, 0x1f69, 0x301, 0x201, 0x1f68, 0x342, + 0x201, 0x1f69, 0x342, 0x201, 0x3b1, 0x300, 0x101, 0x3ac, + 0x201, 0x3b5, 0x300, 0x101, 0x3ad, 0x201, 0x3b7, 0x300, + 0x101, 0x3ae, 0x201, 0x3b9, 0x300, 0x101, 0x3af, 0x201, + 0x3bf, 0x300, 0x101, 0x3cc, 0x201, 0x3c5, 0x300, 0x101, + 0x3cd, 0x201, 0x3c9, 0x300, 0x101, 0x3ce, 0x201, 0x1f00, + 0x345, 0x201, 0x1f01, 0x345, 0x201, 0x1f02, 0x345, 0x201, + 0x1f03, 0x345, 0x201, 0x1f04, 0x345, 0x201, 0x1f05, 0x345, + 0x201, 0x1f06, 0x345, 0x201, 0x1f07, 0x345, 0x201, 0x1f08, + 0x345, 0x201, 0x1f09, 0x345, 0x201, 0x1f0a, 0x345, 0x201, + 0x1f0b, 0x345, 0x201, 0x1f0c, 0x345, 0x201, 0x1f0d, 0x345, + 0x201, 0x1f0e, 0x345, 0x201, 0x1f0f, 0x345, 0x201, 0x1f20, + 0x345, 0x201, 0x1f21, 0x345, 0x201, 0x1f22, 0x345, 0x201, + 0x1f23, 0x345, 0x201, 0x1f24, 0x345, 0x201, 0x1f25, 0x345, + 0x201, 0x1f26, 0x345, 0x201, 0x1f27, 0x345, 0x201, 0x1f28, + 0x345, 0x201, 0x1f29, 0x345, 0x201, 0x1f2a, 0x345, 0x201, + 0x1f2b, 0x345, 0x201, 0x1f2c, 0x345, 0x201, 0x1f2d, 0x345, + 0x201, 0x1f2e, 0x345, 0x201, 0x1f2f, 0x345, 0x201, 0x1f60, + 0x345, 0x201, 0x1f61, 0x345, 0x201, 0x1f62, 0x345, 0x201, + 0x1f63, 0x345, 0x201, 0x1f64, 0x345, 0x201, 0x1f65, 0x345, + 0x201, 0x1f66, 0x345, 0x201, 0x1f67, 0x345, 0x201, 0x1f68, + 0x345, 0x201, 0x1f69, 0x345, 0x201, 0x1f6a, 0x345, 0x201, + 0x1f6b, 0x345, 0x201, 0x1f6c, 0x345, 0x201, 0x1f6d, 0x345, + 0x201, 0x1f6e, 0x345, 0x201, 0x1f6f, 0x345, 0x201, 0x3b1, + 0x306, 0x201, 0x3b1, 0x304, 0x201, 0x1f70, 0x345, 0x201, + 0x3b1, 0x345, 0x201, 0x3ac, 0x345, 0x201, 0x3b1, 0x342, + 0x201, 0x1fb6, 0x345, 0x201, 0x391, 0x306, 0x201, 0x391, + 0x304, 0x201, 0x391, 0x300, 0x101, 0x386, 0x201, 0x391, + 0x345, 0x210, 0x20, 0x313, 0x101, 0x3b9, 0x210, 0x20, + 0x313, 0x210, 0x20, 0x342, 0x201, 0xa8, 0x342, 0x201, + 0x1f74, 0x345, 0x201, 0x3b7, 0x345, 0x201, 0x3ae, 0x345, + 0x201, 0x3b7, 0x342, 0x201, 0x1fc6, 0x345, 0x201, 0x395, + 0x300, 0x101, 0x388, 0x201, 0x397, 0x300, 0x101, 0x389, + 0x201, 0x397, 0x345, 0x201, 0x1fbf, 0x300, 0x201, 0x1fbf, + 0x301, 0x201, 0x1fbf, 0x342, 0x201, 0x3b9, 0x306, 0x201, + 0x3b9, 0x304, 0x201, 0x3ca, 0x300, 0x101, 0x390, 0x201, + 0x3b9, 0x342, 0x201, 0x3ca, 0x342, 0x201, 0x399, 0x306, + 0x201, 0x399, 0x304, 0x201, 0x399, 0x300, 0x101, 0x38a, + 0x201, 0x1ffe, 0x300, 0x201, 0x1ffe, 0x301, 0x201, 0x1ffe, + 0x342, 0x201, 0x3c5, 0x306, 0x201, 0x3c5, 0x304, 0x201, + 0x3cb, 0x300, 0x101, 0x3b0, 0x201, 0x3c1, 0x313, 0x201, + 0x3c1, 0x314, 0x201, 0x3c5, 0x342, 0x201, 0x3cb, 0x342, + 0x201, 0x3a5, 0x306, 0x201, 0x3a5, 0x304, 0x201, 0x3a5, + 0x300, 0x101, 0x38e, 0x201, 0x3a1, 0x314, 0x201, 0xa8, + 0x300, 0x101, 0x385, 0x101, 0x60, 0x201, 0x1f7c, 0x345, + 0x201, 0x3c9, 0x345, 0x201, 0x3ce, 0x345, 0x201, 0x3c9, + 0x342, 0x201, 0x1ff6, 0x345, 0x201, 0x39f, 0x300, 0x101, + 0x38c, 0x201, 0x3a9, 0x300, 0x101, 0x38f, 0x201, 0x3a9, + 0x345, 0x101, 0xb4, 0x210, 0x20, 0x314, 0x101, 0x2002, + 0x101, 0x2003, 0x110, 0x20, 0x110, 0x20, 0x110, 0x20, + 0x110, 0x20, 0x110, 0x20, 0x103, 0x20, 0x110, 0x20, + 0x110, 0x20, 0x110, 0x20, 0x103, 0x2010, 0x210, 0x20, + 0x333, 0x110, 0x2e, 0x210, 0x2e, 0x2e, 0x310, 0x2e, + 0x2e, 0x2e, 0x103, 0x20, 0x210, 0x2032, 0x2032, 0x310, + 0x2032, 0x2032, 0x2032, 0x210, 0x2035, 0x2035, 0x310, 0x2035, + 0x2035, 0x2035, 0x210, 0x21, 0x21, 0x210, 0x20, 0x305, + 0x210, 0x3f, 0x3f, 0x210, 0x3f, 0x21, 0x210, 0x21, + 0x3f, 0x410, 0x2032, 0x2032, 0x2032, 0x2032, 0x110, 0x20, + 0x109, 0x30, 0x109, 0x69, 0x109, 0x34, 0x109, 0x35, + 0x109, 0x36, 0x109, 0x37, 0x109, 0x38, 0x109, 0x39, + 0x109, 0x2b, 0x109, 0x2212, 0x109, 0x3d, 0x109, 0x28, + 0x109, 0x29, 0x109, 0x6e, 0x10a, 0x30, 0x10a, 0x31, + 0x10a, 0x32, 0x10a, 0x33, 0x10a, 0x34, 0x10a, 0x35, + 0x10a, 0x36, 0x10a, 0x37, 0x10a, 0x38, 0x10a, 0x39, + 0x10a, 0x2b, 0x10a, 0x2212, 0x10a, 0x3d, 0x10a, 0x28, + 0x10a, 0x29, 0x10a, 0x61, 0x10a, 0x65, 0x10a, 0x6f, + 0x10a, 0x78, 0x10a, 0x259, 0x10a, 0x68, 0x10a, 0x6b, + 0x10a, 0x6c, 0x10a, 0x6d, 0x10a, 0x6e, 0x10a, 0x70, + 0x10a, 0x73, 0x10a, 0x74, 0x210, 0x52, 0x73, 0x310, + 0x61, 0x2f, 0x63, 0x310, 0x61, 0x2f, 0x73, 0x102, + 0x43, 0x210, 0xb0, 0x43, 0x310, 0x63, 0x2f, 0x6f, + 0x310, 0x63, 0x2f, 0x75, 0x110, 0x190, 0x210, 0xb0, + 0x46, 0x102, 0x67, 0x102, 0x48, 0x102, 0x48, 0x102, + 0x48, 0x102, 0x68, 0x102, 0x127, 0x102, 0x49, 0x102, + 0x49, 0x102, 0x4c, 0x102, 0x6c, 0x102, 0x4e, 0x210, + 0x4e, 0x6f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, + 0x102, 0x52, 0x102, 0x52, 0x209, 0x53, 0x4d, 0x310, + 0x54, 0x45, 0x4c, 0x209, 0x54, 0x4d, 0x102, 0x5a, + 0x101, 0x3a9, 0x102, 0x5a, 0x101, 0x4b, 0x101, 0xc5, + 0x102, 0x42, 0x102, 0x43, 0x102, 0x65, 0x102, 0x45, + 0x102, 0x46, 0x102, 0x4d, 0x102, 0x6f, 0x110, 0x5d0, + 0x110, 0x5d1, 0x110, 0x5d2, 0x110, 0x5d3, 0x102, 0x69, + 0x310, 0x46, 0x41, 0x58, 0x102, 0x3c0, 0x102, 0x3b3, + 0x102, 0x393, 0x102, 0x3a0, 0x102, 0x2211, 0x102, 0x44, + 0x102, 0x64, 0x102, 0x65, 0x102, 0x69, 0x102, 0x6a, + 0x311, 0x31, 0x2044, 0x37, 0x311, 0x31, 0x2044, 0x39, + 0x411, 0x31, 0x2044, 0x31, 0x30, 0x311, 0x31, 0x2044, + 0x33, 0x311, 0x32, 0x2044, 0x33, 0x311, 0x31, 0x2044, + 0x35, 0x311, 0x32, 0x2044, 0x35, 0x311, 0x33, 0x2044, + 0x35, 0x311, 0x34, 0x2044, 0x35, 0x311, 0x31, 0x2044, + 0x36, 0x311, 0x35, 0x2044, 0x36, 0x311, 0x31, 0x2044, + 0x38, 0x311, 0x33, 0x2044, 0x38, 0x311, 0x35, 0x2044, + 0x38, 0x311, 0x37, 0x2044, 0x38, 0x211, 0x31, 0x2044, + 0x110, 0x49, 0x210, 0x49, 0x49, 0x310, 0x49, 0x49, + 0x49, 0x210, 0x49, 0x56, 0x110, 0x56, 0x210, 0x56, + 0x49, 0x310, 0x56, 0x49, 0x49, 0x410, 0x56, 0x49, + 0x49, 0x49, 0x210, 0x49, 0x58, 0x110, 0x58, 0x210, + 0x58, 0x49, 0x310, 0x58, 0x49, 0x49, 0x110, 0x4c, + 0x110, 0x43, 0x110, 0x44, 0x110, 0x4d, 0x110, 0x69, + 0x210, 0x69, 0x69, 0x310, 0x69, 0x69, 0x69, 0x210, + 0x69, 0x76, 0x110, 0x76, 0x210, 0x76, 0x69, 0x310, + 0x76, 0x69, 0x69, 0x410, 0x76, 0x69, 0x69, 0x69, + 0x210, 0x69, 0x78, 0x110, 0x78, 0x210, 0x78, 0x69, + 0x310, 0x78, 0x69, 0x69, 0x110, 0x6c, 0x110, 0x63, + 0x110, 0x64, 0x110, 0x6d, 0x311, 0x30, 0x2044, 0x33, + 0x201, 0x2190, 0x338, 0x201, 0x2192, 0x338, 0x201, 0x2194, + 0x338, 0x201, 0x21d0, 0x338, 0x201, 0x21d4, 0x338, 0x201, + 0x21d2, 0x338, 0x201, 0x2203, 0x338, 0x201, 0x2208, 0x338, + 0x201, 0x220b, 0x338, 0x201, 0x2223, 0x338, 0x201, 0x2225, + 0x338, 0x210, 0x222b, 0x222b, 0x310, 0x222b, 0x222b, 0x222b, + 0x210, 0x222e, 0x222e, 0x310, 0x222e, 0x222e, 0x222e, 0x201, + 0x223c, 0x338, 0x201, 0x2243, 0x338, 0x201, 0x2245, 0x338, + 0x201, 0x2248, 0x338, 0x201, 0x3d, 0x338, 0x201, 0x2261, + 0x338, 0x201, 0x224d, 0x338, 0x201, 0x3c, 0x338, 0x201, + 0x3e, 0x338, 0x201, 0x2264, 0x338, 0x201, 0x2265, 0x338, + 0x201, 0x2272, 0x338, 0x201, 0x2273, 0x338, 0x201, 0x2276, + 0x338, 0x201, 0x2277, 0x338, 0x201, 0x227a, 0x338, 0x201, + 0x227b, 0x338, 0x201, 0x2282, 0x338, 0x201, 0x2283, 0x338, + 0x201, 0x2286, 0x338, 0x201, 0x2287, 0x338, 0x201, 0x22a2, + 0x338, 0x201, 0x22a8, 0x338, 0x201, 0x22a9, 0x338, 0x201, + 0x22ab, 0x338, 0x201, 0x227c, 0x338, 0x201, 0x227d, 0x338, + 0x201, 0x2291, 0x338, 0x201, 0x2292, 0x338, 0x201, 0x22b2, + 0x338, 0x201, 0x22b3, 0x338, 0x201, 0x22b4, 0x338, 0x201, + 0x22b5, 0x338, 0x101, 0x3008, 0x101, 0x3009, 0x108, 0x31, + 0x108, 0x32, 0x108, 0x33, 0x108, 0x34, 0x108, 0x35, + 0x108, 0x36, 0x108, 0x37, 0x108, 0x38, 0x108, 0x39, + 0x208, 0x31, 0x30, 0x208, 0x31, 0x31, 0x208, 0x31, + 0x32, 0x208, 0x31, 0x33, 0x208, 0x31, 0x34, 0x208, + 0x31, 0x35, 0x208, 0x31, 0x36, 0x208, 0x31, 0x37, + 0x208, 0x31, 0x38, 0x208, 0x31, 0x39, 0x208, 0x32, + 0x30, 0x310, 0x28, 0x31, 0x29, 0x310, 0x28, 0x32, + 0x29, 0x310, 0x28, 0x33, 0x29, 0x310, 0x28, 0x34, + 0x29, 0x310, 0x28, 0x35, 0x29, 0x310, 0x28, 0x36, + 0x29, 0x310, 0x28, 0x37, 0x29, 0x310, 0x28, 0x38, + 0x29, 0x310, 0x28, 0x39, 0x29, 0x410, 0x28, 0x31, + 0x30, 0x29, 0x410, 0x28, 0x31, 0x31, 0x29, 0x410, + 0x28, 0x31, 0x32, 0x29, 0x410, 0x28, 0x31, 0x33, + 0x29, 0x410, 0x28, 0x31, 0x34, 0x29, 0x410, 0x28, + 0x31, 0x35, 0x29, 0x410, 0x28, 0x31, 0x36, 0x29, + 0x410, 0x28, 0x31, 0x37, 0x29, 0x410, 0x28, 0x31, + 0x38, 0x29, 0x410, 0x28, 0x31, 0x39, 0x29, 0x410, + 0x28, 0x32, 0x30, 0x29, 0x210, 0x31, 0x2e, 0x210, + 0x32, 0x2e, 0x210, 0x33, 0x2e, 0x210, 0x34, 0x2e, + 0x210, 0x35, 0x2e, 0x210, 0x36, 0x2e, 0x210, 0x37, + 0x2e, 0x210, 0x38, 0x2e, 0x210, 0x39, 0x2e, 0x310, + 0x31, 0x30, 0x2e, 0x310, 0x31, 0x31, 0x2e, 0x310, + 0x31, 0x32, 0x2e, 0x310, 0x31, 0x33, 0x2e, 0x310, + 0x31, 0x34, 0x2e, 0x310, 0x31, 0x35, 0x2e, 0x310, + 0x31, 0x36, 0x2e, 0x310, 0x31, 0x37, 0x2e, 0x310, + 0x31, 0x38, 0x2e, 0x310, 0x31, 0x39, 0x2e, 0x310, + 0x32, 0x30, 0x2e, 0x310, 0x28, 0x61, 0x29, 0x310, + 0x28, 0x62, 0x29, 0x310, 0x28, 0x63, 0x29, 0x310, + 0x28, 0x64, 0x29, 0x310, 0x28, 0x65, 0x29, 0x310, + 0x28, 0x66, 0x29, 0x310, 0x28, 0x67, 0x29, 0x310, + 0x28, 0x68, 0x29, 0x310, 0x28, 0x69, 0x29, 0x310, + 0x28, 0x6a, 0x29, 0x310, 0x28, 0x6b, 0x29, 0x310, + 0x28, 0x6c, 0x29, 0x310, 0x28, 0x6d, 0x29, 0x310, + 0x28, 0x6e, 0x29, 0x310, 0x28, 0x6f, 0x29, 0x310, + 0x28, 0x70, 0x29, 0x310, 0x28, 0x71, 0x29, 0x310, + 0x28, 0x72, 0x29, 0x310, 0x28, 0x73, 0x29, 0x310, + 0x28, 0x74, 0x29, 0x310, 0x28, 0x75, 0x29, 0x310, + 0x28, 0x76, 0x29, 0x310, 0x28, 0x77, 0x29, 0x310, + 0x28, 0x78, 0x29, 0x310, 0x28, 0x79, 0x29, 0x310, + 0x28, 0x7a, 0x29, 0x108, 0x41, 0x108, 0x42, 0x108, + 0x43, 0x108, 0x44, 0x108, 0x45, 0x108, 0x46, 0x108, + 0x47, 0x108, 0x48, 0x108, 0x49, 0x108, 0x4a, 0x108, + 0x4b, 0x108, 0x4c, 0x108, 0x4d, 0x108, 0x4e, 0x108, + 0x4f, 0x108, 0x50, 0x108, 0x51, 0x108, 0x52, 0x108, + 0x53, 0x108, 0x54, 0x108, 0x55, 0x108, 0x56, 0x108, + 0x57, 0x108, 0x58, 0x108, 0x59, 0x108, 0x5a, 0x108, + 0x61, 0x108, 0x62, 0x108, 0x63, 0x108, 0x64, 0x108, + 0x65, 0x108, 0x66, 0x108, 0x67, 0x108, 0x68, 0x108, + 0x69, 0x108, 0x6a, 0x108, 0x6b, 0x108, 0x6c, 0x108, + 0x6d, 0x108, 0x6e, 0x108, 0x6f, 0x108, 0x70, 0x108, + 0x71, 0x108, 0x72, 0x108, 0x73, 0x108, 0x74, 0x108, + 0x75, 0x108, 0x76, 0x108, 0x77, 0x108, 0x78, 0x108, + 0x79, 0x108, 0x7a, 0x108, 0x30, 0x410, 0x222b, 0x222b, + 0x222b, 0x222b, 0x310, 0x3a, 0x3a, 0x3d, 0x210, 0x3d, + 0x3d, 0x310, 0x3d, 0x3d, 0x3d, 0x201, 0x2add, 0x338, + 0x10a, 0x6a, 0x109, 0x56, 0x109, 0x2d61, 0x110, 0x6bcd, + 0x110, 0x9f9f, 0x110, 0x4e00, 0x110, 0x4e28, 0x110, 0x4e36, + 0x110, 0x4e3f, 0x110, 0x4e59, 0x110, 0x4e85, 0x110, 0x4e8c, + 0x110, 0x4ea0, 0x110, 0x4eba, 0x110, 0x513f, 0x110, 0x5165, + 0x110, 0x516b, 0x110, 0x5182, 0x110, 0x5196, 0x110, 0x51ab, + 0x110, 0x51e0, 0x110, 0x51f5, 0x110, 0x5200, 0x110, 0x529b, + 0x110, 0x52f9, 0x110, 0x5315, 0x110, 0x531a, 0x110, 0x5338, + 0x110, 0x5341, 0x110, 0x535c, 0x110, 0x5369, 0x110, 0x5382, + 0x110, 0x53b6, 0x110, 0x53c8, 0x110, 0x53e3, 0x110, 0x56d7, + 0x110, 0x571f, 0x110, 0x58eb, 0x110, 0x5902, 0x110, 0x590a, + 0x110, 0x5915, 0x110, 0x5927, 0x110, 0x5973, 0x110, 0x5b50, + 0x110, 0x5b80, 0x110, 0x5bf8, 0x110, 0x5c0f, 0x110, 0x5c22, + 0x110, 0x5c38, 0x110, 0x5c6e, 0x110, 0x5c71, 0x110, 0x5ddb, + 0x110, 0x5de5, 0x110, 0x5df1, 0x110, 0x5dfe, 0x110, 0x5e72, + 0x110, 0x5e7a, 0x110, 0x5e7f, 0x110, 0x5ef4, 0x110, 0x5efe, + 0x110, 0x5f0b, 0x110, 0x5f13, 0x110, 0x5f50, 0x110, 0x5f61, + 0x110, 0x5f73, 0x110, 0x5fc3, 0x110, 0x6208, 0x110, 0x6236, + 0x110, 0x624b, 0x110, 0x652f, 0x110, 0x6534, 0x110, 0x6587, + 0x110, 0x6597, 0x110, 0x65a4, 0x110, 0x65b9, 0x110, 0x65e0, + 0x110, 0x65e5, 0x110, 0x66f0, 0x110, 0x6708, 0x110, 0x6728, + 0x110, 0x6b20, 0x110, 0x6b62, 0x110, 0x6b79, 0x110, 0x6bb3, + 0x110, 0x6bcb, 0x110, 0x6bd4, 0x110, 0x6bdb, 0x110, 0x6c0f, + 0x110, 0x6c14, 0x110, 0x6c34, 0x110, 0x706b, 0x110, 0x722a, + 0x110, 0x7236, 0x110, 0x723b, 0x110, 0x723f, 0x110, 0x7247, + 0x110, 0x7259, 0x110, 0x725b, 0x110, 0x72ac, 0x110, 0x7384, + 0x110, 0x7389, 0x110, 0x74dc, 0x110, 0x74e6, 0x110, 0x7518, + 0x110, 0x751f, 0x110, 0x7528, 0x110, 0x7530, 0x110, 0x758b, + 0x110, 0x7592, 0x110, 0x7676, 0x110, 0x767d, 0x110, 0x76ae, + 0x110, 0x76bf, 0x110, 0x76ee, 0x110, 0x77db, 0x110, 0x77e2, + 0x110, 0x77f3, 0x110, 0x793a, 0x110, 0x79b8, 0x110, 0x79be, + 0x110, 0x7a74, 0x110, 0x7acb, 0x110, 0x7af9, 0x110, 0x7c73, + 0x110, 0x7cf8, 0x110, 0x7f36, 0x110, 0x7f51, 0x110, 0x7f8a, + 0x110, 0x7fbd, 0x110, 0x8001, 0x110, 0x800c, 0x110, 0x8012, + 0x110, 0x8033, 0x110, 0x807f, 0x110, 0x8089, 0x110, 0x81e3, + 0x110, 0x81ea, 0x110, 0x81f3, 0x110, 0x81fc, 0x110, 0x820c, + 0x110, 0x821b, 0x110, 0x821f, 0x110, 0x826e, 0x110, 0x8272, + 0x110, 0x8278, 0x110, 0x864d, 0x110, 0x866b, 0x110, 0x8840, + 0x110, 0x884c, 0x110, 0x8863, 0x110, 0x897e, 0x110, 0x898b, + 0x110, 0x89d2, 0x110, 0x8a00, 0x110, 0x8c37, 0x110, 0x8c46, + 0x110, 0x8c55, 0x110, 0x8c78, 0x110, 0x8c9d, 0x110, 0x8d64, + 0x110, 0x8d70, 0x110, 0x8db3, 0x110, 0x8eab, 0x110, 0x8eca, + 0x110, 0x8f9b, 0x110, 0x8fb0, 0x110, 0x8fb5, 0x110, 0x9091, + 0x110, 0x9149, 0x110, 0x91c6, 0x110, 0x91cc, 0x110, 0x91d1, + 0x110, 0x9577, 0x110, 0x9580, 0x110, 0x961c, 0x110, 0x96b6, + 0x110, 0x96b9, 0x110, 0x96e8, 0x110, 0x9751, 0x110, 0x975e, + 0x110, 0x9762, 0x110, 0x9769, 0x110, 0x97cb, 0x110, 0x97ed, + 0x110, 0x97f3, 0x110, 0x9801, 0x110, 0x98a8, 0x110, 0x98db, + 0x110, 0x98df, 0x110, 0x9996, 0x110, 0x9999, 0x110, 0x99ac, + 0x110, 0x9aa8, 0x110, 0x9ad8, 0x110, 0x9adf, 0x110, 0x9b25, + 0x110, 0x9b2f, 0x110, 0x9b32, 0x110, 0x9b3c, 0x110, 0x9b5a, + 0x110, 0x9ce5, 0x110, 0x9e75, 0x110, 0x9e7f, 0x110, 0x9ea5, + 0x110, 0x9ebb, 0x110, 0x9ec3, 0x110, 0x9ecd, 0x110, 0x9ed1, + 0x110, 0x9ef9, 0x110, 0x9efd, 0x110, 0x9f0e, 0x110, 0x9f13, + 0x110, 0x9f20, 0x110, 0x9f3b, 0x110, 0x9f4a, 0x110, 0x9f52, + 0x110, 0x9f8d, 0x110, 0x9f9c, 0x110, 0x9fa0, 0x10c, 0x20, + 0x110, 0x3012, 0x110, 0x5341, 0x110, 0x5344, 0x110, 0x5345, + 0x201, 0x304b, 0x3099, 0x201, 0x304d, 0x3099, 0x201, 0x304f, + 0x3099, 0x201, 0x3051, 0x3099, 0x201, 0x3053, 0x3099, 0x201, + 0x3055, 0x3099, 0x201, 0x3057, 0x3099, 0x201, 0x3059, 0x3099, + 0x201, 0x305b, 0x3099, 0x201, 0x305d, 0x3099, 0x201, 0x305f, + 0x3099, 0x201, 0x3061, 0x3099, 0x201, 0x3064, 0x3099, 0x201, + 0x3066, 0x3099, 0x201, 0x3068, 0x3099, 0x201, 0x306f, 0x3099, + 0x201, 0x306f, 0x309a, 0x201, 0x3072, 0x3099, 0x201, 0x3072, + 0x309a, 0x201, 0x3075, 0x3099, 0x201, 0x3075, 0x309a, 0x201, + 0x3078, 0x3099, 0x201, 0x3078, 0x309a, 0x201, 0x307b, 0x3099, + 0x201, 0x307b, 0x309a, 0x201, 0x3046, 0x3099, 0x210, 0x20, + 0x3099, 0x210, 0x20, 0x309a, 0x201, 0x309d, 0x3099, 0x20b, + 0x3088, 0x308a, 0x201, 0x30ab, 0x3099, 0x201, 0x30ad, 0x3099, + 0x201, 0x30af, 0x3099, 0x201, 0x30b1, 0x3099, 0x201, 0x30b3, + 0x3099, 0x201, 0x30b5, 0x3099, 0x201, 0x30b7, 0x3099, 0x201, + 0x30b9, 0x3099, 0x201, 0x30bb, 0x3099, 0x201, 0x30bd, 0x3099, + 0x201, 0x30bf, 0x3099, 0x201, 0x30c1, 0x3099, 0x201, 0x30c4, + 0x3099, 0x201, 0x30c6, 0x3099, 0x201, 0x30c8, 0x3099, 0x201, + 0x30cf, 0x3099, 0x201, 0x30cf, 0x309a, 0x201, 0x30d2, 0x3099, + 0x201, 0x30d2, 0x309a, 0x201, 0x30d5, 0x3099, 0x201, 0x30d5, + 0x309a, 0x201, 0x30d8, 0x3099, 0x201, 0x30d8, 0x309a, 0x201, + 0x30db, 0x3099, 0x201, 0x30db, 0x309a, 0x201, 0x30a6, 0x3099, + 0x201, 0x30ef, 0x3099, 0x201, 0x30f0, 0x3099, 0x201, 0x30f1, + 0x3099, 0x201, 0x30f2, 0x3099, 0x201, 0x30fd, 0x3099, 0x20b, + 0x30b3, 0x30c8, 0x110, 0x1100, 0x110, 0x1101, 0x110, 0x11aa, + 0x110, 0x1102, 0x110, 0x11ac, 0x110, 0x11ad, 0x110, 0x1103, + 0x110, 0x1104, 0x110, 0x1105, 0x110, 0x11b0, 0x110, 0x11b1, + 0x110, 0x11b2, 0x110, 0x11b3, 0x110, 0x11b4, 0x110, 0x11b5, + 0x110, 0x111a, 0x110, 0x1106, 0x110, 0x1107, 0x110, 0x1108, + 0x110, 0x1121, 0x110, 0x1109, 0x110, 0x110a, 0x110, 0x110b, + 0x110, 0x110c, 0x110, 0x110d, 0x110, 0x110e, 0x110, 0x110f, + 0x110, 0x1110, 0x110, 0x1111, 0x110, 0x1112, 0x110, 0x1161, + 0x110, 0x1162, 0x110, 0x1163, 0x110, 0x1164, 0x110, 0x1165, + 0x110, 0x1166, 0x110, 0x1167, 0x110, 0x1168, 0x110, 0x1169, + 0x110, 0x116a, 0x110, 0x116b, 0x110, 0x116c, 0x110, 0x116d, + 0x110, 0x116e, 0x110, 0x116f, 0x110, 0x1170, 0x110, 0x1171, + 0x110, 0x1172, 0x110, 0x1173, 0x110, 0x1174, 0x110, 0x1175, + 0x110, 0x1160, 0x110, 0x1114, 0x110, 0x1115, 0x110, 0x11c7, + 0x110, 0x11c8, 0x110, 0x11cc, 0x110, 0x11ce, 0x110, 0x11d3, + 0x110, 0x11d7, 0x110, 0x11d9, 0x110, 0x111c, 0x110, 0x11dd, + 0x110, 0x11df, 0x110, 0x111d, 0x110, 0x111e, 0x110, 0x1120, + 0x110, 0x1122, 0x110, 0x1123, 0x110, 0x1127, 0x110, 0x1129, + 0x110, 0x112b, 0x110, 0x112c, 0x110, 0x112d, 0x110, 0x112e, + 0x110, 0x112f, 0x110, 0x1132, 0x110, 0x1136, 0x110, 0x1140, + 0x110, 0x1147, 0x110, 0x114c, 0x110, 0x11f1, 0x110, 0x11f2, + 0x110, 0x1157, 0x110, 0x1158, 0x110, 0x1159, 0x110, 0x1184, + 0x110, 0x1185, 0x110, 0x1188, 0x110, 0x1191, 0x110, 0x1192, + 0x110, 0x1194, 0x110, 0x119e, 0x110, 0x11a1, 0x109, 0x4e00, + 0x109, 0x4e8c, 0x109, 0x4e09, 0x109, 0x56db, 0x109, 0x4e0a, + 0x109, 0x4e2d, 0x109, 0x4e0b, 0x109, 0x7532, 0x109, 0x4e59, + 0x109, 0x4e19, 0x109, 0x4e01, 0x109, 0x5929, 0x109, 0x5730, + 0x109, 0x4eba, 0x310, 0x28, 0x1100, 0x29, 0x310, 0x28, + 0x1102, 0x29, 0x310, 0x28, 0x1103, 0x29, 0x310, 0x28, + 0x1105, 0x29, 0x310, 0x28, 0x1106, 0x29, 0x310, 0x28, + 0x1107, 0x29, 0x310, 0x28, 0x1109, 0x29, 0x310, 0x28, + 0x110b, 0x29, 0x310, 0x28, 0x110c, 0x29, 0x310, 0x28, + 0x110e, 0x29, 0x310, 0x28, 0x110f, 0x29, 0x310, 0x28, + 0x1110, 0x29, 0x310, 0x28, 0x1111, 0x29, 0x310, 0x28, + 0x1112, 0x29, 0x410, 0x28, 0x1100, 0x1161, 0x29, 0x410, + 0x28, 0x1102, 0x1161, 0x29, 0x410, 0x28, 0x1103, 0x1161, + 0x29, 0x410, 0x28, 0x1105, 0x1161, 0x29, 0x410, 0x28, + 0x1106, 0x1161, 0x29, 0x410, 0x28, 0x1107, 0x1161, 0x29, + 0x410, 0x28, 0x1109, 0x1161, 0x29, 0x410, 0x28, 0x110b, + 0x1161, 0x29, 0x410, 0x28, 0x110c, 0x1161, 0x29, 0x410, + 0x28, 0x110e, 0x1161, 0x29, 0x410, 0x28, 0x110f, 0x1161, + 0x29, 0x410, 0x28, 0x1110, 0x1161, 0x29, 0x410, 0x28, + 0x1111, 0x1161, 0x29, 0x410, 0x28, 0x1112, 0x1161, 0x29, + 0x410, 0x28, 0x110c, 0x116e, 0x29, 0x710, 0x28, 0x110b, + 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x610, 0x28, 0x110b, + 0x1169, 0x1112, 0x116e, 0x29, 0x310, 0x28, 0x4e00, 0x29, + 0x310, 0x28, 0x4e8c, 0x29, 0x310, 0x28, 0x4e09, 0x29, + 0x310, 0x28, 0x56db, 0x29, 0x310, 0x28, 0x4e94, 0x29, + 0x310, 0x28, 0x516d, 0x29, 0x310, 0x28, 0x4e03, 0x29, + 0x310, 0x28, 0x516b, 0x29, 0x310, 0x28, 0x4e5d, 0x29, + 0x310, 0x28, 0x5341, 0x29, 0x310, 0x28, 0x6708, 0x29, + 0x310, 0x28, 0x706b, 0x29, 0x310, 0x28, 0x6c34, 0x29, + 0x310, 0x28, 0x6728, 0x29, 0x310, 0x28, 0x91d1, 0x29, + 0x310, 0x28, 0x571f, 0x29, 0x310, 0x28, 0x65e5, 0x29, + 0x310, 0x28, 0x682a, 0x29, 0x310, 0x28, 0x6709, 0x29, + 0x310, 0x28, 0x793e, 0x29, 0x310, 0x28, 0x540d, 0x29, + 0x310, 0x28, 0x7279, 0x29, 0x310, 0x28, 0x8ca1, 0x29, + 0x310, 0x28, 0x795d, 0x29, 0x310, 0x28, 0x52b4, 0x29, + 0x310, 0x28, 0x4ee3, 0x29, 0x310, 0x28, 0x547c, 0x29, + 0x310, 0x28, 0x5b66, 0x29, 0x310, 0x28, 0x76e3, 0x29, + 0x310, 0x28, 0x4f01, 0x29, 0x310, 0x28, 0x8cc7, 0x29, + 0x310, 0x28, 0x5354, 0x29, 0x310, 0x28, 0x796d, 0x29, + 0x310, 0x28, 0x4f11, 0x29, 0x310, 0x28, 0x81ea, 0x29, + 0x310, 0x28, 0x81f3, 0x29, 0x108, 0x554f, 0x108, 0x5e7c, + 0x108, 0x6587, 0x108, 0x7b8f, 0x30f, 0x50, 0x54, 0x45, + 0x208, 0x32, 0x31, 0x208, 0x32, 0x32, 0x208, 0x32, + 0x33, 0x208, 0x32, 0x34, 0x208, 0x32, 0x35, 0x208, + 0x32, 0x36, 0x208, 0x32, 0x37, 0x208, 0x32, 0x38, + 0x208, 0x32, 0x39, 0x208, 0x33, 0x30, 0x208, 0x33, + 0x31, 0x208, 0x33, 0x32, 0x208, 0x33, 0x33, 0x208, + 0x33, 0x34, 0x208, 0x33, 0x35, 0x108, 0x1100, 0x108, + 0x1102, 0x108, 0x1103, 0x108, 0x1105, 0x108, 0x1106, 0x108, + 0x1107, 0x108, 0x1109, 0x108, 0x110b, 0x108, 0x110c, 0x108, + 0x110e, 0x108, 0x110f, 0x108, 0x1110, 0x108, 0x1111, 0x108, + 0x1112, 0x208, 0x1100, 0x1161, 0x208, 0x1102, 0x1161, 0x208, + 0x1103, 0x1161, 0x208, 0x1105, 0x1161, 0x208, 0x1106, 0x1161, + 0x208, 0x1107, 0x1161, 0x208, 0x1109, 0x1161, 0x208, 0x110b, + 0x1161, 0x208, 0x110c, 0x1161, 0x208, 0x110e, 0x1161, 0x208, + 0x110f, 0x1161, 0x208, 0x1110, 0x1161, 0x208, 0x1111, 0x1161, + 0x208, 0x1112, 0x1161, 0x508, 0x110e, 0x1161, 0x11b7, 0x1100, + 0x1169, 0x408, 0x110c, 0x116e, 0x110b, 0x1174, 0x208, 0x110b, + 0x116e, 0x108, 0x4e00, 0x108, 0x4e8c, 0x108, 0x4e09, 0x108, + 0x56db, 0x108, 0x4e94, 0x108, 0x516d, 0x108, 0x4e03, 0x108, + 0x516b, 0x108, 0x4e5d, 0x108, 0x5341, 0x108, 0x6708, 0x108, + 0x706b, 0x108, 0x6c34, 0x108, 0x6728, 0x108, 0x91d1, 0x108, + 0x571f, 0x108, 0x65e5, 0x108, 0x682a, 0x108, 0x6709, 0x108, + 0x793e, 0x108, 0x540d, 0x108, 0x7279, 0x108, 0x8ca1, 0x108, + 0x795d, 0x108, 0x52b4, 0x108, 0x79d8, 0x108, 0x7537, 0x108, + 0x5973, 0x108, 0x9069, 0x108, 0x512a, 0x108, 0x5370, 0x108, + 0x6ce8, 0x108, 0x9805, 0x108, 0x4f11, 0x108, 0x5199, 0x108, + 0x6b63, 0x108, 0x4e0a, 0x108, 0x4e2d, 0x108, 0x4e0b, 0x108, + 0x5de6, 0x108, 0x53f3, 0x108, 0x533b, 0x108, 0x5b97, 0x108, + 0x5b66, 0x108, 0x76e3, 0x108, 0x4f01, 0x108, 0x8cc7, 0x108, + 0x5354, 0x108, 0x591c, 0x208, 0x33, 0x36, 0x208, 0x33, + 0x37, 0x208, 0x33, 0x38, 0x208, 0x33, 0x39, 0x208, + 0x34, 0x30, 0x208, 0x34, 0x31, 0x208, 0x34, 0x32, + 0x208, 0x34, 0x33, 0x208, 0x34, 0x34, 0x208, 0x34, + 0x35, 0x208, 0x34, 0x36, 0x208, 0x34, 0x37, 0x208, + 0x34, 0x38, 0x208, 0x34, 0x39, 0x208, 0x35, 0x30, + 0x210, 0x31, 0x6708, 0x210, 0x32, 0x6708, 0x210, 0x33, + 0x6708, 0x210, 0x34, 0x6708, 0x210, 0x35, 0x6708, 0x210, + 0x36, 0x6708, 0x210, 0x37, 0x6708, 0x210, 0x38, 0x6708, + 0x210, 0x39, 0x6708, 0x310, 0x31, 0x30, 0x6708, 0x310, + 0x31, 0x31, 0x6708, 0x310, 0x31, 0x32, 0x6708, 0x20f, + 0x48, 0x67, 0x30f, 0x65, 0x72, 0x67, 0x20f, 0x65, + 0x56, 0x30f, 0x4c, 0x54, 0x44, 0x108, 0x30a2, 0x108, + 0x30a4, 0x108, 0x30a6, 0x108, 0x30a8, 0x108, 0x30aa, 0x108, + 0x30ab, 0x108, 0x30ad, 0x108, 0x30af, 0x108, 0x30b1, 0x108, + 0x30b3, 0x108, 0x30b5, 0x108, 0x30b7, 0x108, 0x30b9, 0x108, + 0x30bb, 0x108, 0x30bd, 0x108, 0x30bf, 0x108, 0x30c1, 0x108, + 0x30c4, 0x108, 0x30c6, 0x108, 0x30c8, 0x108, 0x30ca, 0x108, + 0x30cb, 0x108, 0x30cc, 0x108, 0x30cd, 0x108, 0x30ce, 0x108, + 0x30cf, 0x108, 0x30d2, 0x108, 0x30d5, 0x108, 0x30d8, 0x108, + 0x30db, 0x108, 0x30de, 0x108, 0x30df, 0x108, 0x30e0, 0x108, + 0x30e1, 0x108, 0x30e2, 0x108, 0x30e4, 0x108, 0x30e6, 0x108, + 0x30e8, 0x108, 0x30e9, 0x108, 0x30ea, 0x108, 0x30eb, 0x108, + 0x30ec, 0x108, 0x30ed, 0x108, 0x30ef, 0x108, 0x30f0, 0x108, + 0x30f1, 0x108, 0x30f2, 0x40f, 0x30a2, 0x30d1, 0x30fc, 0x30c8, + 0x40f, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x40f, 0x30a2, 0x30f3, + 0x30da, 0x30a2, 0x30f, 0x30a2, 0x30fc, 0x30eb, 0x40f, 0x30a4, + 0x30cb, 0x30f3, 0x30b0, 0x30f, 0x30a4, 0x30f3, 0x30c1, 0x30f, + 0x30a6, 0x30a9, 0x30f3, 0x50f, 0x30a8, 0x30b9, 0x30af, 0x30fc, + 0x30c9, 0x40f, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x30f, 0x30aa, + 0x30f3, 0x30b9, 0x30f, 0x30aa, 0x30fc, 0x30e0, 0x30f, 0x30ab, + 0x30a4, 0x30ea, 0x40f, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x40f, + 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30f, 0x30ac, 0x30ed, 0x30f3, + 0x30f, 0x30ac, 0x30f3, 0x30de, 0x20f, 0x30ae, 0x30ac, 0x30f, + 0x30ae, 0x30cb, 0x30fc, 0x40f, 0x30ad, 0x30e5, 0x30ea, 0x30fc, + 0x40f, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x20f, 0x30ad, 0x30ed, + 0x50f, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x60f, 0x30ad, + 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x50f, 0x30ad, 0x30ed, + 0x30ef, 0x30c3, 0x30c8, 0x30f, 0x30b0, 0x30e9, 0x30e0, 0x50f, + 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x50f, 0x30af, 0x30eb, + 0x30bc, 0x30a4, 0x30ed, 0x40f, 0x30af, 0x30ed, 0x30fc, 0x30cd, + 0x30f, 0x30b1, 0x30fc, 0x30b9, 0x30f, 0x30b3, 0x30eb, 0x30ca, + 0x30f, 0x30b3, 0x30fc, 0x30dd, 0x40f, 0x30b5, 0x30a4, 0x30af, + 0x30eb, 0x50f, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x40f, + 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30f, 0x30bb, 0x30f3, 0x30c1, + 0x30f, 0x30bb, 0x30f3, 0x30c8, 0x30f, 0x30c0, 0x30fc, 0x30b9, + 0x20f, 0x30c7, 0x30b7, 0x20f, 0x30c9, 0x30eb, 0x20f, 0x30c8, + 0x30f3, 0x20f, 0x30ca, 0x30ce, 0x30f, 0x30ce, 0x30c3, 0x30c8, + 0x30f, 0x30cf, 0x30a4, 0x30c4, 0x50f, 0x30d1, 0x30fc, 0x30bb, + 0x30f3, 0x30c8, 0x30f, 0x30d1, 0x30fc, 0x30c4, 0x40f, 0x30d0, + 0x30fc, 0x30ec, 0x30eb, 0x50f, 0x30d4, 0x30a2, 0x30b9, 0x30c8, + 0x30eb, 0x30f, 0x30d4, 0x30af, 0x30eb, 0x20f, 0x30d4, 0x30b3, + 0x20f, 0x30d3, 0x30eb, 0x50f, 0x30d5, 0x30a1, 0x30e9, 0x30c3, + 0x30c9, 0x40f, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x50f, 0x30d6, + 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30f, 0x30d5, 0x30e9, 0x30f3, + 0x50f, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x20f, 0x30da, + 0x30bd, 0x30f, 0x30da, 0x30cb, 0x30d2, 0x30f, 0x30d8, 0x30eb, + 0x30c4, 0x30f, 0x30da, 0x30f3, 0x30b9, 0x30f, 0x30da, 0x30fc, + 0x30b8, 0x30f, 0x30d9, 0x30fc, 0x30bf, 0x40f, 0x30dd, 0x30a4, + 0x30f3, 0x30c8, 0x30f, 0x30dc, 0x30eb, 0x30c8, 0x20f, 0x30db, + 0x30f3, 0x30f, 0x30dd, 0x30f3, 0x30c9, 0x30f, 0x30db, 0x30fc, + 0x30eb, 0x30f, 0x30db, 0x30fc, 0x30f3, 0x40f, 0x30de, 0x30a4, + 0x30af, 0x30ed, 0x30f, 0x30de, 0x30a4, 0x30eb, 0x30f, 0x30de, + 0x30c3, 0x30cf, 0x30f, 0x30de, 0x30eb, 0x30af, 0x50f, 0x30de, + 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x40f, 0x30df, 0x30af, 0x30ed, + 0x30f3, 0x20f, 0x30df, 0x30ea, 0x50f, 0x30df, 0x30ea, 0x30d0, + 0x30fc, 0x30eb, 0x20f, 0x30e1, 0x30ac, 0x40f, 0x30e1, 0x30ac, + 0x30c8, 0x30f3, 0x40f, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30f, + 0x30e4, 0x30fc, 0x30c9, 0x30f, 0x30e4, 0x30fc, 0x30eb, 0x30f, + 0x30e6, 0x30a2, 0x30f3, 0x40f, 0x30ea, 0x30c3, 0x30c8, 0x30eb, + 0x20f, 0x30ea, 0x30e9, 0x30f, 0x30eb, 0x30d4, 0x30fc, 0x40f, + 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x20f, 0x30ec, 0x30e0, 0x50f, + 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30f, 0x30ef, 0x30c3, + 0x30c8, 0x210, 0x30, 0x70b9, 0x210, 0x31, 0x70b9, 0x210, + 0x32, 0x70b9, 0x210, 0x33, 0x70b9, 0x210, 0x34, 0x70b9, + 0x210, 0x35, 0x70b9, 0x210, 0x36, 0x70b9, 0x210, 0x37, + 0x70b9, 0x210, 0x38, 0x70b9, 0x210, 0x39, 0x70b9, 0x310, + 0x31, 0x30, 0x70b9, 0x310, 0x31, 0x31, 0x70b9, 0x310, + 0x31, 0x32, 0x70b9, 0x310, 0x31, 0x33, 0x70b9, 0x310, + 0x31, 0x34, 0x70b9, 0x310, 0x31, 0x35, 0x70b9, 0x310, + 0x31, 0x36, 0x70b9, 0x310, 0x31, 0x37, 0x70b9, 0x310, + 0x31, 0x38, 0x70b9, 0x310, 0x31, 0x39, 0x70b9, 0x310, + 0x32, 0x30, 0x70b9, 0x310, 0x32, 0x31, 0x70b9, 0x310, + 0x32, 0x32, 0x70b9, 0x310, 0x32, 0x33, 0x70b9, 0x310, + 0x32, 0x34, 0x70b9, 0x30f, 0x68, 0x50, 0x61, 0x20f, + 0x64, 0x61, 0x20f, 0x41, 0x55, 0x30f, 0x62, 0x61, + 0x72, 0x20f, 0x6f, 0x56, 0x20f, 0x70, 0x63, 0x20f, + 0x64, 0x6d, 0x30f, 0x64, 0x6d, 0xb2, 0x30f, 0x64, + 0x6d, 0xb3, 0x20f, 0x49, 0x55, 0x20f, 0x5e73, 0x6210, + 0x20f, 0x662d, 0x548c, 0x20f, 0x5927, 0x6b63, 0x20f, 0x660e, + 0x6cbb, 0x40f, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x20f, 0x70, + 0x41, 0x20f, 0x6e, 0x41, 0x20f, 0x3bc, 0x41, 0x20f, + 0x6d, 0x41, 0x20f, 0x6b, 0x41, 0x20f, 0x4b, 0x42, + 0x20f, 0x4d, 0x42, 0x20f, 0x47, 0x42, 0x30f, 0x63, + 0x61, 0x6c, 0x40f, 0x6b, 0x63, 0x61, 0x6c, 0x20f, + 0x70, 0x46, 0x20f, 0x6e, 0x46, 0x20f, 0x3bc, 0x46, + 0x20f, 0x3bc, 0x67, 0x20f, 0x6d, 0x67, 0x20f, 0x6b, + 0x67, 0x20f, 0x48, 0x7a, 0x30f, 0x6b, 0x48, 0x7a, + 0x30f, 0x4d, 0x48, 0x7a, 0x30f, 0x47, 0x48, 0x7a, + 0x30f, 0x54, 0x48, 0x7a, 0x20f, 0x3bc, 0x2113, 0x20f, + 0x6d, 0x2113, 0x20f, 0x64, 0x2113, 0x20f, 0x6b, 0x2113, + 0x20f, 0x66, 0x6d, 0x20f, 0x6e, 0x6d, 0x20f, 0x3bc, + 0x6d, 0x20f, 0x6d, 0x6d, 0x20f, 0x63, 0x6d, 0x20f, + 0x6b, 0x6d, 0x30f, 0x6d, 0x6d, 0xb2, 0x30f, 0x63, + 0x6d, 0xb2, 0x20f, 0x6d, 0xb2, 0x30f, 0x6b, 0x6d, + 0xb2, 0x30f, 0x6d, 0x6d, 0xb3, 0x30f, 0x63, 0x6d, + 0xb3, 0x20f, 0x6d, 0xb3, 0x30f, 0x6b, 0x6d, 0xb3, + 0x30f, 0x6d, 0x2215, 0x73, 0x40f, 0x6d, 0x2215, 0x73, + 0xb2, 0x20f, 0x50, 0x61, 0x30f, 0x6b, 0x50, 0x61, + 0x30f, 0x4d, 0x50, 0x61, 0x30f, 0x47, 0x50, 0x61, + 0x30f, 0x72, 0x61, 0x64, 0x50f, 0x72, 0x61, 0x64, + 0x2215, 0x73, 0x60f, 0x72, 0x61, 0x64, 0x2215, 0x73, + 0xb2, 0x20f, 0x70, 0x73, 0x20f, 0x6e, 0x73, 0x20f, + 0x3bc, 0x73, 0x20f, 0x6d, 0x73, 0x20f, 0x70, 0x56, + 0x20f, 0x6e, 0x56, 0x20f, 0x3bc, 0x56, 0x20f, 0x6d, + 0x56, 0x20f, 0x6b, 0x56, 0x20f, 0x4d, 0x56, 0x20f, + 0x70, 0x57, 0x20f, 0x6e, 0x57, 0x20f, 0x3bc, 0x57, + 0x20f, 0x6d, 0x57, 0x20f, 0x6b, 0x57, 0x20f, 0x4d, + 0x57, 0x20f, 0x6b, 0x3a9, 0x20f, 0x4d, 0x3a9, 0x40f, + 0x61, 0x2e, 0x6d, 0x2e, 0x20f, 0x42, 0x71, 0x20f, + 0x63, 0x63, 0x20f, 0x63, 0x64, 0x40f, 0x43, 0x2215, + 0x6b, 0x67, 0x30f, 0x43, 0x6f, 0x2e, 0x20f, 0x64, + 0x42, 0x20f, 0x47, 0x79, 0x20f, 0x68, 0x61, 0x20f, + 0x48, 0x50, 0x20f, 0x69, 0x6e, 0x20f, 0x4b, 0x4b, + 0x20f, 0x4b, 0x4d, 0x20f, 0x6b, 0x74, 0x20f, 0x6c, + 0x6d, 0x20f, 0x6c, 0x6e, 0x30f, 0x6c, 0x6f, 0x67, + 0x20f, 0x6c, 0x78, 0x20f, 0x6d, 0x62, 0x30f, 0x6d, + 0x69, 0x6c, 0x30f, 0x6d, 0x6f, 0x6c, 0x20f, 0x50, + 0x48, 0x40f, 0x70, 0x2e, 0x6d, 0x2e, 0x30f, 0x50, + 0x50, 0x4d, 0x20f, 0x50, 0x52, 0x20f, 0x73, 0x72, + 0x20f, 0x53, 0x76, 0x20f, 0x57, 0x62, 0x30f, 0x56, + 0x2215, 0x6d, 0x30f, 0x41, 0x2215, 0x6d, 0x210, 0x31, + 0x65e5, 0x210, 0x32, 0x65e5, 0x210, 0x33, 0x65e5, 0x210, + 0x34, 0x65e5, 0x210, 0x35, 0x65e5, 0x210, 0x36, 0x65e5, + 0x210, 0x37, 0x65e5, 0x210, 0x38, 0x65e5, 0x210, 0x39, + 0x65e5, 0x310, 0x31, 0x30, 0x65e5, 0x310, 0x31, 0x31, + 0x65e5, 0x310, 0x31, 0x32, 0x65e5, 0x310, 0x31, 0x33, + 0x65e5, 0x310, 0x31, 0x34, 0x65e5, 0x310, 0x31, 0x35, + 0x65e5, 0x310, 0x31, 0x36, 0x65e5, 0x310, 0x31, 0x37, + 0x65e5, 0x310, 0x31, 0x38, 0x65e5, 0x310, 0x31, 0x39, + 0x65e5, 0x310, 0x32, 0x30, 0x65e5, 0x310, 0x32, 0x31, + 0x65e5, 0x310, 0x32, 0x32, 0x65e5, 0x310, 0x32, 0x33, + 0x65e5, 0x310, 0x32, 0x34, 0x65e5, 0x310, 0x32, 0x35, + 0x65e5, 0x310, 0x32, 0x36, 0x65e5, 0x310, 0x32, 0x37, + 0x65e5, 0x310, 0x32, 0x38, 0x65e5, 0x310, 0x32, 0x39, + 0x65e5, 0x310, 0x33, 0x30, 0x65e5, 0x310, 0x33, 0x31, + 0x65e5, 0x30f, 0x67, 0x61, 0x6c, 0x109, 0x44a, 0x109, + 0x44c, 0x109, 0xa76f, 0x109, 0x126, 0x109, 0x153, 0x109, + 0xa727, 0x109, 0xab37, 0x109, 0x26b, 0x109, 0xab52, 0x101, + 0x8c48, 0x101, 0x66f4, 0x101, 0x8eca, 0x101, 0x8cc8, 0x101, + 0x6ed1, 0x101, 0x4e32, 0x101, 0x53e5, 0x101, 0x9f9c, 0x101, + 0x9f9c, 0x101, 0x5951, 0x101, 0x91d1, 0x101, 0x5587, 0x101, + 0x5948, 0x101, 0x61f6, 0x101, 0x7669, 0x101, 0x7f85, 0x101, + 0x863f, 0x101, 0x87ba, 0x101, 0x88f8, 0x101, 0x908f, 0x101, + 0x6a02, 0x101, 0x6d1b, 0x101, 0x70d9, 0x101, 0x73de, 0x101, + 0x843d, 0x101, 0x916a, 0x101, 0x99f1, 0x101, 0x4e82, 0x101, + 0x5375, 0x101, 0x6b04, 0x101, 0x721b, 0x101, 0x862d, 0x101, + 0x9e1e, 0x101, 0x5d50, 0x101, 0x6feb, 0x101, 0x85cd, 0x101, + 0x8964, 0x101, 0x62c9, 0x101, 0x81d8, 0x101, 0x881f, 0x101, + 0x5eca, 0x101, 0x6717, 0x101, 0x6d6a, 0x101, 0x72fc, 0x101, + 0x90ce, 0x101, 0x4f86, 0x101, 0x51b7, 0x101, 0x52de, 0x101, + 0x64c4, 0x101, 0x6ad3, 0x101, 0x7210, 0x101, 0x76e7, 0x101, + 0x8001, 0x101, 0x8606, 0x101, 0x865c, 0x101, 0x8def, 0x101, + 0x9732, 0x101, 0x9b6f, 0x101, 0x9dfa, 0x101, 0x788c, 0x101, + 0x797f, 0x101, 0x7da0, 0x101, 0x83c9, 0x101, 0x9304, 0x101, + 0x9e7f, 0x101, 0x8ad6, 0x101, 0x58df, 0x101, 0x5f04, 0x101, + 0x7c60, 0x101, 0x807e, 0x101, 0x7262, 0x101, 0x78ca, 0x101, + 0x8cc2, 0x101, 0x96f7, 0x101, 0x58d8, 0x101, 0x5c62, 0x101, + 0x6a13, 0x101, 0x6dda, 0x101, 0x6f0f, 0x101, 0x7d2f, 0x101, + 0x7e37, 0x101, 0x964b, 0x101, 0x52d2, 0x101, 0x808b, 0x101, + 0x51dc, 0x101, 0x51cc, 0x101, 0x7a1c, 0x101, 0x7dbe, 0x101, + 0x83f1, 0x101, 0x9675, 0x101, 0x8b80, 0x101, 0x62cf, 0x101, + 0x6a02, 0x101, 0x8afe, 0x101, 0x4e39, 0x101, 0x5be7, 0x101, + 0x6012, 0x101, 0x7387, 0x101, 0x7570, 0x101, 0x5317, 0x101, + 0x78fb, 0x101, 0x4fbf, 0x101, 0x5fa9, 0x101, 0x4e0d, 0x101, + 0x6ccc, 0x101, 0x6578, 0x101, 0x7d22, 0x101, 0x53c3, 0x101, + 0x585e, 0x101, 0x7701, 0x101, 0x8449, 0x101, 0x8aaa, 0x101, + 0x6bba, 0x101, 0x8fb0, 0x101, 0x6c88, 0x101, 0x62fe, 0x101, + 0x82e5, 0x101, 0x63a0, 0x101, 0x7565, 0x101, 0x4eae, 0x101, + 0x5169, 0x101, 0x51c9, 0x101, 0x6881, 0x101, 0x7ce7, 0x101, + 0x826f, 0x101, 0x8ad2, 0x101, 0x91cf, 0x101, 0x52f5, 0x101, + 0x5442, 0x101, 0x5973, 0x101, 0x5eec, 0x101, 0x65c5, 0x101, + 0x6ffe, 0x101, 0x792a, 0x101, 0x95ad, 0x101, 0x9a6a, 0x101, + 0x9e97, 0x101, 0x9ece, 0x101, 0x529b, 0x101, 0x66c6, 0x101, + 0x6b77, 0x101, 0x8f62, 0x101, 0x5e74, 0x101, 0x6190, 0x101, + 0x6200, 0x101, 0x649a, 0x101, 0x6f23, 0x101, 0x7149, 0x101, + 0x7489, 0x101, 0x79ca, 0x101, 0x7df4, 0x101, 0x806f, 0x101, + 0x8f26, 0x101, 0x84ee, 0x101, 0x9023, 0x101, 0x934a, 0x101, + 0x5217, 0x101, 0x52a3, 0x101, 0x54bd, 0x101, 0x70c8, 0x101, + 0x88c2, 0x101, 0x8aaa, 0x101, 0x5ec9, 0x101, 0x5ff5, 0x101, + 0x637b, 0x101, 0x6bae, 0x101, 0x7c3e, 0x101, 0x7375, 0x101, + 0x4ee4, 0x101, 0x56f9, 0x101, 0x5be7, 0x101, 0x5dba, 0x101, + 0x601c, 0x101, 0x73b2, 0x101, 0x7469, 0x101, 0x7f9a, 0x101, + 0x8046, 0x101, 0x9234, 0x101, 0x96f6, 0x101, 0x9748, 0x101, + 0x9818, 0x101, 0x4f8b, 0x101, 0x79ae, 0x101, 0x91b4, 0x101, + 0x96b8, 0x101, 0x60e1, 0x101, 0x4e86, 0x101, 0x50da, 0x101, + 0x5bee, 0x101, 0x5c3f, 0x101, 0x6599, 0x101, 0x6a02, 0x101, + 0x71ce, 0x101, 0x7642, 0x101, 0x84fc, 0x101, 0x907c, 0x101, + 0x9f8d, 0x101, 0x6688, 0x101, 0x962e, 0x101, 0x5289, 0x101, + 0x677b, 0x101, 0x67f3, 0x101, 0x6d41, 0x101, 0x6e9c, 0x101, + 0x7409, 0x101, 0x7559, 0x101, 0x786b, 0x101, 0x7d10, 0x101, + 0x985e, 0x101, 0x516d, 0x101, 0x622e, 0x101, 0x9678, 0x101, + 0x502b, 0x101, 0x5d19, 0x101, 0x6dea, 0x101, 0x8f2a, 0x101, + 0x5f8b, 0x101, 0x6144, 0x101, 0x6817, 0x101, 0x7387, 0x101, + 0x9686, 0x101, 0x5229, 0x101, 0x540f, 0x101, 0x5c65, 0x101, + 0x6613, 0x101, 0x674e, 0x101, 0x68a8, 0x101, 0x6ce5, 0x101, + 0x7406, 0x101, 0x75e2, 0x101, 0x7f79, 0x101, 0x88cf, 0x101, + 0x88e1, 0x101, 0x91cc, 0x101, 0x96e2, 0x101, 0x533f, 0x101, + 0x6eba, 0x101, 0x541d, 0x101, 0x71d0, 0x101, 0x7498, 0x101, + 0x85fa, 0x101, 0x96a3, 0x101, 0x9c57, 0x101, 0x9e9f, 0x101, + 0x6797, 0x101, 0x6dcb, 0x101, 0x81e8, 0x101, 0x7acb, 0x101, + 0x7b20, 0x101, 0x7c92, 0x101, 0x72c0, 0x101, 0x7099, 0x101, + 0x8b58, 0x101, 0x4ec0, 0x101, 0x8336, 0x101, 0x523a, 0x101, + 0x5207, 0x101, 0x5ea6, 0x101, 0x62d3, 0x101, 0x7cd6, 0x101, + 0x5b85, 0x101, 0x6d1e, 0x101, 0x66b4, 0x101, 0x8f3b, 0x101, + 0x884c, 0x101, 0x964d, 0x101, 0x898b, 0x101, 0x5ed3, 0x101, + 0x5140, 0x101, 0x55c0, 0x101, 0x585a, 0x101, 0x6674, 0x101, + 0x51de, 0x101, 0x732a, 0x101, 0x76ca, 0x101, 0x793c, 0x101, + 0x795e, 0x101, 0x7965, 0x101, 0x798f, 0x101, 0x9756, 0x101, + 0x7cbe, 0x101, 0x7fbd, 0x101, 0x8612, 0x101, 0x8af8, 0x101, + 0x9038, 0x101, 0x90fd, 0x101, 0x98ef, 0x101, 0x98fc, 0x101, + 0x9928, 0x101, 0x9db4, 0x101, 0x90de, 0x101, 0x96b7, 0x101, + 0x4fae, 0x101, 0x50e7, 0x101, 0x514d, 0x101, 0x52c9, 0x101, + 0x52e4, 0x101, 0x5351, 0x101, 0x559d, 0x101, 0x5606, 0x101, + 0x5668, 0x101, 0x5840, 0x101, 0x58a8, 0x101, 0x5c64, 0x101, + 0x5c6e, 0x101, 0x6094, 0x101, 0x6168, 0x101, 0x618e, 0x101, + 0x61f2, 0x101, 0x654f, 0x101, 0x65e2, 0x101, 0x6691, 0x101, + 0x6885, 0x101, 0x6d77, 0x101, 0x6e1a, 0x101, 0x6f22, 0x101, + 0x716e, 0x101, 0x722b, 0x101, 0x7422, 0x101, 0x7891, 0x101, + 0x793e, 0x101, 0x7949, 0x101, 0x7948, 0x101, 0x7950, 0x101, + 0x7956, 0x101, 0x795d, 0x101, 0x798d, 0x101, 0x798e, 0x101, + 0x7a40, 0x101, 0x7a81, 0x101, 0x7bc0, 0x101, 0x7df4, 0x101, + 0x7e09, 0x101, 0x7e41, 0x101, 0x7f72, 0x101, 0x8005, 0x101, + 0x81ed, 0x101, 0x8279, 0x101, 0x8279, 0x101, 0x8457, 0x101, + 0x8910, 0x101, 0x8996, 0x101, 0x8b01, 0x101, 0x8b39, 0x101, + 0x8cd3, 0x101, 0x8d08, 0x101, 0x8fb6, 0x101, 0x9038, 0x101, + 0x96e3, 0x101, 0x97ff, 0x101, 0x983b, 0x101, 0x6075, 0x201, + 0xd850, 0xdeee, 0x101, 0x8218, 0x101, 0x4e26, 0x101, 0x51b5, + 0x101, 0x5168, 0x101, 0x4f80, 0x101, 0x5145, 0x101, 0x5180, + 0x101, 0x52c7, 0x101, 0x52fa, 0x101, 0x559d, 0x101, 0x5555, + 0x101, 0x5599, 0x101, 0x55e2, 0x101, 0x585a, 0x101, 0x58b3, + 0x101, 0x5944, 0x101, 0x5954, 0x101, 0x5a62, 0x101, 0x5b28, + 0x101, 0x5ed2, 0x101, 0x5ed9, 0x101, 0x5f69, 0x101, 0x5fad, + 0x101, 0x60d8, 0x101, 0x614e, 0x101, 0x6108, 0x101, 0x618e, + 0x101, 0x6160, 0x101, 0x61f2, 0x101, 0x6234, 0x101, 0x63c4, + 0x101, 0x641c, 0x101, 0x6452, 0x101, 0x6556, 0x101, 0x6674, + 0x101, 0x6717, 0x101, 0x671b, 0x101, 0x6756, 0x101, 0x6b79, + 0x101, 0x6bba, 0x101, 0x6d41, 0x101, 0x6edb, 0x101, 0x6ecb, + 0x101, 0x6f22, 0x101, 0x701e, 0x101, 0x716e, 0x101, 0x77a7, + 0x101, 0x7235, 0x101, 0x72af, 0x101, 0x732a, 0x101, 0x7471, + 0x101, 0x7506, 0x101, 0x753b, 0x101, 0x761d, 0x101, 0x761f, + 0x101, 0x76ca, 0x101, 0x76db, 0x101, 0x76f4, 0x101, 0x774a, + 0x101, 0x7740, 0x101, 0x78cc, 0x101, 0x7ab1, 0x101, 0x7bc0, + 0x101, 0x7c7b, 0x101, 0x7d5b, 0x101, 0x7df4, 0x101, 0x7f3e, + 0x101, 0x8005, 0x101, 0x8352, 0x101, 0x83ef, 0x101, 0x8779, + 0x101, 0x8941, 0x101, 0x8986, 0x101, 0x8996, 0x101, 0x8abf, + 0x101, 0x8af8, 0x101, 0x8acb, 0x101, 0x8b01, 0x101, 0x8afe, + 0x101, 0x8aed, 0x101, 0x8b39, 0x101, 0x8b8a, 0x101, 0x8d08, + 0x101, 0x8f38, 0x101, 0x9072, 0x101, 0x9199, 0x101, 0x9276, + 0x101, 0x967c, 0x101, 0x96e3, 0x101, 0x9756, 0x101, 0x97db, + 0x101, 0x97ff, 0x101, 0x980b, 0x101, 0x983b, 0x101, 0x9b12, + 0x101, 0x9f9c, 0x201, 0xd84a, 0xdc4a, 0x201, 0xd84a, 0xdc44, + 0x201, 0xd84c, 0xdfd5, 0x101, 0x3b9d, 0x101, 0x4018, 0x101, + 0x4039, 0x201, 0xd854, 0xde49, 0x201, 0xd857, 0xdcd0, 0x201, + 0xd85f, 0xded3, 0x101, 0x9f43, 0x101, 0x9f8e, 0x210, 0x66, + 0x66, 0x210, 0x66, 0x69, 0x210, 0x66, 0x6c, 0x310, + 0x66, 0x66, 0x69, 0x310, 0x66, 0x66, 0x6c, 0x210, + 0x17f, 0x74, 0x210, 0x73, 0x74, 0x210, 0x574, 0x576, + 0x210, 0x574, 0x565, 0x210, 0x574, 0x56b, 0x210, 0x57e, + 0x576, 0x210, 0x574, 0x56d, 0x201, 0x5d9, 0x5b4, 0x201, + 0x5f2, 0x5b7, 0x102, 0x5e2, 0x102, 0x5d0, 0x102, 0x5d3, + 0x102, 0x5d4, 0x102, 0x5db, 0x102, 0x5dc, 0x102, 0x5dd, + 0x102, 0x5e8, 0x102, 0x5ea, 0x102, 0x2b, 0x201, 0x5e9, + 0x5c1, 0x201, 0x5e9, 0x5c2, 0x201, 0xfb49, 0x5c1, 0x201, + 0xfb49, 0x5c2, 0x201, 0x5d0, 0x5b7, 0x201, 0x5d0, 0x5b8, + 0x201, 0x5d0, 0x5bc, 0x201, 0x5d1, 0x5bc, 0x201, 0x5d2, + 0x5bc, 0x201, 0x5d3, 0x5bc, 0x201, 0x5d4, 0x5bc, 0x201, + 0x5d5, 0x5bc, 0x201, 0x5d6, 0x5bc, 0x201, 0x5d8, 0x5bc, + 0x201, 0x5d9, 0x5bc, 0x201, 0x5da, 0x5bc, 0x201, 0x5db, + 0x5bc, 0x201, 0x5dc, 0x5bc, 0x201, 0x5de, 0x5bc, 0x201, + 0x5e0, 0x5bc, 0x201, 0x5e1, 0x5bc, 0x201, 0x5e3, 0x5bc, + 0x201, 0x5e4, 0x5bc, 0x201, 0x5e6, 0x5bc, 0x201, 0x5e7, + 0x5bc, 0x201, 0x5e8, 0x5bc, 0x201, 0x5e9, 0x5bc, 0x201, + 0x5ea, 0x5bc, 0x201, 0x5d5, 0x5b9, 0x201, 0x5d1, 0x5bf, + 0x201, 0x5db, 0x5bf, 0x201, 0x5e4, 0x5bf, 0x210, 0x5d0, + 0x5dc, 0x107, 0x671, 0x106, 0x671, 0x107, 0x67b, 0x106, + 0x67b, 0x104, 0x67b, 0x105, 0x67b, 0x107, 0x67e, 0x106, + 0x67e, 0x104, 0x67e, 0x105, 0x67e, 0x107, 0x680, 0x106, + 0x680, 0x104, 0x680, 0x105, 0x680, 0x107, 0x67a, 0x106, + 0x67a, 0x104, 0x67a, 0x105, 0x67a, 0x107, 0x67f, 0x106, + 0x67f, 0x104, 0x67f, 0x105, 0x67f, 0x107, 0x679, 0x106, + 0x679, 0x104, 0x679, 0x105, 0x679, 0x107, 0x6a4, 0x106, + 0x6a4, 0x104, 0x6a4, 0x105, 0x6a4, 0x107, 0x6a6, 0x106, + 0x6a6, 0x104, 0x6a6, 0x105, 0x6a6, 0x107, 0x684, 0x106, + 0x684, 0x104, 0x684, 0x105, 0x684, 0x107, 0x683, 0x106, + 0x683, 0x104, 0x683, 0x105, 0x683, 0x107, 0x686, 0x106, + 0x686, 0x104, 0x686, 0x105, 0x686, 0x107, 0x687, 0x106, + 0x687, 0x104, 0x687, 0x105, 0x687, 0x107, 0x68d, 0x106, + 0x68d, 0x107, 0x68c, 0x106, 0x68c, 0x107, 0x68e, 0x106, + 0x68e, 0x107, 0x688, 0x106, 0x688, 0x107, 0x698, 0x106, + 0x698, 0x107, 0x691, 0x106, 0x691, 0x107, 0x6a9, 0x106, + 0x6a9, 0x104, 0x6a9, 0x105, 0x6a9, 0x107, 0x6af, 0x106, + 0x6af, 0x104, 0x6af, 0x105, 0x6af, 0x107, 0x6b3, 0x106, + 0x6b3, 0x104, 0x6b3, 0x105, 0x6b3, 0x107, 0x6b1, 0x106, + 0x6b1, 0x104, 0x6b1, 0x105, 0x6b1, 0x107, 0x6ba, 0x106, + 0x6ba, 0x107, 0x6bb, 0x106, 0x6bb, 0x104, 0x6bb, 0x105, + 0x6bb, 0x107, 0x6c0, 0x106, 0x6c0, 0x107, 0x6c1, 0x106, + 0x6c1, 0x104, 0x6c1, 0x105, 0x6c1, 0x107, 0x6be, 0x106, + 0x6be, 0x104, 0x6be, 0x105, 0x6be, 0x107, 0x6d2, 0x106, + 0x6d2, 0x107, 0x6d3, 0x106, 0x6d3, 0x107, 0x6ad, 0x106, + 0x6ad, 0x104, 0x6ad, 0x105, 0x6ad, 0x107, 0x6c7, 0x106, + 0x6c7, 0x107, 0x6c6, 0x106, 0x6c6, 0x107, 0x6c8, 0x106, + 0x6c8, 0x107, 0x677, 0x107, 0x6cb, 0x106, 0x6cb, 0x107, + 0x6c5, 0x106, 0x6c5, 0x107, 0x6c9, 0x106, 0x6c9, 0x107, + 0x6d0, 0x106, 0x6d0, 0x104, 0x6d0, 0x105, 0x6d0, 0x104, + 0x649, 0x105, 0x649, 0x207, 0x626, 0x627, 0x206, 0x626, + 0x627, 0x207, 0x626, 0x6d5, 0x206, 0x626, 0x6d5, 0x207, + 0x626, 0x648, 0x206, 0x626, 0x648, 0x207, 0x626, 0x6c7, + 0x206, 0x626, 0x6c7, 0x207, 0x626, 0x6c6, 0x206, 0x626, + 0x6c6, 0x207, 0x626, 0x6c8, 0x206, 0x626, 0x6c8, 0x207, + 0x626, 0x6d0, 0x206, 0x626, 0x6d0, 0x204, 0x626, 0x6d0, + 0x207, 0x626, 0x649, 0x206, 0x626, 0x649, 0x204, 0x626, + 0x649, 0x107, 0x6cc, 0x106, 0x6cc, 0x104, 0x6cc, 0x105, + 0x6cc, 0x207, 0x626, 0x62c, 0x207, 0x626, 0x62d, 0x207, + 0x626, 0x645, 0x207, 0x626, 0x649, 0x207, 0x626, 0x64a, + 0x207, 0x628, 0x62c, 0x207, 0x628, 0x62d, 0x207, 0x628, + 0x62e, 0x207, 0x628, 0x645, 0x207, 0x628, 0x649, 0x207, + 0x628, 0x64a, 0x207, 0x62a, 0x62c, 0x207, 0x62a, 0x62d, + 0x207, 0x62a, 0x62e, 0x207, 0x62a, 0x645, 0x207, 0x62a, + 0x649, 0x207, 0x62a, 0x64a, 0x207, 0x62b, 0x62c, 0x207, + 0x62b, 0x645, 0x207, 0x62b, 0x649, 0x207, 0x62b, 0x64a, + 0x207, 0x62c, 0x62d, 0x207, 0x62c, 0x645, 0x207, 0x62d, + 0x62c, 0x207, 0x62d, 0x645, 0x207, 0x62e, 0x62c, 0x207, + 0x62e, 0x62d, 0x207, 0x62e, 0x645, 0x207, 0x633, 0x62c, + 0x207, 0x633, 0x62d, 0x207, 0x633, 0x62e, 0x207, 0x633, + 0x645, 0x207, 0x635, 0x62d, 0x207, 0x635, 0x645, 0x207, + 0x636, 0x62c, 0x207, 0x636, 0x62d, 0x207, 0x636, 0x62e, + 0x207, 0x636, 0x645, 0x207, 0x637, 0x62d, 0x207, 0x637, + 0x645, 0x207, 0x638, 0x645, 0x207, 0x639, 0x62c, 0x207, + 0x639, 0x645, 0x207, 0x63a, 0x62c, 0x207, 0x63a, 0x645, + 0x207, 0x641, 0x62c, 0x207, 0x641, 0x62d, 0x207, 0x641, + 0x62e, 0x207, 0x641, 0x645, 0x207, 0x641, 0x649, 0x207, + 0x641, 0x64a, 0x207, 0x642, 0x62d, 0x207, 0x642, 0x645, + 0x207, 0x642, 0x649, 0x207, 0x642, 0x64a, 0x207, 0x643, + 0x627, 0x207, 0x643, 0x62c, 0x207, 0x643, 0x62d, 0x207, + 0x643, 0x62e, 0x207, 0x643, 0x644, 0x207, 0x643, 0x645, + 0x207, 0x643, 0x649, 0x207, 0x643, 0x64a, 0x207, 0x644, + 0x62c, 0x207, 0x644, 0x62d, 0x207, 0x644, 0x62e, 0x207, + 0x644, 0x645, 0x207, 0x644, 0x649, 0x207, 0x644, 0x64a, + 0x207, 0x645, 0x62c, 0x207, 0x645, 0x62d, 0x207, 0x645, + 0x62e, 0x207, 0x645, 0x645, 0x207, 0x645, 0x649, 0x207, + 0x645, 0x64a, 0x207, 0x646, 0x62c, 0x207, 0x646, 0x62d, + 0x207, 0x646, 0x62e, 0x207, 0x646, 0x645, 0x207, 0x646, + 0x649, 0x207, 0x646, 0x64a, 0x207, 0x647, 0x62c, 0x207, + 0x647, 0x645, 0x207, 0x647, 0x649, 0x207, 0x647, 0x64a, + 0x207, 0x64a, 0x62c, 0x207, 0x64a, 0x62d, 0x207, 0x64a, + 0x62e, 0x207, 0x64a, 0x645, 0x207, 0x64a, 0x649, 0x207, + 0x64a, 0x64a, 0x207, 0x630, 0x670, 0x207, 0x631, 0x670, + 0x207, 0x649, 0x670, 0x307, 0x20, 0x64c, 0x651, 0x307, + 0x20, 0x64d, 0x651, 0x307, 0x20, 0x64e, 0x651, 0x307, + 0x20, 0x64f, 0x651, 0x307, 0x20, 0x650, 0x651, 0x307, + 0x20, 0x651, 0x670, 0x206, 0x626, 0x631, 0x206, 0x626, + 0x632, 0x206, 0x626, 0x645, 0x206, 0x626, 0x646, 0x206, + 0x626, 0x649, 0x206, 0x626, 0x64a, 0x206, 0x628, 0x631, + 0x206, 0x628, 0x632, 0x206, 0x628, 0x645, 0x206, 0x628, + 0x646, 0x206, 0x628, 0x649, 0x206, 0x628, 0x64a, 0x206, + 0x62a, 0x631, 0x206, 0x62a, 0x632, 0x206, 0x62a, 0x645, + 0x206, 0x62a, 0x646, 0x206, 0x62a, 0x649, 0x206, 0x62a, + 0x64a, 0x206, 0x62b, 0x631, 0x206, 0x62b, 0x632, 0x206, + 0x62b, 0x645, 0x206, 0x62b, 0x646, 0x206, 0x62b, 0x649, + 0x206, 0x62b, 0x64a, 0x206, 0x641, 0x649, 0x206, 0x641, + 0x64a, 0x206, 0x642, 0x649, 0x206, 0x642, 0x64a, 0x206, + 0x643, 0x627, 0x206, 0x643, 0x644, 0x206, 0x643, 0x645, + 0x206, 0x643, 0x649, 0x206, 0x643, 0x64a, 0x206, 0x644, + 0x645, 0x206, 0x644, 0x649, 0x206, 0x644, 0x64a, 0x206, + 0x645, 0x627, 0x206, 0x645, 0x645, 0x206, 0x646, 0x631, + 0x206, 0x646, 0x632, 0x206, 0x646, 0x645, 0x206, 0x646, + 0x646, 0x206, 0x646, 0x649, 0x206, 0x646, 0x64a, 0x206, + 0x649, 0x670, 0x206, 0x64a, 0x631, 0x206, 0x64a, 0x632, + 0x206, 0x64a, 0x645, 0x206, 0x64a, 0x646, 0x206, 0x64a, + 0x649, 0x206, 0x64a, 0x64a, 0x204, 0x626, 0x62c, 0x204, + 0x626, 0x62d, 0x204, 0x626, 0x62e, 0x204, 0x626, 0x645, + 0x204, 0x626, 0x647, 0x204, 0x628, 0x62c, 0x204, 0x628, + 0x62d, 0x204, 0x628, 0x62e, 0x204, 0x628, 0x645, 0x204, + 0x628, 0x647, 0x204, 0x62a, 0x62c, 0x204, 0x62a, 0x62d, + 0x204, 0x62a, 0x62e, 0x204, 0x62a, 0x645, 0x204, 0x62a, + 0x647, 0x204, 0x62b, 0x645, 0x204, 0x62c, 0x62d, 0x204, + 0x62c, 0x645, 0x204, 0x62d, 0x62c, 0x204, 0x62d, 0x645, + 0x204, 0x62e, 0x62c, 0x204, 0x62e, 0x645, 0x204, 0x633, + 0x62c, 0x204, 0x633, 0x62d, 0x204, 0x633, 0x62e, 0x204, + 0x633, 0x645, 0x204, 0x635, 0x62d, 0x204, 0x635, 0x62e, + 0x204, 0x635, 0x645, 0x204, 0x636, 0x62c, 0x204, 0x636, + 0x62d, 0x204, 0x636, 0x62e, 0x204, 0x636, 0x645, 0x204, + 0x637, 0x62d, 0x204, 0x638, 0x645, 0x204, 0x639, 0x62c, + 0x204, 0x639, 0x645, 0x204, 0x63a, 0x62c, 0x204, 0x63a, + 0x645, 0x204, 0x641, 0x62c, 0x204, 0x641, 0x62d, 0x204, + 0x641, 0x62e, 0x204, 0x641, 0x645, 0x204, 0x642, 0x62d, + 0x204, 0x642, 0x645, 0x204, 0x643, 0x62c, 0x204, 0x643, + 0x62d, 0x204, 0x643, 0x62e, 0x204, 0x643, 0x644, 0x204, + 0x643, 0x645, 0x204, 0x644, 0x62c, 0x204, 0x644, 0x62d, + 0x204, 0x644, 0x62e, 0x204, 0x644, 0x645, 0x204, 0x644, + 0x647, 0x204, 0x645, 0x62c, 0x204, 0x645, 0x62d, 0x204, + 0x645, 0x62e, 0x204, 0x645, 0x645, 0x204, 0x646, 0x62c, + 0x204, 0x646, 0x62d, 0x204, 0x646, 0x62e, 0x204, 0x646, + 0x645, 0x204, 0x646, 0x647, 0x204, 0x647, 0x62c, 0x204, + 0x647, 0x645, 0x204, 0x647, 0x670, 0x204, 0x64a, 0x62c, + 0x204, 0x64a, 0x62d, 0x204, 0x64a, 0x62e, 0x204, 0x64a, + 0x645, 0x204, 0x64a, 0x647, 0x205, 0x626, 0x645, 0x205, + 0x626, 0x647, 0x205, 0x628, 0x645, 0x205, 0x628, 0x647, + 0x205, 0x62a, 0x645, 0x205, 0x62a, 0x647, 0x205, 0x62b, + 0x645, 0x205, 0x62b, 0x647, 0x205, 0x633, 0x645, 0x205, + 0x633, 0x647, 0x205, 0x634, 0x645, 0x205, 0x634, 0x647, + 0x205, 0x643, 0x644, 0x205, 0x643, 0x645, 0x205, 0x644, + 0x645, 0x205, 0x646, 0x645, 0x205, 0x646, 0x647, 0x205, + 0x64a, 0x645, 0x205, 0x64a, 0x647, 0x305, 0x640, 0x64e, + 0x651, 0x305, 0x640, 0x64f, 0x651, 0x305, 0x640, 0x650, + 0x651, 0x207, 0x637, 0x649, 0x207, 0x637, 0x64a, 0x207, + 0x639, 0x649, 0x207, 0x639, 0x64a, 0x207, 0x63a, 0x649, + 0x207, 0x63a, 0x64a, 0x207, 0x633, 0x649, 0x207, 0x633, + 0x64a, 0x207, 0x634, 0x649, 0x207, 0x634, 0x64a, 0x207, + 0x62d, 0x649, 0x207, 0x62d, 0x64a, 0x207, 0x62c, 0x649, + 0x207, 0x62c, 0x64a, 0x207, 0x62e, 0x649, 0x207, 0x62e, + 0x64a, 0x207, 0x635, 0x649, 0x207, 0x635, 0x64a, 0x207, + 0x636, 0x649, 0x207, 0x636, 0x64a, 0x207, 0x634, 0x62c, + 0x207, 0x634, 0x62d, 0x207, 0x634, 0x62e, 0x207, 0x634, + 0x645, 0x207, 0x634, 0x631, 0x207, 0x633, 0x631, 0x207, + 0x635, 0x631, 0x207, 0x636, 0x631, 0x206, 0x637, 0x649, + 0x206, 0x637, 0x64a, 0x206, 0x639, 0x649, 0x206, 0x639, + 0x64a, 0x206, 0x63a, 0x649, 0x206, 0x63a, 0x64a, 0x206, + 0x633, 0x649, 0x206, 0x633, 0x64a, 0x206, 0x634, 0x649, + 0x206, 0x634, 0x64a, 0x206, 0x62d, 0x649, 0x206, 0x62d, + 0x64a, 0x206, 0x62c, 0x649, 0x206, 0x62c, 0x64a, 0x206, + 0x62e, 0x649, 0x206, 0x62e, 0x64a, 0x206, 0x635, 0x649, + 0x206, 0x635, 0x64a, 0x206, 0x636, 0x649, 0x206, 0x636, + 0x64a, 0x206, 0x634, 0x62c, 0x206, 0x634, 0x62d, 0x206, + 0x634, 0x62e, 0x206, 0x634, 0x645, 0x206, 0x634, 0x631, + 0x206, 0x633, 0x631, 0x206, 0x635, 0x631, 0x206, 0x636, + 0x631, 0x204, 0x634, 0x62c, 0x204, 0x634, 0x62d, 0x204, + 0x634, 0x62e, 0x204, 0x634, 0x645, 0x204, 0x633, 0x647, + 0x204, 0x634, 0x647, 0x204, 0x637, 0x645, 0x205, 0x633, + 0x62c, 0x205, 0x633, 0x62d, 0x205, 0x633, 0x62e, 0x205, + 0x634, 0x62c, 0x205, 0x634, 0x62d, 0x205, 0x634, 0x62e, + 0x205, 0x637, 0x645, 0x205, 0x638, 0x645, 0x206, 0x627, + 0x64b, 0x207, 0x627, 0x64b, 0x304, 0x62a, 0x62c, 0x645, + 0x306, 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d, 0x62c, + 0x304, 0x62a, 0x62d, 0x645, 0x304, 0x62a, 0x62e, 0x645, + 0x304, 0x62a, 0x645, 0x62c, 0x304, 0x62a, 0x645, 0x62d, + 0x304, 0x62a, 0x645, 0x62e, 0x306, 0x62c, 0x645, 0x62d, + 0x304, 0x62c, 0x645, 0x62d, 0x306, 0x62d, 0x645, 0x64a, + 0x306, 0x62d, 0x645, 0x649, 0x304, 0x633, 0x62d, 0x62c, + 0x304, 0x633, 0x62c, 0x62d, 0x306, 0x633, 0x62c, 0x649, + 0x306, 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645, 0x62d, + 0x304, 0x633, 0x645, 0x62c, 0x306, 0x633, 0x645, 0x645, + 0x304, 0x633, 0x645, 0x645, 0x306, 0x635, 0x62d, 0x62d, + 0x304, 0x635, 0x62d, 0x62d, 0x306, 0x635, 0x645, 0x645, + 0x306, 0x634, 0x62d, 0x645, 0x304, 0x634, 0x62d, 0x645, + 0x306, 0x634, 0x62c, 0x64a, 0x306, 0x634, 0x645, 0x62e, + 0x304, 0x634, 0x645, 0x62e, 0x306, 0x634, 0x645, 0x645, + 0x304, 0x634, 0x645, 0x645, 0x306, 0x636, 0x62d, 0x649, + 0x306, 0x636, 0x62e, 0x645, 0x304, 0x636, 0x62e, 0x645, + 0x306, 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645, 0x62d, + 0x304, 0x637, 0x645, 0x645, 0x306, 0x637, 0x645, 0x64a, + 0x306, 0x639, 0x62c, 0x645, 0x306, 0x639, 0x645, 0x645, + 0x304, 0x639, 0x645, 0x645, 0x306, 0x639, 0x645, 0x649, + 0x306, 0x63a, 0x645, 0x645, 0x306, 0x63a, 0x645, 0x64a, + 0x306, 0x63a, 0x645, 0x649, 0x306, 0x641, 0x62e, 0x645, + 0x304, 0x641, 0x62e, 0x645, 0x306, 0x642, 0x645, 0x62d, + 0x306, 0x642, 0x645, 0x645, 0x306, 0x644, 0x62d, 0x645, + 0x306, 0x644, 0x62d, 0x64a, 0x306, 0x644, 0x62d, 0x649, + 0x304, 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62c, 0x62c, + 0x306, 0x644, 0x62e, 0x645, 0x304, 0x644, 0x62e, 0x645, + 0x306, 0x644, 0x645, 0x62d, 0x304, 0x644, 0x645, 0x62d, + 0x304, 0x645, 0x62d, 0x62c, 0x304, 0x645, 0x62d, 0x645, + 0x306, 0x645, 0x62d, 0x64a, 0x304, 0x645, 0x62c, 0x62d, + 0x304, 0x645, 0x62c, 0x645, 0x304, 0x645, 0x62e, 0x62c, + 0x304, 0x645, 0x62e, 0x645, 0x304, 0x645, 0x62c, 0x62e, + 0x304, 0x647, 0x645, 0x62c, 0x304, 0x647, 0x645, 0x645, + 0x304, 0x646, 0x62d, 0x645, 0x306, 0x646, 0x62d, 0x649, + 0x306, 0x646, 0x62c, 0x645, 0x304, 0x646, 0x62c, 0x645, + 0x306, 0x646, 0x62c, 0x649, 0x306, 0x646, 0x645, 0x64a, + 0x306, 0x646, 0x645, 0x649, 0x306, 0x64a, 0x645, 0x645, + 0x304, 0x64a, 0x645, 0x645, 0x306, 0x628, 0x62e, 0x64a, + 0x306, 0x62a, 0x62c, 0x64a, 0x306, 0x62a, 0x62c, 0x649, + 0x306, 0x62a, 0x62e, 0x64a, 0x306, 0x62a, 0x62e, 0x649, + 0x306, 0x62a, 0x645, 0x64a, 0x306, 0x62a, 0x645, 0x649, + 0x306, 0x62c, 0x645, 0x64a, 0x306, 0x62c, 0x62d, 0x649, + 0x306, 0x62c, 0x645, 0x649, 0x306, 0x633, 0x62e, 0x649, + 0x306, 0x635, 0x62d, 0x64a, 0x306, 0x634, 0x62d, 0x64a, + 0x306, 0x636, 0x62d, 0x64a, 0x306, 0x644, 0x62c, 0x64a, + 0x306, 0x644, 0x645, 0x64a, 0x306, 0x64a, 0x62d, 0x64a, + 0x306, 0x64a, 0x62c, 0x64a, 0x306, 0x64a, 0x645, 0x64a, + 0x306, 0x645, 0x645, 0x64a, 0x306, 0x642, 0x645, 0x64a, + 0x306, 0x646, 0x62d, 0x64a, 0x304, 0x642, 0x645, 0x62d, + 0x304, 0x644, 0x62d, 0x645, 0x306, 0x639, 0x645, 0x64a, + 0x306, 0x643, 0x645, 0x64a, 0x304, 0x646, 0x62c, 0x62d, + 0x306, 0x645, 0x62e, 0x64a, 0x304, 0x644, 0x62c, 0x645, + 0x306, 0x643, 0x645, 0x645, 0x306, 0x644, 0x62c, 0x645, + 0x306, 0x646, 0x62c, 0x62d, 0x306, 0x62c, 0x62d, 0x64a, + 0x306, 0x62d, 0x62c, 0x64a, 0x306, 0x645, 0x62c, 0x64a, + 0x306, 0x641, 0x645, 0x64a, 0x306, 0x628, 0x62d, 0x64a, + 0x304, 0x643, 0x645, 0x645, 0x304, 0x639, 0x62c, 0x645, + 0x304, 0x635, 0x645, 0x645, 0x306, 0x633, 0x62e, 0x64a, + 0x306, 0x646, 0x62c, 0x64a, 0x307, 0x635, 0x644, 0x6d2, + 0x307, 0x642, 0x644, 0x6d2, 0x407, 0x627, 0x644, 0x644, + 0x647, 0x407, 0x627, 0x643, 0x628, 0x631, 0x407, 0x645, + 0x62d, 0x645, 0x62f, 0x407, 0x635, 0x644, 0x639, 0x645, + 0x407, 0x631, 0x633, 0x648, 0x644, 0x407, 0x639, 0x644, + 0x64a, 0x647, 0x407, 0x648, 0x633, 0x644, 0x645, 0x307, + 0x635, 0x644, 0x649, 0x1207, 0x635, 0x644, 0x649, 0x20, + 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, + 0x647, 0x20, 0x648, 0x633, 0x644, 0x645, 0x807, 0x62c, + 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647, 0x407, + 0x631, 0x6cc, 0x627, 0x644, 0x10b, 0x2c, 0x10b, 0x3001, + 0x10b, 0x3002, 0x10b, 0x3a, 0x10b, 0x3b, 0x10b, 0x21, + 0x10b, 0x3f, 0x10b, 0x3016, 0x10b, 0x3017, 0x10b, 0x2026, + 0x10b, 0x2025, 0x10b, 0x2014, 0x10b, 0x2013, 0x10b, 0x5f, + 0x10b, 0x5f, 0x10b, 0x28, 0x10b, 0x29, 0x10b, 0x7b, + 0x10b, 0x7d, 0x10b, 0x3014, 0x10b, 0x3015, 0x10b, 0x3010, + 0x10b, 0x3011, 0x10b, 0x300a, 0x10b, 0x300b, 0x10b, 0x3008, + 0x10b, 0x3009, 0x10b, 0x300c, 0x10b, 0x300d, 0x10b, 0x300e, + 0x10b, 0x300f, 0x10b, 0x5b, 0x10b, 0x5d, 0x110, 0x203e, + 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x5f, + 0x110, 0x5f, 0x110, 0x5f, 0x10e, 0x2c, 0x10e, 0x3001, + 0x10e, 0x2e, 0x10e, 0x3b, 0x10e, 0x3a, 0x10e, 0x3f, + 0x10e, 0x21, 0x10e, 0x2014, 0x10e, 0x28, 0x10e, 0x29, + 0x10e, 0x7b, 0x10e, 0x7d, 0x10e, 0x3014, 0x10e, 0x3015, + 0x10e, 0x23, 0x10e, 0x26, 0x10e, 0x2a, 0x10e, 0x2b, + 0x10e, 0x2d, 0x10e, 0x3c, 0x10e, 0x3e, 0x10e, 0x3d, + 0x10e, 0x5c, 0x10e, 0x24, 0x10e, 0x25, 0x10e, 0x40, + 0x207, 0x20, 0x64b, 0x205, 0x640, 0x64b, 0x207, 0x20, + 0x64c, 0x207, 0x20, 0x64d, 0x207, 0x20, 0x64e, 0x205, + 0x640, 0x64e, 0x207, 0x20, 0x64f, 0x205, 0x640, 0x64f, + 0x207, 0x20, 0x650, 0x205, 0x640, 0x650, 0x207, 0x20, + 0x651, 0x205, 0x640, 0x651, 0x207, 0x20, 0x652, 0x205, + 0x640, 0x652, 0x107, 0x621, 0x107, 0x622, 0x106, 0x622, + 0x107, 0x623, 0x106, 0x623, 0x107, 0x624, 0x106, 0x624, + 0x107, 0x625, 0x106, 0x625, 0x107, 0x626, 0x106, 0x626, + 0x104, 0x626, 0x105, 0x626, 0x107, 0x627, 0x106, 0x627, + 0x107, 0x628, 0x106, 0x628, 0x104, 0x628, 0x105, 0x628, + 0x107, 0x629, 0x106, 0x629, 0x107, 0x62a, 0x106, 0x62a, + 0x104, 0x62a, 0x105, 0x62a, 0x107, 0x62b, 0x106, 0x62b, + 0x104, 0x62b, 0x105, 0x62b, 0x107, 0x62c, 0x106, 0x62c, + 0x104, 0x62c, 0x105, 0x62c, 0x107, 0x62d, 0x106, 0x62d, + 0x104, 0x62d, 0x105, 0x62d, 0x107, 0x62e, 0x106, 0x62e, + 0x104, 0x62e, 0x105, 0x62e, 0x107, 0x62f, 0x106, 0x62f, + 0x107, 0x630, 0x106, 0x630, 0x107, 0x631, 0x106, 0x631, + 0x107, 0x632, 0x106, 0x632, 0x107, 0x633, 0x106, 0x633, + 0x104, 0x633, 0x105, 0x633, 0x107, 0x634, 0x106, 0x634, + 0x104, 0x634, 0x105, 0x634, 0x107, 0x635, 0x106, 0x635, + 0x104, 0x635, 0x105, 0x635, 0x107, 0x636, 0x106, 0x636, + 0x104, 0x636, 0x105, 0x636, 0x107, 0x637, 0x106, 0x637, + 0x104, 0x637, 0x105, 0x637, 0x107, 0x638, 0x106, 0x638, + 0x104, 0x638, 0x105, 0x638, 0x107, 0x639, 0x106, 0x639, + 0x104, 0x639, 0x105, 0x639, 0x107, 0x63a, 0x106, 0x63a, + 0x104, 0x63a, 0x105, 0x63a, 0x107, 0x641, 0x106, 0x641, + 0x104, 0x641, 0x105, 0x641, 0x107, 0x642, 0x106, 0x642, + 0x104, 0x642, 0x105, 0x642, 0x107, 0x643, 0x106, 0x643, + 0x104, 0x643, 0x105, 0x643, 0x107, 0x644, 0x106, 0x644, + 0x104, 0x644, 0x105, 0x644, 0x107, 0x645, 0x106, 0x645, + 0x104, 0x645, 0x105, 0x645, 0x107, 0x646, 0x106, 0x646, + 0x104, 0x646, 0x105, 0x646, 0x107, 0x647, 0x106, 0x647, + 0x104, 0x647, 0x105, 0x647, 0x107, 0x648, 0x106, 0x648, + 0x107, 0x649, 0x106, 0x649, 0x107, 0x64a, 0x106, 0x64a, + 0x104, 0x64a, 0x105, 0x64a, 0x207, 0x644, 0x622, 0x206, + 0x644, 0x622, 0x207, 0x644, 0x623, 0x206, 0x644, 0x623, + 0x207, 0x644, 0x625, 0x206, 0x644, 0x625, 0x207, 0x644, + 0x627, 0x206, 0x644, 0x627, 0x10c, 0x21, 0x10c, 0x22, + 0x10c, 0x23, 0x10c, 0x24, 0x10c, 0x25, 0x10c, 0x26, + 0x10c, 0x27, 0x10c, 0x28, 0x10c, 0x29, 0x10c, 0x2a, + 0x10c, 0x2b, 0x10c, 0x2c, 0x10c, 0x2d, 0x10c, 0x2e, + 0x10c, 0x2f, 0x10c, 0x30, 0x10c, 0x31, 0x10c, 0x32, + 0x10c, 0x33, 0x10c, 0x34, 0x10c, 0x35, 0x10c, 0x36, + 0x10c, 0x37, 0x10c, 0x38, 0x10c, 0x39, 0x10c, 0x3a, + 0x10c, 0x3b, 0x10c, 0x3c, 0x10c, 0x3d, 0x10c, 0x3e, + 0x10c, 0x3f, 0x10c, 0x40, 0x10c, 0x41, 0x10c, 0x42, + 0x10c, 0x43, 0x10c, 0x44, 0x10c, 0x45, 0x10c, 0x46, + 0x10c, 0x47, 0x10c, 0x48, 0x10c, 0x49, 0x10c, 0x4a, + 0x10c, 0x4b, 0x10c, 0x4c, 0x10c, 0x4d, 0x10c, 0x4e, + 0x10c, 0x4f, 0x10c, 0x50, 0x10c, 0x51, 0x10c, 0x52, + 0x10c, 0x53, 0x10c, 0x54, 0x10c, 0x55, 0x10c, 0x56, + 0x10c, 0x57, 0x10c, 0x58, 0x10c, 0x59, 0x10c, 0x5a, + 0x10c, 0x5b, 0x10c, 0x5c, 0x10c, 0x5d, 0x10c, 0x5e, + 0x10c, 0x5f, 0x10c, 0x60, 0x10c, 0x61, 0x10c, 0x62, + 0x10c, 0x63, 0x10c, 0x64, 0x10c, 0x65, 0x10c, 0x66, + 0x10c, 0x67, 0x10c, 0x68, 0x10c, 0x69, 0x10c, 0x6a, + 0x10c, 0x6b, 0x10c, 0x6c, 0x10c, 0x6d, 0x10c, 0x6e, + 0x10c, 0x6f, 0x10c, 0x70, 0x10c, 0x71, 0x10c, 0x72, + 0x10c, 0x73, 0x10c, 0x74, 0x10c, 0x75, 0x10c, 0x76, + 0x10c, 0x77, 0x10c, 0x78, 0x10c, 0x79, 0x10c, 0x7a, + 0x10c, 0x7b, 0x10c, 0x7c, 0x10c, 0x7d, 0x10c, 0x7e, + 0x10c, 0x2985, 0x10c, 0x2986, 0x10d, 0x3002, 0x10d, 0x300c, + 0x10d, 0x300d, 0x10d, 0x3001, 0x10d, 0x30fb, 0x10d, 0x30f2, + 0x10d, 0x30a1, 0x10d, 0x30a3, 0x10d, 0x30a5, 0x10d, 0x30a7, + 0x10d, 0x30a9, 0x10d, 0x30e3, 0x10d, 0x30e5, 0x10d, 0x30e7, + 0x10d, 0x30c3, 0x10d, 0x30fc, 0x10d, 0x30a2, 0x10d, 0x30a4, + 0x10d, 0x30a6, 0x10d, 0x30a8, 0x10d, 0x30aa, 0x10d, 0x30ab, + 0x10d, 0x30ad, 0x10d, 0x30af, 0x10d, 0x30b1, 0x10d, 0x30b3, + 0x10d, 0x30b5, 0x10d, 0x30b7, 0x10d, 0x30b9, 0x10d, 0x30bb, + 0x10d, 0x30bd, 0x10d, 0x30bf, 0x10d, 0x30c1, 0x10d, 0x30c4, + 0x10d, 0x30c6, 0x10d, 0x30c8, 0x10d, 0x30ca, 0x10d, 0x30cb, + 0x10d, 0x30cc, 0x10d, 0x30cd, 0x10d, 0x30ce, 0x10d, 0x30cf, + 0x10d, 0x30d2, 0x10d, 0x30d5, 0x10d, 0x30d8, 0x10d, 0x30db, + 0x10d, 0x30de, 0x10d, 0x30df, 0x10d, 0x30e0, 0x10d, 0x30e1, + 0x10d, 0x30e2, 0x10d, 0x30e4, 0x10d, 0x30e6, 0x10d, 0x30e8, + 0x10d, 0x30e9, 0x10d, 0x30ea, 0x10d, 0x30eb, 0x10d, 0x30ec, + 0x10d, 0x30ed, 0x10d, 0x30ef, 0x10d, 0x30f3, 0x10d, 0x3099, + 0x10d, 0x309a, 0x10d, 0x3164, 0x10d, 0x3131, 0x10d, 0x3132, + 0x10d, 0x3133, 0x10d, 0x3134, 0x10d, 0x3135, 0x10d, 0x3136, + 0x10d, 0x3137, 0x10d, 0x3138, 0x10d, 0x3139, 0x10d, 0x313a, + 0x10d, 0x313b, 0x10d, 0x313c, 0x10d, 0x313d, 0x10d, 0x313e, + 0x10d, 0x313f, 0x10d, 0x3140, 0x10d, 0x3141, 0x10d, 0x3142, + 0x10d, 0x3143, 0x10d, 0x3144, 0x10d, 0x3145, 0x10d, 0x3146, + 0x10d, 0x3147, 0x10d, 0x3148, 0x10d, 0x3149, 0x10d, 0x314a, + 0x10d, 0x314b, 0x10d, 0x314c, 0x10d, 0x314d, 0x10d, 0x314e, + 0x10d, 0x314f, 0x10d, 0x3150, 0x10d, 0x3151, 0x10d, 0x3152, + 0x10d, 0x3153, 0x10d, 0x3154, 0x10d, 0x3155, 0x10d, 0x3156, + 0x10d, 0x3157, 0x10d, 0x3158, 0x10d, 0x3159, 0x10d, 0x315a, + 0x10d, 0x315b, 0x10d, 0x315c, 0x10d, 0x315d, 0x10d, 0x315e, + 0x10d, 0x315f, 0x10d, 0x3160, 0x10d, 0x3161, 0x10d, 0x3162, + 0x10d, 0x3163, 0x10c, 0xa2, 0x10c, 0xa3, 0x10c, 0xac, + 0x10c, 0xaf, 0x10c, 0xa6, 0x10c, 0xa5, 0x10c, 0x20a9, + 0x10d, 0x2502, 0x10d, 0x2190, 0x10d, 0x2191, 0x10d, 0x2192, + 0x10d, 0x2193, 0x10d, 0x25a0, 0x10d, 0x25cb, 0x401, 0xd804, + 0xdc99, 0xd804, 0xdcba, 0x401, 0xd804, 0xdc9b, 0xd804, 0xdcba, + 0x401, 0xd804, 0xdca5, 0xd804, 0xdcba, 0x401, 0xd804, 0xdd31, + 0xd804, 0xdd27, 0x401, 0xd804, 0xdd32, 0xd804, 0xdd27, 0x401, + 0xd804, 0xdf47, 0xd804, 0xdf3e, 0x401, 0xd804, 0xdf47, 0xd804, + 0xdf57, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcba, 0x401, 0xd805, + 0xdcb9, 0xd805, 0xdcb0, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcbd, + 0x401, 0xd805, 0xddb8, 0xd805, 0xddaf, 0x401, 0xd805, 0xddb9, + 0xd805, 0xddaf, 0x401, 0xd834, 0xdd57, 0xd834, 0xdd65, 0x401, + 0xd834, 0xdd58, 0xd834, 0xdd65, 0x401, 0xd834, 0xdd5f, 0xd834, + 0xdd6e, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6f, 0x401, 0xd834, + 0xdd5f, 0xd834, 0xdd70, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd71, + 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd72, 0x401, 0xd834, 0xddb9, + 0xd834, 0xdd65, 0x401, 0xd834, 0xddba, 0xd834, 0xdd65, 0x401, + 0xd834, 0xddbb, 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbc, 0xd834, + 0xdd6e, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6f, 0x401, 0xd834, + 0xddbc, 0xd834, 0xdd6f, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102, + 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, + 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102, + 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102, + 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102, + 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, + 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, + 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x43, 0x102, 0x44, 0x102, + 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x53, 0x102, + 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, + 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x66, 0x102, + 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, + 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, + 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, + 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, + 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x44, 0x102, + 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x49, 0x102, + 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, + 0x4f, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, + 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x131, 0x102, 0x237, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, 0x102, + 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, 0x102, + 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, 0x102, + 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, 0x102, + 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, 0x102, + 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, 0x102, + 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, 0x102, + 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, 0x102, + 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, 0x102, + 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, 0x102, + 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, 0x102, + 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, + 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, + 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, + 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, 0x102, + 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, 0x102, + 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, 0x102, + 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, 0x102, + 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, 0x102, + 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, 0x102, + 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, 0x102, + 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, 0x102, + 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, 0x102, + 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, 0x102, + 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, 0x102, + 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, + 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, + 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, + 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x3dc, 0x102, 0x3dd, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, 0x102, + 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, 0x102, + 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, 0x102, + 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, 0x102, + 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x627, 0x102, 0x628, 0x102, + 0x62c, 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, + 0x62d, 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, + 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, + 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, + 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, 0x62b, 0x102, + 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, 0x638, 0x102, + 0x63a, 0x102, 0x66e, 0x102, 0x6ba, 0x102, 0x6a1, 0x102, + 0x66f, 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, + 0x62d, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x644, 0x102, + 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, + 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, + 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, + 0x63a, 0x102, 0x62c, 0x102, 0x62d, 0x102, 0x64a, 0x102, + 0x644, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62e, 0x102, + 0x636, 0x102, 0x63a, 0x102, 0x6ba, 0x102, 0x66f, 0x102, + 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, 0x62d, 0x102, + 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x645, 0x102, + 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62a, 0x102, + 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, 0x638, 0x102, + 0x63a, 0x102, 0x66e, 0x102, 0x6a1, 0x102, 0x627, 0x102, + 0x628, 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x647, 0x102, + 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, 0x637, 0x102, + 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, + 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, + 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, + 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, + 0x638, 0x102, 0x63a, 0x102, 0x628, 0x102, 0x62c, 0x102, + 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, + 0x637, 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, + 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, + 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, + 0x636, 0x102, 0x638, 0x102, 0x63a, 0x210, 0x30, 0x2e, + 0x210, 0x30, 0x2c, 0x210, 0x31, 0x2c, 0x210, 0x32, + 0x2c, 0x210, 0x33, 0x2c, 0x210, 0x34, 0x2c, 0x210, + 0x35, 0x2c, 0x210, 0x36, 0x2c, 0x210, 0x37, 0x2c, + 0x210, 0x38, 0x2c, 0x210, 0x39, 0x2c, 0x310, 0x28, + 0x41, 0x29, 0x310, 0x28, 0x42, 0x29, 0x310, 0x28, + 0x43, 0x29, 0x310, 0x28, 0x44, 0x29, 0x310, 0x28, + 0x45, 0x29, 0x310, 0x28, 0x46, 0x29, 0x310, 0x28, + 0x47, 0x29, 0x310, 0x28, 0x48, 0x29, 0x310, 0x28, + 0x49, 0x29, 0x310, 0x28, 0x4a, 0x29, 0x310, 0x28, + 0x4b, 0x29, 0x310, 0x28, 0x4c, 0x29, 0x310, 0x28, + 0x4d, 0x29, 0x310, 0x28, 0x4e, 0x29, 0x310, 0x28, + 0x4f, 0x29, 0x310, 0x28, 0x50, 0x29, 0x310, 0x28, + 0x51, 0x29, 0x310, 0x28, 0x52, 0x29, 0x310, 0x28, + 0x53, 0x29, 0x310, 0x28, 0x54, 0x29, 0x310, 0x28, + 0x55, 0x29, 0x310, 0x28, 0x56, 0x29, 0x310, 0x28, + 0x57, 0x29, 0x310, 0x28, 0x58, 0x29, 0x310, 0x28, + 0x59, 0x29, 0x310, 0x28, 0x5a, 0x29, 0x310, 0x3014, + 0x53, 0x3015, 0x108, 0x43, 0x108, 0x52, 0x208, 0x43, + 0x44, 0x208, 0x57, 0x5a, 0x10f, 0x41, 0x10f, 0x42, + 0x10f, 0x43, 0x10f, 0x44, 0x10f, 0x45, 0x10f, 0x46, + 0x10f, 0x47, 0x10f, 0x48, 0x10f, 0x49, 0x10f, 0x4a, + 0x10f, 0x4b, 0x10f, 0x4c, 0x10f, 0x4d, 0x10f, 0x4e, + 0x10f, 0x4f, 0x10f, 0x50, 0x10f, 0x51, 0x10f, 0x52, + 0x10f, 0x53, 0x10f, 0x54, 0x10f, 0x55, 0x10f, 0x56, + 0x10f, 0x57, 0x10f, 0x58, 0x10f, 0x59, 0x10f, 0x5a, + 0x20f, 0x48, 0x56, 0x20f, 0x4d, 0x56, 0x20f, 0x53, + 0x44, 0x20f, 0x53, 0x53, 0x30f, 0x50, 0x50, 0x56, + 0x20f, 0x57, 0x43, 0x209, 0x4d, 0x43, 0x209, 0x4d, + 0x44, 0x20f, 0x44, 0x4a, 0x20f, 0x307b, 0x304b, 0x20f, + 0x30b3, 0x30b3, 0x10f, 0x30b5, 0x10f, 0x624b, 0x10f, 0x5b57, + 0x10f, 0x53cc, 0x10f, 0x30c7, 0x10f, 0x4e8c, 0x10f, 0x591a, + 0x10f, 0x89e3, 0x10f, 0x5929, 0x10f, 0x4ea4, 0x10f, 0x6620, + 0x10f, 0x7121, 0x10f, 0x6599, 0x10f, 0x524d, 0x10f, 0x5f8c, + 0x10f, 0x518d, 0x10f, 0x65b0, 0x10f, 0x521d, 0x10f, 0x7d42, + 0x10f, 0x751f, 0x10f, 0x8ca9, 0x10f, 0x58f0, 0x10f, 0x5439, + 0x10f, 0x6f14, 0x10f, 0x6295, 0x10f, 0x6355, 0x10f, 0x4e00, + 0x10f, 0x4e09, 0x10f, 0x904a, 0x10f, 0x5de6, 0x10f, 0x4e2d, + 0x10f, 0x53f3, 0x10f, 0x6307, 0x10f, 0x8d70, 0x10f, 0x6253, + 0x10f, 0x7981, 0x10f, 0x7a7a, 0x10f, 0x5408, 0x10f, 0x6e80, + 0x10f, 0x6709, 0x10f, 0x6708, 0x10f, 0x7533, 0x10f, 0x5272, + 0x10f, 0x55b6, 0x310, 0x3014, 0x672c, 0x3015, 0x310, 0x3014, + 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015, 0x310, 0x3014, + 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015, 0x310, 0x3014, + 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015, 0x310, 0x3014, + 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015, 0x108, 0x5f97, + 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38, 0x101, 0x4e41, + 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101, 0x4fae, 0x101, + 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101, 0x5099, 0x101, + 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201, 0xd841, 0xde3a, + 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164, 0x101, 0x5177, + 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101, 0x5167, 0x101, + 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197, 0x101, 0x51a4, + 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5, 0x201, 0xd864, + 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101, 0x34df, 0x101, + 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101, 0x5277, 0x101, + 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101, 0x52e4, 0x101, + 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101, 0x5317, 0x101, + 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101, 0x5373, 0x101, + 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101, 0x537f, 0x201, + 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca, 0x101, 0x53df, + 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101, 0x53f1, 0x101, + 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101, 0x5448, 0x101, + 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101, 0x5510, 0x101, + 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101, 0x5584, 0x101, + 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101, 0x55c2, 0x101, + 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101, 0x5651, 0x101, + 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101, 0x57ce, 0x101, + 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101, 0x5832, 0x101, + 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4, 0x101, 0x58f2, + 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a, 0x101, 0x5922, + 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201, 0xd845, 0xdeea, + 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27, 0x101, 0x59d8, + 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc, 0x101, 0x5b08, + 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846, 0xddc8, 0x101, + 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101, 0x5bf3, 0x201, + 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06, 0x101, 0x5f53, + 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60, 0x101, 0x5c6e, + 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847, 0xdde4, 0x101, + 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e, 0x101, 0x5d6b, + 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2, 0x101, 0x382f, + 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d, 0x101, 0x5e69, + 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101, 0x387c, 0x101, + 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101, 0x5eca, 0x201, + 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848, 0xdf31, 0x201, + 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22, 0x101, 0x5f22, + 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201, 0xd858, 0xddda, + 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3, 0x101, 0x5f9a, + 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9, 0x101, 0x6081, + 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094, 0x201, 0xd849, + 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101, 0x614c, 0x101, + 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101, 0x618e, 0x101, + 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101, 0x61de, 0x101, + 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101, 0x621b, 0x101, + 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101, 0x6350, 0x201, + 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc, 0x101, 0x6368, + 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a, 0xdff1, 0x101, + 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101, 0x3a2e, 0x101, + 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101, 0x6477, 0x101, + 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201, 0xd84c, 0xdc0a, + 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649, 0x101, 0x3b19, + 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4, 0x101, 0x5192, + 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c, 0x101, 0x80ad, + 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b, 0x101, 0x6721, + 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c, 0xdfc3, 0x101, + 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101, 0x6852, 0x101, + 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e, 0x101, 0x681f, + 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942, 0x101, 0x69a3, + 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d, 0xdea3, 0x101, + 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201, 0xd84e, 0xdca7, + 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72, 0x101, 0x6b9f, + 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e, 0xde8d, 0x201, + 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101, 0x6c4e, 0x201, + 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd, 0x101, 0x6c67, + 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77, 0x101, 0x6d41, + 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85, 0x201, 0xd84f, + 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101, 0x6e6e, 0x101, + 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201, 0xd84f, 0xded1, + 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f, 0xdf5e, 0x201, + 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039, 0x101, 0x701e, + 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a, 0x101, 0x707d, + 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841, 0xdd25, 0x101, + 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c, 0x201, 0xd850, + 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101, 0x7250, 0x201, + 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295, 0x201, 0xd851, + 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a, 0x101, 0x738b, + 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8, 0x101, 0x3eb8, + 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471, 0x101, 0x7485, + 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524, 0x201, 0xd853, + 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92, 0x101, 0x7570, + 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201, 0xd853, 0xdfa1, + 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44, 0x101, 0x3ffc, + 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854, 0xdcf3, 0x201, + 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201, 0xd854, 0xdd33, + 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f, 0x101, 0x774a, + 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046, 0x101, 0x4096, + 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101, 0x788c, 0x101, + 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26, 0x101, 0x7956, + 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5, 0x101, 0x798f, + 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40, 0x101, 0x7a4a, + 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201, 0xd856, 0xdea7, + 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101, 0x4202, 0x201, + 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9, 0x101, 0x4227, + 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101, 0x42a0, 0x101, + 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201, 0xd857, 0xdf86, + 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7, 0x101, 0x7e02, + 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858, 0xde28, 0x201, + 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858, 0xded9, 0x101, + 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95, 0x101, 0x7ffa, + 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201, 0xd859, 0xdd23, + 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101, 0x8070, 0x201, + 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2, 0x101, 0x8103, + 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5, 0x201, 0xd859, + 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c, 0xdf93, 0x201, + 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204, 0x101, 0x8f9e, + 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b, 0x101, 0x829d, + 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3, 0x101, 0x82bd, + 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101, 0x82e5, 0x101, + 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101, 0x8323, 0x101, + 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101, 0x8353, 0x101, + 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201, 0xd85b, 0xdc36, + 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5, 0x101, 0x452b, + 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516, 0x201, 0xd85c, + 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c, 0x101, 0x455d, + 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201, 0xd85c, 0xdcd2, + 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c, 0x101, 0x8667, + 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688, 0x101, 0x870e, + 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728, 0x101, 0x876b, + 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1, 0x101, 0x8801, + 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863, 0x201, 0xd85d, + 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101, 0x4635, 0x101, + 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae, 0x201, 0xd85e, + 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101, 0x8aa0, 0x101, + 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201, 0xd85f, 0xdca8, + 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b, 0x101, 0x8d77, + 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04, 0x101, 0x8dcb, + 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842, 0xdcde, 0x101, + 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2, 0x201, 0xd861, + 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101, 0x9111, 0x201, + 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238, 0x101, 0x92d7, + 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9, 0x101, 0x9415, + 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101, 0x4995, 0x101, + 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6, 0x101, 0x96c3, + 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864, 0xdd45, 0x201, + 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76, 0x101, 0x97e0, + 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201, 0xd865, 0xdc96, + 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829, 0x201, 0xd865, + 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101, 0x9929, 0x101, + 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101, 0x4bce, 0x201, + 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40, 0x101, 0x9cfd, + 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67, 0x201, 0xd868, + 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05, 0x201, 0xd868, + 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb, 0x101, 0x4d56, + 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05, 0x101, 0x9f0f, + 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869, 0xde00 +}; + +static const unsigned short uc_ligature_trie[] = { + // 0 - 0x3100 + + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 663, 695, 727, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 759, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 791, 631, 631, 631, 823, 855, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 887, 919, 631, 631, 951, 983, 631, + 631, 631, 1015, 631, 631, 631, 1047, 631, + 631, 1079, 1111, 631, 631, 631, 1143, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 1175, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 1207, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 631, 631, 631, 1239, 631, 631, 631, + + // 0x3100 - 0x12000 + + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1527, + 1783, 1271, 2039, 2295, 2551, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, + + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x0, 0xa9, 0x194, 0x1d5, 0x20e, 0xffff, 0x267, 0x2a8, + 0x305, 0x372, 0x3a3, 0x3b0, 0x3bd, 0xffff, 0xffff, 0x408, + 0xffff, 0x425, 0xffff, 0x43e, 0x45b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x47c, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x485, 0x4da, 0x4df, 0x4e4, 0x4ed, + 0x51a, 0xffff, 0xffff, 0xffff, 0xffff, 0x52f, 0x548, 0xffff, + 0x54d, 0x55a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x57d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x5d6, 0xffff, 0xffff, 0x611, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x690, 0x693, 0x6a0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x6a3, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6aa, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6ad, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b0, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b3, 0x6b6, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b9, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6be, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c3, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x6c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c9, 0x6d0, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d3, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x6db, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e0, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e3, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e6, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e9, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x700, 0x761, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x776, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x783, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x78c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x791, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x796, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x79b, 0xffff, 0xffff, 0x7a0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7a5, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#define GET_LIGATURE_INDEX(ucs4) \ + (ucs4 < 0x3100 \ + ? (uc_ligature_trie[uc_ligature_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ + : (ucs4 < 0x12000\ + ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)]\ + : 0xffff)) + +static const unsigned short uc_ligature_map[] = { + 0x54, 0x41, 0xc0, 0x45, 0xc8, 0x49, 0xcc, 0x4e, + 0x1f8, 0x4f, 0xd2, 0x55, 0xd9, 0x57, 0x1e80, 0x59, + 0x1ef2, 0x61, 0xe0, 0x65, 0xe8, 0x69, 0xec, 0x6e, + 0x1f9, 0x6f, 0xf2, 0x75, 0xf9, 0x77, 0x1e81, 0x79, + 0x1ef3, 0xa8, 0x1fed, 0xc2, 0x1ea6, 0xca, 0x1ec0, 0xd4, + 0x1ed2, 0xdc, 0x1db, 0xe2, 0x1ea7, 0xea, 0x1ec1, 0xf4, + 0x1ed3, 0xfc, 0x1dc, 0x102, 0x1eb0, 0x103, 0x1eb1, 0x112, + 0x1e14, 0x113, 0x1e15, 0x14c, 0x1e50, 0x14d, 0x1e51, 0x1a0, + 0x1edc, 0x1a1, 0x1edd, 0x1af, 0x1eea, 0x1b0, 0x1eeb, 0x391, + 0x1fba, 0x395, 0x1fc8, 0x397, 0x1fca, 0x399, 0x1fda, 0x39f, + 0x1ff8, 0x3a5, 0x1fea, 0x3a9, 0x1ffa, 0x3b1, 0x1f70, 0x3b5, + 0x1f72, 0x3b7, 0x1f74, 0x3b9, 0x1f76, 0x3bf, 0x1f78, 0x3c5, + 0x1f7a, 0x3c9, 0x1f7c, 0x3ca, 0x1fd2, 0x3cb, 0x1fe2, 0x415, + 0x400, 0x418, 0x40d, 0x435, 0x450, 0x438, 0x45d, 0x1f00, + 0x1f02, 0x1f01, 0x1f03, 0x1f08, 0x1f0a, 0x1f09, 0x1f0b, 0x1f10, + 0x1f12, 0x1f11, 0x1f13, 0x1f18, 0x1f1a, 0x1f19, 0x1f1b, 0x1f20, + 0x1f22, 0x1f21, 0x1f23, 0x1f28, 0x1f2a, 0x1f29, 0x1f2b, 0x1f30, + 0x1f32, 0x1f31, 0x1f33, 0x1f38, 0x1f3a, 0x1f39, 0x1f3b, 0x1f40, + 0x1f42, 0x1f41, 0x1f43, 0x1f48, 0x1f4a, 0x1f49, 0x1f4b, 0x1f50, + 0x1f52, 0x1f51, 0x1f53, 0x1f59, 0x1f5b, 0x1f60, 0x1f62, 0x1f61, + 0x1f63, 0x1f68, 0x1f6a, 0x1f69, 0x1f6b, 0x1fbf, 0x1fcd, 0x1ffe, + 0x1fdd, 0x75, 0x41, 0xc1, 0x43, 0x106, 0x45, 0xc9, + 0x47, 0x1f4, 0x49, 0xcd, 0x4b, 0x1e30, 0x4c, 0x139, + 0x4d, 0x1e3e, 0x4e, 0x143, 0x4f, 0xd3, 0x50, 0x1e54, + 0x52, 0x154, 0x53, 0x15a, 0x55, 0xda, 0x57, 0x1e82, + 0x59, 0xdd, 0x5a, 0x179, 0x61, 0xe1, 0x63, 0x107, + 0x65, 0xe9, 0x67, 0x1f5, 0x69, 0xed, 0x6b, 0x1e31, + 0x6c, 0x13a, 0x6d, 0x1e3f, 0x6e, 0x144, 0x6f, 0xf3, + 0x70, 0x1e55, 0x72, 0x155, 0x73, 0x15b, 0x75, 0xfa, + 0x77, 0x1e83, 0x79, 0xfd, 0x7a, 0x17a, 0xa8, 0x385, + 0xc2, 0x1ea4, 0xc5, 0x1fa, 0xc6, 0x1fc, 0xc7, 0x1e08, + 0xca, 0x1ebe, 0xcf, 0x1e2e, 0xd4, 0x1ed0, 0xd5, 0x1e4c, + 0xd8, 0x1fe, 0xdc, 0x1d7, 0xe2, 0x1ea5, 0xe5, 0x1fb, + 0xe6, 0x1fd, 0xe7, 0x1e09, 0xea, 0x1ebf, 0xef, 0x1e2f, + 0xf4, 0x1ed1, 0xf5, 0x1e4d, 0xf8, 0x1ff, 0xfc, 0x1d8, + 0x102, 0x1eae, 0x103, 0x1eaf, 0x112, 0x1e16, 0x113, 0x1e17, + 0x14c, 0x1e52, 0x14d, 0x1e53, 0x168, 0x1e78, 0x169, 0x1e79, + 0x1a0, 0x1eda, 0x1a1, 0x1edb, 0x1af, 0x1ee8, 0x1b0, 0x1ee9, + 0x391, 0x386, 0x395, 0x388, 0x397, 0x389, 0x399, 0x38a, + 0x39f, 0x38c, 0x3a5, 0x38e, 0x3a9, 0x38f, 0x3b1, 0x3ac, + 0x3b5, 0x3ad, 0x3b7, 0x3ae, 0x3b9, 0x3af, 0x3bf, 0x3cc, + 0x3c5, 0x3cd, 0x3c9, 0x3ce, 0x3ca, 0x390, 0x3cb, 0x3b0, + 0x3d2, 0x3d3, 0x413, 0x403, 0x41a, 0x40c, 0x433, 0x453, + 0x43a, 0x45c, 0x1f00, 0x1f04, 0x1f01, 0x1f05, 0x1f08, 0x1f0c, + 0x1f09, 0x1f0d, 0x1f10, 0x1f14, 0x1f11, 0x1f15, 0x1f18, 0x1f1c, + 0x1f19, 0x1f1d, 0x1f20, 0x1f24, 0x1f21, 0x1f25, 0x1f28, 0x1f2c, + 0x1f29, 0x1f2d, 0x1f30, 0x1f34, 0x1f31, 0x1f35, 0x1f38, 0x1f3c, + 0x1f39, 0x1f3d, 0x1f40, 0x1f44, 0x1f41, 0x1f45, 0x1f48, 0x1f4c, + 0x1f49, 0x1f4d, 0x1f50, 0x1f54, 0x1f51, 0x1f55, 0x1f59, 0x1f5d, + 0x1f60, 0x1f64, 0x1f61, 0x1f65, 0x1f68, 0x1f6c, 0x1f69, 0x1f6d, + 0x1fbf, 0x1fce, 0x1ffe, 0x1fde, 0x20, 0x41, 0xc2, 0x43, + 0x108, 0x45, 0xca, 0x47, 0x11c, 0x48, 0x124, 0x49, + 0xce, 0x4a, 0x134, 0x4f, 0xd4, 0x53, 0x15c, 0x55, + 0xdb, 0x57, 0x174, 0x59, 0x176, 0x5a, 0x1e90, 0x61, + 0xe2, 0x63, 0x109, 0x65, 0xea, 0x67, 0x11d, 0x68, + 0x125, 0x69, 0xee, 0x6a, 0x135, 0x6f, 0xf4, 0x73, + 0x15d, 0x75, 0xfb, 0x77, 0x175, 0x79, 0x177, 0x7a, + 0x1e91, 0x1ea0, 0x1eac, 0x1ea1, 0x1ead, 0x1eb8, 0x1ec6, 0x1eb9, + 0x1ec7, 0x1ecc, 0x1ed8, 0x1ecd, 0x1ed9, 0x1c, 0x41, 0xc3, + 0x45, 0x1ebc, 0x49, 0x128, 0x4e, 0xd1, 0x4f, 0xd5, + 0x55, 0x168, 0x56, 0x1e7c, 0x59, 0x1ef8, 0x61, 0xe3, + 0x65, 0x1ebd, 0x69, 0x129, 0x6e, 0xf1, 0x6f, 0xf5, + 0x75, 0x169, 0x76, 0x1e7d, 0x79, 0x1ef9, 0xc2, 0x1eaa, + 0xca, 0x1ec4, 0xd4, 0x1ed6, 0xe2, 0x1eab, 0xea, 0x1ec5, + 0xf4, 0x1ed7, 0x102, 0x1eb4, 0x103, 0x1eb5, 0x1a0, 0x1ee0, + 0x1a1, 0x1ee1, 0x1af, 0x1eee, 0x1b0, 0x1eef, 0x2c, 0x41, + 0x100, 0x45, 0x112, 0x47, 0x1e20, 0x49, 0x12a, 0x4f, + 0x14c, 0x55, 0x16a, 0x59, 0x232, 0x61, 0x101, 0x65, + 0x113, 0x67, 0x1e21, 0x69, 0x12b, 0x6f, 0x14d, 0x75, + 0x16b, 0x79, 0x233, 0xc4, 0x1de, 0xc6, 0x1e2, 0xd5, + 0x22c, 0xd6, 0x22a, 0xdc, 0x1d5, 0xe4, 0x1df, 0xe6, + 0x1e3, 0xf5, 0x22d, 0xf6, 0x22b, 0xfc, 0x1d6, 0x1ea, + 0x1ec, 0x1eb, 0x1ed, 0x226, 0x1e0, 0x227, 0x1e1, 0x22e, + 0x230, 0x22f, 0x231, 0x391, 0x1fb9, 0x399, 0x1fd9, 0x3a5, + 0x1fe9, 0x3b1, 0x1fb1, 0x3b9, 0x1fd1, 0x3c5, 0x1fe1, 0x418, + 0x4e2, 0x423, 0x4ee, 0x438, 0x4e3, 0x443, 0x4ef, 0x1e36, + 0x1e38, 0x1e37, 0x1e39, 0x1e5a, 0x1e5c, 0x1e5b, 0x1e5d, 0x20, + 0x41, 0x102, 0x45, 0x114, 0x47, 0x11e, 0x49, 0x12c, + 0x4f, 0x14e, 0x55, 0x16c, 0x61, 0x103, 0x65, 0x115, + 0x67, 0x11f, 0x69, 0x12d, 0x6f, 0x14f, 0x75, 0x16d, + 0x228, 0x1e1c, 0x229, 0x1e1d, 0x391, 0x1fb8, 0x399, 0x1fd8, + 0x3a5, 0x1fe8, 0x3b1, 0x1fb0, 0x3b9, 0x1fd0, 0x3c5, 0x1fe0, + 0x410, 0x4d0, 0x415, 0x4d6, 0x416, 0x4c1, 0x418, 0x419, + 0x423, 0x40e, 0x430, 0x4d1, 0x435, 0x4d7, 0x436, 0x4c2, + 0x438, 0x439, 0x443, 0x45e, 0x1ea0, 0x1eb6, 0x1ea1, 0x1eb7, + 0x2e, 0x41, 0x226, 0x42, 0x1e02, 0x43, 0x10a, 0x44, + 0x1e0a, 0x45, 0x116, 0x46, 0x1e1e, 0x47, 0x120, 0x48, + 0x1e22, 0x49, 0x130, 0x4d, 0x1e40, 0x4e, 0x1e44, 0x4f, + 0x22e, 0x50, 0x1e56, 0x52, 0x1e58, 0x53, 0x1e60, 0x54, + 0x1e6a, 0x57, 0x1e86, 0x58, 0x1e8a, 0x59, 0x1e8e, 0x5a, + 0x17b, 0x61, 0x227, 0x62, 0x1e03, 0x63, 0x10b, 0x64, + 0x1e0b, 0x65, 0x117, 0x66, 0x1e1f, 0x67, 0x121, 0x68, + 0x1e23, 0x6d, 0x1e41, 0x6e, 0x1e45, 0x6f, 0x22f, 0x70, + 0x1e57, 0x72, 0x1e59, 0x73, 0x1e61, 0x74, 0x1e6b, 0x77, + 0x1e87, 0x78, 0x1e8b, 0x79, 0x1e8f, 0x7a, 0x17c, 0x15a, + 0x1e64, 0x15b, 0x1e65, 0x160, 0x1e66, 0x161, 0x1e67, 0x17f, + 0x1e9b, 0x1e62, 0x1e68, 0x1e63, 0x1e69, 0x36, 0x41, 0xc4, + 0x45, 0xcb, 0x48, 0x1e26, 0x49, 0xcf, 0x4f, 0xd6, + 0x55, 0xdc, 0x57, 0x1e84, 0x58, 0x1e8c, 0x59, 0x178, + 0x61, 0xe4, 0x65, 0xeb, 0x68, 0x1e27, 0x69, 0xef, + 0x6f, 0xf6, 0x74, 0x1e97, 0x75, 0xfc, 0x77, 0x1e85, + 0x78, 0x1e8d, 0x79, 0xff, 0xd5, 0x1e4e, 0xf5, 0x1e4f, + 0x16a, 0x1e7a, 0x16b, 0x1e7b, 0x399, 0x3aa, 0x3a5, 0x3ab, + 0x3b9, 0x3ca, 0x3c5, 0x3cb, 0x3d2, 0x3d4, 0x406, 0x407, + 0x410, 0x4d2, 0x415, 0x401, 0x416, 0x4dc, 0x417, 0x4de, + 0x418, 0x4e4, 0x41e, 0x4e6, 0x423, 0x4f0, 0x427, 0x4f4, + 0x42b, 0x4f8, 0x42d, 0x4ec, 0x430, 0x4d3, 0x435, 0x451, + 0x436, 0x4dd, 0x437, 0x4df, 0x438, 0x4e5, 0x43e, 0x4e7, + 0x443, 0x4f1, 0x447, 0x4f5, 0x44b, 0x4f9, 0x44d, 0x4ed, + 0x456, 0x457, 0x4d8, 0x4da, 0x4d9, 0x4db, 0x4e8, 0x4ea, + 0x4e9, 0x4eb, 0x18, 0x41, 0x1ea2, 0x45, 0x1eba, 0x49, + 0x1ec8, 0x4f, 0x1ece, 0x55, 0x1ee6, 0x59, 0x1ef6, 0x61, + 0x1ea3, 0x65, 0x1ebb, 0x69, 0x1ec9, 0x6f, 0x1ecf, 0x75, + 0x1ee7, 0x79, 0x1ef7, 0xc2, 0x1ea8, 0xca, 0x1ec2, 0xd4, + 0x1ed4, 0xe2, 0x1ea9, 0xea, 0x1ec3, 0xf4, 0x1ed5, 0x102, + 0x1eb2, 0x103, 0x1eb3, 0x1a0, 0x1ede, 0x1a1, 0x1edf, 0x1af, + 0x1eec, 0x1b0, 0x1eed, 0x6, 0x41, 0xc5, 0x55, 0x16e, + 0x61, 0xe5, 0x75, 0x16f, 0x77, 0x1e98, 0x79, 0x1e99, + 0x6, 0x4f, 0x150, 0x55, 0x170, 0x6f, 0x151, 0x75, + 0x171, 0x423, 0x4f2, 0x443, 0x4f3, 0x25, 0x41, 0x1cd, + 0x43, 0x10c, 0x44, 0x10e, 0x45, 0x11a, 0x47, 0x1e6, + 0x48, 0x21e, 0x49, 0x1cf, 0x4b, 0x1e8, 0x4c, 0x13d, + 0x4e, 0x147, 0x4f, 0x1d1, 0x52, 0x158, 0x53, 0x160, + 0x54, 0x164, 0x55, 0x1d3, 0x5a, 0x17d, 0x61, 0x1ce, + 0x63, 0x10d, 0x64, 0x10f, 0x65, 0x11b, 0x67, 0x1e7, + 0x68, 0x21f, 0x69, 0x1d0, 0x6a, 0x1f0, 0x6b, 0x1e9, + 0x6c, 0x13e, 0x6e, 0x148, 0x6f, 0x1d2, 0x72, 0x159, + 0x73, 0x161, 0x74, 0x165, 0x75, 0x1d4, 0x7a, 0x17e, + 0xdc, 0x1d9, 0xfc, 0x1da, 0x1b7, 0x1ee, 0x292, 0x1ef, + 0xe, 0x41, 0x200, 0x45, 0x204, 0x49, 0x208, 0x4f, + 0x20c, 0x52, 0x210, 0x55, 0x214, 0x61, 0x201, 0x65, + 0x205, 0x69, 0x209, 0x6f, 0x20d, 0x72, 0x211, 0x75, + 0x215, 0x474, 0x476, 0x475, 0x477, 0xc, 0x41, 0x202, + 0x45, 0x206, 0x49, 0x20a, 0x4f, 0x20e, 0x52, 0x212, + 0x55, 0x216, 0x61, 0x203, 0x65, 0x207, 0x69, 0x20b, + 0x6f, 0x20f, 0x72, 0x213, 0x75, 0x217, 0xe, 0x391, + 0x1f08, 0x395, 0x1f18, 0x397, 0x1f28, 0x399, 0x1f38, 0x39f, + 0x1f48, 0x3a9, 0x1f68, 0x3b1, 0x1f00, 0x3b5, 0x1f10, 0x3b7, + 0x1f20, 0x3b9, 0x1f30, 0x3bf, 0x1f40, 0x3c1, 0x1fe4, 0x3c5, + 0x1f50, 0x3c9, 0x1f60, 0x10, 0x391, 0x1f09, 0x395, 0x1f19, + 0x397, 0x1f29, 0x399, 0x1f39, 0x39f, 0x1f49, 0x3a1, 0x1fec, + 0x3a5, 0x1f59, 0x3a9, 0x1f69, 0x3b1, 0x1f01, 0x3b5, 0x1f11, + 0x3b7, 0x1f21, 0x3b9, 0x1f31, 0x3bf, 0x1f41, 0x3c1, 0x1fe5, + 0x3c5, 0x1f51, 0x3c9, 0x1f61, 0x4, 0x4f, 0x1a0, 0x55, + 0x1af, 0x6f, 0x1a1, 0x75, 0x1b0, 0x2a, 0x41, 0x1ea0, + 0x42, 0x1e04, 0x44, 0x1e0c, 0x45, 0x1eb8, 0x48, 0x1e24, + 0x49, 0x1eca, 0x4b, 0x1e32, 0x4c, 0x1e36, 0x4d, 0x1e42, + 0x4e, 0x1e46, 0x4f, 0x1ecc, 0x52, 0x1e5a, 0x53, 0x1e62, + 0x54, 0x1e6c, 0x55, 0x1ee4, 0x56, 0x1e7e, 0x57, 0x1e88, + 0x59, 0x1ef4, 0x5a, 0x1e92, 0x61, 0x1ea1, 0x62, 0x1e05, + 0x64, 0x1e0d, 0x65, 0x1eb9, 0x68, 0x1e25, 0x69, 0x1ecb, + 0x6b, 0x1e33, 0x6c, 0x1e37, 0x6d, 0x1e43, 0x6e, 0x1e47, + 0x6f, 0x1ecd, 0x72, 0x1e5b, 0x73, 0x1e63, 0x74, 0x1e6d, + 0x75, 0x1ee5, 0x76, 0x1e7f, 0x77, 0x1e89, 0x79, 0x1ef5, + 0x7a, 0x1e93, 0x1a0, 0x1ee2, 0x1a1, 0x1ee3, 0x1af, 0x1ef0, + 0x1b0, 0x1ef1, 0x2, 0x55, 0x1e72, 0x75, 0x1e73, 0x2, + 0x41, 0x1e00, 0x61, 0x1e01, 0x4, 0x53, 0x218, 0x54, + 0x21a, 0x73, 0x219, 0x74, 0x21b, 0x16, 0x43, 0xc7, + 0x44, 0x1e10, 0x45, 0x228, 0x47, 0x122, 0x48, 0x1e28, + 0x4b, 0x136, 0x4c, 0x13b, 0x4e, 0x145, 0x52, 0x156, + 0x53, 0x15e, 0x54, 0x162, 0x63, 0xe7, 0x64, 0x1e11, + 0x65, 0x229, 0x67, 0x123, 0x68, 0x1e29, 0x6b, 0x137, + 0x6c, 0x13c, 0x6e, 0x146, 0x72, 0x157, 0x73, 0x15f, + 0x74, 0x163, 0xa, 0x41, 0x104, 0x45, 0x118, 0x49, + 0x12e, 0x4f, 0x1ea, 0x55, 0x172, 0x61, 0x105, 0x65, + 0x119, 0x69, 0x12f, 0x6f, 0x1eb, 0x75, 0x173, 0xc, + 0x44, 0x1e12, 0x45, 0x1e18, 0x4c, 0x1e3c, 0x4e, 0x1e4a, + 0x54, 0x1e70, 0x55, 0x1e76, 0x64, 0x1e13, 0x65, 0x1e19, + 0x6c, 0x1e3d, 0x6e, 0x1e4b, 0x74, 0x1e71, 0x75, 0x1e77, + 0x2, 0x48, 0x1e2a, 0x68, 0x1e2b, 0x6, 0x45, 0x1e1a, + 0x49, 0x1e2c, 0x55, 0x1e74, 0x65, 0x1e1b, 0x69, 0x1e2d, + 0x75, 0x1e75, 0x11, 0x42, 0x1e06, 0x44, 0x1e0e, 0x4b, + 0x1e34, 0x4c, 0x1e3a, 0x4e, 0x1e48, 0x52, 0x1e5e, 0x54, + 0x1e6e, 0x5a, 0x1e94, 0x62, 0x1e07, 0x64, 0x1e0f, 0x68, + 0x1e96, 0x6b, 0x1e35, 0x6c, 0x1e3b, 0x6e, 0x1e49, 0x72, + 0x1e5f, 0x74, 0x1e6f, 0x7a, 0x1e95, 0x2c, 0x3c, 0x226e, + 0x3d, 0x2260, 0x3e, 0x226f, 0x2190, 0x219a, 0x2192, 0x219b, + 0x2194, 0x21ae, 0x21d0, 0x21cd, 0x21d2, 0x21cf, 0x21d4, 0x21ce, + 0x2203, 0x2204, 0x2208, 0x2209, 0x220b, 0x220c, 0x2223, 0x2224, + 0x2225, 0x2226, 0x223c, 0x2241, 0x2243, 0x2244, 0x2245, 0x2247, + 0x2248, 0x2249, 0x224d, 0x226d, 0x2261, 0x2262, 0x2264, 0x2270, + 0x2265, 0x2271, 0x2272, 0x2274, 0x2273, 0x2275, 0x2276, 0x2278, + 0x2277, 0x2279, 0x227a, 0x2280, 0x227b, 0x2281, 0x227c, 0x22e0, + 0x227d, 0x22e1, 0x2282, 0x2284, 0x2283, 0x2285, 0x2286, 0x2288, + 0x2287, 0x2289, 0x2291, 0x22e2, 0x2292, 0x22e3, 0x22a2, 0x22ac, + 0x22a8, 0x22ad, 0x22a9, 0x22ae, 0x22ab, 0x22af, 0x22b2, 0x22ea, + 0x22b3, 0x22eb, 0x22b4, 0x22ec, 0x22b5, 0x22ed, 0x1d, 0xa8, + 0x1fc1, 0x3b1, 0x1fb6, 0x3b7, 0x1fc6, 0x3b9, 0x1fd6, 0x3c5, + 0x1fe6, 0x3c9, 0x1ff6, 0x3ca, 0x1fd7, 0x3cb, 0x1fe7, 0x1f00, + 0x1f06, 0x1f01, 0x1f07, 0x1f08, 0x1f0e, 0x1f09, 0x1f0f, 0x1f20, + 0x1f26, 0x1f21, 0x1f27, 0x1f28, 0x1f2e, 0x1f29, 0x1f2f, 0x1f30, + 0x1f36, 0x1f31, 0x1f37, 0x1f38, 0x1f3e, 0x1f39, 0x1f3f, 0x1f50, + 0x1f56, 0x1f51, 0x1f57, 0x1f59, 0x1f5f, 0x1f60, 0x1f66, 0x1f61, + 0x1f67, 0x1f68, 0x1f6e, 0x1f69, 0x1f6f, 0x1fbf, 0x1fcf, 0x1ffe, + 0x1fdf, 0x3f, 0x391, 0x1fbc, 0x397, 0x1fcc, 0x3a9, 0x1ffc, + 0x3ac, 0x1fb4, 0x3ae, 0x1fc4, 0x3b1, 0x1fb3, 0x3b7, 0x1fc3, + 0x3c9, 0x1ff3, 0x3ce, 0x1ff4, 0x1f00, 0x1f80, 0x1f01, 0x1f81, + 0x1f02, 0x1f82, 0x1f03, 0x1f83, 0x1f04, 0x1f84, 0x1f05, 0x1f85, + 0x1f06, 0x1f86, 0x1f07, 0x1f87, 0x1f08, 0x1f88, 0x1f09, 0x1f89, + 0x1f0a, 0x1f8a, 0x1f0b, 0x1f8b, 0x1f0c, 0x1f8c, 0x1f0d, 0x1f8d, + 0x1f0e, 0x1f8e, 0x1f0f, 0x1f8f, 0x1f20, 0x1f90, 0x1f21, 0x1f91, + 0x1f22, 0x1f92, 0x1f23, 0x1f93, 0x1f24, 0x1f94, 0x1f25, 0x1f95, + 0x1f26, 0x1f96, 0x1f27, 0x1f97, 0x1f28, 0x1f98, 0x1f29, 0x1f99, + 0x1f2a, 0x1f9a, 0x1f2b, 0x1f9b, 0x1f2c, 0x1f9c, 0x1f2d, 0x1f9d, + 0x1f2e, 0x1f9e, 0x1f2f, 0x1f9f, 0x1f60, 0x1fa0, 0x1f61, 0x1fa1, + 0x1f62, 0x1fa2, 0x1f63, 0x1fa3, 0x1f64, 0x1fa4, 0x1f65, 0x1fa5, + 0x1f66, 0x1fa6, 0x1f67, 0x1fa7, 0x1f68, 0x1fa8, 0x1f69, 0x1fa9, + 0x1f6a, 0x1faa, 0x1f6b, 0x1fab, 0x1f6c, 0x1fac, 0x1f6d, 0x1fad, + 0x1f6e, 0x1fae, 0x1f6f, 0x1faf, 0x1f70, 0x1fb2, 0x1f74, 0x1fc2, + 0x1f7c, 0x1ff2, 0x1fb6, 0x1fb7, 0x1fc6, 0x1fc7, 0x1ff6, 0x1ff7, + 0x1, 0x627, 0x622, 0x6, 0x627, 0x623, 0x648, 0x624, + 0x64a, 0x626, 0x6c1, 0x6c2, 0x6d2, 0x6d3, 0x6d5, 0x6c0, + 0x1, 0x627, 0x625, 0x3, 0x928, 0x929, 0x930, 0x931, + 0x933, 0x934, 0x1, 0x9c7, 0x9cb, 0x1, 0x9c7, 0x9cc, + 0x1, 0xb47, 0xb4b, 0x1, 0xb47, 0xb48, 0x1, 0xb47, + 0xb4c, 0x2, 0xbc6, 0xbca, 0xbc7, 0xbcb, 0x2, 0xb92, + 0xb94, 0xbc6, 0xbcc, 0x1, 0xc46, 0xc48, 0x1, 0xcc6, + 0xcca, 0x3, 0xcbf, 0xcc0, 0xcc6, 0xcc7, 0xcca, 0xccb, + 0x1, 0xcc6, 0xcc8, 0x2, 0xd46, 0xd4a, 0xd47, 0xd4b, + 0x1, 0xd46, 0xd4c, 0x2, 0xdd9, 0xdda, 0xddc, 0xddd, + 0x1, 0xdd9, 0xddc, 0x1, 0xdd9, 0xdde, 0x1, 0x1025, + 0x1026, 0xb, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, + 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b11, 0x1b12, 0x1b3a, 0x1b3b, + 0x1b3c, 0x1b3d, 0x1b3e, 0x1b40, 0x1b3f, 0x1b41, 0x1b42, 0x1b43, + 0x30, 0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, + 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, + 0x3060, 0x3061, 0x3062, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306f, 0x3070, 0x3072, 0x3073, 0x3075, 0x3076, 0x3078, + 0x3079, 0x307b, 0x307c, 0x309d, 0x309e, 0x30a6, 0x30f4, 0x30ab, + 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, + 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, + 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c4, + 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30cf, 0x30d0, 0x30d2, + 0x30d3, 0x30d5, 0x30d6, 0x30d8, 0x30d9, 0x30db, 0x30dc, 0x30ef, + 0x30f7, 0x30f0, 0x30f8, 0x30f1, 0x30f9, 0x30f2, 0x30fa, 0x30fd, + 0x30fe, 0xa, 0x306f, 0x3071, 0x3072, 0x3074, 0x3075, 0x3077, + 0x3078, 0x307a, 0x307b, 0x307d, 0x30cf, 0x30d1, 0x30d2, 0x30d4, + 0x30d5, 0x30d7, 0x30d8, 0x30da, 0x30db, 0x30dd, 0x3, 0xd804, + 0xdc99, 0xd804, 0xdc9a, 0xd804, 0xdc9b, 0xd804, 0xdc9c, 0xd804, + 0xdca5, 0xd804, 0xdcab, 0x2, 0xd804, 0xdd31, 0xd804, 0xdd2e, + 0xd804, 0xdd32, 0xd804, 0xdd2f, 0x1, 0xd804, 0xdf47, 0xd804, + 0xdf4b, 0x1, 0xd804, 0xdf47, 0xd804, 0xdf4c, 0x1, 0xd805, + 0xdcb9, 0xd805, 0xdcbc, 0x1, 0xd805, 0xdcb9, 0xd805, 0xdcbb, + 0x1, 0xd805, 0xdcb9, 0xd805, 0xdcbe, 0x2, 0xd805, 0xddb8, + 0xd805, 0xddba, 0xd805, 0xddb9, 0xd805, 0xddbb +}; + + +struct NormalizationCorrection { + uint ucs4; + uint old_mapping; + int version; +}; + +static const NormalizationCorrection uc_normalization_corrections[] = { + { 0xf951, 0x96fb, 6 }, + { 0x2f868, 0x2136a, 7 }, + { 0x2f874, 0x5f33, 7 }, + { 0x2f91f, 0x43ab, 7 }, + { 0x2f95f, 0x7aae, 7 }, + { 0x2f9bf, 0x4d57, 7 }, +}; + +enum { NumNormalizationCorrections = 6 }; +enum { NormalizationCorrectionsVersionMax = 7 }; + +} // namespace QUnicodeTables + +using namespace QUnicodeTables; + +QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp similarity index 96% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp index f293ef9cc..eb78a1326 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -314,12 +314,20 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int } } else if (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32)) { red_shift = calc_shift(red_mask); + if (((red_mask >> red_shift) + 1) == 0) + return false; red_scale = 256 / ((red_mask >> red_shift) + 1); green_shift = calc_shift(green_mask); + if (((green_mask >> green_shift) + 1) == 0) + return false; green_scale = 256 / ((green_mask >> green_shift) + 1); blue_shift = calc_shift(blue_mask); + if (((blue_mask >> blue_shift) + 1) == 0) + return false; blue_scale = 256 / ((blue_mask >> blue_shift) + 1); alpha_shift = calc_shift(alpha_mask); + if (((alpha_mask >> alpha_shift) + 1) == 0) + return false; alpha_scale = 256 / ((alpha_mask >> alpha_shift) + 1); } else if (comp == BMP_RGB && (nbits == 24 || nbits == 32)) { blue_mask = 0x000000ff; @@ -476,12 +484,6 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int p = data + (h-y-1)*bpl; break; case 2: // delta (jump) - // Protection - if ((uint)x >= (uint)w) - x = w-1; - if ((uint)y >= (uint)h) - y = h-1; - { quint8 tmp; d->getChar((char *)&tmp); @@ -489,6 +491,13 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int d->getChar((char *)&tmp); y += tmp; } + + // Protection + if ((uint)x >= (uint)w) + x = w-1; + if ((uint)y >= (uint)h) + y = h-1; + p = data + (h-y-1)*bpl + x; break; default: // absolute mode @@ -631,7 +640,7 @@ bool qt_write_dib(QDataStream &s, QImage image) if (nbits == 1 || nbits == 8) { // direct output for (y=image.height()-1; y>=0; y--) { - if (d->write((char*)image.constScanLine(y), bpl) == -1) + if (d->write((const char*)image.constScanLine(y), bpl) == -1) return false; } return true; @@ -791,6 +800,10 @@ bool QBmpHandler::write(const QImage &img) case QImage::Format_ARGB32: image = img; break; + case QImage::Format_Alpha8: + case QImage::Format_Grayscale8: + image = img.convertToFormat(QImage::Format_Indexed8); + break; default: if (img.hasAlphaChannel()) image = img.convertToFormat(QImage::Format_ARGB32); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h similarity index 96% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h index 00fccad7d..2d1cdd90f 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp new file mode 100644 index 000000000..a3e0e04c9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp @@ -0,0 +1,748 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include + +#include "qimage.h" +#include "qcolor.h" + +QT_BEGIN_NAMESPACE + +/* + * Copyright (C) 2004, 2005 Daniel M. Duley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* OTHER CREDITS: + * + * This is the normal smoothscale method, based on Imlib2's smoothscale. + * + * Originally I took the algorithm used in NetPBM and Qt and added MMX/3dnow + * optimizations. It ran in about 1/2 the time as Qt. Then I ported Imlib's + * C algorithm and it ran at about the same speed as my MMX optimized one... + * Finally I ported Imlib's MMX version and it ran in less than half the + * time as my MMX algorithm, (taking only a quarter of the time Qt does). + * After further optimization it seems to run at around 1/6th. + * + * Changes include formatting, namespaces and other C++'ings, removal of old + * #ifdef'ed code, and removal of unneeded border calculation code. + * + * Imlib2 is (C) Carsten Haitzler and various contributors. The MMX code + * is by Willem Monsuwe . All other modifications are + * (C) Daniel M. Duley. + */ + + +namespace QImageScale { + const unsigned int** qimageCalcYPoints(const unsigned int *src, int sw, int sh, int dh); + int* qimageCalcXPoints(int sw, int dw); + int* qimageCalcApoints(int s, int d, int up); + QImageScaleInfo* qimageFreeScaleInfo(QImageScaleInfo *isi); + QImageScaleInfo *qimageCalcScaleInfo(const QImage &img, int sw, int sh, + int dw, int dh, char aa); +} + +using namespace QImageScale; + +// +// Code ported from Imlib... +// + +const unsigned int** QImageScale::qimageCalcYPoints(const unsigned int *src, + int sw, int sh, int dh) +{ + const unsigned int **p; + int j = 0, rv = 0; + qint64 val, inc; + + if(dh < 0){ + dh = -dh; + rv = 1; + } + p = new const unsigned int* [dh+1]; + + int up = qAbs(dh) >= sh; + val = up ? 0x8000 * sh / dh - 0x8000 : 0; + inc = (((qint64)sh) << 16) / dh; + for (int i = 0; i < dh; i++) { + p[j++] = src + qMax(0LL, val >> 16) * sw; + val += inc; + } + if (rv) { + for (int i = dh / 2; --i >= 0; ) { + const unsigned int *tmp = p[i]; + p[i] = p[dh - i - 1]; + p[dh - i - 1] = tmp; + } + } + return(p); +} + +int* QImageScale::qimageCalcXPoints(int sw, int dw) +{ + int *p, j = 0, rv = 0; + qint64 val, inc; + + if(dw < 0){ + dw = -dw; + rv = 1; + } + p = new int[dw+1]; + + int up = qAbs(dw) >= sw; + val = up ? 0x8000 * sw / dw - 0x8000 : 0; + inc = (((qint64)sw) << 16) / dw; + for (int i = 0; i < dw; i++) { + p[j++] = qMax(0LL, val >> 16); + val += inc; + } + + if (rv) { + for (int i = dw / 2; --i >= 0; ) { + int tmp = p[i]; + p[i] = p[dw - i - 1]; + p[dw - i - 1] = tmp; + } + } + return(p); +} + +int* QImageScale::qimageCalcApoints(int s, int d, int up) +{ + int *p, j = 0, rv = 0; + + if(d < 0){ + rv = 1; + d = -d; + } + p = new int[d]; + + /* scaling up */ + if(up){ + qint64 val, inc; + + val = 0x8000 * s / d - 0x8000; + inc = (((qint64)s) << 16) / d; + for (int i = 0; i < d; i++) { + int pos = val >> 16; + if (pos < 0) + p[j++] = 0; + else if (pos >= (s - 1)) + p[j++] = 0; + else + p[j++] = (val >> 8) - ((val >> 8) & 0xffffff00); + val += inc; + } + } + /* scaling down */ + else { + qint64 val = 0; + qint64 inc = (((qint64)s) << 16) / d; + int Cp = (((d << 14) + s - 1) / s); + for (int i = 0; i < d; i++) { + int ap = ((0x10000 - (val & 0xffff)) * Cp) >> 16; + p[j] = ap | (Cp << 16); + j++; + val += inc; + } + } + if(rv){ + int tmp; + for (int i = d / 2; --i >= 0; ) { + tmp = p[i]; + p[i] = p[d - i - 1]; + p[d - i - 1] = tmp; + } + } + return p; +} + +QImageScaleInfo* QImageScale::qimageFreeScaleInfo(QImageScaleInfo *isi) +{ + if(isi){ + delete[] isi->xpoints; + delete[] isi->ypoints; + delete[] isi->xapoints; + delete[] isi->yapoints; + delete isi; + } + return 0; +} + +QImageScaleInfo* QImageScale::qimageCalcScaleInfo(const QImage &img, + int sw, int sh, + int dw, int dh, char aa) +{ + QImageScaleInfo *isi; + int scw, sch; + + scw = dw * qlonglong(img.width()) / sw; + sch = dh * qlonglong(img.height()) / sh; + + isi = new QImageScaleInfo; + if(!isi) + return 0; + memset(isi, 0, sizeof(QImageScaleInfo)); + + isi->xup_yup = (qAbs(dw) >= sw) + ((qAbs(dh) >= sh) << 1); + + isi->xpoints = qimageCalcXPoints(img.width(), scw); + if(!isi->xpoints) + return(qimageFreeScaleInfo(isi)); + isi->ypoints = qimageCalcYPoints((const unsigned int *)img.scanLine(0), + img.bytesPerLine() / 4, img.height(), sch); + if (!isi->ypoints) + return(qimageFreeScaleInfo(isi)); + if(aa) { + isi->xapoints = qimageCalcApoints(img.width(), scw, isi->xup_yup & 1); + if(!isi->xapoints) + return(qimageFreeScaleInfo(isi)); + isi->yapoints = qimageCalcApoints(img.height(), sch, isi->xup_yup & 2); + if(!isi->yapoints) + return(qimageFreeScaleInfo(isi)); + } + return(isi); +} + + +static void qt_qimageScaleAARGBA_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); + +static void qt_qimageScaleAARGBA_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); + +static void qt_qimageScaleAARGBA_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +#if defined(QT_COMPILER_SUPPORTS_SSE4_1) +template +void qt_qimageScaleAARGBA_up_x_down_y_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +template +void qt_qimageScaleAARGBA_down_x_up_y_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +template +void qt_qimageScaleAARGBA_down_xy_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +#endif + +static void qt_qimageScaleAARGBA_up_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + /* calculate the source line we'll scan from */ + const unsigned int *sptr = ypoints[dyy + y]; + unsigned int *dptr = dest + dx + ((y + dy) * dow); + const int yap = yapoints[dyy + y]; + if (yap > 0) { + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; + if (xap > 0) + *dptr = interpolate_4_pixels(pix[0], pix[1], pix[sow], pix[sow + 1], xap, yap); + else + *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - yap, pix[sow], yap); + dptr++; + } + } else { + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; + if (xap > 0) + *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); + else + *dptr = pix[0]; + dptr++; + } + } + } +} + +/* scale by area sampling */ +static void qt_qimageScaleAARGBA(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + /* scaling up both ways */ + if (isi->xup_yup == 3){ + qt_qimageScaleAARGBA_up_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down vertically */ + else if (isi->xup_yup == 1) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_up_x_down_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_up_x_down_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally */ + else if (isi->xup_yup == 2) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_x_up_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_down_x_up_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally & vertically */ + else { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_xy_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_down_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } +} + +inline static void qt_qimageScaleAARGBA_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b, int &a) +{ + r = qRed(*pix) * xyap; + g = qGreen(*pix) * xyap; + b = qBlue(*pix) * xyap; + a = qAlpha(*pix) * xyap; + int j; + for (j = (1 << 14) - xyap; j > Cxy; j -= Cxy) { + pix += step; + r += qRed(*pix) * Cxy; + g += qGreen(*pix) * Cxy; + b += qBlue(*pix) * Cxy; + a += qAlpha(*pix) * Cxy; + } + pix += step; + r += qRed(*pix) * j; + g += qGreen(*pix) * j; + b += qBlue(*pix) * j; + a += qAlpha(*pix) * j; +} + +static void qt_qimageScaleAARGBA_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b, a; + qt_qimageScaleAARGBA_helper(sptr, yap, Cy, sow, r, g, b, a); + + int xap = xapoints[x]; + if (xap > 0) { + int rr, gg, bb, aa; + qt_qimageScaleAARGBA_helper(sptr + 1, yap, Cy, sow, rr, gg, bb, aa); + + r = r * (256 - xap); + g = g * (256 - xap); + b = b * (256 - xap); + a = a * (256 - xap); + r = (r + (rr * xap)) >> 8; + g = (g + (gg * xap)) >> 8; + b = (b + (bb * xap)) >> 8; + a = (a + (aa * xap)) >> 8; + } + *dptr++ = qRgba(r >> 14, g >> 14, b >> 14, a >> 14); + } + } +} + +static void qt_qimageScaleAARGBA_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b, a; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, r, g, b, a); + + int yap = yapoints[dyy + y]; + if (yap > 0) { + int rr, gg, bb, aa; + qt_qimageScaleAARGBA_helper(sptr + sow, xap, Cx, 1, rr, gg, bb, aa); + + r = r * (256 - yap); + g = g * (256 - yap); + b = b * (256 - yap); + a = a * (256 - yap); + r = (r + (rr * yap)) >> 8; + g = (g + (gg * yap)) >> 8; + b = (b + (bb * yap)) >> 8; + a = (a + (aa * yap)) >> 8; + } + *dptr = qRgba(r >> 14, g >> 14, b >> 14, a >> 14); + dptr++; + } + } +} + +static void qt_qimageScaleAARGBA_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int rx, gx, bx, ax; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + + int r = ((rx>>4) * yap); + int g = ((gx>>4) * yap); + int b = ((bx>>4) * yap); + int a = ((ax>>4) * yap); + + int j; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) { + sptr += sow; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + r += ((rx>>4) * Cy); + g += ((gx>>4) * Cy); + b += ((bx>>4) * Cy); + a += ((ax>>4) * Cy); + } + sptr += sow; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + + r += ((rx>>4) * j); + g += ((gx>>4) * j); + b += ((bx>>4) * j); + a += ((ax>>4) * j); + + *dptr = qRgba(r >> 24, g >> 24, b >> 24, a >> 24); + dptr++; + } + } +} + +static void qt_qimageScaleAARGB_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +static void qt_qimageScaleAARGB_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +static void qt_qimageScaleAARGB_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +/* scale by area sampling - IGNORE the ALPHA byte*/ +static void qt_qimageScaleAARGB(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + /* scaling up both ways */ + if (isi->xup_yup == 3) { + qt_qimageScaleAARGBA_up_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down vertically */ + else if (isi->xup_yup == 1) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_up_x_down_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_up_x_down_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally */ + else if (isi->xup_yup == 2) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_x_up_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_down_x_up_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally & vertically */ + else { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_xy_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_down_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } +} + + +inline static void qt_qimageScaleAARGB_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b) +{ + r = qRed(*pix) * xyap; + g = qGreen(*pix) * xyap; + b = qBlue(*pix) * xyap; + int j; + for (j = (1 << 14) - xyap; j > Cxy; j -= Cxy) { + pix += step; + r += qRed(*pix) * Cxy; + g += qGreen(*pix) * Cxy; + b += qBlue(*pix) * Cxy; + } + pix += step; + r += qRed(*pix) * j; + g += qGreen(*pix) * j; + b += qBlue(*pix) * j; +} + +static void qt_qimageScaleAARGB_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b; + qt_qimageScaleAARGB_helper(sptr, yap, Cy, sow, r, g, b); + + int xap = xapoints[x]; + if (xap > 0) { + int rr, bb, gg; + qt_qimageScaleAARGB_helper(sptr + 1, yap, Cy, sow, rr, gg, bb); + + r = r * (256 - xap); + g = g * (256 - xap); + b = b * (256 - xap); + r = (r + (rr * xap)) >> 8; + g = (g + (gg * xap)) >> 8; + b = (b + (bb * xap)) >> 8; + } + *dptr++ = qRgb(r >> 14, g >> 14, b >> 14); + } + } +} + +static void qt_qimageScaleAARGB_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, r, g, b); + + int yap = yapoints[dyy + y]; + if (yap > 0) { + int rr, bb, gg; + qt_qimageScaleAARGB_helper(sptr + sow, xap, Cx, 1, rr, gg, bb); + + r = r * (256 - yap); + g = g * (256 - yap); + b = b * (256 - yap); + r = (r + (rr * yap)) >> 8; + g = (g + (gg * yap)) >> 8; + b = (b + (bb * yap)) >> 8; + } + *dptr++ = qRgb(r >> 14, g >> 14, b >> 14); + } + } +} + +static void qt_qimageScaleAARGB_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int rx, gx, bx; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + int r = (rx >> 4) * yap; + int g = (gx >> 4) * yap; + int b = (bx >> 4) * yap; + + int j; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) { + sptr += sow; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + r += (rx >> 4) * Cy; + g += (gx >> 4) * Cy; + b += (bx >> 4) * Cy; + } + sptr += sow; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + r += (rx >> 4) * j; + g += (gx >> 4) * j; + b += (bx >> 4) * j; + + *dptr = qRgb(r >> 24, g >> 24, b >> 24); + dptr++; + } + } +} + +QImage qSmoothScaleImage(const QImage &src, int dw, int dh) +{ + QImage buffer; + if (src.isNull() || dw <= 0 || dh <= 0) + return buffer; + + int w = src.width(); + int h = src.height(); + QImageScaleInfo *scaleinfo = + qimageCalcScaleInfo(src, w, h, dw, dh, true); + if (!scaleinfo) + return buffer; + + buffer = QImage(dw, dh, src.format()); + if (buffer.isNull()) { + qWarning("QImage: out of memory, returning null"); + qimageFreeScaleInfo(scaleinfo); + return QImage(); + } + + if (src.hasAlphaChannel()) + qt_qimageScaleAARGBA(scaleinfo, (unsigned int *)buffer.scanLine(0), + 0, 0, 0, 0, dw, dh, dw, src.bytesPerLine() / 4); + else + qt_qimageScaleAARGB(scaleinfo, (unsigned int *)buffer.scanLine(0), + 0, 0, 0, 0, dw, dh, dw, src.bytesPerLine() / 4); + + qimageFreeScaleInfo(scaleinfo); + return buffer; +} + +QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h similarity index 84% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h index 5e823183d..468d671c0 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -80,8 +80,8 @@ public: if (systemTransform.type() <= QTransform::TxTranslate) systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); else { - // Transform the system clip region back from device pixels to device-independent pixels before - // applying systemTransform, which already has transform from device-independent pixels to device pixels +// Transform the system clip region back from device pixels to device-independent pixels before +// applying systemTransform, which already has transform from device-independent pixels to device pixels #ifdef Q_OS_MAC QTransform scaleTransform; const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp index 3c88caa39..082925006 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -643,15 +643,15 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const while (oldPos < len && !attributes[oldPos].graphemeBoundary) oldPos++; } else { - while (oldPos < len && d->atSpace(oldPos)) + while (oldPos < len && attributes[oldPos].whiteSpace) oldPos++; - if (oldPos < len && d->atWordSeparator(oldPos)) { + if (oldPos < len && d->atWordSeparator(oldPos)) { oldPos++; while (oldPos < len && d->atWordSeparator(oldPos)) oldPos++; } else { - while (oldPos < len && !d->atSpace(oldPos) && !d->atWordSeparator(oldPos)) + while (oldPos < len && !attributes[oldPos].whiteSpace && !d->atWordSeparator(oldPos)) oldPos++; } } @@ -680,7 +680,7 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const while (oldPos && !attributes[oldPos].graphemeBoundary) oldPos--; } else { - while (oldPos && d->atSpace(oldPos-1)) + while (oldPos > 0 && attributes[oldPos - 1].whiteSpace) oldPos--; if (oldPos && d->atWordSeparator(oldPos-1)) { @@ -688,7 +688,7 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const while (oldPos && d->atWordSeparator(oldPos-1)) oldPos--; } else { - while (oldPos && !d->atSpace(oldPos-1) && !d->atWordSeparator(oldPos-1)) + while (oldPos > 0 && !attributes[oldPos - 1].whiteSpace && !d->atWordSeparator(oldPos-1)) oldPos--; } } @@ -1777,6 +1777,11 @@ void QTextLine::layout_helper(int maxGlyphs) QFixed x = line.x + line.textWidth + lbh.tmpData.textWidth + lbh.spaceData.textWidth; QFixed tabWidth = eng->calculateTabWidth(item, x); + attributes = eng->attributes(); + if (!attributes) + return; + lbh.logClusters = eng->layoutData->logClustersPtr; + lbh.glyphs = eng->shapedGlyphs(¤t); lbh.spaceData.textWidth += tabWidth; lbh.spaceData.length++; @@ -2064,9 +2069,8 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine, // Make a font for this particular engine QRawFont font; QRawFontPrivate *fontD = QRawFontPrivate::get(font); - fontD->fontEngine = fontEngine; - fontD->thread = QThread::currentThread(); - fontD->fontEngine->ref.ref(); + fontD->setFontEngine(fontEngine); + QVarLengthArray glyphsArray; QVarLengthArray positionsArray; @@ -2088,7 +2092,9 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine, qreal minY = 0; qreal maxY = 0; QVector glyphs; + glyphs.reserve(glyphsArray.size()); QVector positions; + positions.reserve(glyphsArray.size()); for (int i=0; isin6_family = AF_INET6; - sockAddrIPv6->sin6_scope_id = address.scopeId().toInt(); + sockAddrIPv6->sin6_scope_id = address.scopeId().toUInt(); WSAHtons(socketDescriptor, port, &(sockAddrIPv6->sin6_port)); Q_IPV6ADDR tmp = address.toIPv6Address(); memcpy(&(sockAddrIPv6->sin6_addr.qt_s6_addr), &tmp, sizeof(tmp)); @@ -383,8 +442,15 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc #endif socketDescriptor = socket; - return true; + // Make the socket nonblocking. + if (!setOption(QAbstractSocketEngine::NonBlockingSocketOption, 1)) { + setError(QAbstractSocket::UnsupportedSocketOperationError, NonBlockingInitFailedErrorString); + q_func()->close(); + return false; + } + + return true; } /*! \internal @@ -397,19 +463,8 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co if (!q->isValid()) return -1; - int n = -1; - int level = SOL_SOCKET; // default - + // handle non-getsockopt switch (opt) { - case QNativeSocketEngine::ReceiveBufferSocketOption: - n = SO_RCVBUF; - break; - case QNativeSocketEngine::SendBufferSocketOption: - n = SO_SNDBUF; - break; - case QNativeSocketEngine::BroadcastSocketOption: - n = SO_BROADCAST; - break; case QNativeSocketEngine::NonBlockingSocketOption: { unsigned long buf = 0; if (WSAIoctl(socketDescriptor, FIONBIO, 0,0, &buf, sizeof(buf), 0,0,0) == 0) @@ -418,53 +473,21 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co return -1; break; } - case QNativeSocketEngine::AddressReusable: - n = SO_REUSEADDR; - break; - case QNativeSocketEngine::BindExclusively: - n = SO_EXCLUSIVEADDRUSE; - break; - case QNativeSocketEngine::ReceiveOutOfBandData: - n = SO_OOBINLINE; - break; - case QNativeSocketEngine::LowDelayOption: - level = IPPROTO_TCP; - n = TCP_NODELAY; - break; - case QNativeSocketEngine::KeepAliveOption: - n = SO_KEEPALIVE; - break; - case QNativeSocketEngine::MulticastTtlOption: - - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_HOPS; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_TTL; - } - break; - case QNativeSocketEngine::MulticastLoopbackOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_LOOP; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_LOOP; - } - break; case QNativeSocketEngine::TypeOfServiceOption: return -1; + + default: break; } #if Q_BYTE_ORDER != Q_LITTLE_ENDIAN #error code assumes windows is little endian #endif + int n, level; int v = 0; //note: windows doesn't write to all bytes if the option type is smaller than int QT_SOCKOPTLEN_T len = sizeof(v); + + convertToLevelAndOption(opt, socketProtocol, level, n); if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0) return v; WS_ERROR_DEBUG(WSAGetLastError()); @@ -481,21 +504,12 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt if (!q->isValid()) return false; - int n = 0; - int level = SOL_SOCKET; // default - + // handle non-setsockopt options switch (opt) { - case QNativeSocketEngine::ReceiveBufferSocketOption: - n = SO_RCVBUF; - break; case QNativeSocketEngine::SendBufferSocketOption: // see QTBUG-30478 SO_SNDBUF should not be used on Vista or later if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) return false; - n = SO_SNDBUF; - break; - case QNativeSocketEngine::BroadcastSocketOption: - n = SO_BROADCAST; break; case QNativeSocketEngine::NonBlockingSocketOption: { @@ -509,47 +523,15 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt return true; break; } - case QNativeSocketEngine::AddressReusable: - n = SO_REUSEADDR; - break; - case QNativeSocketEngine::BindExclusively: - n = SO_EXCLUSIVEADDRUSE; - break; - case QNativeSocketEngine::ReceiveOutOfBandData: - n = SO_OOBINLINE; - break; - case QNativeSocketEngine::LowDelayOption: - level = IPPROTO_TCP; - n = TCP_NODELAY; - break; - case QNativeSocketEngine::KeepAliveOption: - n = SO_KEEPALIVE; - break; - case QNativeSocketEngine::MulticastTtlOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_HOPS; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_TTL; - } - break; - case QNativeSocketEngine::MulticastLoopbackOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_LOOP; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_LOOP; - } - break; case QNativeSocketEngine::TypeOfServiceOption: return false; + + default: break; } + int n, level; + convertToLevelAndOption(opt, socketProtocol, level, n); if (::setsockopt(socketDescriptor, level, n, (char*)&v, sizeof(v)) != 0) { WS_ERROR_DEBUG(WSAGetLastError()); return false; @@ -651,7 +633,7 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin setPortAndAddress(&sockAddrIPv4, &sockAddrIPv6, port, address, &sockAddrPtr, &sockAddrSize); - if (socketProtocol == QAbstractSocket::IPv6Protocol && address.toIPv4Address()) { + if ((socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) && address.toIPv4Address()) { //IPV6_V6ONLY option must be cleared to connect to a V4 mapped address if (QSysInfo::windowsVersion() >= QSysInfo::WV_6_0) { DWORD ipv6only = 0; @@ -709,7 +691,7 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin errorDetected = true; break; } - if (value == WSAEADDRNOTAVAIL) { + if (value == WSAEADDRNOTAVAIL) { setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString); socketState = QAbstractSocket::UnconnectedState; errorDetected = true; @@ -858,9 +840,6 @@ bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &a, quint16 port) return false; } - localPort = port; - localAddress = address; - #if defined (QNATIVESOCKETENGINE_DEBUG) qDebug("QNativeSocketEnginePrivate::nativeBind(%s, %i) == true", address.toString().toLatin1().constData(), port); @@ -1037,7 +1016,7 @@ bool QNativeSocketEnginePrivate::nativeLeaveMulticastGroup(const QHostAddress &g QNetworkInterface QNativeSocketEnginePrivate::nativeMulticastInterface() const { - if (socketProtocol == QAbstractSocket::IPv6Protocol) { + if (socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) { uint v; QT_SOCKOPTLEN_T sizeofv = sizeof(v); if (::getsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &v, &sizeofv) == -1) @@ -1071,7 +1050,7 @@ QNetworkInterface QNativeSocketEnginePrivate::nativeMulticastInterface() const bool QNativeSocketEnginePrivate::nativeSetMulticastInterface(const QNetworkInterface &iface) { - if (socketProtocol == QAbstractSocket::IPv6Protocol) { + if (socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) { uint v = iface.isValid() ? iface.index() : 0; return (::setsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &v, sizeof(v)) != -1); } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp similarity index 63% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp index efa70140a..190683ef9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -52,37 +52,6 @@ QT_BEGIN_NAMESPACE -typedef struct { - quint16 majorVersion; - quint16 minorVersion; - quint16 numTables; - quint16 searchRange; - quint16 entrySelector; - quint16 rangeShift; -} OFFSET_TABLE; - -typedef struct { - quint32 tag; - quint32 checkSum; - quint32 offset; - quint32 length; -} TABLE_DIRECTORY; - -typedef struct { - quint16 fontSelector; - quint16 nrCount; - quint16 storageOffset; -} NAME_TABLE_HEADER; - -typedef struct { - quint16 platformID; - quint16 encodingID; - quint16 languageID; - quint16 nameID; - quint16 stringLength; - quint16 stringOffset; -} NAME_RECORD; - void QBasicFontDatabase::populateFontDatabase() { QString fontpath = fontDir(); @@ -106,6 +75,24 @@ void QBasicFontDatabase::populateFontDatabase() } } +inline static void setHintingPreference(QFontEngine *engine, QFont::HintingPreference hintingPreference) +{ + switch (hintingPreference) { + case QFont::PreferNoHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintNone); + break; + case QFont::PreferFullHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintFull); + break; + case QFont::PreferVerticalHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintLight); + break; + case QFont::PreferDefaultHinting: + // Leave it as it is + break; + } +} + QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, void *usrPtr) { FontFile *fontfile = static_cast (usrPtr); @@ -114,12 +101,24 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, void *usrPt fid.index = fontfile->indexValue; bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias); - QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono; - QFontEngineFT *engine = new QFontEngineFT(fontDef); + QFontEngineFT::GlyphFormat format = QFontEngineFT::Format_Mono; + if (antialias) { + QFontEngine::SubpixelAntialiasingType subpixelType = subpixelAntialiasingTypeHint(); + if (subpixelType == QFontEngine::Subpixel_None || (fontDef.styleStrategy & QFont::NoSubpixelAntialias)) { + format = QFontEngineFT::Format_A8; + engine->subpixelType = QFontEngine::Subpixel_None; + } else { + format = QFontEngineFT::Format_A32; + engine->subpixelType = subpixelType; + } + } + if (!engine->init(fid, antialias, format) || engine->invalid()) { delete engine; engine = 0; + } else { + setHintingPreference(engine, static_cast(fontDef.hintingPreference)); } return engine; @@ -172,21 +171,7 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QByteArray &fontData, qreal pi } fe->updateFamilyNameAndStyle(); - - switch (hintingPreference) { - case QFont::PreferNoHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintNone); - break; - case QFont::PreferFullHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintFull); - break; - case QFont::PreferVerticalHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintLight); - break; - default: - // Leave it as it is - break; - } + setHintingPreference(fe, hintingPreference); return fe; } @@ -296,7 +281,7 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt FT_Face face; FT_Error error; if (!fontData.isEmpty()) { - error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); + error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); } else { error = __ft_New_Face(library, file.constData(), index, &face); } @@ -347,41 +332,26 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt if (supportedWritingSystems) *supportedWritingSystems = writingSystems; - if (os2->usWeightClass == 0) - ; - else if (os2->usWeightClass < 150) - weight = qt_thinFontWeight; - else if (os2->usWeightClass < 250) - weight = qt_extralightFontWeight; - else if (os2->usWeightClass < 350) - weight = QFont::Light; - else if (os2->usWeightClass < 450) - weight = QFont::Normal; - else if (os2->usWeightClass < 550) - weight = qt_mediumFontWeight; - else if (os2->usWeightClass < 650) - weight = QFont::DemiBold; - else if (os2->usWeightClass < 750) - weight = QFont::Bold; - else if (os2->usWeightClass < 1000) - weight = QFont::Black; - - if (os2->panose[2] >= 2) { + if (os2->usWeightClass) { + weight = QPlatformFontDatabase::weightFromInteger(os2->usWeightClass); + } else if (os2->panose[2]) { int w = os2->panose[2]; if (w <= 1) - weight = qt_thinFontWeight; + weight = QFont::Thin; else if (w <= 2) - weight = qt_extralightFontWeight; + weight = QFont::ExtraLight; else if (w <= 3) weight = QFont::Light; else if (w <= 5) weight = QFont::Normal; else if (w <= 6) - weight = qt_mediumFontWeight; + weight = QFont::Medium; else if (w <= 7) weight = QFont::DemiBold; else if (w <= 8) weight = QFont::Bold; + else if (w <= 9) + weight = QFont::ExtraBold; else if (w <= 10) weight = QFont::Black; } @@ -404,92 +374,4 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt return families; } -QString QBasicFontDatabase::fontNameFromTTFile(const QString &filename) -{ - QFile f(filename); - QString retVal; - qint64 bytesRead; - qint64 bytesToRead; - - if (f.open(QIODevice::ReadOnly)) { - OFFSET_TABLE ttOffsetTable; - bytesToRead = sizeof(OFFSET_TABLE); - bytesRead = f.read((char*)&ttOffsetTable, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttOffsetTable.numTables = qFromBigEndian(ttOffsetTable.numTables); - ttOffsetTable.majorVersion = qFromBigEndian(ttOffsetTable.majorVersion); - ttOffsetTable.minorVersion = qFromBigEndian(ttOffsetTable.minorVersion); - - if (ttOffsetTable.majorVersion != 1 || ttOffsetTable.minorVersion != 0) - return retVal; - - TABLE_DIRECTORY tblDir; - bool found = false; - - for (int i = 0; i < ttOffsetTable.numTables; i++) { - bytesToRead = sizeof(TABLE_DIRECTORY); - bytesRead = f.read((char*)&tblDir, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - if (qFromBigEndian(tblDir.tag) == MAKE_TAG('n', 'a', 'm', 'e')) { - found = true; - tblDir.length = qFromBigEndian(tblDir.length); - tblDir.offset = qFromBigEndian(tblDir.offset); - break; - } - } - - if (found) { - f.seek(tblDir.offset); - NAME_TABLE_HEADER ttNTHeader; - bytesToRead = sizeof(NAME_TABLE_HEADER); - bytesRead = f.read((char*)&ttNTHeader, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttNTHeader.nrCount = qFromBigEndian(ttNTHeader.nrCount); - ttNTHeader.storageOffset = qFromBigEndian(ttNTHeader.storageOffset); - NAME_RECORD ttRecord; - found = false; - - for (int i = 0; i < ttNTHeader.nrCount; i++) { - bytesToRead = sizeof(NAME_RECORD); - bytesRead = f.read((char*)&ttRecord, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttRecord.nameID = qFromBigEndian(ttRecord.nameID); - if (ttRecord.nameID == 1) { - ttRecord.stringLength = qFromBigEndian(ttRecord.stringLength); - ttRecord.stringOffset = qFromBigEndian(ttRecord.stringOffset); - int nPos = f.pos(); - f.seek(tblDir.offset + ttRecord.stringOffset + ttNTHeader.storageOffset); - - QByteArray nameByteArray = f.read(ttRecord.stringLength); - if (!nameByteArray.isEmpty()) { - if (ttRecord.encodingID == 256 || ttRecord.encodingID == 768) { - //This is UTF-16 in big endian - int stringLength = ttRecord.stringLength / 2; - retVal.resize(stringLength); - QChar *data = retVal.data(); - const ushort *srcData = (const ushort *)nameByteArray.data(); - for (int i = 0; i < stringLength; ++i) - data[i] = qFromBigEndian(srcData[i]); - return retVal; - } else if (ttRecord.encodingID == 0) { - //This is Latin1 - retVal = QString::fromLatin1(nameByteArray); - } else { - qWarning("Could not retrieve Font name from file: %s", qPrintable(QDir::toNativeSeparators(filename))); - } - break; - } - f.seek(nPos); - } - } - } - f.close(); - } - return retVal; -} - QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp similarity index 87% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index f4d6fcd13..9f1df7082 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -54,6 +54,13 @@ QT_BEGIN_NAMESPACE +static const int maxWeight = 99; + +static inline int mapToQtWeightForRange(int fcweight, int fcLower, int fcUpper, int qtLower, int qtUpper) +{ + return qtLower + ((fcweight - fcLower) * (qtUpper - qtLower)) / (fcUpper - fcLower); +} + static inline bool requiresOpenType(int writingSystem) { return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) @@ -68,26 +75,28 @@ static inline int weightFromFcWeight(int fcweight) // mapping. This ensures that where there is a corresponding enum on both sides (for example // FC_WEIGHT_DEMIBOLD and QFont::DemiBold) we map one to the other but other values map // to intermediate Qt weights. - const int maxWeight = 99; - int qtweight; - if (fcweight < 0) - qtweight = 0; - else if (fcweight <= FC_WEIGHT_LIGHT) - qtweight = (fcweight * QFont::Light) / FC_WEIGHT_LIGHT; - else if (fcweight <= FC_WEIGHT_NORMAL) - qtweight = QFont::Light + ((fcweight - FC_WEIGHT_LIGHT) * (QFont::Normal - QFont::Light)) / (FC_WEIGHT_NORMAL - FC_WEIGHT_LIGHT); - else if (fcweight <= FC_WEIGHT_DEMIBOLD) - qtweight = QFont::Normal + ((fcweight - FC_WEIGHT_NORMAL) * (QFont::DemiBold - QFont::Normal)) / (FC_WEIGHT_DEMIBOLD - FC_WEIGHT_NORMAL); - else if (fcweight <= FC_WEIGHT_BOLD) - qtweight = QFont::DemiBold + ((fcweight - FC_WEIGHT_DEMIBOLD) * (QFont::Bold - QFont::DemiBold)) / (FC_WEIGHT_BOLD - FC_WEIGHT_DEMIBOLD); - else if (fcweight <= FC_WEIGHT_BLACK) - qtweight = QFont::Bold + ((fcweight - FC_WEIGHT_BOLD) * (QFont::Black - QFont::Bold)) / (FC_WEIGHT_BLACK - FC_WEIGHT_BOLD); - else if (fcweight <= FC_WEIGHT_ULTRABLACK) - qtweight = QFont::Black + ((fcweight - FC_WEIGHT_BLACK) * (maxWeight - QFont::Black)) / (FC_WEIGHT_ULTRABLACK - FC_WEIGHT_BLACK); - else - qtweight = maxWeight; - return qtweight; + if (fcweight <= FC_WEIGHT_THIN) + return QFont::Thin; + if (fcweight <= FC_WEIGHT_ULTRALIGHT) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_THIN, FC_WEIGHT_ULTRALIGHT, QFont::Thin, QFont::ExtraLight); + if (fcweight <= FC_WEIGHT_LIGHT) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRALIGHT, FC_WEIGHT_LIGHT, QFont::ExtraLight, QFont::Light); + if (fcweight <= FC_WEIGHT_NORMAL) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_LIGHT, FC_WEIGHT_NORMAL, QFont::Light, QFont::Normal); + if (fcweight <= FC_WEIGHT_MEDIUM) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_NORMAL, FC_WEIGHT_MEDIUM, QFont::Normal, QFont::Medium); + if (fcweight <= FC_WEIGHT_DEMIBOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_MEDIUM, FC_WEIGHT_DEMIBOLD, QFont::Medium, QFont::DemiBold); + if (fcweight <= FC_WEIGHT_BOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_DEMIBOLD, FC_WEIGHT_BOLD, QFont::DemiBold, QFont::Bold); + if (fcweight <= FC_WEIGHT_ULTRABOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_BOLD, FC_WEIGHT_ULTRABOLD, QFont::Bold, QFont::ExtraBold); + if (fcweight <= FC_WEIGHT_BLACK) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRABOLD, FC_WEIGHT_BLACK, QFont::ExtraBold, QFont::Black); + if (fcweight <= FC_WEIGHT_ULTRABLACK) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_BLACK, FC_WEIGHT_ULTRABLACK, QFont::Black, maxWeight); + return maxWeight; } static inline int stretchFromFcWidth(int fcwidth) @@ -209,7 +218,30 @@ static const char *specialLanguages[] = { "hmd", // Miao "sa", // Sharada "srb", // SoraSompeng - "doi" // Takri + "doi", // Takri + "lez", // CaucasianAlbanian + "bsq", // BassaVah + "fr", // Duployan + "sq", // Elbasan + "sa", // Grantha + "hnj", // PahawhHmong + "sd", // Khojki + "lab", // LinearA + "hi", // Mahajani + "xmn", // Manichaean + "men", // MendeKikakui + "mr", // Modi + "mru", // Mro + "xna", // OldNorthArabian + "arc", // Nabataean + "arc", // Palmyrene + "ctd", // PauCinHau + "kv", // OldPermic + "pal", // PsalterPahlavi + "sa", // Siddham + "sd", // Khudawadi + "mai", // Tirhuta + "hoc" // WarangCiti }; Q_STATIC_ASSERT(sizeof(specialLanguages) / sizeof(const char *) == QChar::ScriptCount); @@ -270,7 +302,7 @@ static const char *openType[] = { "deva", // Devanagari "beng", // Bengali "guru", // Gurmukhi - "gurj", // Gujarati + "gujr", // Gujarati "orya", // Oriya "taml", // Tamil "telu", // Telugu @@ -530,6 +562,28 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin break; } + if (QGuiApplication::platformNativeInterface()->nativeResourceForScreen("nofonthinting", + QGuiApplication::primaryScreen())) { + return QFontEngine::HintNone; + } + + int hint_style = 0; + if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultMatch) { + switch (hint_style) { + case FC_HINT_NONE: + return QFontEngine::HintNone; + case FC_HINT_SLIGHT: + return QFontEngine::HintLight; + case FC_HINT_MEDIUM: + return QFontEngine::HintMedium; + case FC_HINT_FULL: + return QFontEngine::HintFull; + default: + Q_UNREACHABLE(); + break; + } + } + if (useXftConf) { void *hintStyleResource = QGuiApplication::platformNativeInterface()->nativeResourceForScreen("hintstyle", @@ -539,27 +593,31 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin return QFontEngine::HintStyle(hintStyle - 1); } - int hint_style = 0; - if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch) - hint_style = FC_HINT_FULL; - switch (hint_style) { - case FC_HINT_NONE: - return QFontEngine::HintNone; - case FC_HINT_SLIGHT: - return QFontEngine::HintLight; - case FC_HINT_MEDIUM: - return QFontEngine::HintMedium; - case FC_HINT_FULL: - return QFontEngine::HintFull; - default: - Q_UNREACHABLE(); - break; - } return QFontEngine::HintFull; } QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bool useXftConf) { + int subpixel = FC_RGBA_UNKNOWN; + if (FcPatternGetInteger(match, FC_RGBA, 0, &subpixel) == FcResultMatch) { + switch (subpixel) { + case FC_RGBA_UNKNOWN: + case FC_RGBA_NONE: + return QFontEngine::Subpixel_None; + case FC_RGBA_RGB: + return QFontEngine::Subpixel_RGB; + case FC_RGBA_BGR: + return QFontEngine::Subpixel_BGR; + case FC_RGBA_VRGB: + return QFontEngine::Subpixel_VRGB; + case FC_RGBA_VBGR: + return QFontEngine::Subpixel_VBGR; + default: + Q_UNREACHABLE(); + break; + } + } + if (useXftConf) { void *subpixelTypeResource = QGuiApplication::platformNativeInterface()->nativeResourceForScreen("subpixeltype", @@ -569,25 +627,6 @@ QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bo return QFontEngine::SubpixelAntialiasingType(subpixelType - 1); } - int subpixel = FC_RGBA_UNKNOWN; - FcPatternGetInteger(match, FC_RGBA, 0, &subpixel); - - switch (subpixel) { - case FC_RGBA_UNKNOWN: - case FC_RGBA_NONE: - return QFontEngine::Subpixel_None; - case FC_RGBA_RGB: - return QFontEngine::Subpixel_RGB; - case FC_RGBA_BGR: - return QFontEngine::Subpixel_BGR; - case FC_RGBA_VRGB: - return QFontEngine::Subpixel_VRGB; - case FC_RGBA_VBGR: - return QFontEngine::Subpixel_VBGR; - default: - Q_UNREACHABLE(); - break; - } return QFontEngine::Subpixel_None; } } // namespace @@ -836,10 +875,8 @@ void QFontconfigDatabase::setupFontEngine(QFontEngineFT *engine, const QFontDef QGuiApplication::platformNativeInterface()->nativeResourceForScreen("antialiasingEnabled", QGuiApplication::primaryScreen()); int antialiasingEnabled = int(reinterpret_cast(antialiasResource)); - if (antialiasingEnabled > 0) { + if (antialiasingEnabled > 0) antialias = antialiasingEnabled - 1; - forcedAntialiasSetting = true; - } } QFontEngine::GlyphFormat format; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm similarity index 90% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index fe87ca137..1594dacbc 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -56,6 +48,18 @@ QT_BEGIN_NAMESPACE +namespace { +class AutoReleasePool +{ +public: + AutoReleasePool(): pool([[NSAutoreleasePool alloc] init]) {} + ~AutoReleasePool() { [pool release]; } + +private: + NSAutoreleasePool *pool; +}; +} + // this could become a list of all languages used for each writing // system, instead of using the single most common language. static const char *languageForWritingSystem[] = { @@ -177,6 +181,8 @@ QCoreTextFontDatabase::QCoreTextFontDatabase() QCoreTextFontDatabase::~QCoreTextFontDatabase() { + foreach (CTFontDescriptorRef ref, m_systemFontDescriptors) + CFRelease(ref); } static CFArrayRef availableFamilyNames() @@ -268,47 +274,37 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) fd->fixedPitch = false; if (QCFType tempFont = CTFontCreateWithFontDescriptor(font, 0.0, 0)) { - uint length = 0; uint tag = MAKE_TAG('O', 'S', '/', '2'); CTFontRef tempFontRef = tempFont; void *userData = reinterpret_cast(&tempFontRef); - if (QCoreTextFontEngine::ct_getSfntTable(userData, tag, 0, &length)) { - QVarLengthArray os2Table(length); - if (length >= 86 && QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length)) { - quint32 unicodeRange[4] = { - qFromBigEndian(os2Table.data() + 42), - qFromBigEndian(os2Table.data() + 46), - qFromBigEndian(os2Table.data() + 50), - qFromBigEndian(os2Table.data() + 54) - }; - quint32 codePageRange[2] = { qFromBigEndian(os2Table.data() + 78), - qFromBigEndian(os2Table.data() + 82) }; - fd->writingSystems = QPlatformFontDatabase::writingSystemsFromTrueTypeBits(unicodeRange, codePageRange); + uint length = 128; + QVarLengthArray os2Table(length); + if (QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length) && length >= 86) { + if (length > uint(os2Table.length())) { + os2Table.resize(length); + if (!QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length)) + Q_UNREACHABLE(); + Q_ASSERT(length >= 86); } + quint32 unicodeRange[4] = { + qFromBigEndian(os2Table.data() + 42), + qFromBigEndian(os2Table.data() + 46), + qFromBigEndian(os2Table.data() + 50), + qFromBigEndian(os2Table.data() + 54) + }; + quint32 codePageRange[2] = { + qFromBigEndian(os2Table.data() + 78), + qFromBigEndian(os2Table.data() + 82) + }; + fd->writingSystems = QPlatformFontDatabase::writingSystemsFromTrueTypeBits(unicodeRange, codePageRange); } } if (styles) { if (CFNumberRef weightValue = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontWeightTrait)) { - double normalizedWeight; - if (CFNumberGetValue(weightValue, kCFNumberDoubleType, &normalizedWeight)) { - if (normalizedWeight >= 0.62) - fd->weight = QFont::Black; - else if (normalizedWeight >= 0.4) - fd->weight = QFont::Bold; - else if (normalizedWeight >= 0.3) - fd->weight = QFont::DemiBold; - else if (normalizedWeight >= 0.2) - fd->weight = qt_mediumFontWeight; - else if (normalizedWeight == 0.0) - fd->weight = QFont::Normal; - else if (normalizedWeight <= -0.4) - fd->weight = QFont::Light; - else if (normalizedWeight <= -0.6) - fd->weight = qt_extralightFontWeight; - else if (normalizedWeight <= -0.8) - fd->weight = qt_thinFontWeight; - } + float normalizedWeight; + if (CFNumberGetValue(weightValue, kCFNumberFloatType, &normalizedWeight)) + fd->weight = QCoreTextFontEngine::qtWeightFromCFWeight(normalizedWeight); } if (CFNumberRef italic = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontSlantTrait)) { double d; @@ -356,11 +352,7 @@ void QCoreTextFontDatabase::populateFromDescriptor(CTFontDescriptorRef font) { FontDescription fd; getFontDescription(font, &fd); - populateFromFontDescription(font, fd); -} -void QCoreTextFontDatabase::populateFromFontDescription(CTFontDescriptorRef font, const FontDescription &fd) -{ CFRetain(font); QPlatformFontDatabase::registerFont(fd.familyName, fd.styleName, fd.foundryName, fd.weight, fd.style, fd.stretch, true /* antialiased */, true /* scalable */, @@ -372,6 +364,8 @@ void QCoreTextFontDatabase::releaseHandle(void *handle) CFRelease(CTFontDescriptorRef(handle)); } +extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef); + QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr) { qreal scaledPointSize = f.pixelSize; @@ -386,7 +380,8 @@ QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr) scaledPointSize = f.pointSize; CTFontDescriptorRef descriptor = (CTFontDescriptorRef) usrPtr; - CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, NULL); + CGAffineTransform matrix = qt_transform_from_fontdef(f); + CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix); if (font) { QFontEngine *engine = new QCoreTextFontEngine(font, f); engine->fontDef = f; @@ -462,6 +457,8 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo Q_UNUSED(style); Q_UNUSED(script); + AutoReleasePool pool; + static QHash fallbackLists; if (!family.isEmpty()) { @@ -830,7 +827,11 @@ QFont *QCoreTextFontDatabase::themeFont(QPlatformTheme::Font f) const CTFontDescriptorRef fontDesc = fontDescriptorFromTheme(f); FontDescription fd; getFontDescription(fontDesc, &fd); - m_systemFontDescriptors.insert(fontDesc); + + if (!m_systemFontDescriptors.contains(fontDesc)) + m_systemFontDescriptors.insert(fontDesc); + else + CFRelease(fontDesc); QFont *font = new QFont(fd.familyName, fd.pixelSize, fd.weight, fd.style == QFont::StyleItalic); return font; @@ -846,6 +847,11 @@ QFont QCoreTextFontDatabase::defaultFont() const return QFont(defaultFontName); } +bool QCoreTextFontDatabase::fontsAlwaysScalable() const +{ + return true; +} + QList QCoreTextFontDatabase::standardSizes() const { QList ret; diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro new file mode 100644 index 000000000..65183b6fd --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro @@ -0,0 +1,29 @@ +TARGET = composeplatforminputcontextplugin + +PLUGIN_TYPE = platforminputcontexts +PLUGIN_EXTENDS = - +PLUGIN_CLASS_NAME = QComposePlatformInputContextPlugin +load(qt_plugin) + +QT += gui-private + +DEFINES += X11_PREFIX='\\"$$QMAKE_X11_PREFIX\\"' + +SOURCES += $$PWD/qcomposeplatforminputcontextmain.cpp \ + $$PWD/qcomposeplatforminputcontext.cpp \ + $$PWD/generator/qtablegenerator.cpp \ + +HEADERS += $$PWD/qcomposeplatforminputcontext.h \ + $$PWD/generator/qtablegenerator.h \ + +# libxkbcommon +contains(QT_CONFIG, xkbcommon-qt): { + # dont't need x11 dependency for compose key plugin + QT_CONFIG -= use-xkbcommon-x11support +# include(../../../3rdparty/xkbcommon.pri) +} else { + LIBS += $$QMAKE_LIBS_XKBCOMMON + QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON +} + +OTHER_FILES += $$PWD/compose.json diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json new file mode 100644 index 000000000..6d2b389df --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "fcitx" ] +} \ No newline at end of file diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro new file mode 100644 index 000000000..cbd3ab76e --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro @@ -0,0 +1,38 @@ +TARGET = fcitxplatforminputcontextplugin + +PLUGIN_TYPE = platforminputcontexts +PLUGIN_EXTENDS = - +PLUGIN_CLASS_NAME = QFcitxPlatformInputContextPlugin +load(qt_plugin) + +QT += dbus gui-private +SOURCES += $$PWD/fcitxqtconnection.cpp \ + $$PWD/fcitxqtformattedpreedit.cpp \ + $$PWD/fcitxqtinputcontextproxy.cpp \ + $$PWD/fcitxqtinputmethoditem.cpp \ + $$PWD/fcitxqtinputmethodproxy.cpp \ + $$PWD/fcitxqtkeyboardlayout.cpp \ + $$PWD/fcitxqtkeyboardproxy.cpp \ + $$PWD/keyuni.cpp \ + $$PWD/main.cpp \ + $$PWD/qfcitxplatforminputcontext.cpp \ + $$PWD/utils.cpp + +HEADERS += $$PWD/fcitxqtconnection.h \ + $$PWD/fcitxqtconnection_p.h \ + $$PWD/fcitxqtdbusaddons_export.h \ + $$PWD/fcitxqtdbusaddons_version.h \ + $$PWD/fcitxqtformattedpreedit.h \ + $$PWD/fcitxqtinputcontextproxy.h \ + $$PWD/fcitxqtinputmethoditem.h \ + $$PWD/fcitxqtinputmethodproxy.h \ + $$PWD/fcitxqtkeyboardlayout.h \ + $$PWD/fcitxqtkeyboardproxy.h \ + $$PWD/keydata.h \ + $$PWD/keyserver_x11.h \ + $$PWD/keyuni.h \ + $$PWD/main.h \ + $$PWD/qfcitxplatforminputcontext.h \ + $$PWD/utils.h + +OTHER_FILES += $$PWD/fcitx.json diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp new file mode 100644 index 000000000..a50178a44 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp @@ -0,0 +1,369 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "fcitxqtconnection_p.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// utils function in fcitx-utils and fcitx-config +bool _pid_exists(pid_t pid) { + if (pid <= 0) + return 0; + return !(kill(pid, 0) && (errno == ESRCH)); +} + + +FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent) + ,d_ptr(new FcitxQtConnectionPrivate(this)) +{ +} + +void FcitxQtConnection::startConnection() +{ + Q_D(FcitxQtConnection); + if (!d->m_initialized) { + d->initialize(); + d->createConnection(); + } +} + +void FcitxQtConnection::endConnection() +{ + Q_D(FcitxQtConnection); + d->cleanUp(); + d->finalize(); + d->m_connectedOnce = false; +} + +bool FcitxQtConnection::autoReconnect() +{ + Q_D(FcitxQtConnection); + return d->m_autoReconnect; +} + +void FcitxQtConnection::setAutoReconnect(bool a) +{ + Q_D(FcitxQtConnection); + d->m_autoReconnect = a; +} + +QDBusConnection* FcitxQtConnection::connection() +{ + Q_D(FcitxQtConnection); + return d->m_connection; +} + +const QString& FcitxQtConnection::serviceName() +{ + Q_D(FcitxQtConnection); + return d->m_serviceName; +} + +bool FcitxQtConnection::isConnected() +{ + Q_D(FcitxQtConnection); + return d->isConnected(); +} + + + +FcitxQtConnection::~FcitxQtConnection() +{ +} + +FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn) + ,q_ptr(conn) + ,m_displayNumber(-1) + ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber())) + ,m_connection(0) + ,m_serviceWatcher(new QDBusServiceWatcher(conn)) + ,m_watcher(new QFileSystemWatcher(this)) + ,m_autoReconnect(true) + ,m_connectedOnce(false) + ,m_initialized(false) +{ +} + +FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate() +{ + if (m_connection) + delete m_connection; +} + +void FcitxQtConnectionPrivate::initialize() { + m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); + m_serviceWatcher->addWatchedService(m_serviceName); + + QFileInfo info(socketFile()); + QDir dir(info.path()); + if (!dir.exists()) { + QDir rt(QDir::root()); + rt.mkpath(info.path()); + } + m_watcher->addPath(info.path()); + if (info.exists()) { + m_watcher->addPath(info.filePath()); + } + + connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged())); + connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged())); + m_initialized = true; +} + +void FcitxQtConnectionPrivate::finalize() { + m_serviceWatcher->removeWatchedService(m_serviceName); + m_watcher->removePaths(m_watcher->files()); + m_watcher->removePaths(m_watcher->directories()); + m_watcher->disconnect(SIGNAL(fileChanged(QString))); + m_watcher->disconnect(SIGNAL(directoryChanged(QString))); + m_initialized = false; +} + +void FcitxQtConnectionPrivate::socketFileChanged() { + QFileInfo info(socketFile()); + if (info.exists()) { + if (m_watcher->files().indexOf(info.filePath()) == -1) + m_watcher->addPath(info.filePath()); + } + + QString addr = address(); + if (addr.isNull()) + return; + + cleanUp(); + createConnection(); +} + +QByteArray FcitxQtConnectionPrivate::localMachineId() +{ +#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) + return QDBusConnection::localMachineId(); +#else + QFile file1("/var/lib/dbus/machine-id"); + QFile file2("/etc/machine-id"); + QFile* fileToRead = NULL; + if (file1.open(QIODevice::ReadOnly)) { + fileToRead = &file1; + } + else if (file2.open(QIODevice::ReadOnly)) { + fileToRead = &file2; + } + if (fileToRead) { + QByteArray result = fileToRead->readLine(1024); + fileToRead->close(); + result = result.trimmed(); + if (!result.isEmpty()) + return result; + } + return "machine-id"; +#endif +} + +int FcitxQtConnectionPrivate::displayNumber() { + if (m_displayNumber < 0) { + QByteArray displayNumber("0"); + QByteArray display(qgetenv("DISPLAY")); + int pos = display.indexOf(':'); + + if (pos >= 0) { + ++pos; + int pos2 = display.indexOf('.', pos); + if (pos2 > 0) { + displayNumber = display.mid(pos, pos2 - pos); + } else { + displayNumber = display.mid(pos); + } + } + + bool ok; + int d = displayNumber.toInt(&ok); + if (ok) { + m_displayNumber = d; + } else { + m_displayNumber = 0; + } + } + + return m_displayNumber; +} + +const QString& FcitxQtConnectionPrivate::socketFile() +{ + if (!m_socketFile.isEmpty()) + return m_socketFile; + + QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber()); + + QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME")); + if (home.isEmpty()) { + home = QDir::homePath().append(QLatin1Literal("/.config")); + } + m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename); + + return m_socketFile; +} + +QString FcitxQtConnectionPrivate::address() +{ + QString addr; + QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS"); + if (!addrVar.isNull()) + return QString::fromLocal8Bit(addrVar); + + QFile file(socketFile()); + if (!file.open(QIODevice::ReadOnly)) + return QString(); + + const int BUFSIZE = 1024; + + char buffer[BUFSIZE]; + size_t sz = file.read(buffer, BUFSIZE); + file.close(); + if (sz == 0) + return QString(); + char* p = buffer; + while(*p) + p++; + size_t addrlen = p - buffer; + if (sz != addrlen + 2 * sizeof(pid_t) + 1) + return QString(); + + /* skip '\0' */ + p++; + pid_t *ppid = (pid_t*) p; + pid_t daemonpid = ppid[0]; + pid_t fcitxpid = ppid[1]; + + if (!_pid_exists(daemonpid) + || !_pid_exists(fcitxpid)) + return QString(); + + addr = QLatin1String(buffer); + + return addr; +} + +void FcitxQtConnectionPrivate::createConnection() { + if (m_connectedOnce && !m_autoReconnect) { + return; + } + + m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QString addr = address(); + if (!addr.isNull()) { + QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx")); + if (connection.isConnected()) { + // qDebug() << "create private"; + m_connection = new QDBusConnection(connection); + } + else + QDBusConnection::disconnectFromBus("fcitx"); + } + + if (!m_connection) { + QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus()); + connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString))); + QDBusReply registered = connection->interface()->isServiceRegistered(m_serviceName); + if (!registered.isValid() || !registered.value()) { + delete connection; + } + else { + m_connection = connection; + } + } + + Q_Q(FcitxQtConnection); + if (m_connection) { + + m_connection->connect ("org.freedesktop.DBus.Local", + "/org/freedesktop/DBus/Local", + "org.freedesktop.DBus.Local", + "Disconnected", + this, + SLOT (dbusDisconnected ())); + m_connectedOnce = true; + emit q->connected(); + } +} + + +void FcitxQtConnectionPrivate::dbusDisconnected() +{ + cleanUp(); + + createConnection(); +} + +void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner) +{ + if (service == m_serviceName) { + /* old die */ + if (oldowner.length() > 0 || newowner.length() > 0) + cleanUp(); + + /* new rise */ + if (newowner.length() > 0) { + QTimer::singleShot(100, this, SLOT(newServiceAppear())); + } + } +} + +void FcitxQtConnectionPrivate::cleanUp() +{ + Q_Q(FcitxQtConnection); + bool doemit = false; + QDBusConnection::disconnectFromBus("fcitx"); + if (m_connection) { + delete m_connection; + m_connection = 0; + doemit = true; + } + + if (!m_autoReconnect && m_connectedOnce) + finalize(); + + /* we want m_connection and finalize being called before the signal + * thus isConnected will return false in slot + * and startConnection can be called in slot + */ + if (doemit) + emit q->disconnected(); +} + +bool FcitxQtConnectionPrivate::isConnected() +{ + return m_connection && m_connection->isConnected(); +} + +void FcitxQtConnectionPrivate::newServiceAppear() { + if (!isConnected()) { + cleanUp(); + + createConnection(); + } +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h new file mode 100644 index 000000000..efe255f90 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h @@ -0,0 +1,111 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITXQTCONNECTION_H +#define FCITXQTCONNECTION_H + +#include "fcitxqtdbusaddons_export.h" + +#include + +class QDBusConnection; + +class FcitxQtConnectionPrivate; + + +/** + * dbus connection to fcitx + **/ +class FCITXQTDBUSADDONS_EXPORT FcitxQtConnection : public QObject { + Q_OBJECT + Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) + Q_PROPERTY(bool connected READ isConnected) + Q_PROPERTY(QDBusConnection* connection READ connection) + Q_PROPERTY(QString serviceName READ serviceName) +public: + /** + * create a new connection + * + * @param parent + **/ + explicit FcitxQtConnection(QObject* parent = 0); + + /** + * destroy the connection + **/ + virtual ~FcitxQtConnection(); + + /** + * the connection will not start to work until you call this function + * you may want to connect to the signal before you call this function + **/ + void startConnection(); + void endConnection(); + /** + * automatically reconnect if fcitx disappeared + * + * @param a ... + * @return void + **/ + void setAutoReconnect(bool a); + + /** + * check this connection is doing automatical reconnect or not + * + * default value is true + **/ + bool autoReconnect(); + + /** + * return the current dbus connection to fcitx, notice, the object return + * by this function might be deteled if fcitx disappear, or might return 0 + * if fcitx is not running + * + * @return QDBusConnection* + **/ + QDBusConnection* connection(); + /** + * current fcitx dbus service name, can be used for create DBus proxy + * + * @return service name + **/ + const QString& serviceName(); + /** + * check its connected or not + **/ + bool isConnected(); + +Q_SIGNALS: + /** + * this signal will be emitted upon fcitx appears + **/ + void connected(); + /** + * this signal will be emitted upon fcitx disappears + * + * it will come with connected in pair + **/ + void disconnected(); + +private: + FcitxQtConnectionPrivate * const d_ptr; + Q_DECLARE_PRIVATE(FcitxQtConnection); +}; + +#endif // FCITXCONNECTION_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h new file mode 100644 index 000000000..dda726ac6 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h @@ -0,0 +1,68 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITXQTCONNECTION_P_H +#define FCITXQTCONNECTION_P_H + +#include "fcitxqtconnection.h" +#include +#include + +class QDBusConnection; +class QDBusServiceWatcher; + +class FcitxQtConnectionPrivate : public QObject { + Q_OBJECT +public: + FcitxQtConnectionPrivate(FcitxQtConnection* conn); + virtual ~FcitxQtConnectionPrivate(); + FcitxQtConnection * const q_ptr; + Q_DECLARE_PUBLIC(FcitxQtConnection); + +private Q_SLOTS: + void imChanged(const QString& service, const QString& oldowner, const QString& newowner); + void dbusDisconnected(); + void cleanUp(); + void newServiceAppear(); + void socketFileChanged(); + +private: + bool isConnected(); + + static QByteArray localMachineId(); + const QString& socketFile(); + void createConnection(); + QString address(); + int displayNumber(); + void initialize(); + void finalize(); + + int m_displayNumber; + QString m_serviceName; + QDBusConnection* m_connection; + QDBusServiceWatcher* m_serviceWatcher; + QFileSystemWatcher* m_watcher; + QString m_socketFile; + bool m_autoReconnect; + bool m_connectedOnce; + bool m_initialized; +}; + + +#endif // FCITXCONNECTION_P_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h new file mode 100644 index 000000000..3fabfb999 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h @@ -0,0 +1,41 @@ + +#ifndef FCITXQTDBUSADDONS_EXPORT_H +#define FCITXQTDBUSADDONS_EXPORT_H + +#ifdef FCITXQTDBUSADDONS_STATIC_DEFINE +# define FCITXQTDBUSADDONS_EXPORT +# define FCITXQTDBUSADDONS_NO_EXPORT +#else +# ifndef FCITXQTDBUSADDONS_EXPORT +# ifdef FcitxQt5DBusAddons_EXPORTS + /* We are building this library */ +# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef FCITXQTDBUSADDONS_NO_EXPORT +# define FCITXQTDBUSADDONS_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED +# define FCITXQTDBUSADDONS_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED_EXPORT +# define FCITXQTDBUSADDONS_DEPRECATED_EXPORT FCITXQTDBUSADDONS_EXPORT FCITXQTDBUSADDONS_DEPRECATED +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT +# define FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT FCITXQTDBUSADDONS_NO_EXPORT FCITXQTDBUSADDONS_DEPRECATED +#endif + +#define DEFINE_NO_DEPRECATED 0 +#if DEFINE_NO_DEPRECATED +# define FCITXQTDBUSADDONS_NO_DEPRECATED +#endif + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h new file mode 100644 index 000000000..7b6dbf477 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h @@ -0,0 +1,11 @@ + +#ifndef FCITXQT5DBUSADDONS_VERSION_H +#define FCITXQT5DBUSADDONS_VERSION_H + +#define FCITXQT5DBUSADDONS_VERSION_STRING "1.0.0" +#define FCITXQT5DBUSADDONS_VERSION_MAJOR 1 +#define FCITXQT5DBUSADDONS_VERSION_MINOR 0 +#define FCITXQT5DBUSADDONS_VERSION_PATCH 0 +#define FCITXQT5DBUSADDONS_VERSION ((1<<16)|(0<<8)|(0)) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp new file mode 100644 index 000000000..c6af84547 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp @@ -0,0 +1,78 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include + +#include "fcitxqtformattedpreedit.h" + +void FcitxQtFormattedPreedit::registerMetaType() +{ + qRegisterMetaType("FcitxQtFormattedPreedit"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtFormattedPreeditList"); + qDBusRegisterMetaType(); +} + +qint32 FcitxQtFormattedPreedit::format() const +{ + return m_format; +} + +const QString& FcitxQtFormattedPreedit::string() const +{ + return m_string; +} + +void FcitxQtFormattedPreedit::setFormat(qint32 format) +{ + m_format = format; +} + +void FcitxQtFormattedPreedit::setString(const QString& str) +{ + m_string = str; +} + +bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const +{ + return (preedit.m_format == m_format) && (preedit.m_string == m_string); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit) +{ + argument.beginStructure(); + argument << preedit.string(); + argument << preedit.format(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit) +{ + QString str; + qint32 format; + argument.beginStructure(); + argument >> str >> format; + argument.endStructure(); + preedit.setString(str); + preedit.setFormat(format); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h new file mode 100644 index 000000000..a00355c6f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_FORMATTED_PREEDIT_H +#define FCITX_QT_FORMATTED_PREEDIT_H + +#include "fcitxqtdbusaddons_export.h" + +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtFormattedPreedit { +public: + const QString& string() const; + qint32 format() const; + void setString(const QString& str); + void setFormat(qint32 format); + + static void registerMetaType(); + + bool operator ==(const FcitxQtFormattedPreedit& preedit) const; +private: + QString m_string; + qint32 m_format; +}; + +typedef QList FcitxQtFormattedPreeditList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im); + +Q_DECLARE_METATYPE(FcitxQtFormattedPreedit) +Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp new file mode 100644 index 000000000..b47d332cd --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtinputcontextproxy.h" + +/* + * Implementation of interface class FcitxQtInputContextProxy + */ + +FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtInputContextProxy::~FcitxQtInputContextProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h new file mode 100644 index 000000000..19874dc45 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h @@ -0,0 +1,136 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTINPUTCONTEXTPROXY_H_1409252990 +#define FCITXQTINPUTCONTEXTPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtformattedpreedit.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.InputContext + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputContextProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.InputContext"; } + +public: + FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtInputContextProxy(); + +public Q_SLOTS: // METHODS + inline QDBusPendingReply<> CloseIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList); + } + + inline QDBusPendingReply<> DestroyIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList); + } + + inline QDBusPendingReply<> EnableIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList); + } + + inline QDBusPendingReply<> FocusIn() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList); + } + + inline QDBusPendingReply<> FocusOut() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList); + } + + inline QDBusPendingReply<> MouseEvent(int x) + { + QList argumentList; + argumentList << QVariant::fromValue(x); + return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList); + } + + inline QDBusPendingReply ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time) + { + QList argumentList; + argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time); + return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList); + } + + inline QDBusPendingReply<> Reset() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList); + } + + inline QDBusPendingReply<> SetCapacity(uint caps) + { + QList argumentList; + argumentList << QVariant::fromValue(caps); + return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList); + } + + inline QDBusPendingReply<> SetCursorLocation(int x, int y) + { + QList argumentList; + argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); + return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList); + } + + inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h) + { + QList argumentList; + argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h); + return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList); + } + + inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor) + { + QList argumentList; + argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); + return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList); + } + + inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor) + { + QList argumentList; + argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); + return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList); + } + +Q_SIGNALS: // SIGNALS + void CloseIM(); + void CommitString(const QString &str); + void DeleteSurroundingText(int offset, uint nchar); + void EnableIM(); + void ForwardKey(uint keyval, uint state, int type); + void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos); + void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos); +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp new file mode 100644 index 000000000..d28ed1149 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +// Qt +#include +#include + +// self +#include "fcitxqtinputmethoditem.h" + +bool FcitxQtInputMethodItem::enabled() const +{ + return m_enabled; +} +const QString& FcitxQtInputMethodItem::langCode() const +{ + return m_langCode; +} +const QString& FcitxQtInputMethodItem::name() const +{ + return m_name; +} +const QString& FcitxQtInputMethodItem::uniqueName() const +{ + return m_uniqueName; +} +void FcitxQtInputMethodItem::setEnabled(bool enable) +{ + m_enabled = enable; +} +void FcitxQtInputMethodItem::setLangCode(const QString& lang) +{ + m_langCode = lang; +} +void FcitxQtInputMethodItem::setName(const QString& name) +{ + m_name = name; +} +void FcitxQtInputMethodItem::setUniqueName(const QString& name) +{ + m_uniqueName = name; +} + +void FcitxQtInputMethodItem::registerMetaType() +{ + qRegisterMetaType("FcitxQtInputMethodItem"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtInputMethodItemList"); + qDBusRegisterMetaType(); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im) +{ + argument.beginStructure(); + argument << im.name(); + argument << im.uniqueName(); + argument << im.langCode(); + argument << im.enabled(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im) +{ + QString name; + QString uniqueName; + QString langCode; + bool enabled; + argument.beginStructure(); + argument >> name >> uniqueName >> langCode >> enabled; + argument.endStructure(); + im.setName(name); + im.setUniqueName(uniqueName); + im.setLangCode(langCode); + im.setEnabled(enabled); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h new file mode 100644 index 000000000..6b8c7805c --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_INPUT_METHOD_ITEM_H +#define FCITX_QT_INPUT_METHOD_ITEM_H + +#include "fcitxqtdbusaddons_export.h" + +// Qt +#include +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodItem +{ +public: + const QString& name() const; + const QString& uniqueName() const; + const QString& langCode() const; + bool enabled() const; + + void setName(const QString& name); + void setUniqueName(const QString& name); + void setLangCode(const QString& name); + void setEnabled(bool name); + static void registerMetaType(); + + inline bool operator < (const FcitxQtInputMethodItem& im) const { + if (m_enabled == true && im.m_enabled == false) + return true; + return false; + } +private: + QString m_name; + QString m_uniqueName; + QString m_langCode; + bool m_enabled; +}; + +typedef QList FcitxQtInputMethodItemList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im); + +Q_DECLARE_METATYPE(FcitxQtInputMethodItem) +Q_DECLARE_METATYPE(FcitxQtInputMethodItemList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp new file mode 100644 index 000000000..068f4c2ee --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtinputmethodproxy.h" + +/* + * Implementation of interface class FcitxQtInputMethodProxy + */ + +FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h new file mode 100644 index 000000000..7aa37e22b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h @@ -0,0 +1,217 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTINPUTMETHODPROXY_H_1409252990 +#define FCITXQTINPUTMETHODPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtinputmethoditem.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.InputMethod + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.InputMethod"; } + +public: + FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtInputMethodProxy(); + + Q_PROPERTY(QString CurrentIM READ currentIM WRITE setCurrentIM) + inline QString currentIM() const + { return qvariant_cast< QString >(property("CurrentIM")); } + inline void setCurrentIM(const QString &value) + { setProperty("CurrentIM", QVariant::fromValue(value)); } + + Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList) + inline FcitxQtInputMethodItemList iMList() const + { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); } + inline void setIMList(FcitxQtInputMethodItemList value) + { setProperty("IMList", QVariant::fromValue(value)); } + +public Q_SLOTS: // METHODS + inline QDBusPendingReply<> ActivateIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList); + } + + inline QDBusPendingReply<> Configure() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList); + } + + inline QDBusPendingReply<> ConfigureAddon(const QString &addon) + { + QList argumentList; + argumentList << QVariant::fromValue(addon); + return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList); + } + + inline QDBusPendingReply<> ConfigureIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList); + } + + inline QDBusPendingReply CreateIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList); + } + inline QDBusReply CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) { + keyval1 = qdbus_cast(reply.arguments().at(1)); + state1 = qdbus_cast(reply.arguments().at(2)); + keyval2 = qdbus_cast(reply.arguments().at(3)); + state2 = qdbus_cast(reply.arguments().at(4)); + } + return reply; + } + + inline QDBusPendingReply CreateICv2(const QString &appname) + { + QList argumentList; + argumentList << QVariant::fromValue(appname); + return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList); + } + inline QDBusReply CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + argumentList << QVariant::fromValue(appname); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { + enable = qdbus_cast(reply.arguments().at(1)); + keyval1 = qdbus_cast(reply.arguments().at(2)); + state1 = qdbus_cast(reply.arguments().at(3)); + keyval2 = qdbus_cast(reply.arguments().at(4)); + state2 = qdbus_cast(reply.arguments().at(5)); + } + return reply; + } + + inline QDBusPendingReply CreateICv3(const QString &appname, int pid) + { + QList argumentList; + argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); + return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList); + } + inline QDBusReply CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { + enable = qdbus_cast(reply.arguments().at(1)); + keyval1 = qdbus_cast(reply.arguments().at(2)); + state1 = qdbus_cast(reply.arguments().at(3)); + keyval2 = qdbus_cast(reply.arguments().at(4)); + state2 = qdbus_cast(reply.arguments().at(5)); + } + return reply; + } + + inline QDBusPendingReply<> Exit() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList); + } + + inline QDBusPendingReply GetCurrentIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList); + } + + inline QDBusPendingReply GetCurrentState() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList); + } + + inline QDBusPendingReply GetCurrentUI() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList); + } + + inline QDBusPendingReply GetIMAddon(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList); + } + + inline QDBusPendingReply<> InactivateIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList); + } + + inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon) + { + QList argumentList; + argumentList << QVariant::fromValue(addon); + return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList); + } + + inline QDBusPendingReply<> ReloadConfig() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList); + } + + inline QDBusPendingReply<> ResetIMList() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ResetIMList"), argumentList); + } + + inline QDBusPendingReply<> Restart() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList); + } + + inline QDBusPendingReply<> SetCurrentIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList); + } + + inline QDBusPendingReply<> ToggleIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList); + } + +Q_SIGNALS: // SIGNALS +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp new file mode 100644 index 000000000..32cd981ea --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +// Qt +#include +#include + +// self +#include "fcitxqtkeyboardlayout.h" + +const QString& FcitxQtKeyboardLayout::layout() const +{ + return m_layout; +} +const QString& FcitxQtKeyboardLayout::langCode() const +{ + return m_langCode; +} +const QString& FcitxQtKeyboardLayout::name() const +{ + return m_name; +} + +const QString& FcitxQtKeyboardLayout::variant() const +{ + return m_variant; +} + +void FcitxQtKeyboardLayout::setLayout(const QString& layout) +{ + m_layout = layout; +} + +void FcitxQtKeyboardLayout::setLangCode(const QString& lang) +{ + m_langCode = lang; +} + +void FcitxQtKeyboardLayout::setName(const QString& name) +{ + m_name = name; +} + +void FcitxQtKeyboardLayout::setVariant(const QString& variant) +{ + m_variant = variant; +} + +void FcitxQtKeyboardLayout::registerMetaType() +{ + qRegisterMetaType("FcitxQtKeyboardLayout"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtKeyboardLayoutList"); + qDBusRegisterMetaType(); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout) +{ + argument.beginStructure(); + argument << layout.layout(); + argument << layout.variant(); + argument << layout.name(); + argument << layout.langCode(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout) +{ + QString l; + QString variant; + QString name; + QString langCode; + argument.beginStructure(); + argument >> l >> variant >> name >> langCode; + argument.endStructure(); + layout.setLayout(l); + layout.setVariant(variant); + layout.setName(name); + layout.setLangCode(langCode); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h new file mode 100644 index 000000000..d33438dce --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_KEYBOARD_LAYOUT_H +#define FCITX_QT_KEYBOARD_LAYOUT_H + +#include "fcitxqtdbusaddons_export.h" + +// Qt +#include +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardLayout +{ +public: + const QString& layout() const; + const QString& variant() const; + const QString& name() const; + const QString& langCode() const; + void setLayout(const QString& layout); + void setLangCode(const QString& lang); + void setName(const QString& name); + void setVariant(const QString& variant); + + static void registerMetaType(); +private: + QString m_layout; + QString m_variant; + QString m_name; + QString m_langCode; +}; + +typedef QList FcitxQtKeyboardLayoutList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l); + +Q_DECLARE_METATYPE(FcitxQtKeyboardLayout) +Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp new file mode 100644 index 000000000..7523a9206 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtkeyboardproxy.h" + +/* + * Implementation of interface class FcitxQtKeyboardProxy + */ + +FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h new file mode 100644 index 000000000..42a6561f3 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h @@ -0,0 +1,74 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTKEYBOARDPROXY_H_1409252990 +#define FCITXQTKEYBOARDPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtkeyboardlayout.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.Keyboard + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.Keyboard"; } + +public: + FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtKeyboardProxy(); + +public Q_SLOTS: // METHODS + inline QDBusPendingReply GetLayoutForIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList); + } + inline QDBusReply GetLayoutForIM(const QString &im, QString &variant) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) { + variant = qdbus_cast(reply.arguments().at(1)); + } + return reply; + } + + inline QDBusPendingReply GetLayouts() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList); + } + + inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant) + { + QList argumentList; + argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant); + return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList); + } + +Q_SIGNALS: // SIGNALS +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml new file mode 100644 index 000000000..1423d69ac --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml new file mode 100644 index 000000000..00dc20ab7 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml new file mode 100644 index 000000000..28ffa538f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h new file mode 100644 index 000000000..5cee56558 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h @@ -0,0 +1,1612 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KEYDATA_H +#define KEYDATA_H + +struct _FcitxKeySymToUnicode{ + uint16_t keysym; + uint16_t ucs; +}; + +struct _FcitxUnicodeToKeySym { + uint16_t keysym; + uint16_t ucs; +}; + +static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = { + { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ + { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ + { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ + { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ + { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ + { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ + { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ + { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ + { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ + { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ + { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ + { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ + { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ + { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ + { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ + { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ + { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ + { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ + { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ + { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ + { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ + { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ + { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ + { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ + { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ + { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ + { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ + { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ + { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ + { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ + { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ + { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ + { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ + { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ + { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ + { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ + { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ + { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ + { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ + { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ + { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ + { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ + { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ + { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ + { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ + { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ + { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ + { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ + { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ + { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ + { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ + { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ + { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ + { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ + { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ + { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ + { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ + { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ + { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ + { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ + { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ + { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ + { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ + { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ + { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ + { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ + { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ + { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ + { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ + { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ + { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ + { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ + { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ + { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ + { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ + { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ + { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ + { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ + { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ + { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ + { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ + { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ + { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ + { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ + { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ + { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ + { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ + { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ + { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ + { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ + { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ + { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ + { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ + { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ + { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ + { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ + { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ + { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ + { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ + { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ + { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ + { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ + { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ + { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ + { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ + { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ + { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ + { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ + { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ + { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ + { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ + { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ + { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ + { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ + { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ + { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ + { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ + { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ + { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ + { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ + { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ + { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ + { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ + { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ + { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ + { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ + { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ + { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ + { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ + { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ + { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ + { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ + { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ + { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ + { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ + { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ + { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ + { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ + { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ + { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ + { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ + { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ + { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ + { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ + { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ + { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ + { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ + { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ + { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ + { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ + { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ + { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ + { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ + { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ + { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ + { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ + { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ + { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ + { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ + { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ + { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ + { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ + { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ + { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ + { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ + { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ + { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ + { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ + { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ + { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ + { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ + { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ + { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ + { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ + { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ + { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ + { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ + { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ + { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ + { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ + { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ + { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ + { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ + { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ + { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ + { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ + { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ + { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ + { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ + { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ + { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ + { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ + { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ + { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ + { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ + { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ + { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ + { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ + { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ + { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ + { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ + { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ + { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ + { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ + { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ + { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ + { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ + { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ + { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ + { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ + { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ + { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ + { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ + { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ + { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ + { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ + { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ + { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ + { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ + { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ + { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ + { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ + { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ + { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ + { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ + { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ + { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ + { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ + { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ + { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ + { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ + { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ + { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ + { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ + { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ + { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ + { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ + { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ + { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ + { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ + { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ + { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ + { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ + { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ + { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ + { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ + { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ + { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ + { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ + { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ + { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ + { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ + { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ + { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ + { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ + { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ + { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ + { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ + { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ + { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ + { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ + { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ + { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ + { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ + { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ + { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ + { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ + { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ + { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ + { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ + { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ + { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ + { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ + { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ + { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ + { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ + { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ + { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ + { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ + { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ + { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ + { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ + { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ + { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ + { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ + { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ + { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ + { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ + { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ + { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ + { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ + { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ + { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ + { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ + { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ + { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ + { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ + { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ + { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ + { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ + { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ + { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ + { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ + { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ + { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ + { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ + { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ + { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ + { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ + { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ + { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ + { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ + { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ + { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ + { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ + { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ + { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ + { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ + { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ + { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ + { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ + { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ + { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ + { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ + { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ + { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ + { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ + { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ + { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ + { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ + { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ + { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ + { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ + { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ + { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ + { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ + { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ + { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ + { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ + { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ + { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ + { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ + { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ + { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ + { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ + { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ + { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ + { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ + { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ + { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ + { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ + { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ + { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ + { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ + { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ + { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ + { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ + { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ + { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ + { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ + { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ + { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ + { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ + { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ + { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ + { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ + { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ + { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ + { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ + { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ + { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ + { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ + { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ + { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ + { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ + { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ + { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ + { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ + { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ + { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ + { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ + { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ + { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ + { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ + { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ + { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ + { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ + /* 0x08a1 leftradical ? ??? */ + /* 0x08a2 topleftradical ? ??? */ + /* 0x08a3 horizconnector ? ??? */ + { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ + { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ + { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ + /* 0x08a7 topleftsqbracket ? ??? */ + /* 0x08a8 botleftsqbracket ? ??? */ + /* 0x08a9 toprightsqbracket ? ??? */ + /* 0x08aa botrightsqbracket ? ??? */ + /* 0x08ab topleftparens ? ??? */ + /* 0x08ac botleftparens ? ??? */ + /* 0x08ad toprightparens ? ??? */ + /* 0x08ae botrightparens ? ??? */ + /* 0x08af leftmiddlecurlybrace ? ??? */ + /* 0x08b0 rightmiddlecurlybrace ? ??? */ + /* 0x08b1 topleftsummation ? ??? */ + /* 0x08b2 botleftsummation ? ??? */ + /* 0x08b3 topvertsummationconnector ? ??? */ + /* 0x08b4 botvertsummationconnector ? ??? */ + /* 0x08b5 toprightsummation ? ??? */ + /* 0x08b6 botrightsummation ? ??? */ + /* 0x08b7 rightmiddlesummation ? ??? */ + { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ + { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ + { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ + { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ + { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ + { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ + { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ + { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ + { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ + /* 0x08c9 similarequal ? ??? */ + { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ + { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ + { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ + { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ + { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ + { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ + { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ + { 0x08dd, 0x222a }, /* union ∪ UNION */ + { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ + { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ + { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ + { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ + { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ + { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ + { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ + { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ + { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ + { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ + { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ + { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ + { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ + { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ + { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ + { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ + { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ + { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ + { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ + { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ + { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ + { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + /* 0x09ef horizlinescan1 ? ??? */ + /* 0x09f0 horizlinescan3 ? ??? */ + { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ + /* 0x09f2 horizlinescan7 ? ??? */ + /* 0x09f3 horizlinescan9 ? ??? */ + { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ + { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ + { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ + { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ + { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ + { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ + { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ + { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ + { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ + { 0x0aaa, 0x2013 }, /* endash – EN DASH */ + /* 0x0aac signifblank ? ??? */ + { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ + /* 0x0aaf doubbaselinedot ? ??? */ + { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ + { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ + { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ + { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ + { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ + { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ + { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ + { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ + { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ + { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ + { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ + { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ + { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ + /* 0x0abf marker ? ??? */ + { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ + { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ + { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ + { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ + { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ + { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ + /* 0x0acb trademarkincircle ? ??? */ + { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ + { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ + { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ + { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ + { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ + { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ + { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ + { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ + { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ + { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ + { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ + { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ + /* 0x0ada hexagram ? ??? */ + { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ + { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ + { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ + { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ + { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ + { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ + { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ + { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ + { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ + { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ + { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ + { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ + { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ + { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ + { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ + { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ + { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ + { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ + { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ + { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ + { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ + { 0x0af1, 0x2020 }, /* dagger † DAGGER */ + { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ + { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ + { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ + { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ + { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ + { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ + { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ + { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ + { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ + { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ + { 0x0afc, 0x2038 }, /* caret ‸ CARET */ + { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ + { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ + /* 0x0aff cursor ? ??? */ + { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ + { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ + { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ + { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ + { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ + { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ + { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ + { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ + { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ + { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ + { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ + { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ + { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ + { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ + { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ + { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ + { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ + { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ + { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ + { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ + { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ + { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ + { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ + { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ + { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ + { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ + { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ + { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ + { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ + { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ + { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ + { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ + { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ + { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ + { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ + { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ + { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ + { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ + { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ + { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ + { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ + { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ + { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ + { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ + { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ + { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ + { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ + { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ + { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ + { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ + { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ + { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ + { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ + { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ + { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ + { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ + { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ + { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ + { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ + { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ + { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ + { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ + { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ + { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ + { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ + { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ + { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ + { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ + { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ + { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ + { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ + { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ + { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ + { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ + { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ + { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ + { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ + { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ + { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ + { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ + { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ + { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ + { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ + { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ + { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ + { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ + { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ + { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ + { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ + { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ + { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ + { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ + { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ + { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ + { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ + { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ + { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ + { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ + { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ + { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ + { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ + { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ + { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ + { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ + { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ + { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */ + { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ + { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ + { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ + { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ + { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ + { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ + { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ + { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ + { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ + { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ + { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ + { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ + { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ + { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ + { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ + { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ + { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ + { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ + { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ + { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ + { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ + { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ + { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ + { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ + { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ + { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ + { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ + { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ + { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ + { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ + { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ + { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ + { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ + { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ + { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ + { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ + { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ + { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ + { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ + { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ + { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ + { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ + { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ + { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ + { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ + { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ + { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ + { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ + { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ + { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ + { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ + { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ + { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ + { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ + { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ + { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ + { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ + { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ + { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ + { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ + { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ + { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ + { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ + { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ + { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ + { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ + { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ + { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ + { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ + { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ + { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ + { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ + { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ + { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ + { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ + { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ + { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ + { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ + { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ + { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ + { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ + { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ + { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ + { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ + { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ + { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ + { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ + { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ + { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ + { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ + { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ + { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ + { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ + { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ + { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ + { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ + { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ + { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ + { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ + { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ + { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ + { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ + { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ + { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ + { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ + { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ + { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ + /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */ + { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ + { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ + { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ + { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ + { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ + /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */ + { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ + { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ + { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ + { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ + { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ + { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ + { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ + { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ + { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ + { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ + { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ + { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ + { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ + { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ + { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ + { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ + { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ + + + /* Following items added to GTK, not in the xterm table */ + + /* A few ASCII control characters */ + + { 0xFF08 /* Backspace */, '\b' }, + { 0xFF09 /* Tab */, '\t' }, + { 0xFF0A /* Linefeed */, '\n' }, + { 0xFF0B /* Vert. Tab */, '\v' }, + { 0xFF0D /* Return */, '\r' }, + { 0xFF1B /* Escape */, '\033' }, + + /* Numeric keypad */ + + { 0xFF80 /* Space */, ' ' }, + { 0xFFAA /* Multiply */, '*' }, + { 0xFFAB /* Add */, '+' }, + { 0xFFAC /* Separator */, ',' }, + { 0xFFAD /* Subtract */, '-' }, + { 0xFFAE /* Decimal */, '.' }, + { 0xFFAF /* Divide */, '/' }, + { 0xFFB0 /* 0 */, '0' }, + { 0xFFB1 /* 1 */, '1' }, + { 0xFFB2 /* 2 */, '2' }, + { 0xFFB3 /* 3 */, '3' }, + { 0xFFB4 /* 4 */, '4' }, + { 0xFFB5 /* 5 */, '5' }, + { 0xFFB6 /* 6 */, '6' }, + { 0xFFB7 /* 7 */, '7' }, + { 0xFFB8 /* 8 */, '8' }, + { 0xFFB9 /* 9 */, '9' }, + { 0xFFBD /* Equal */, '=' }, + + /* End numeric keypad */ + + { 0xFFFF /* Delete */, '\177' } +}; + +static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = { + { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ + { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ + { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ + { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ + { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ + { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ + { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ + { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ + { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ + { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ + { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ + { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ + { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ + { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ + { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ + { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ + { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ + { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ + { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ + { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ + { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ + { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ + { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ + { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ + { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ + { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ + { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ + { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ + { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ + { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ + { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ + { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ + { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ + { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ + { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ + { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ + { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ + { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ + { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ + { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ + { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ + { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ + { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ + { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ + { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ + { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ + { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ + { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ + { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ + { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ + { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ + { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ + { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ + { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ + { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ + { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ + { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ + { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ + { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ + { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ + { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ + { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ + { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ + { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ + { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ + { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ + { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ + { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ + { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ + { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ + { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ + { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ + { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ + { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ + { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ + { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ + { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ + { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ + { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ + { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ + { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ + { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ + { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ + { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ + { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ + { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ + { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ + { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ + { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ + { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ + { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ + { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ + { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ + { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ + { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ + { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ + { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ + { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ + { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ + { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ + { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ + { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ + { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ + { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ + { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ + { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ + { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ + { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ + { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ + { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ + { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ + { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ + { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ + { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ + { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ + { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ + { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ + { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ + { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ + { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ + { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ + { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ + { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ + { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ + { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ + { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ + { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ + { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ + { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ + { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ + { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ + { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ + { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ + { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ + { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ + { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ + { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ + { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ + { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ + { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ + { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ + { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ + { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ + { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ + { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ + { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ + { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ + { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ + { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ + { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ + { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ + { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ + { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ + { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ + { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ + { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ + { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ + { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ + { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ + { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ + { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ + { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ + { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ + { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ + { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ + { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ + { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ + { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ + { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ + { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ + { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ + { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ + { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ + { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ + { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ + { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ + { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ + { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ + { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ + { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ + { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ + { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ + { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ + { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ + { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ + { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ + { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ + { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ + { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ + { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ + { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ + { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ + { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ + { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ + { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ + { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ + { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ + { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ + { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ + { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ + { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ + { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ + { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ + { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ + { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ + { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ + { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ + { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ + { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ + { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ + { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ + { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ + { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ + { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ + { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ + { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ + { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ + { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ + { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ + { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ + { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ + { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ + { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ + { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ + { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ + { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ + { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ + { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ + { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ + { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ + { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ + { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ + { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ + { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ + { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ + { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ + { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ + { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ + { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ + { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ + { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ + { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ + { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ + { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ + { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ + { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ + { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ + { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ + { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ + { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ + { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ + { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ + { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ + { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ + { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ + { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ + { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ + { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ + { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ + { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ + { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ + { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ + { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ + { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ + { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ + { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ + { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ + { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ + { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ + { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ + { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ + { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ + { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ + { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ + { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ + { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ + { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ + { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ + { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ + { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ + { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ + { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ + { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ + { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ + { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ + { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ + { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ + { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ + { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ + { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ + { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ + { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ + { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ + { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ + { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ + { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ + { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ + { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ + { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ + { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ + { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ + { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ + { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ + { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ + { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ + { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ + { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ + { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ + { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ + { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ + { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ + { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ + { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ + { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ + { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ + { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ + { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ + { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ + { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ + { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ + { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ + { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ + { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ + { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ + { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ + { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ + { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ + { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ + { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ + { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ + { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ + { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ + { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ + { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ + { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ + { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ + { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ + { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ + { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ + { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ + { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ + { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ + { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ + { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ + { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ + { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ + { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ + { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ + { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ + { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ + { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ + { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ + { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ + { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ + { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ + { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ + { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ + { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ + { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ + { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ + { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ + { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ + { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ + { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ + { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ + { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ + { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ + { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ + { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ + { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ + { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ + { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ + { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ + { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ + { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ + { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ + { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ + { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ + { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ + { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ + { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ + { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ + { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ + { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ + { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ + { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ + { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ + { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ + { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ + { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ + { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ + { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ + { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ + { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ + { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ + { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ + { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ + { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ + { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ + { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ + { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ + { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ + { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ + { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ + { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ + { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ + { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ + { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ + { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ + { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ + { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ + { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ + { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ + { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ + { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ + { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ + { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ + { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ + { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ + { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ + { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ + { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ + { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ + { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ + { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ + { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ + { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ + { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ + { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ + { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ + { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ + { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ + { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ + { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ + { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ + { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ + { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ + { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ + { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ + { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ + { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ + { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ + { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ + { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ + { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ + { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ + { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ + { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ + { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ + { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ + { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ + { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ + { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ + { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ + { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ + { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ + { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ + { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ + { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ + { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ + { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ + { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ + { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ + { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ + { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ + { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ + { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ + { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ + { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ + { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ + { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ + { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ + { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ + { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ + { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ + { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ + { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ + { 0x0aaa, 0x2013 }, /* endash – EN DASH */ + { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ + { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ + { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ + { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ + { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ + { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ + { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ + { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ + { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ + { 0x0af1, 0x2020 }, /* dagger † DAGGER */ + { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ + { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ + { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ + { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ + { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ + { 0x0afc, 0x2038 }, /* caret ‸ CARET */ + { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ + { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ + { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ + { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ + { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ + { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ + { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ + { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ + { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ + { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ + { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ + { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ + { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ + { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ + { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ + { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ + { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ + { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ + { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ + { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ + { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ + { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ + { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ + { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ + { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ + { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ + { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ + { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ + { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ + { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ + { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ + { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ + { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ + { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ + { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ + { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ + { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ + { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ + { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ + { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ + { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ + { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ + { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ + { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ + { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ + { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ + { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ + { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ + { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ + { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ + { 0x08dd, 0x222a }, /* union ∪ UNION */ + { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ + { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ + { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ + { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ + { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ + { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ + { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ + { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ + { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ + { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ + { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ + { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ + { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ + { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ + { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ + { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ + { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ + { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ + { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ + { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ + { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ + { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ + { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ + { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ + { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ + { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ + { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ + { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ + { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ + { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ + { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ + { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ + { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ + { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ + { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ + { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ + { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ + { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ + { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ + { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ + { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ + { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ + { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ + { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ + { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ + { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ + { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ + { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ + { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ + { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ + { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ + { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ + { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ + { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ + { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ + { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ + { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ + { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ + { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ + { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ + { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ + { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ + { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ + { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ + { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ + { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ + { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ + { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ + { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ + { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ + { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ + { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ + { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ + { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ + { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ + { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ + { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ + { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ + { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ + { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ + { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ + { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ + { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ + { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ + { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ + { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ + { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ + { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ + { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ + { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ + { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ + { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ + { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ + { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ + { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ + { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ + { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ + { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ + { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ + { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ + { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ + { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ + { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ + { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ + { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ + { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ + { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ + { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ + { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ + { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ + { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ + { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ + { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ + { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ + { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ + { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ + { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ + { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ + { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ + { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ + { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ + { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ + { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ + { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ + { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ + { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ + { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ + { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ + { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ + { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ + { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ + { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ + { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ + { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ + { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ + { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ + { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ + { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ + { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ + { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ + { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ + { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ + { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ + { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ + { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ + { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ + { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ + { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ + { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ + { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ + { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ + { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ + { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ + { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ + { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ + { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ + { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ + { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ + { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ + { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ + { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ + { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ + { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ + { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ + { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ + { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ + { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ + { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ + { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ + { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ + { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ + { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ + { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ + { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ + { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ + { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ + { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ + { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ + { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ + { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ + { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ + { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ + { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ + { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ + { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ + { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ + { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ + { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ + { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ + { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ + { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ + { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ +}; + +#endif // KEYDATA_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h new file mode 100644 index 000000000..e735210e3 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h @@ -0,0 +1,173 @@ +/* + Copyright (C) 2001 Ellis Whitehead + + Win32 port: + Copyright (C) 2004 Jaroslaw Staniek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +#ifndef KEYSERVER_X11_H +#define KEYSERVER_X11_H + +#include + +struct TransKey { + int keySymQt; + uint keySymX; +}; + +static const TransKey g_rgQtToSymX[] = { + { Qt::Key_Escape, XK_Escape }, + { Qt::Key_Tab, XK_Tab }, + { Qt::Key_Backtab, XK_ISO_Left_Tab }, + { Qt::Key_Backspace, XK_BackSpace }, + { Qt::Key_Return, XK_Return }, + { Qt::Key_Enter, XK_KP_Enter }, + { Qt::Key_Insert, XK_Insert }, + { Qt::Key_Delete, XK_Delete }, + { Qt::Key_Pause, XK_Pause }, +#ifdef sun + { Qt::Key_Print, XK_F22 }, +#else + { Qt::Key_Print, XK_Print }, +#endif + { Qt::Key_SysReq, XK_Sys_Req }, + { Qt::Key_Home, XK_Home }, + { Qt::Key_End, XK_End }, + { Qt::Key_Left, XK_Left }, + { Qt::Key_Up, XK_Up }, + { Qt::Key_Right, XK_Right }, + { Qt::Key_Down, XK_Down }, + //{ Qt::Key_Shift, 0 }, + //{ Qt::Key_Control, 0 }, + //{ Qt::Key_Meta, 0 }, + //{ Qt::Key_Alt, 0 }, + { Qt::Key_CapsLock, XK_Caps_Lock }, + { Qt::Key_NumLock, XK_Num_Lock }, + { Qt::Key_ScrollLock, XK_Scroll_Lock }, + { Qt::Key_F1, XK_F1 }, + { Qt::Key_F2, XK_F2 }, + { Qt::Key_F3, XK_F3 }, + { Qt::Key_F4, XK_F4 }, + { Qt::Key_F5, XK_F5 }, + { Qt::Key_F6, XK_F6 }, + { Qt::Key_F7, XK_F7 }, + { Qt::Key_F8, XK_F8 }, + { Qt::Key_F9, XK_F9 }, + { Qt::Key_F10, XK_F10 }, + { Qt::Key_F11, XK_F11 }, + { Qt::Key_F12, XK_F12 }, + { Qt::Key_F13, XK_F13 }, + { Qt::Key_F14, XK_F14 }, + { Qt::Key_F15, XK_F15 }, + { Qt::Key_F16, XK_F16 }, + { Qt::Key_F17, XK_F17 }, + { Qt::Key_F18, XK_F18 }, + { Qt::Key_F19, XK_F19 }, + { Qt::Key_F20, XK_F20 }, + { Qt::Key_F21, XK_F21 }, + { Qt::Key_F22, XK_F22 }, + { Qt::Key_F23, XK_F23 }, + { Qt::Key_F24, XK_F24 }, + { Qt::Key_F25, XK_F25 }, + { Qt::Key_F26, XK_F26 }, + { Qt::Key_F27, XK_F27 }, + { Qt::Key_F28, XK_F28 }, + { Qt::Key_F29, XK_F29 }, + { Qt::Key_F30, XK_F30 }, + { Qt::Key_F31, XK_F31 }, + { Qt::Key_F32, XK_F32 }, + { Qt::Key_F33, XK_F33 }, + { Qt::Key_F34, XK_F34 }, + { Qt::Key_F35, XK_F35 }, + { Qt::Key_Super_L, XK_Super_L }, + { Qt::Key_Super_R, XK_Super_R }, + { Qt::Key_Menu, XK_Menu }, + { Qt::Key_Hyper_L, XK_Hyper_L }, + { Qt::Key_Hyper_R, XK_Hyper_R }, + { Qt::Key_Help, XK_Help }, + + { '/', XK_KP_Divide }, + { '*', XK_KP_Multiply }, + { '-', XK_KP_Subtract }, + { '+', XK_KP_Add }, + { Qt::Key_Return, XK_KP_Enter }, + {Qt::Key_Multi_key, XK_Multi_key}, + {Qt::Key_Codeinput, XK_Codeinput}, + {Qt::Key_SingleCandidate, XK_SingleCandidate}, + {Qt::Key_MultipleCandidate, XK_MultipleCandidate}, + {Qt::Key_PreviousCandidate, XK_PreviousCandidate}, + {Qt::Key_Mode_switch, XK_Mode_switch}, + {Qt::Key_Kanji, XK_Kanji}, + {Qt::Key_Muhenkan, XK_Muhenkan}, + {Qt::Key_Henkan, XK_Henkan}, + {Qt::Key_Romaji, XK_Romaji}, + {Qt::Key_Hiragana, XK_Hiragana}, + {Qt::Key_Katakana, XK_Katakana}, + {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana}, + {Qt::Key_Zenkaku, XK_Zenkaku}, + {Qt::Key_Hankaku, XK_Hankaku}, + {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku}, + {Qt::Key_Touroku, XK_Touroku}, + {Qt::Key_Massyo, XK_Massyo}, + {Qt::Key_Kana_Lock, XK_Kana_Lock}, + {Qt::Key_Kana_Shift, XK_Kana_Shift}, + {Qt::Key_Eisu_Shift, XK_Eisu_Shift}, + {Qt::Key_Eisu_toggle, XK_Eisu_toggle}, + {Qt::Key_Hangul, XK_Hangul}, + {Qt::Key_Hangul_Start, XK_Hangul_Start}, + {Qt::Key_Hangul_End, XK_Hangul_End}, + {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja}, + {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo}, + {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja}, + {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja}, + {Qt::Key_Hangul_Banja, XK_Hangul_Banja}, + {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja}, + {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja}, + {Qt::Key_Hangul_Special, XK_Hangul_Special}, +}; + +#include + +inline int map_sym_to_qt(uint keySym) +{ + if (keySym < 0x1000) { + if (keySym >= 'a' && keySym <= 'z') + return QChar(keySym).toUpper().unicode(); + return keySym; + } +#ifdef Q_WS_WIN + if (keySym < 0x3000) + return keySym; +#else + if (keySym < 0x3000) + return keySym | Qt::UNICODE_ACCEL; + + for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++) + if (g_rgQtToSymX[i].keySymX == keySym) + return g_rgQtToSymX[i].keySymQt; +#endif + return Qt::Key_unknown; +} + +static bool symToKeyQt(uint keySym, int& keyQt) +{ + keyQt = map_sym_to_qt(keySym); + return (keyQt != Qt::Key_unknown); +} + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp new file mode 100644 index 000000000..a4dec94c7 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include "keyuni.h" +#include "keydata.h" + +uint32_t +FcitxKeySymToUnicode (uint32_t keyval) +{ + int min = 0; + int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1; + int mid; + + /* First check for Latin-1 characters (1:1 mapping) */ + if ((keyval >= 0x0020 && keyval <= 0x007e) || + (keyval >= 0x00a0 && keyval <= 0x00ff)) + return keyval; + + /* Also check for directly encoded 24-bit UCS characters: + */ + if ((keyval & 0xff000000) == 0x01000000) + return keyval & 0x00ffffff; + + /* binary search in table */ + while (max >= min) { + mid = (min + max) / 2; + if (gdk_keysym_to_unicode_tab[mid].keysym < keyval) + min = mid + 1; + else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval) + max = mid - 1; + else { + /* found it */ + return gdk_keysym_to_unicode_tab[mid].ucs; + } + } + + /* No matching Unicode value found */ + return 0; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h new file mode 100644 index 000000000..02af14d12 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KEYUNI_H +#define KEYUNI_H + +#include + +quint32 +FcitxKeySymToUnicode (quint32 keyval); + + +#endif // KEYUNI_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp new file mode 100644 index 000000000..d522818f9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "main.h" + + +QStringList QFcitxPlatformInputContextPlugin::keys() const +{ + return QStringList(QStringLiteral("fcitx")); + +} + +QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0) + return new QFcitxPlatformInputContext; + return 0; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h new file mode 100644 index 000000000..9938da17b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef MAIN_H +#define MAIN_H + +#include +#include + +#include "qfcitxplatforminputcontext.h" + +class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin +{ + Q_OBJECT +public: + Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "fcitx.json") + QStringList keys() const; + QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList); +}; + +#endif // MAIN_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp new file mode 100644 index 000000000..adbf1bdb9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp @@ -0,0 +1,770 @@ +/*************************************************************************** + * Copyright (C) 2011~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "keyserver_x11.h" + +#include "qfcitxplatforminputcontext.h" +#include "fcitxqtinputcontextproxy.h" +#include "fcitxqtinputmethodproxy.h" +#include "fcitxqtconnection.h" +#include "keyuni.h" +#include "utils.h" + +static bool key_filtered = false; + +static bool +get_boolean_env(const char *name, + bool defval) +{ + const char *value = getenv(name); + + if (value == NULL) + return defval; + + if (strcmp(value, "") == 0 || + strcmp(value, "0") == 0 || + strcmp(value, "false") == 0 || + strcmp(value, "False") == 0 || + strcmp(value, "FALSE") == 0) + return false; + + return true; +} + +static inline const char* +get_locale() +{ + const char* locale = getenv("LC_ALL"); + if (!locale) + locale = getenv("LC_CTYPE"); + if (!locale) + locale = getenv("LANG"); + if (!locale) + locale = "C"; + + return locale; +} + +struct xkb_context* _xkb_context_new_helper() +{ + struct xkb_context* context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + if (context) { + xkb_context_set_log_level(context, XKB_LOG_LEVEL_CRITICAL); + } + + return context; +} + +QFcitxPlatformInputContext::QFcitxPlatformInputContext() : + m_connection(new FcitxQtConnection(this)), + m_improxy(0), + m_n_compose(0), + m_cursorPos(0), + m_useSurroundingText(false), + m_syncMode(true), + m_lastWId(0), + m_destroy(false), + m_xkbContext(_xkb_context_new_helper()), + m_xkbComposeTable(m_xkbContext ? xkb_compose_table_new_from_locale(m_xkbContext.data(), get_locale(), XKB_COMPOSE_COMPILE_NO_FLAGS) : 0), + m_xkbComposeState(m_xkbComposeTable ? xkb_compose_state_new(m_xkbComposeTable.data(), XKB_COMPOSE_STATE_NO_FLAGS) : 0) +{ + FcitxQtFormattedPreedit::registerMetaType(); + + memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1)); + connect(m_connection, SIGNAL(connected()), this, SLOT(connected())); + connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp())); + + m_connection->startConnection(); +} + +QFcitxPlatformInputContext::~QFcitxPlatformInputContext() +{ + m_destroy = true; + cleanUp(); +} + +void QFcitxPlatformInputContext::connected() +{ + if (!m_connection->isConnected()) + return; + + // qDebug() << "create Input Context" << m_connection->name(); + if (m_improxy) { + delete m_improxy; + m_improxy = 0; + } + m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); + + QWindow* w = qApp->focusWindow(); + if (w) + createICData(w); +} + +void QFcitxPlatformInputContext::cleanUp() +{ + for(QHash::const_iterator i = m_icMap.constBegin(), + e = m_icMap.constEnd(); i != e; ++i) { + FcitxQtICData* data = i.value(); + + if (data->proxy) + delete data->proxy; + } + + m_icMap.clear(); + + if (m_improxy) { + delete m_improxy; + m_improxy = 0; + } + + if (!m_destroy) { + commitPreedit(); + } +} + +bool QFcitxPlatformInputContext::isValid() const +{ + return true; +} + +void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) +{ + if (action == QInputMethod::Click + && (cursorPosition <= 0 || cursorPosition >= m_preedit.length()) + ) + { + // qDebug() << action << cursorPosition; + commitPreedit(); + } +} + +void QFcitxPlatformInputContext::commitPreedit() +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + if (m_commitPreedit.length() <= 0) + return; + QInputMethodEvent e; + e.setCommitString(m_commitPreedit); + QCoreApplication::sendEvent(input, &e); + m_commitPreedit.clear(); +} + + +void QFcitxPlatformInputContext::reset() +{ + commitPreedit(); + FcitxQtInputContextProxy* proxy = validIC(); + if (proxy) + proxy->Reset(); + if (m_xkbComposeState) { + xkb_compose_state_reset(m_xkbComposeState.data()); + } + QPlatformInputContext::reset(); +} + +void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries ) +{ + QWindow* window = qApp->focusWindow(); + FcitxQtInputContextProxy* proxy = validICByWindow(window); + if (!proxy) + return; + + FcitxQtICData* data = m_icMap.value(window->winId()); + + QInputMethod *method = qApp->inputMethod(); + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodQueryEvent query(queries); + QGuiApplication::sendEvent(input, &query); + + if (queries & Qt::ImCursorRectangle) { + cursorRectChanged(); + } + + if (queries & Qt::ImHints) { + Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()); + + +#define CHECK_HINTS(_HINTS, _CAPACITY) \ + if (hints & _HINTS) \ + addCapacity(data, _CAPACITY); \ + else \ + removeCapacity(data, _CAPACITY); + + CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE) + CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER) + CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE) + CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE) + CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK) + CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT) + CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER) + CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE) + CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE) + CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE) + CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL) + } + + bool setSurrounding = false; + do { + if (!m_useSurroundingText) + break; + if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition))) + break; + if (data->capacity.testFlag(CAPACITY_PASSWORD)) + break; + QVariant var = query.value(Qt::ImSurroundingText); + QVariant var1 = query.value(Qt::ImCursorPosition); + QVariant var2 = query.value(Qt::ImAnchorPosition); + if (!var.isValid() || !var1.isValid()) + break; + QString text = var.toString(); + /* we don't want to waste too much memory here */ +#define SURROUNDING_THRESHOLD 4096 + if (text.length() < SURROUNDING_THRESHOLD) { + if (_utf8_check_string(text.toUtf8().data())) { + addCapacity(data, CAPACITY_SURROUNDING_TEXT); + + int cursor = var1.toInt(); + int anchor; + if (var2.isValid()) + anchor = var2.toInt(); + else + anchor = cursor; + if (data->surroundingText != text) { + data->surroundingText = text; + proxy->SetSurroundingText(text, cursor, anchor); + } + else { + if (data->surroundingAnchor != anchor || + data->surroundingCursor != cursor) + proxy->SetSurroundingTextPosition(cursor, anchor); + } + data->surroundingCursor = cursor; + data->surroundingAnchor = anchor; + setSurrounding = true; + } + } + if (!setSurrounding) { + data->surroundingAnchor = -1; + data->surroundingCursor = -1; + data->surroundingText = QString::null; + removeCapacity(data, CAPACITY_SURROUNDING_TEXT); + } + } while(0); +} + +void QFcitxPlatformInputContext::commit() +{ + QPlatformInputContext::commit(); +} + +void QFcitxPlatformInputContext::setFocusObject(QObject* object) +{ + FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId); + if (proxy) { + proxy->FocusOut(); + } + + QWindow *window = qApp->focusWindow(); + if (window) { + m_lastWId = window->winId(); + } else { + m_lastWId = 0; + return; + } + proxy = validICByWindow(window); + if (proxy) + proxy->FocusIn(); + else { + FcitxQtICData* data = m_icMap.value(window->winId()); + if (!data) { + createICData(window); + return; + } + } +} + +void QFcitxPlatformInputContext::windowDestroyed(QObject* object) +{ + /* access QWindow is not possible here, so we use our own map to do so */ + WId wid = m_windowToWidMap.take(object); + if (!wid) + return; + FcitxQtICData* data = m_icMap.take(wid); + if (!data) + return; + + delete data; + // qDebug() << "Window Destroyed and we destroy IC correctly, horray!"; +} + +void QFcitxPlatformInputContext::cursorRectChanged() +{ + QWindow *inputWindow = qApp->focusWindow(); + if (!inputWindow) + return; + FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow); + if (!proxy) + return; + + FcitxQtICData* data = m_icMap.value(inputWindow->winId()); + + QRect r = qApp->inputMethod()->cursorRectangle().toRect(); + if(!r.isValid()) + return; + + r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft())); + + qreal scale = inputWindow->devicePixelRatio(); + if (data->rect != r) { + data->rect = r; + proxy->SetCursorRect(r.x() * scale, r.y() * scale, + r.width() * scale, r.height() * scale); + } +} + +void QFcitxPlatformInputContext::createInputContext(WId w) +{ + if (!m_connection->isConnected()) + return; + + // qDebug() << "create Input Context" << m_connection->connection()->name(); + + if (m_improxy) { + delete m_improxy; + m_improxy = NULL; + } + m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); + + if (!m_improxy->isValid()) + return; + + QFileInfo info(QCoreApplication::applicationFilePath()); + QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid()); + QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result); + watcher->setProperty("wid", (qulonglong) w); + connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*))); +} + +void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher) +{ + WId w = watcher->property("wid").toULongLong(); + FcitxQtICData* data = m_icMap.value(w); + if (!data) + return; + + QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher; + + do { + if (result.isError()) { + break; + } + + if (!m_connection->isConnected()) + break; + + int id = qdbus_cast(result.argumentAt(0)); + QString path = QString("/inputcontext_%1").arg(id); + if (data->proxy) { + delete data->proxy; + } + data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this); + connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString))); + connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int))); + connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int))); + connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint))); + + if (data->proxy->isValid()) { + QWindow* window = qApp->focusWindow(); + if (window && window->winId() == w) + data->proxy->FocusIn(); + } + + QFlags flag; + flag |= CAPACITY_PREEDIT; + flag |= CAPACITY_FORMATTED_PREEDIT; + flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT; + m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true); + if (m_useSurroundingText) + flag |= CAPACITY_SURROUNDING_TEXT; + + /* + * event loop will cause some problem, so we tries to use async way. + */ + m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false); + + addCapacity(data, flag, true); + } while(0); + delete watcher; +} + +void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data) +{ + if (!data->proxy || !data->proxy->isValid()) + return; + + QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity); +} + +void QFcitxPlatformInputContext::commitString(const QString& str) +{ + m_cursorPos = 0; + m_preeditList.clear(); + m_commitPreedit.clear(); + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodEvent event; + event.setCommitString(str); + QCoreApplication::sendEvent(input, &event); +} + +void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos) +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + if (cursorPos == m_cursorPos && preeditList == m_preeditList) + return; + m_preeditList = preeditList; + m_cursorPos = cursorPos; + QString str, commitStr; + int pos = 0; + QList attrList; + Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList) + { + str += preedit.string(); + if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS)) + commitStr += preedit.string(); + QTextCharFormat format; + if ((preedit.format() & MSG_NOUNDERLINE) == 0) { + format.setUnderlineStyle(QTextCharFormat::DashUnderline); + } + if (preedit.format() & MSG_HIGHLIGHT) { + QBrush brush; + QPalette palette; + palette = QGuiApplication::palette(); + format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight)))); + format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText)))); + } + attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format)); + pos += preedit.string().length(); + } + + QByteArray array = str.toUtf8(); + array.truncate(cursorPos); + cursorPos = QString::fromUtf8(array).length(); + + attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0)); + m_preedit = str; + m_commitPreedit = commitStr; + QInputMethodEvent event(str, attrList); + QCoreApplication::sendEvent(input, &event); + update(Qt::ImCursorRectangle); +} + +void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar) +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodEvent event; + event.setCommitString("", offset, nchar); + QCoreApplication::sendEvent(input, &event); +} + +void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type) +{ + QObject *input = qApp->focusObject(); + if (input != NULL) { + key_filtered = true; + QKeyEvent *keyevent = createKeyEvent(keyval, state, type); + QCoreApplication::sendEvent(input, keyevent); + delete keyevent; + key_filtered = false; + } +} + +void QFcitxPlatformInputContext::createICData(QWindow* w) +{ + FcitxQtICData* data = m_icMap.value(w->winId()); + if (!data) { + data = new FcitxQtICData; + m_icMap[w->winId()] = data; + m_windowToWidMap[w] = w->winId(); + connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); + } + createInputContext(w->winId()); +} + +QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type) +{ + Qt::KeyboardModifiers qstate = Qt::NoModifier; + + int count = 1; + if (state & FcitxKeyState_Alt) { + qstate |= Qt::AltModifier; + count ++; + } + + if (state & FcitxKeyState_Shift) { + qstate |= Qt::ShiftModifier; + count ++; + } + + if (state & FcitxKeyState_Ctrl) { + qstate |= Qt::ControlModifier; + count ++; + } + + int key; + symToKeyQt(keyval, key); + + QKeyEvent* keyevent = new QKeyEvent( + (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease), + key, + qstate, + QString(), + false, + count + ); + + return keyevent; +} + +bool QFcitxPlatformInputContext::filterEvent(const QEvent* event) +{ + do { + if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { + break; + } + + const QKeyEvent* keyEvent = static_cast(event); + quint32 keyval = keyEvent->nativeVirtualKey(); + quint32 keycode = keyEvent->nativeScanCode(); + quint32 state = keyEvent->nativeModifiers(); + bool press = keyEvent->type() == QEvent::KeyPress; + + if (key_filtered) { + break; + } + + if (!inputMethodAccepted()) + break; + + QObject *input = qApp->focusObject(); + + if (!input) { + break; + } + + FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow()); + + if (!proxy) { + if (filterEventFallback(keyval, keycode, state, press)) { + return true; + } else { + break; + } + } + + proxy->FocusIn(); + + QDBusPendingReply< int > reply = proxy->ProcessKeyEvent(keyval, + keycode, + state, + (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY, + QDateTime::currentDateTime().toTime_t()); + + + if (Q_UNLIKELY(m_syncMode)) { + reply.waitForFinished(); + + if (!m_connection->isConnected() || !reply.isFinished() || reply.isError() || reply.value() <= 0) { + if (filterEventFallback(keyval, keycode, state, press)) { + return true; + } else { + break; + } + } else { + update(Qt::ImCursorRectangle); + return true; + } + } + else { + ProcessKeyWatcher* watcher = new ProcessKeyWatcher(*keyEvent, qApp->focusWindow(), reply, this); + connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(processKeyEventFinished(QDBusPendingCallWatcher*))); + return true; + } + } while(0); + return QPlatformInputContext::filterEvent(event); +} + +void QFcitxPlatformInputContext::processKeyEventFinished(QDBusPendingCallWatcher* w) +{ + ProcessKeyWatcher* watcher = static_cast(w); + QDBusPendingReply< int > result(*watcher); + bool filtered = false; + + QWindow* window = watcher->window(); + // if window is already destroyed, we can only throw this event away. + if (!window) { + return; + } + + const QKeyEvent& keyEvent = watcher->event(); + + // use same variable name as in QXcbKeyboard::handleKeyEvent + QEvent::Type type = keyEvent.type(); + int qtcode = keyEvent.key(); + Qt::KeyboardModifiers modifiers = keyEvent.modifiers(); + quint32 code = keyEvent.nativeScanCode(); + quint32 sym = keyEvent.nativeVirtualKey(); + quint32 state = keyEvent.nativeModifiers(); + QString string = keyEvent.text(); + bool isAutoRepeat = keyEvent.isAutoRepeat(); + ulong time = keyEvent.timestamp(); + + if (result.isError() || result.value() <= 0) { + filtered = filterEventFallback(sym, code, state, type == QEvent::KeyPress); + } else { + filtered = true; + } + + if (!result.isError()) { + update(Qt::ImCursorRectangle); + } + + if (!filtered) { + // copied from QXcbKeyboard::handleKeyEvent() + if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu) { + const QPoint globalPos = window->screen()->handle()->cursor()->pos(); + const QPoint pos = window->mapFromGlobal(globalPos); QWindowSystemInterface::handleContextMenuEvent(window, false, pos, globalPos, modifiers); + } + QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, + code, sym, state, string, isAutoRepeat); + } + + delete watcher; +} + + +bool QFcitxPlatformInputContext::filterEventFallback(uint keyval, uint keycode, uint state, bool press) +{ + Q_UNUSED(keycode); + if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) { + return true; + } + return false; +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC() +{ + if (m_icMap.isEmpty()) { + return 0; + } + QWindow* window = qApp->focusWindow(); + return validICByWindow(window); +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid) +{ + if (m_icMap.isEmpty()) { + return 0; + } + FcitxQtICData* icData = m_icMap.value(wid); + if (!icData) + return 0; + if (icData->proxy.isNull()) { + return 0; + } else if (icData->proxy->isValid()) { + return icData->proxy.data(); + } + return 0; +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w) +{ + if (!w) { + return 0; + } + + if (m_icMap.isEmpty()) { + return 0; + } + return validICByWId(w->winId()); +} + + +bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event) +{ + Q_UNUSED(state); + + if (!m_xkbComposeTable || event == FCITX_RELEASE_KEY) + return false; + + struct xkb_compose_state* xkbComposeState = m_xkbComposeState.data(); + + enum xkb_compose_feed_result result = xkb_compose_state_feed(xkbComposeState, keyval); + if (result == XKB_COMPOSE_FEED_IGNORED) { + return false; + } + + enum xkb_compose_status status = xkb_compose_state_get_status(xkbComposeState); + if (status == XKB_COMPOSE_NOTHING) { + return 0; + } else if (status == XKB_COMPOSE_COMPOSED) { + char buffer[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0'}; + int length = xkb_compose_state_get_utf8(xkbComposeState, buffer, sizeof(buffer)); + xkb_compose_state_reset(xkbComposeState); + if (length != 0) { + commitString(QString::fromUtf8(buffer)); + } + + } else if (status == XKB_COMPOSE_CANCELLED) { + xkb_compose_state_reset(xkbComposeState); + } + + return true; +} + + +// kate: indent-mode cstyle; space-indent on; indent-width 0; diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h new file mode 100644 index 000000000..137127891 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h @@ -0,0 +1,269 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef QFCITXPLATFORMINPUTCONTEXT_H +#define QFCITXPLATFORMINPUTCONTEXT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtformattedpreedit.h" +#include "fcitxqtinputcontextproxy.h" + +#define MAX_COMPOSE_LEN 7 + +class FcitxQtConnection; +class QFileSystemWatcher; +enum FcitxKeyEventType { + FCITX_PRESS_KEY, + FCITX_RELEASE_KEY +}; + +enum FcitxCapacityFlags { + CAPACITY_NONE = 0, + CAPACITY_CLIENT_SIDE_UI = (1 << 0), + CAPACITY_PREEDIT = (1 << 1), + CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2), + CAPACITY_PASSWORD = (1 << 3), + CAPACITY_FORMATTED_PREEDIT = (1 << 4), + CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5), + CAPACITY_SURROUNDING_TEXT = (1 << 6), + CAPACITY_EMAIL = (1 << 7), + CAPACITY_DIGIT = (1 << 8), + CAPACITY_UPPERCASE = (1 << 9), + CAPACITY_LOWERCASE = (1 << 10), + CAPACITY_NOAUTOUPPERCASE = (1 << 11), + CAPACITY_URL = (1 << 12), + CAPACITY_DIALABLE = (1 << 13), + CAPACITY_NUMBER = (1 << 14), + CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15), + CAPACITY_SPELLCHECK = (1 << 16), + CAPACITY_NO_SPELLCHECK = (1 << 17), + CAPACITY_WORD_COMPLETION = (1 << 18), + CAPACITY_UPPERCASE_WORDS = (1 << 19), + CAPACITY_UPPERCASE_SENTENCES = (1 << 20), + CAPACITY_ALPHA = (1 << 21), + CAPACITY_NAME = (1 << 22) +} ; + +/** message type and flags */ +enum FcitxMessageType { + MSG_TYPE_FIRST = 0, + MSG_TYPE_LAST = 6, + MSG_TIPS = 0, /**< Hint Text */ + MSG_INPUT = 1, /**< User Input */ + MSG_INDEX = 2, /**< Index Number */ + MSG_FIRSTCAND = 3, /**< First candidate */ + MSG_USERPHR = 4, /**< User Phrase */ + MSG_CODE = 5, /**< Typed character */ + MSG_OTHER = 6, /**< Other Text */ + MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */ + MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */ + MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */ + MSG_REGULAR_MASK = 0x7 /**< regular color type mask */ +}; + + +enum FcitxKeyState { + FcitxKeyState_None = 0, + FcitxKeyState_Shift = 1 << 0, + FcitxKeyState_CapsLock = 1 << 1, + FcitxKeyState_Ctrl = 1 << 2, + FcitxKeyState_Alt = 1 << 3, + FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift, + FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift, + FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt, + FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift, + FcitxKeyState_NumLock = 1 << 4, + FcitxKeyState_Super = 1 << 6, + FcitxKeyState_ScrollLock = 1 << 7, + FcitxKeyState_MousePressed = 1 << 8, + FcitxKeyState_HandledMask = 1 << 24, + FcitxKeyState_IgnoredMask = 1 << 25, + FcitxKeyState_Super2 = 1 << 26, + FcitxKeyState_Hyper = 1 << 27, + FcitxKeyState_Meta = 1 << 28, + FcitxKeyState_UsedMask = 0x5c001fff +}; + +struct FcitxQtICData { + FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {} + ~FcitxQtICData() { + if (proxy && proxy->isValid()) { + proxy->DestroyIC(); + delete proxy; + } + } + QFlags capacity; + QPointer proxy; + QRect rect; + QString surroundingText; + int surroundingAnchor; + int surroundingCursor; +}; + + +class ProcessKeyWatcher : public QDBusPendingCallWatcher +{ + Q_OBJECT +public: + ProcessKeyWatcher(const QKeyEvent& event, QWindow* window, const QDBusPendingCall &call, QObject *parent = 0) : + QDBusPendingCallWatcher(call, parent) + ,m_event(event.type(), event.key(), event.modifiers(), + event.nativeScanCode(), event.nativeVirtualKey(), event.nativeModifiers(), + event.text(), event.isAutoRepeat(), event.count()) + ,m_window(window) + { + } + + virtual ~ProcessKeyWatcher() { + } + + const QKeyEvent& event() { + return m_event; + } + + QWindow* window() { + return m_window.data(); + } + +private: + QKeyEvent m_event; + QPointer m_window; +}; + +struct XkbContextDeleter +{ + static inline void cleanup(struct xkb_context* pointer) + { + if (pointer) xkb_context_unref(pointer); + } +}; + +struct XkbComposeTableDeleter +{ + static inline void cleanup(struct xkb_compose_table* pointer) + { + if (pointer) xkb_compose_table_unref(pointer); + } +}; + +struct XkbComposeStateDeleter +{ + static inline void cleanup(struct xkb_compose_state* pointer) + { + if (pointer) xkb_compose_state_unref(pointer); + } +}; + +class FcitxQtInputMethodProxy; + +class QFcitxPlatformInputContext : public QPlatformInputContext +{ + Q_OBJECT +public: + QFcitxPlatformInputContext(); + virtual ~QFcitxPlatformInputContext(); + + virtual bool filterEvent(const QEvent* event); + virtual bool isValid() const; + virtual void invokeAction(QInputMethod::Action , int cursorPosition); + virtual void reset(); + virtual void commit(); + virtual void update(Qt::InputMethodQueries quries ); + virtual void setFocusObject(QObject* object); + + +public Q_SLOTS: + void cursorRectChanged(); + void commitString(const QString& str); + void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos); + void deleteSurroundingText(int offset, uint nchar); + void forwardKey(uint keyval, uint state, int type); + void createInputContextFinished(QDBusPendingCallWatcher* watcher); + void connected(); + void cleanUp(); + void windowDestroyed(QObject* object); + + +private: + void createInputContext(WId w); + bool processCompose(uint keyval, uint state, FcitxKeyEventType event); + bool checkAlgorithmically(); + bool checkCompactTable(const struct _FcitxComposeTableCompact *table); + QKeyEvent* createKeyEvent(uint keyval, uint state, int type); + + + void addCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) + { + QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity; + if (data->capacity != newcaps || forceUpdate) { + data->capacity = newcaps; + updateCapacity(data); + } + } + + void removeCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) + { + QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity); + if (data->capacity != newcaps || forceUpdate) { + data->capacity = newcaps; + updateCapacity(data); + } + } + + void updateCapacity(FcitxQtICData* data); + void commitPreedit(); + void createICData(QWindow* w); + FcitxQtInputContextProxy* validIC(); + FcitxQtInputContextProxy* validICByWindow(QWindow* window); + FcitxQtInputContextProxy* validICByWId(WId wid); + bool filterEventFallback(uint keyval, uint keycode, uint state, bool press); + + FcitxQtInputMethodProxy* m_improxy; + uint m_compose_buffer[MAX_COMPOSE_LEN + 1]; + int m_n_compose; + QString m_preedit; + QString m_commitPreedit; + FcitxQtFormattedPreeditList m_preeditList; + int m_cursorPos; + bool m_useSurroundingText; + bool m_syncMode; + FcitxQtConnection* m_connection; + QString m_lastSurroundingText; + int m_lastSurroundingAnchor; + int m_lastSurroundingCursor; + QHash m_icMap; + QHash m_windowToWidMap; + WId m_lastWId; + bool m_destroy; + QScopedPointer m_xkbContext; + QScopedPointer m_xkbComposeTable; + QScopedPointer m_xkbComposeState; +private slots: + void processKeyEventFinished(QDBusPendingCallWatcher*); +}; + +#endif // QFCITXPLATFORMINPUTCONTEXT_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp new file mode 100644 index 000000000..fe4eda1d0 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp @@ -0,0 +1,177 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "utils.h" +/** check utf8 character */ +#define ISUTF8_CB(c) (((c)&0xc0) == 0x80) + +#define CONT(i) ISUTF8_CB(in[i]) +#define VAL(i, s) ((in[i]&0x3f) << s) + +#define UTF8_LENGTH(Char) \ + ((Char) < 0x80 ? 1 : \ + ((Char) < 0x800 ? 2 : \ + ((Char) < 0x10000 ? 3 : \ + ((Char) < 0x200000 ? 4 : \ + ((Char) < 0x4000000 ? 5 : 6))))) + +#define UNICODE_VALID(Char) \ + ((Char) < 0x110000 && \ + (((Char) & 0xFFFFF800) != 0xD800) && \ + ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \ + ((Char) & 0xFFFE) != 0xFFFE) + +int +_utf8_get_char_extended(const char *s, + int max_len) +{ + const unsigned char*p = (const unsigned char*)s; + int i, len; + unsigned int wc = (unsigned char) * p; + + if (wc < 0x80) { + return wc; + } else if (wc < 0xc0) { + return (unsigned int) - 1; + } else if (wc < 0xe0) { + len = 2; + wc &= 0x1f; + } else if (wc < 0xf0) { + len = 3; + wc &= 0x0f; + } else if (wc < 0xf8) { + len = 4; + wc &= 0x07; + } else if (wc < 0xfc) { + len = 5; + wc &= 0x03; + } else if (wc < 0xfe) { + len = 6; + wc &= 0x01; + } else { + return (unsigned int) - 1; + } + + if (max_len >= 0 && len > max_len) { + for (i = 1; i < max_len; i++) { + if ((((unsigned char *)p)[i] & 0xc0) != 0x80) + return (unsigned int) - 1; + } + + return (unsigned int) - 2; + } + + for (i = 1; i < len; ++i) { + unsigned int ch = ((unsigned char *)p)[i]; + + if ((ch & 0xc0) != 0x80) { + if (ch) + return (unsigned int) - 1; + else + return (unsigned int) - 2; + } + + wc <<= 6; + + wc |= (ch & 0x3f); + } + + if (UTF8_LENGTH(wc) != len) + return (unsigned int) - 1; + + return wc; +} + +int _utf8_get_char_validated(const char *p, + int max_len) +{ + int result; + + if (max_len == 0) + return -2; + + result = _utf8_get_char_extended(p, max_len); + + if (result & 0x80000000) + return result; + else if (!UNICODE_VALID(result)) + return -1; + else + return result; +} + + +char * +_utf8_get_char(const char *i, uint32_t *chr) +{ + const unsigned char* in = (const unsigned char *)i; + if (!(in[0] & 0x80)) { + *(chr) = *(in); + return (char *)in + 1; + } + + /* 2-byte, 0x80-0x7ff */ + if ((in[0] & 0xe0) == 0xc0 && CONT(1)) { + *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0); + return (char *)in + 2; + } + + /* 3-byte, 0x800-0xffff */ + if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) { + *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0); + return (char *)in + 3; + } + + /* 4-byte, 0x10000-0x1FFFFF */ + if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) { + *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0); + return (char *)in + 4; + } + + /* 5-byte, 0x200000-0x3FFFFFF */ + if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) { + *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0); + return (char *)in + 5; + } + + /* 6-byte, 0x400000-0x7FFFFFF */ + if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) { + *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0); + return (char *)in + 6; + } + + *chr = *in; + + return (char *)in + 1; +} + + +int _utf8_check_string(const char *s) +{ + while (*s) { + uint32_t chr; + + if (_utf8_get_char_validated(s, 6) < 0) + return 0; + + s = _utf8_get_char(s, &chr); + } + + return 1; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h new file mode 100644 index 000000000..ae0c79cd1 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef UTILS_H +#define UTILS_H + +#include + +int +_utf8_get_char_extended(const char *s, + int max_len); +int _utf8_get_char_validated(const char *p, + int max_len); +char * +_utf8_get_char(const char *i, uint32_t *chr); +int _utf8_check_string(const char *s); + + +#endif // UTILS_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h new file mode 100644 index 000000000..299732fdc --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h @@ -0,0 +1,98 @@ +/* + * Copyright © 2012 Daniel Stone + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_COMPAT_H +#define _XKBCOMMON_COMPAT_H + +/** + * Renamed keymap API. + */ +#define xkb_group_index_t xkb_layout_index_t +#define xkb_group_mask_t xkb_layout_mask_t +#define xkb_map_compile_flags xkb_keymap_compile_flags +#define XKB_GROUP_INVALID XKB_LAYOUT_INVALID + +#define XKB_STATE_DEPRESSED \ + (XKB_STATE_MODS_DEPRESSED | XKB_STATE_LAYOUT_DEPRESSED) +#define XKB_STATE_LATCHED \ + (XKB_STATE_MODS_LATCHED | XKB_STATE_LAYOUT_LATCHED) +#define XKB_STATE_LOCKED \ + (XKB_STATE_MODS_LOCKED | XKB_STATE_LAYOUT_LOCKED) +#define XKB_STATE_EFFECTIVE \ + (XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED | \ + XKB_STATE_MODS_EFFECTIVE | XKB_STATE_LAYOUT_EFFECTIVE) + +#define xkb_map_new_from_names(context, names, flags) \ + xkb_keymap_new_from_names(context, names, flags) +#define xkb_map_new_from_file(context, file, format, flags) \ + xkb_keymap_new_from_file(context, file, format, flags) +#define xkb_map_new_from_string(context, string, format, flags) \ + xkb_keymap_new_from_string(context, string, format, flags) +#define xkb_map_get_as_string(keymap) \ + xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1) +#define xkb_map_ref(keymap) xkb_keymap_ref(keymap) +#define xkb_map_unref(keymap) xkb_keymap_unref(keymap) + +#define xkb_map_num_mods(keymap) xkb_keymap_num_mods(keymap) +#define xkb_map_mod_get_name(keymap, idx) xkb_keymap_mod_get_name(keymap, idx) +#define xkb_map_mod_get_index(keymap, str) xkb_keymap_mod_get_index(keymap, str) +#define xkb_key_mod_index_is_consumed(state, key, mod) \ + xkb_state_mod_index_is_consumed(state, key, mod) +#define xkb_key_mod_mask_remove_consumed(state, key, modmask) \ + xkb_state_mod_mask_remove_consumed(state, key, modmask) + +#define xkb_map_num_groups(keymap) xkb_keymap_num_layouts(keymap) +#define xkb_key_num_groups(keymap, key) \ + xkb_keymap_num_layouts_for_key(keymap, key) +#define xkb_map_group_get_name(keymap, idx) \ + xkb_keymap_layout_get_name(keymap, idx) +#define xkb_map_group_get_index(keymap, str) \ + xkb_keymap_layout_get_index(keymap, str) + +#define xkb_map_num_leds(keymap) xkb_keymap_num_leds(keymap) +#define xkb_map_led_get_name(keymap, idx) xkb_keymap_led_get_name(keymap, idx) +#define xkb_map_led_get_index(keymap, str) \ + xkb_keymap_led_get_index(keymap, str) + +#define xkb_key_repeats(keymap, key) xkb_keymap_key_repeats(keymap, key) + +#define xkb_key_get_syms(state, key, syms_out) \ + xkb_state_key_get_syms(state, key, syms_out) + +#define xkb_state_group_name_is_active(state, name, type) \ + xkb_state_layout_name_is_active(state, name, type) +#define xkb_state_group_index_is_active(state, idx, type) \ + xkb_state_layout_index_is_active(state, idx, type) + +#define xkb_state_serialize_group(state, component) \ + xkb_state_serialize_layout(state, component) + +#define xkb_state_get_map(state) xkb_state_get_keymap(state) + +/* Not needed anymore, since there's NO_FLAGS. */ +#define XKB_MAP_COMPILE_PLACEHOLDER XKB_KEYMAP_COMPILE_NO_FLAGS +#define XKB_MAP_COMPILE_NO_FLAGS XKB_KEYMAP_COMPILE_NO_FLAGS + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h new file mode 100644 index 000000000..7414c373b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h @@ -0,0 +1,488 @@ +/* + * Copyright © 2013 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XKBCOMMON_COMPOSE_H +#define _XKBCOMMON_COMPOSE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * libxkbcommon Compose API - support for Compose and dead-keys. + */ + +/** + * @defgroup compose Compose and dead-keys support + * Support for Compose and dead-keys. + * @since 0.5.0 + * + * @{ + */ + +/** + * @page compose-overview Overview + * @parblock + * + * Compose and dead-keys are a common feature of many keyboard input + * systems. They extend the range of the keysysm that can be produced + * directly from a keyboard by using a sequence of key strokes, instead + * of just one. + * + * Here are some example sequences, in the libX11 Compose file format: + * + * : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + * : "@" at # COMMERCIAL AT + * + * When the user presses a key which produces the `` keysym, + * nothing initially happens (thus the key is dubbed a "dead-key"). But + * when the user enters ``, "á" is "composed", in place of "a". If + * instead the user had entered a keysym which does not follow + * `` in any compose sequence, the sequence is said to be + * "cancelled". + * + * Compose files define many such sequences. For a description of the + * common file format for Compose files, see the Compose(5) man page. + * + * A successfuly-composed sequence has two results: a keysym and a UTF-8 + * string. At least one of the two is defined for each sequence. If only + * a keysym is given, the keysym's string representation is used for the + * result string (using xkb_keysym_to_utf8()). + * + * This library provides low-level support for Compose file parsing and + * processing. Higher-level APIs (such as libX11's `Xutf8LookupString`(3)) + * may be built upon it, or it can be used directly. + * + * @endparblock + */ + +/** + * @page compose-conflicting Conflicting Sequences + * @parblock + * + * To avoid ambiguity, a sequence is not allowed to be a prefix of another. + * In such a case, the conflict is resolved thus: + * + * 1. A longer sequence overrides a shorter one. + * 2. An equal sequence overrides an existing one. + * 3. A shorter sequence does not override a longer one. + * + * Sequences of length 1 are allowed. + * + * @endparblock + */ + +/** + * @page compose-cancellation Cancellation Behavior + * @parblock + * + * What should happen when a sequence is cancelled? For example, consider + * there are only the above sequences, and the input keysyms are + * ` `. There are a few approaches: + * + * 1. Swallow the cancelling keysym; that is, no keysym is produced. + * This is the approach taken by libX11. + * 2. Let the cancelling keysym through; that is, `` is produced. + * 3. Replay the entire sequence; that is, ` ` is produced. + * This is the approach taken by Microsoft Windows (approximately; + * instead of ``, the underlying key is used. This is + * difficult to simulate with XKB keymaps). + * + * You can program whichever approach best fits users' expectations. + * + * @endparblock + */ + +/** + * @struct xkb_compose_table + * Opaque Compose table object. + * + * The compose table holds the definitions of the Compose sequences, as + * gathered from Compose files. It is immutable. + */ +struct xkb_compose_table; + +/** + * @struct xkb_compose_state + * Opaque Compose state object. + * + * The compose state maintains state for compose sequence matching, such + * as which possible sequences are being matched, and the position within + * these sequences. It acts as a simple state machine wherein keysyms are + * the input, and composed keysyms and strings are the output. + * + * The compose state is usually associated with a keyboard device. + */ +struct xkb_compose_state; + +/** Flags affecting Compose file compilation. */ +enum xkb_compose_compile_flags { + /** Do not apply any flags. */ + XKB_COMPOSE_COMPILE_NO_FLAGS = 0 +}; + +/** The recognized Compose file formats. */ +enum xkb_compose_format { + /** The classic libX11 Compose text format, described in Compose(5). */ + XKB_COMPOSE_FORMAT_TEXT_V1 = 1 +}; + +/** + * @page compose-locale Compose Locale + * @parblock + * + * Compose files are locale dependent: + * - Compose files are written for a locale, and the locale is used when + * searching for the appropriate file to use. + * - Compose files may reference the locale internally, with directives + * such as \%L. + * + * As such, functions like xkb_compose_table_new_from_locale() require + * a `locale` parameter. This will usually be the current locale (see + * locale(7) for more details). You may also want to allow the user to + * explicitly configure it, so he can use the Compose file of a given + * locale, but not use that locale for other things. + * + * You may query the current locale as follows: + * @code + * const char *locale; + * locale = setlocale(LC_CTYPE, NULL); + * @endcode + * + * This will only give useful results if the program had previously set + * the current locale using setlocale(3), with `LC_CTYPE` or `LC_ALL` + * and a non-NULL argument. + * + * If you prefer not to use the locale system of the C runtime library, + * you may nevertheless obtain the user's locale directly using + * environment variables, as described in locale(7). For example, + * @code + * locale = getenv("LC_ALL"); + * if (!locale) + * locale = getenv("LC_CTYPE"); + * if (!locale) + * locale = getenv("LANG"); + * if (!locale) + * locale = "C"; + * @endcode + * + * Note that some locales supported by the C standard library may not + * have a Compose file assigned. + * + * @endparblock + */ + +/** + * Create a compose table for a given locale. + * + * The locale is used for searching the file-system for an appropriate + * Compose file. The search order is described in Compose(5). It is + * affected by the following environment variables: + * + * 1. `XCOMPOSEFILE` - see Compose(5). + * 2. `HOME` - see Compose(5). + * 3. `XLOCALEDIR` - if set, used as the base directory for the system's + * X locale files, e.g. `/usr/share/X11/locale`, instead of the + * preconfigured directory. + * + * @param context + * The library context in which to create the compose table. + * @param locale + * The current locale. See @ref compose-locale. + * @param flags + * Optional flags for the compose table, or 0. + * + * @returns A compose table for the given locale, or NULL if the + * compilation failed or a Compose file was not found. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_locale(struct xkb_context *context, + const char *locale, + enum xkb_compose_compile_flags flags); + +/** + * Create a new compose table from a Compose file. + * + * @param context + * The library context in which to create the compose table. + * @param file + * The Compose file to compile. + * @param locale + * The current locale. See @ref compose-locale. + * @param format + * The text format of the Compose file to compile. + * @param flags + * Optional flags for the compose table, or 0. + * + * @returns A compose table compiled from the given file, or NULL if + * the compilation failed. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_file(struct xkb_context *context, + FILE *file, + const char *locale, + enum xkb_compose_format format, + enum xkb_compose_compile_flags flags); + +/** + * Create a new compose table from a memory buffer. + * + * This is just like xkb_compose_table_new_from_file(), but instead of + * a file, gets the table as one enormous string. + * + * @see xkb_compose_table_new_from_file() + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_buffer(struct xkb_context *context, + const char *buffer, size_t length, + const char *locale, + enum xkb_compose_format format, + enum xkb_compose_compile_flags flags); + +/** + * Take a new reference on a compose table. + * + * @returns The passed in object. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_ref(struct xkb_compose_table *table); + +/** + * Release a reference on a compose table, and possibly free it. + * + * @param table The object. If it is NULL, this function does nothing. + * + * @memberof xkb_compose_table + */ +void +xkb_compose_table_unref(struct xkb_compose_table *table); + +/** Flags for compose state creation. */ +enum xkb_compose_state_flags { + /** Do not apply any flags. */ + XKB_COMPOSE_STATE_NO_FLAGS = 0 +}; + +/** + * Create a new compose state object. + * + * @param table + * The compose table the state will use. + * @param flags + * Optional flags for the compose state, or 0. + * + * @returns A new compose state, or NULL on failure. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_state * +xkb_compose_state_new(struct xkb_compose_table *table, + enum xkb_compose_state_flags flags); + +/** + * Take a new reference on a compose state object. + * + * @returns The passed in object. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_state * +xkb_compose_state_ref(struct xkb_compose_state *state); + +/** + * Release a reference on a compose state object, and possibly free it. + * + * @param state The object. If NULL, do nothing. + * + * @memberof xkb_compose_state + */ +void +xkb_compose_state_unref(struct xkb_compose_state *state); + +/** + * Get the compose table which a compose state object is using. + * + * @returns The compose table which was passed to xkb_compose_state_new() + * when creating this state object. + * + * This function does not take a new reference on the compose table; you + * must explicitly reference it yourself if you plan to use it beyond the + * lifetime of the state. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_table * +xkb_compose_state_get_compose_table(struct xkb_compose_state *state); + +/** Status of the Compose sequence state machine. */ +enum xkb_compose_status { + /** The initial state; no sequence has started yet. */ + XKB_COMPOSE_NOTHING, + /** In the middle of a sequence. */ + XKB_COMPOSE_COMPOSING, + /** A complete sequence has been matched. */ + XKB_COMPOSE_COMPOSED, + /** The last sequence was cancelled due to an unmatched keysym. */ + XKB_COMPOSE_CANCELLED +}; + +/** The effect of a keysym fed to xkb_compose_state_feed(). */ +enum xkb_compose_feed_result { + /** The keysym had no effect - it did not affect the status. */ + XKB_COMPOSE_FEED_IGNORED, + /** The keysym started, advanced or cancelled a sequence. */ + XKB_COMPOSE_FEED_ACCEPTED +}; + +/** + * Feed one keysym to the Compose sequence state machine. + * + * This function can advance into a compose sequence, cancel a sequence, + * start a new sequence, or do nothing in particular. The resulting + * status may be observed with xkb_compose_state_get_status(). + * + * Some keysyms, such as keysyms for modifier keys, are ignored - they + * have no effect on the status or otherwise. + * + * The following is a description of the possible status transitions, in + * the format CURRENT STATUS => NEXT STATUS, given a non-ignored input + * keysym `keysym`: + * + @verbatim + NOTHING or CANCELLED or COMPOSED => + NOTHING if keysym does not start a sequence. + COMPOSING if keysym starts a sequence. + COMPOSED if keysym starts and terminates a single-keysym sequence. + + COMPOSING => + COMPOSING if keysym advances any of the currently possible + sequences but does not terminate any of them. + COMPOSED if keysym terminates one of the currently possible + sequences. + CANCELLED if keysym does not advance any of the currently + possible sequences. + @endverbatim + * + * The current Compose formats do not support multiple-keysyms. + * Therefore, if you are using a function such as xkb_state_key_get_syms() + * and it returns more than one keysym, consider feeding XKB_KEY_NoSymbol + * instead. + * + * @param state + * The compose state object. + * @param keysym + * A keysym, usually obtained after a key-press event, with a + * function such as xkb_state_key_get_one_sym(). + * + * @returns Whether the keysym was ignored. This is useful, for example, + * if you want to keep a record of the sequence matched thus far. + * + * @memberof xkb_compose_state + */ +enum xkb_compose_feed_result +xkb_compose_state_feed(struct xkb_compose_state *state, + xkb_keysym_t keysym); + +/** + * Reset the Compose sequence state machine. + * + * The status is set to XKB_COMPOSE_NOTHING, and the current sequence + * is discarded. + * + * @memberof xkb_compose_state + */ +void +xkb_compose_state_reset(struct xkb_compose_state *state); + +/** + * Get the current status of the compose state machine. + * + * @see xkb_compose_status + * @memberof xkb_compose_state + **/ +enum xkb_compose_status +xkb_compose_state_get_status(struct xkb_compose_state *state); + +/** + * Get the result Unicode/UTF-8 string for a composed sequence. + * + * See @ref compose-overview for more details. This function is only + * useful when the status is XKB_COMPOSE_COMPOSED. + * + * @param[in] state + * The compose state. + * @param[out] buffer + * A buffer to write the string into. + * @param[in] size + * Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated). + * + * @returns + * The number of bytes required for the string, excluding the NUL byte. + * If the sequence is not complete, or does not have a viable result + * string, returns 0, and sets `buffer` to the empty string (if possible). + * @returns + * You may check if truncation has occurred by comparing the return value + * with the size of `buffer`, similarly to the `snprintf`(3) function. + * You may safely pass NULL and 0 to `buffer` and `size` to find the + * required size (without the NUL-byte). + * + * @memberof xkb_compose_state + **/ +int +xkb_compose_state_get_utf8(struct xkb_compose_state *state, + char *buffer, size_t size); + +/** + * Get the result keysym for a composed sequence. + * + * See @ref compose-overview for more details. This function is only + * useful when the status is XKB_COMPOSE_COMPOSED. + * + * @returns The result keysym. If the sequence is not complete, or does + * not specify a result keysym, returns XKB_KEY_NoSymbol. + * + * @memberof xkb_compose_state + **/ +xkb_keysym_t +xkb_compose_state_get_one_sym(struct xkb_compose_state *state); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_COMPOSE_H */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h new file mode 100644 index 000000000..69c582e45 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h @@ -0,0 +1,3012 @@ +#ifndef _XKBCOMMON_KEYSYMS_H +#define _XKBCOMMON_KEYSYMS_H + +/* This file is autogenerated from Makefile.am; please do not commit directly. */ + +#define XKB_KEY_NoSymbol 0x000000 /* Special KeySym */ + +/*********************************************************** +Copyright 1987, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * The "X11 Window System Protocol" standard defines in Appendix A the + * keysym codes. These 29-bit integer values identify characters or + * functions associated with each key (e.g., via the visible + * engraving) of a keyboard layout. This file assigns mnemonic macro + * names for these keysyms. + * + * This file is also compiled (by src/util/makekeys.c in libX11) into + * hash tables that can be accessed with X11 library functions such as + * XStringToKeysym() and XKeysymToString(). + * + * Where a keysym corresponds one-to-one to an ISO 10646 / Unicode + * character, this is noted in a comment that provides both the U+xxxx + * Unicode position, as well as the official Unicode name of the + * character. + * + * Where the correspondence is either not one-to-one or semantically + * unclear, the Unicode position and name are enclosed in + * parentheses. Such legacy keysyms should be considered deprecated + * and are not recommended for use in future keyboard mappings. + * + * For any future extension of the keysyms with characters already + * found in ISO 10646 / Unicode, the following algorithm shall be + * used. The new keysym code position will simply be the character's + * Unicode number plus 0x01000000. The keysym values in the range + * 0x01000100 to 0x0110ffff are reserved to represent Unicode + * characters in the range U+0100 to U+10FFFF. + * + * While most newer Unicode-based X11 clients do already accept + * Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it + * will remain necessary for clients -- in the interest of + * compatibility with existing servers -- to also understand the + * existing legacy keysym values in the range 0x0100 to 0x20ff. + * + * Where several mnemonic names are defined for the same keysym in this + * file, all but the first one listed should be considered deprecated. + * + * Mnemonic names for keysyms are defined in this file with lines + * that match one of these Perl regular expressions: + * + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/ + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/ + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/ + * + * Before adding new keysyms, please do consider the following: In + * addition to the keysym names defined in this file, the + * XStringToKeysym() and XKeysymToString() functions will also handle + * any keysym string of the form "U0020" to "U007E" and "U00A0" to + * "U10FFFF" for all possible Unicode characters. In other words, + * every possible Unicode character has already a keysym string + * defined algorithmically, even if it is not listed here. Therefore, + * defining an additional keysym macro is only necessary where a + * non-hexadecimal mnemonic name is needed, or where the new keysym + * does not represent any existing Unicode character. + * + * When adding new keysyms to this file, do not forget to also update the + * following as needed: + * + * - the mappings in src/KeyBind.c in the repo + * git://anongit.freedesktop.org/xorg/lib/libX11.git + * + * - the protocol specification in specs/keysyms.xml + * in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git + * + */ + +#define XKB_KEY_VoidSymbol 0xffffff /* Void symbol */ + +/* + * TTY function keys, cleverly chosen to map to ASCII, for convenience of + * programming, but could have been arbitrary (at the cost of lookup + * tables in client code). + */ + +#define XKB_KEY_BackSpace 0xff08 /* Back space, back char */ +#define XKB_KEY_Tab 0xff09 +#define XKB_KEY_Linefeed 0xff0a /* Linefeed, LF */ +#define XKB_KEY_Clear 0xff0b +#define XKB_KEY_Return 0xff0d /* Return, enter */ +#define XKB_KEY_Pause 0xff13 /* Pause, hold */ +#define XKB_KEY_Scroll_Lock 0xff14 +#define XKB_KEY_Sys_Req 0xff15 +#define XKB_KEY_Escape 0xff1b +#define XKB_KEY_Delete 0xffff /* Delete, rubout */ + + + +/* International & multi-key character composition */ + +#define XKB_KEY_Multi_key 0xff20 /* Multi-key character compose */ +#define XKB_KEY_Codeinput 0xff37 +#define XKB_KEY_SingleCandidate 0xff3c +#define XKB_KEY_MultipleCandidate 0xff3d +#define XKB_KEY_PreviousCandidate 0xff3e + +/* Japanese keyboard support */ + +#define XKB_KEY_Kanji 0xff21 /* Kanji, Kanji convert */ +#define XKB_KEY_Muhenkan 0xff22 /* Cancel Conversion */ +#define XKB_KEY_Henkan_Mode 0xff23 /* Start/Stop Conversion */ +#define XKB_KEY_Henkan 0xff23 /* Alias for Henkan_Mode */ +#define XKB_KEY_Romaji 0xff24 /* to Romaji */ +#define XKB_KEY_Hiragana 0xff25 /* to Hiragana */ +#define XKB_KEY_Katakana 0xff26 /* to Katakana */ +#define XKB_KEY_Hiragana_Katakana 0xff27 /* Hiragana/Katakana toggle */ +#define XKB_KEY_Zenkaku 0xff28 /* to Zenkaku */ +#define XKB_KEY_Hankaku 0xff29 /* to Hankaku */ +#define XKB_KEY_Zenkaku_Hankaku 0xff2a /* Zenkaku/Hankaku toggle */ +#define XKB_KEY_Touroku 0xff2b /* Add to Dictionary */ +#define XKB_KEY_Massyo 0xff2c /* Delete from Dictionary */ +#define XKB_KEY_Kana_Lock 0xff2d /* Kana Lock */ +#define XKB_KEY_Kana_Shift 0xff2e /* Kana Shift */ +#define XKB_KEY_Eisu_Shift 0xff2f /* Alphanumeric Shift */ +#define XKB_KEY_Eisu_toggle 0xff30 /* Alphanumeric toggle */ +#define XKB_KEY_Kanji_Bangou 0xff37 /* Codeinput */ +#define XKB_KEY_Zen_Koho 0xff3d /* Multiple/All Candidate(s) */ +#define XKB_KEY_Mae_Koho 0xff3e /* Previous Candidate */ + +/* 0xff31 thru 0xff3f are under XK_KOREAN */ + +/* Cursor control & motion */ + +#define XKB_KEY_Home 0xff50 +#define XKB_KEY_Left 0xff51 /* Move left, left arrow */ +#define XKB_KEY_Up 0xff52 /* Move up, up arrow */ +#define XKB_KEY_Right 0xff53 /* Move right, right arrow */ +#define XKB_KEY_Down 0xff54 /* Move down, down arrow */ +#define XKB_KEY_Prior 0xff55 /* Prior, previous */ +#define XKB_KEY_Page_Up 0xff55 +#define XKB_KEY_Next 0xff56 /* Next */ +#define XKB_KEY_Page_Down 0xff56 +#define XKB_KEY_End 0xff57 /* EOL */ +#define XKB_KEY_Begin 0xff58 /* BOL */ + + +/* Misc functions */ + +#define XKB_KEY_Select 0xff60 /* Select, mark */ +#define XKB_KEY_Print 0xff61 +#define XKB_KEY_Execute 0xff62 /* Execute, run, do */ +#define XKB_KEY_Insert 0xff63 /* Insert, insert here */ +#define XKB_KEY_Undo 0xff65 +#define XKB_KEY_Redo 0xff66 /* Redo, again */ +#define XKB_KEY_Menu 0xff67 +#define XKB_KEY_Find 0xff68 /* Find, search */ +#define XKB_KEY_Cancel 0xff69 /* Cancel, stop, abort, exit */ +#define XKB_KEY_Help 0xff6a /* Help */ +#define XKB_KEY_Break 0xff6b +#define XKB_KEY_Mode_switch 0xff7e /* Character set switch */ +#define XKB_KEY_script_switch 0xff7e /* Alias for mode_switch */ +#define XKB_KEY_Num_Lock 0xff7f + +/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */ + +#define XKB_KEY_KP_Space 0xff80 /* Space */ +#define XKB_KEY_KP_Tab 0xff89 +#define XKB_KEY_KP_Enter 0xff8d /* Enter */ +#define XKB_KEY_KP_F1 0xff91 /* PF1, KP_A, ... */ +#define XKB_KEY_KP_F2 0xff92 +#define XKB_KEY_KP_F3 0xff93 +#define XKB_KEY_KP_F4 0xff94 +#define XKB_KEY_KP_Home 0xff95 +#define XKB_KEY_KP_Left 0xff96 +#define XKB_KEY_KP_Up 0xff97 +#define XKB_KEY_KP_Right 0xff98 +#define XKB_KEY_KP_Down 0xff99 +#define XKB_KEY_KP_Prior 0xff9a +#define XKB_KEY_KP_Page_Up 0xff9a +#define XKB_KEY_KP_Next 0xff9b +#define XKB_KEY_KP_Page_Down 0xff9b +#define XKB_KEY_KP_End 0xff9c +#define XKB_KEY_KP_Begin 0xff9d +#define XKB_KEY_KP_Insert 0xff9e +#define XKB_KEY_KP_Delete 0xff9f +#define XKB_KEY_KP_Equal 0xffbd /* Equals */ +#define XKB_KEY_KP_Multiply 0xffaa +#define XKB_KEY_KP_Add 0xffab +#define XKB_KEY_KP_Separator 0xffac /* Separator, often comma */ +#define XKB_KEY_KP_Subtract 0xffad +#define XKB_KEY_KP_Decimal 0xffae +#define XKB_KEY_KP_Divide 0xffaf + +#define XKB_KEY_KP_0 0xffb0 +#define XKB_KEY_KP_1 0xffb1 +#define XKB_KEY_KP_2 0xffb2 +#define XKB_KEY_KP_3 0xffb3 +#define XKB_KEY_KP_4 0xffb4 +#define XKB_KEY_KP_5 0xffb5 +#define XKB_KEY_KP_6 0xffb6 +#define XKB_KEY_KP_7 0xffb7 +#define XKB_KEY_KP_8 0xffb8 +#define XKB_KEY_KP_9 0xffb9 + + + +/* + * Auxiliary functions; note the duplicate definitions for left and right + * function keys; Sun keyboards and a few other manufacturers have such + * function key groups on the left and/or right sides of the keyboard. + * We've not found a keyboard with more than 35 function keys total. + */ + +#define XKB_KEY_F1 0xffbe +#define XKB_KEY_F2 0xffbf +#define XKB_KEY_F3 0xffc0 +#define XKB_KEY_F4 0xffc1 +#define XKB_KEY_F5 0xffc2 +#define XKB_KEY_F6 0xffc3 +#define XKB_KEY_F7 0xffc4 +#define XKB_KEY_F8 0xffc5 +#define XKB_KEY_F9 0xffc6 +#define XKB_KEY_F10 0xffc7 +#define XKB_KEY_F11 0xffc8 +#define XKB_KEY_L1 0xffc8 +#define XKB_KEY_F12 0xffc9 +#define XKB_KEY_L2 0xffc9 +#define XKB_KEY_F13 0xffca +#define XKB_KEY_L3 0xffca +#define XKB_KEY_F14 0xffcb +#define XKB_KEY_L4 0xffcb +#define XKB_KEY_F15 0xffcc +#define XKB_KEY_L5 0xffcc +#define XKB_KEY_F16 0xffcd +#define XKB_KEY_L6 0xffcd +#define XKB_KEY_F17 0xffce +#define XKB_KEY_L7 0xffce +#define XKB_KEY_F18 0xffcf +#define XKB_KEY_L8 0xffcf +#define XKB_KEY_F19 0xffd0 +#define XKB_KEY_L9 0xffd0 +#define XKB_KEY_F20 0xffd1 +#define XKB_KEY_L10 0xffd1 +#define XKB_KEY_F21 0xffd2 +#define XKB_KEY_R1 0xffd2 +#define XKB_KEY_F22 0xffd3 +#define XKB_KEY_R2 0xffd3 +#define XKB_KEY_F23 0xffd4 +#define XKB_KEY_R3 0xffd4 +#define XKB_KEY_F24 0xffd5 +#define XKB_KEY_R4 0xffd5 +#define XKB_KEY_F25 0xffd6 +#define XKB_KEY_R5 0xffd6 +#define XKB_KEY_F26 0xffd7 +#define XKB_KEY_R6 0xffd7 +#define XKB_KEY_F27 0xffd8 +#define XKB_KEY_R7 0xffd8 +#define XKB_KEY_F28 0xffd9 +#define XKB_KEY_R8 0xffd9 +#define XKB_KEY_F29 0xffda +#define XKB_KEY_R9 0xffda +#define XKB_KEY_F30 0xffdb +#define XKB_KEY_R10 0xffdb +#define XKB_KEY_F31 0xffdc +#define XKB_KEY_R11 0xffdc +#define XKB_KEY_F32 0xffdd +#define XKB_KEY_R12 0xffdd +#define XKB_KEY_F33 0xffde +#define XKB_KEY_R13 0xffde +#define XKB_KEY_F34 0xffdf +#define XKB_KEY_R14 0xffdf +#define XKB_KEY_F35 0xffe0 +#define XKB_KEY_R15 0xffe0 + +/* Modifiers */ + +#define XKB_KEY_Shift_L 0xffe1 /* Left shift */ +#define XKB_KEY_Shift_R 0xffe2 /* Right shift */ +#define XKB_KEY_Control_L 0xffe3 /* Left control */ +#define XKB_KEY_Control_R 0xffe4 /* Right control */ +#define XKB_KEY_Caps_Lock 0xffe5 /* Caps lock */ +#define XKB_KEY_Shift_Lock 0xffe6 /* Shift lock */ + +#define XKB_KEY_Meta_L 0xffe7 /* Left meta */ +#define XKB_KEY_Meta_R 0xffe8 /* Right meta */ +#define XKB_KEY_Alt_L 0xffe9 /* Left alt */ +#define XKB_KEY_Alt_R 0xffea /* Right alt */ +#define XKB_KEY_Super_L 0xffeb /* Left super */ +#define XKB_KEY_Super_R 0xffec /* Right super */ +#define XKB_KEY_Hyper_L 0xffed /* Left hyper */ +#define XKB_KEY_Hyper_R 0xffee /* Right hyper */ + +/* + * Keyboard (XKB) Extension function and modifier keys + * (from Appendix C of "The X Keyboard Extension: Protocol Specification") + * Byte 3 = 0xfe + */ + +#define XKB_KEY_ISO_Lock 0xfe01 +#define XKB_KEY_ISO_Level2_Latch 0xfe02 +#define XKB_KEY_ISO_Level3_Shift 0xfe03 +#define XKB_KEY_ISO_Level3_Latch 0xfe04 +#define XKB_KEY_ISO_Level3_Lock 0xfe05 +#define XKB_KEY_ISO_Level5_Shift 0xfe11 +#define XKB_KEY_ISO_Level5_Latch 0xfe12 +#define XKB_KEY_ISO_Level5_Lock 0xfe13 +#define XKB_KEY_ISO_Group_Shift 0xff7e /* Alias for mode_switch */ +#define XKB_KEY_ISO_Group_Latch 0xfe06 +#define XKB_KEY_ISO_Group_Lock 0xfe07 +#define XKB_KEY_ISO_Next_Group 0xfe08 +#define XKB_KEY_ISO_Next_Group_Lock 0xfe09 +#define XKB_KEY_ISO_Prev_Group 0xfe0a +#define XKB_KEY_ISO_Prev_Group_Lock 0xfe0b +#define XKB_KEY_ISO_First_Group 0xfe0c +#define XKB_KEY_ISO_First_Group_Lock 0xfe0d +#define XKB_KEY_ISO_Last_Group 0xfe0e +#define XKB_KEY_ISO_Last_Group_Lock 0xfe0f + +#define XKB_KEY_ISO_Left_Tab 0xfe20 +#define XKB_KEY_ISO_Move_Line_Up 0xfe21 +#define XKB_KEY_ISO_Move_Line_Down 0xfe22 +#define XKB_KEY_ISO_Partial_Line_Up 0xfe23 +#define XKB_KEY_ISO_Partial_Line_Down 0xfe24 +#define XKB_KEY_ISO_Partial_Space_Left 0xfe25 +#define XKB_KEY_ISO_Partial_Space_Right 0xfe26 +#define XKB_KEY_ISO_Set_Margin_Left 0xfe27 +#define XKB_KEY_ISO_Set_Margin_Right 0xfe28 +#define XKB_KEY_ISO_Release_Margin_Left 0xfe29 +#define XKB_KEY_ISO_Release_Margin_Right 0xfe2a +#define XKB_KEY_ISO_Release_Both_Margins 0xfe2b +#define XKB_KEY_ISO_Fast_Cursor_Left 0xfe2c +#define XKB_KEY_ISO_Fast_Cursor_Right 0xfe2d +#define XKB_KEY_ISO_Fast_Cursor_Up 0xfe2e +#define XKB_KEY_ISO_Fast_Cursor_Down 0xfe2f +#define XKB_KEY_ISO_Continuous_Underline 0xfe30 +#define XKB_KEY_ISO_Discontinuous_Underline 0xfe31 +#define XKB_KEY_ISO_Emphasize 0xfe32 +#define XKB_KEY_ISO_Center_Object 0xfe33 +#define XKB_KEY_ISO_Enter 0xfe34 + +#define XKB_KEY_dead_grave 0xfe50 +#define XKB_KEY_dead_acute 0xfe51 +#define XKB_KEY_dead_circumflex 0xfe52 +#define XKB_KEY_dead_tilde 0xfe53 +#define XKB_KEY_dead_perispomeni 0xfe53 /* alias for dead_tilde */ +#define XKB_KEY_dead_macron 0xfe54 +#define XKB_KEY_dead_breve 0xfe55 +#define XKB_KEY_dead_abovedot 0xfe56 +#define XKB_KEY_dead_diaeresis 0xfe57 +#define XKB_KEY_dead_abovering 0xfe58 +#define XKB_KEY_dead_doubleacute 0xfe59 +#define XKB_KEY_dead_caron 0xfe5a +#define XKB_KEY_dead_cedilla 0xfe5b +#define XKB_KEY_dead_ogonek 0xfe5c +#define XKB_KEY_dead_iota 0xfe5d +#define XKB_KEY_dead_voiced_sound 0xfe5e +#define XKB_KEY_dead_semivoiced_sound 0xfe5f +#define XKB_KEY_dead_belowdot 0xfe60 +#define XKB_KEY_dead_hook 0xfe61 +#define XKB_KEY_dead_horn 0xfe62 +#define XKB_KEY_dead_stroke 0xfe63 +#define XKB_KEY_dead_abovecomma 0xfe64 +#define XKB_KEY_dead_psili 0xfe64 /* alias for dead_abovecomma */ +#define XKB_KEY_dead_abovereversedcomma 0xfe65 +#define XKB_KEY_dead_dasia 0xfe65 /* alias for dead_abovereversedcomma */ +#define XKB_KEY_dead_doublegrave 0xfe66 +#define XKB_KEY_dead_belowring 0xfe67 +#define XKB_KEY_dead_belowmacron 0xfe68 +#define XKB_KEY_dead_belowcircumflex 0xfe69 +#define XKB_KEY_dead_belowtilde 0xfe6a +#define XKB_KEY_dead_belowbreve 0xfe6b +#define XKB_KEY_dead_belowdiaeresis 0xfe6c +#define XKB_KEY_dead_invertedbreve 0xfe6d +#define XKB_KEY_dead_belowcomma 0xfe6e +#define XKB_KEY_dead_currency 0xfe6f + +/* extra dead elements for German T3 layout */ +#define XKB_KEY_dead_lowline 0xfe90 +#define XKB_KEY_dead_aboveverticalline 0xfe91 +#define XKB_KEY_dead_belowverticalline 0xfe92 +#define XKB_KEY_dead_longsolidusoverlay 0xfe93 + +/* dead vowels for universal syllable entry */ +#define XKB_KEY_dead_a 0xfe80 +#define XKB_KEY_dead_A 0xfe81 +#define XKB_KEY_dead_e 0xfe82 +#define XKB_KEY_dead_E 0xfe83 +#define XKB_KEY_dead_i 0xfe84 +#define XKB_KEY_dead_I 0xfe85 +#define XKB_KEY_dead_o 0xfe86 +#define XKB_KEY_dead_O 0xfe87 +#define XKB_KEY_dead_u 0xfe88 +#define XKB_KEY_dead_U 0xfe89 +#define XKB_KEY_dead_small_schwa 0xfe8a +#define XKB_KEY_dead_capital_schwa 0xfe8b + +#define XKB_KEY_dead_greek 0xfe8c + +#define XKB_KEY_First_Virtual_Screen 0xfed0 +#define XKB_KEY_Prev_Virtual_Screen 0xfed1 +#define XKB_KEY_Next_Virtual_Screen 0xfed2 +#define XKB_KEY_Last_Virtual_Screen 0xfed4 +#define XKB_KEY_Terminate_Server 0xfed5 + +#define XKB_KEY_AccessX_Enable 0xfe70 +#define XKB_KEY_AccessX_Feedback_Enable 0xfe71 +#define XKB_KEY_RepeatKeys_Enable 0xfe72 +#define XKB_KEY_SlowKeys_Enable 0xfe73 +#define XKB_KEY_BounceKeys_Enable 0xfe74 +#define XKB_KEY_StickyKeys_Enable 0xfe75 +#define XKB_KEY_MouseKeys_Enable 0xfe76 +#define XKB_KEY_MouseKeys_Accel_Enable 0xfe77 +#define XKB_KEY_Overlay1_Enable 0xfe78 +#define XKB_KEY_Overlay2_Enable 0xfe79 +#define XKB_KEY_AudibleBell_Enable 0xfe7a + +#define XKB_KEY_Pointer_Left 0xfee0 +#define XKB_KEY_Pointer_Right 0xfee1 +#define XKB_KEY_Pointer_Up 0xfee2 +#define XKB_KEY_Pointer_Down 0xfee3 +#define XKB_KEY_Pointer_UpLeft 0xfee4 +#define XKB_KEY_Pointer_UpRight 0xfee5 +#define XKB_KEY_Pointer_DownLeft 0xfee6 +#define XKB_KEY_Pointer_DownRight 0xfee7 +#define XKB_KEY_Pointer_Button_Dflt 0xfee8 +#define XKB_KEY_Pointer_Button1 0xfee9 +#define XKB_KEY_Pointer_Button2 0xfeea +#define XKB_KEY_Pointer_Button3 0xfeeb +#define XKB_KEY_Pointer_Button4 0xfeec +#define XKB_KEY_Pointer_Button5 0xfeed +#define XKB_KEY_Pointer_DblClick_Dflt 0xfeee +#define XKB_KEY_Pointer_DblClick1 0xfeef +#define XKB_KEY_Pointer_DblClick2 0xfef0 +#define XKB_KEY_Pointer_DblClick3 0xfef1 +#define XKB_KEY_Pointer_DblClick4 0xfef2 +#define XKB_KEY_Pointer_DblClick5 0xfef3 +#define XKB_KEY_Pointer_Drag_Dflt 0xfef4 +#define XKB_KEY_Pointer_Drag1 0xfef5 +#define XKB_KEY_Pointer_Drag2 0xfef6 +#define XKB_KEY_Pointer_Drag3 0xfef7 +#define XKB_KEY_Pointer_Drag4 0xfef8 +#define XKB_KEY_Pointer_Drag5 0xfefd + +#define XKB_KEY_Pointer_EnableKeys 0xfef9 +#define XKB_KEY_Pointer_Accelerate 0xfefa +#define XKB_KEY_Pointer_DfltBtnNext 0xfefb +#define XKB_KEY_Pointer_DfltBtnPrev 0xfefc + +/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */ + +#define XKB_KEY_ch 0xfea0 +#define XKB_KEY_Ch 0xfea1 +#define XKB_KEY_CH 0xfea2 +#define XKB_KEY_c_h 0xfea3 +#define XKB_KEY_C_h 0xfea4 +#define XKB_KEY_C_H 0xfea5 + + +/* + * 3270 Terminal Keys + * Byte 3 = 0xfd + */ + +#define XKB_KEY_3270_Duplicate 0xfd01 +#define XKB_KEY_3270_FieldMark 0xfd02 +#define XKB_KEY_3270_Right2 0xfd03 +#define XKB_KEY_3270_Left2 0xfd04 +#define XKB_KEY_3270_BackTab 0xfd05 +#define XKB_KEY_3270_EraseEOF 0xfd06 +#define XKB_KEY_3270_EraseInput 0xfd07 +#define XKB_KEY_3270_Reset 0xfd08 +#define XKB_KEY_3270_Quit 0xfd09 +#define XKB_KEY_3270_PA1 0xfd0a +#define XKB_KEY_3270_PA2 0xfd0b +#define XKB_KEY_3270_PA3 0xfd0c +#define XKB_KEY_3270_Test 0xfd0d +#define XKB_KEY_3270_Attn 0xfd0e +#define XKB_KEY_3270_CursorBlink 0xfd0f +#define XKB_KEY_3270_AltCursor 0xfd10 +#define XKB_KEY_3270_KeyClick 0xfd11 +#define XKB_KEY_3270_Jump 0xfd12 +#define XKB_KEY_3270_Ident 0xfd13 +#define XKB_KEY_3270_Rule 0xfd14 +#define XKB_KEY_3270_Copy 0xfd15 +#define XKB_KEY_3270_Play 0xfd16 +#define XKB_KEY_3270_Setup 0xfd17 +#define XKB_KEY_3270_Record 0xfd18 +#define XKB_KEY_3270_ChangeScreen 0xfd19 +#define XKB_KEY_3270_DeleteWord 0xfd1a +#define XKB_KEY_3270_ExSelect 0xfd1b +#define XKB_KEY_3270_CursorSelect 0xfd1c +#define XKB_KEY_3270_PrintScreen 0xfd1d +#define XKB_KEY_3270_Enter 0xfd1e + +/* + * Latin 1 + * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF) + * Byte 3 = 0 + */ +#define XKB_KEY_space 0x0020 /* U+0020 SPACE */ +#define XKB_KEY_exclam 0x0021 /* U+0021 EXCLAMATION MARK */ +#define XKB_KEY_quotedbl 0x0022 /* U+0022 QUOTATION MARK */ +#define XKB_KEY_numbersign 0x0023 /* U+0023 NUMBER SIGN */ +#define XKB_KEY_dollar 0x0024 /* U+0024 DOLLAR SIGN */ +#define XKB_KEY_percent 0x0025 /* U+0025 PERCENT SIGN */ +#define XKB_KEY_ampersand 0x0026 /* U+0026 AMPERSAND */ +#define XKB_KEY_apostrophe 0x0027 /* U+0027 APOSTROPHE */ +#define XKB_KEY_quoteright 0x0027 /* deprecated */ +#define XKB_KEY_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */ +#define XKB_KEY_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */ +#define XKB_KEY_asterisk 0x002a /* U+002A ASTERISK */ +#define XKB_KEY_plus 0x002b /* U+002B PLUS SIGN */ +#define XKB_KEY_comma 0x002c /* U+002C COMMA */ +#define XKB_KEY_minus 0x002d /* U+002D HYPHEN-MINUS */ +#define XKB_KEY_period 0x002e /* U+002E FULL STOP */ +#define XKB_KEY_slash 0x002f /* U+002F SOLIDUS */ +#define XKB_KEY_0 0x0030 /* U+0030 DIGIT ZERO */ +#define XKB_KEY_1 0x0031 /* U+0031 DIGIT ONE */ +#define XKB_KEY_2 0x0032 /* U+0032 DIGIT TWO */ +#define XKB_KEY_3 0x0033 /* U+0033 DIGIT THREE */ +#define XKB_KEY_4 0x0034 /* U+0034 DIGIT FOUR */ +#define XKB_KEY_5 0x0035 /* U+0035 DIGIT FIVE */ +#define XKB_KEY_6 0x0036 /* U+0036 DIGIT SIX */ +#define XKB_KEY_7 0x0037 /* U+0037 DIGIT SEVEN */ +#define XKB_KEY_8 0x0038 /* U+0038 DIGIT EIGHT */ +#define XKB_KEY_9 0x0039 /* U+0039 DIGIT NINE */ +#define XKB_KEY_colon 0x003a /* U+003A COLON */ +#define XKB_KEY_semicolon 0x003b /* U+003B SEMICOLON */ +#define XKB_KEY_less 0x003c /* U+003C LESS-THAN SIGN */ +#define XKB_KEY_equal 0x003d /* U+003D EQUALS SIGN */ +#define XKB_KEY_greater 0x003e /* U+003E GREATER-THAN SIGN */ +#define XKB_KEY_question 0x003f /* U+003F QUESTION MARK */ +#define XKB_KEY_at 0x0040 /* U+0040 COMMERCIAL AT */ +#define XKB_KEY_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */ +#define XKB_KEY_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */ +#define XKB_KEY_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */ +#define XKB_KEY_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */ +#define XKB_KEY_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */ +#define XKB_KEY_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */ +#define XKB_KEY_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */ +#define XKB_KEY_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */ +#define XKB_KEY_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */ +#define XKB_KEY_J 0x004a /* U+004A LATIN CAPITAL LETTER J */ +#define XKB_KEY_K 0x004b /* U+004B LATIN CAPITAL LETTER K */ +#define XKB_KEY_L 0x004c /* U+004C LATIN CAPITAL LETTER L */ +#define XKB_KEY_M 0x004d /* U+004D LATIN CAPITAL LETTER M */ +#define XKB_KEY_N 0x004e /* U+004E LATIN CAPITAL LETTER N */ +#define XKB_KEY_O 0x004f /* U+004F LATIN CAPITAL LETTER O */ +#define XKB_KEY_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */ +#define XKB_KEY_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */ +#define XKB_KEY_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */ +#define XKB_KEY_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */ +#define XKB_KEY_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */ +#define XKB_KEY_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */ +#define XKB_KEY_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */ +#define XKB_KEY_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */ +#define XKB_KEY_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */ +#define XKB_KEY_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */ +#define XKB_KEY_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */ +#define XKB_KEY_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */ +#define XKB_KEY_backslash 0x005c /* U+005C REVERSE SOLIDUS */ +#define XKB_KEY_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */ +#define XKB_KEY_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */ +#define XKB_KEY_underscore 0x005f /* U+005F LOW LINE */ +#define XKB_KEY_grave 0x0060 /* U+0060 GRAVE ACCENT */ +#define XKB_KEY_quoteleft 0x0060 /* deprecated */ +#define XKB_KEY_a 0x0061 /* U+0061 LATIN SMALL LETTER A */ +#define XKB_KEY_b 0x0062 /* U+0062 LATIN SMALL LETTER B */ +#define XKB_KEY_c 0x0063 /* U+0063 LATIN SMALL LETTER C */ +#define XKB_KEY_d 0x0064 /* U+0064 LATIN SMALL LETTER D */ +#define XKB_KEY_e 0x0065 /* U+0065 LATIN SMALL LETTER E */ +#define XKB_KEY_f 0x0066 /* U+0066 LATIN SMALL LETTER F */ +#define XKB_KEY_g 0x0067 /* U+0067 LATIN SMALL LETTER G */ +#define XKB_KEY_h 0x0068 /* U+0068 LATIN SMALL LETTER H */ +#define XKB_KEY_i 0x0069 /* U+0069 LATIN SMALL LETTER I */ +#define XKB_KEY_j 0x006a /* U+006A LATIN SMALL LETTER J */ +#define XKB_KEY_k 0x006b /* U+006B LATIN SMALL LETTER K */ +#define XKB_KEY_l 0x006c /* U+006C LATIN SMALL LETTER L */ +#define XKB_KEY_m 0x006d /* U+006D LATIN SMALL LETTER M */ +#define XKB_KEY_n 0x006e /* U+006E LATIN SMALL LETTER N */ +#define XKB_KEY_o 0x006f /* U+006F LATIN SMALL LETTER O */ +#define XKB_KEY_p 0x0070 /* U+0070 LATIN SMALL LETTER P */ +#define XKB_KEY_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */ +#define XKB_KEY_r 0x0072 /* U+0072 LATIN SMALL LETTER R */ +#define XKB_KEY_s 0x0073 /* U+0073 LATIN SMALL LETTER S */ +#define XKB_KEY_t 0x0074 /* U+0074 LATIN SMALL LETTER T */ +#define XKB_KEY_u 0x0075 /* U+0075 LATIN SMALL LETTER U */ +#define XKB_KEY_v 0x0076 /* U+0076 LATIN SMALL LETTER V */ +#define XKB_KEY_w 0x0077 /* U+0077 LATIN SMALL LETTER W */ +#define XKB_KEY_x 0x0078 /* U+0078 LATIN SMALL LETTER X */ +#define XKB_KEY_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */ +#define XKB_KEY_z 0x007a /* U+007A LATIN SMALL LETTER Z */ +#define XKB_KEY_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */ +#define XKB_KEY_bar 0x007c /* U+007C VERTICAL LINE */ +#define XKB_KEY_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */ +#define XKB_KEY_asciitilde 0x007e /* U+007E TILDE */ + +#define XKB_KEY_nobreakspace 0x00a0 /* U+00A0 NO-BREAK SPACE */ +#define XKB_KEY_exclamdown 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */ +#define XKB_KEY_cent 0x00a2 /* U+00A2 CENT SIGN */ +#define XKB_KEY_sterling 0x00a3 /* U+00A3 POUND SIGN */ +#define XKB_KEY_currency 0x00a4 /* U+00A4 CURRENCY SIGN */ +#define XKB_KEY_yen 0x00a5 /* U+00A5 YEN SIGN */ +#define XKB_KEY_brokenbar 0x00a6 /* U+00A6 BROKEN BAR */ +#define XKB_KEY_section 0x00a7 /* U+00A7 SECTION SIGN */ +#define XKB_KEY_diaeresis 0x00a8 /* U+00A8 DIAERESIS */ +#define XKB_KEY_copyright 0x00a9 /* U+00A9 COPYRIGHT SIGN */ +#define XKB_KEY_ordfeminine 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */ +#define XKB_KEY_guillemotleft 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ +#define XKB_KEY_notsign 0x00ac /* U+00AC NOT SIGN */ +#define XKB_KEY_hyphen 0x00ad /* U+00AD SOFT HYPHEN */ +#define XKB_KEY_registered 0x00ae /* U+00AE REGISTERED SIGN */ +#define XKB_KEY_macron 0x00af /* U+00AF MACRON */ +#define XKB_KEY_degree 0x00b0 /* U+00B0 DEGREE SIGN */ +#define XKB_KEY_plusminus 0x00b1 /* U+00B1 PLUS-MINUS SIGN */ +#define XKB_KEY_twosuperior 0x00b2 /* U+00B2 SUPERSCRIPT TWO */ +#define XKB_KEY_threesuperior 0x00b3 /* U+00B3 SUPERSCRIPT THREE */ +#define XKB_KEY_acute 0x00b4 /* U+00B4 ACUTE ACCENT */ +#define XKB_KEY_mu 0x00b5 /* U+00B5 MICRO SIGN */ +#define XKB_KEY_paragraph 0x00b6 /* U+00B6 PILCROW SIGN */ +#define XKB_KEY_periodcentered 0x00b7 /* U+00B7 MIDDLE DOT */ +#define XKB_KEY_cedilla 0x00b8 /* U+00B8 CEDILLA */ +#define XKB_KEY_onesuperior 0x00b9 /* U+00B9 SUPERSCRIPT ONE */ +#define XKB_KEY_masculine 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */ +#define XKB_KEY_guillemotright 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ +#define XKB_KEY_onequarter 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */ +#define XKB_KEY_onehalf 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */ +#define XKB_KEY_threequarters 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */ +#define XKB_KEY_questiondown 0x00bf /* U+00BF INVERTED QUESTION MARK */ +#define XKB_KEY_Agrave 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */ +#define XKB_KEY_Aacute 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */ +#define XKB_KEY_Acircumflex 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ +#define XKB_KEY_Atilde 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */ +#define XKB_KEY_Adiaeresis 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */ +#define XKB_KEY_Aring 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */ +#define XKB_KEY_AE 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */ +#define XKB_KEY_Ccedilla 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */ +#define XKB_KEY_Egrave 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */ +#define XKB_KEY_Eacute 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +#define XKB_KEY_Ecircumflex 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ +#define XKB_KEY_Ediaeresis 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */ +#define XKB_KEY_Igrave 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */ +#define XKB_KEY_Iacute 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */ +#define XKB_KEY_Icircumflex 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ +#define XKB_KEY_Idiaeresis 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */ +#define XKB_KEY_ETH 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */ +#define XKB_KEY_Eth 0x00d0 /* deprecated */ +#define XKB_KEY_Ntilde 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */ +#define XKB_KEY_Ograve 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */ +#define XKB_KEY_Oacute 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */ +#define XKB_KEY_Ocircumflex 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ +#define XKB_KEY_Otilde 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */ +#define XKB_KEY_Odiaeresis 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */ +#define XKB_KEY_multiply 0x00d7 /* U+00D7 MULTIPLICATION SIGN */ +#define XKB_KEY_Oslash 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +#define XKB_KEY_Ooblique 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +#define XKB_KEY_Ugrave 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */ +#define XKB_KEY_Uacute 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */ +#define XKB_KEY_Ucircumflex 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ +#define XKB_KEY_Udiaeresis 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */ +#define XKB_KEY_Yacute 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */ +#define XKB_KEY_THORN 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */ +#define XKB_KEY_Thorn 0x00de /* deprecated */ +#define XKB_KEY_ssharp 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */ +#define XKB_KEY_agrave 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */ +#define XKB_KEY_aacute 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */ +#define XKB_KEY_acircumflex 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */ +#define XKB_KEY_atilde 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */ +#define XKB_KEY_adiaeresis 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */ +#define XKB_KEY_aring 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */ +#define XKB_KEY_ae 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */ +#define XKB_KEY_ccedilla 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */ +#define XKB_KEY_egrave 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */ +#define XKB_KEY_eacute 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +#define XKB_KEY_ecircumflex 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */ +#define XKB_KEY_ediaeresis 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */ +#define XKB_KEY_igrave 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */ +#define XKB_KEY_iacute 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */ +#define XKB_KEY_icircumflex 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */ +#define XKB_KEY_idiaeresis 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */ +#define XKB_KEY_eth 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */ +#define XKB_KEY_ntilde 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */ +#define XKB_KEY_ograve 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */ +#define XKB_KEY_oacute 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */ +#define XKB_KEY_ocircumflex 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */ +#define XKB_KEY_otilde 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */ +#define XKB_KEY_odiaeresis 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */ +#define XKB_KEY_division 0x00f7 /* U+00F7 DIVISION SIGN */ +#define XKB_KEY_oslash 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ +#define XKB_KEY_ooblique 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ +#define XKB_KEY_ugrave 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */ +#define XKB_KEY_uacute 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */ +#define XKB_KEY_ucircumflex 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */ +#define XKB_KEY_udiaeresis 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */ +#define XKB_KEY_yacute 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */ +#define XKB_KEY_thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */ +#define XKB_KEY_ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + +/* + * Latin 2 + * Byte 3 = 1 + */ + +#define XKB_KEY_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ +#define XKB_KEY_breve 0x01a2 /* U+02D8 BREVE */ +#define XKB_KEY_Lstroke 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +#define XKB_KEY_Lcaron 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */ +#define XKB_KEY_Sacute 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */ +#define XKB_KEY_Scaron 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */ +#define XKB_KEY_Scedilla 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */ +#define XKB_KEY_Tcaron 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */ +#define XKB_KEY_Zacute 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */ +#define XKB_KEY_Zcaron 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */ +#define XKB_KEY_Zabovedot 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */ +#define XKB_KEY_aogonek 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */ +#define XKB_KEY_ogonek 0x01b2 /* U+02DB OGONEK */ +#define XKB_KEY_lstroke 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +#define XKB_KEY_lcaron 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */ +#define XKB_KEY_sacute 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */ +#define XKB_KEY_caron 0x01b7 /* U+02C7 CARON */ +#define XKB_KEY_scaron 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */ +#define XKB_KEY_scedilla 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */ +#define XKB_KEY_tcaron 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */ +#define XKB_KEY_zacute 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */ +#define XKB_KEY_doubleacute 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */ +#define XKB_KEY_zcaron 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */ +#define XKB_KEY_zabovedot 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */ +#define XKB_KEY_Racute 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */ +#define XKB_KEY_Abreve 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */ +#define XKB_KEY_Lacute 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */ +#define XKB_KEY_Cacute 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */ +#define XKB_KEY_Ccaron 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */ +#define XKB_KEY_Eogonek 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */ +#define XKB_KEY_Ecaron 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */ +#define XKB_KEY_Dcaron 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */ +#define XKB_KEY_Dstroke 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */ +#define XKB_KEY_Nacute 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */ +#define XKB_KEY_Ncaron 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */ +#define XKB_KEY_Odoubleacute 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ +#define XKB_KEY_Rcaron 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */ +#define XKB_KEY_Uring 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */ +#define XKB_KEY_Udoubleacute 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ +#define XKB_KEY_Tcedilla 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */ +#define XKB_KEY_racute 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */ +#define XKB_KEY_abreve 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */ +#define XKB_KEY_lacute 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */ +#define XKB_KEY_cacute 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */ +#define XKB_KEY_ccaron 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */ +#define XKB_KEY_eogonek 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */ +#define XKB_KEY_ecaron 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */ +#define XKB_KEY_dcaron 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */ +#define XKB_KEY_dstroke 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */ +#define XKB_KEY_nacute 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */ +#define XKB_KEY_ncaron 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */ +#define XKB_KEY_odoubleacute 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */ +#define XKB_KEY_rcaron 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */ +#define XKB_KEY_uring 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */ +#define XKB_KEY_udoubleacute 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */ +#define XKB_KEY_tcedilla 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */ +#define XKB_KEY_abovedot 0x01ff /* U+02D9 DOT ABOVE */ + +/* + * Latin 3 + * Byte 3 = 2 + */ + +#define XKB_KEY_Hstroke 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */ +#define XKB_KEY_Hcircumflex 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ +#define XKB_KEY_Iabovedot 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ +#define XKB_KEY_Gbreve 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */ +#define XKB_KEY_Jcircumflex 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ +#define XKB_KEY_hstroke 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */ +#define XKB_KEY_hcircumflex 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */ +#define XKB_KEY_idotless 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */ +#define XKB_KEY_gbreve 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */ +#define XKB_KEY_jcircumflex 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */ +#define XKB_KEY_Cabovedot 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */ +#define XKB_KEY_Ccircumflex 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ +#define XKB_KEY_Gabovedot 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */ +#define XKB_KEY_Gcircumflex 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ +#define XKB_KEY_Ubreve 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */ +#define XKB_KEY_Scircumflex 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ +#define XKB_KEY_cabovedot 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */ +#define XKB_KEY_ccircumflex 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */ +#define XKB_KEY_gabovedot 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */ +#define XKB_KEY_gcircumflex 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */ +#define XKB_KEY_ubreve 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */ +#define XKB_KEY_scircumflex 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */ + + +/* + * Latin 4 + * Byte 3 = 3 + */ + +#define XKB_KEY_kra 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */ +#define XKB_KEY_kappa 0x03a2 /* deprecated */ +#define XKB_KEY_Rcedilla 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */ +#define XKB_KEY_Itilde 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */ +#define XKB_KEY_Lcedilla 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */ +#define XKB_KEY_Emacron 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */ +#define XKB_KEY_Gcedilla 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */ +#define XKB_KEY_Tslash 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */ +#define XKB_KEY_rcedilla 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */ +#define XKB_KEY_itilde 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */ +#define XKB_KEY_lcedilla 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */ +#define XKB_KEY_emacron 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */ +#define XKB_KEY_gcedilla 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */ +#define XKB_KEY_tslash 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */ +#define XKB_KEY_ENG 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */ +#define XKB_KEY_eng 0x03bf /* U+014B LATIN SMALL LETTER ENG */ +#define XKB_KEY_Amacron 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */ +#define XKB_KEY_Iogonek 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */ +#define XKB_KEY_Eabovedot 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */ +#define XKB_KEY_Imacron 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */ +#define XKB_KEY_Ncedilla 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */ +#define XKB_KEY_Omacron 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */ +#define XKB_KEY_Kcedilla 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */ +#define XKB_KEY_Uogonek 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */ +#define XKB_KEY_Utilde 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */ +#define XKB_KEY_Umacron 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */ +#define XKB_KEY_amacron 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */ +#define XKB_KEY_iogonek 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */ +#define XKB_KEY_eabovedot 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */ +#define XKB_KEY_imacron 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */ +#define XKB_KEY_ncedilla 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */ +#define XKB_KEY_omacron 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */ +#define XKB_KEY_kcedilla 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */ +#define XKB_KEY_uogonek 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */ +#define XKB_KEY_utilde 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */ +#define XKB_KEY_umacron 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */ + +/* + * Latin 8 + */ +#define XKB_KEY_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ +#define XKB_KEY_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */ +#define XKB_KEY_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ +#define XKB_KEY_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */ +#define XKB_KEY_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */ +#define XKB_KEY_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */ +#define XKB_KEY_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */ +#define XKB_KEY_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */ +#define XKB_KEY_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */ +#define XKB_KEY_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */ +#define XKB_KEY_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */ +#define XKB_KEY_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */ +#define XKB_KEY_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */ +#define XKB_KEY_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */ +#define XKB_KEY_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */ +#define XKB_KEY_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */ +#define XKB_KEY_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */ +#define XKB_KEY_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */ +#define XKB_KEY_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */ +#define XKB_KEY_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */ +#define XKB_KEY_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */ +#define XKB_KEY_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */ +#define XKB_KEY_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */ +#define XKB_KEY_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */ +#define XKB_KEY_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */ +#define XKB_KEY_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */ + +/* + * Latin 9 + * Byte 3 = 0x13 + */ + +#define XKB_KEY_OE 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */ +#define XKB_KEY_oe 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */ +#define XKB_KEY_Ydiaeresis 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */ + +/* + * Katakana + * Byte 3 = 4 + */ + +#define XKB_KEY_overline 0x047e /* U+203E OVERLINE */ +#define XKB_KEY_kana_fullstop 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */ +#define XKB_KEY_kana_openingbracket 0x04a2 /* U+300C LEFT CORNER BRACKET */ +#define XKB_KEY_kana_closingbracket 0x04a3 /* U+300D RIGHT CORNER BRACKET */ +#define XKB_KEY_kana_comma 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */ +#define XKB_KEY_kana_conjunctive 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */ +#define XKB_KEY_kana_middledot 0x04a5 /* deprecated */ +#define XKB_KEY_kana_WO 0x04a6 /* U+30F2 KATAKANA LETTER WO */ +#define XKB_KEY_kana_a 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */ +#define XKB_KEY_kana_i 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */ +#define XKB_KEY_kana_u 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */ +#define XKB_KEY_kana_e 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */ +#define XKB_KEY_kana_o 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */ +#define XKB_KEY_kana_ya 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */ +#define XKB_KEY_kana_yu 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */ +#define XKB_KEY_kana_yo 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */ +#define XKB_KEY_kana_tsu 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */ +#define XKB_KEY_kana_tu 0x04af /* deprecated */ +#define XKB_KEY_prolongedsound 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */ +#define XKB_KEY_kana_A 0x04b1 /* U+30A2 KATAKANA LETTER A */ +#define XKB_KEY_kana_I 0x04b2 /* U+30A4 KATAKANA LETTER I */ +#define XKB_KEY_kana_U 0x04b3 /* U+30A6 KATAKANA LETTER U */ +#define XKB_KEY_kana_E 0x04b4 /* U+30A8 KATAKANA LETTER E */ +#define XKB_KEY_kana_O 0x04b5 /* U+30AA KATAKANA LETTER O */ +#define XKB_KEY_kana_KA 0x04b6 /* U+30AB KATAKANA LETTER KA */ +#define XKB_KEY_kana_KI 0x04b7 /* U+30AD KATAKANA LETTER KI */ +#define XKB_KEY_kana_KU 0x04b8 /* U+30AF KATAKANA LETTER KU */ +#define XKB_KEY_kana_KE 0x04b9 /* U+30B1 KATAKANA LETTER KE */ +#define XKB_KEY_kana_KO 0x04ba /* U+30B3 KATAKANA LETTER KO */ +#define XKB_KEY_kana_SA 0x04bb /* U+30B5 KATAKANA LETTER SA */ +#define XKB_KEY_kana_SHI 0x04bc /* U+30B7 KATAKANA LETTER SI */ +#define XKB_KEY_kana_SU 0x04bd /* U+30B9 KATAKANA LETTER SU */ +#define XKB_KEY_kana_SE 0x04be /* U+30BB KATAKANA LETTER SE */ +#define XKB_KEY_kana_SO 0x04bf /* U+30BD KATAKANA LETTER SO */ +#define XKB_KEY_kana_TA 0x04c0 /* U+30BF KATAKANA LETTER TA */ +#define XKB_KEY_kana_CHI 0x04c1 /* U+30C1 KATAKANA LETTER TI */ +#define XKB_KEY_kana_TI 0x04c1 /* deprecated */ +#define XKB_KEY_kana_TSU 0x04c2 /* U+30C4 KATAKANA LETTER TU */ +#define XKB_KEY_kana_TU 0x04c2 /* deprecated */ +#define XKB_KEY_kana_TE 0x04c3 /* U+30C6 KATAKANA LETTER TE */ +#define XKB_KEY_kana_TO 0x04c4 /* U+30C8 KATAKANA LETTER TO */ +#define XKB_KEY_kana_NA 0x04c5 /* U+30CA KATAKANA LETTER NA */ +#define XKB_KEY_kana_NI 0x04c6 /* U+30CB KATAKANA LETTER NI */ +#define XKB_KEY_kana_NU 0x04c7 /* U+30CC KATAKANA LETTER NU */ +#define XKB_KEY_kana_NE 0x04c8 /* U+30CD KATAKANA LETTER NE */ +#define XKB_KEY_kana_NO 0x04c9 /* U+30CE KATAKANA LETTER NO */ +#define XKB_KEY_kana_HA 0x04ca /* U+30CF KATAKANA LETTER HA */ +#define XKB_KEY_kana_HI 0x04cb /* U+30D2 KATAKANA LETTER HI */ +#define XKB_KEY_kana_FU 0x04cc /* U+30D5 KATAKANA LETTER HU */ +#define XKB_KEY_kana_HU 0x04cc /* deprecated */ +#define XKB_KEY_kana_HE 0x04cd /* U+30D8 KATAKANA LETTER HE */ +#define XKB_KEY_kana_HO 0x04ce /* U+30DB KATAKANA LETTER HO */ +#define XKB_KEY_kana_MA 0x04cf /* U+30DE KATAKANA LETTER MA */ +#define XKB_KEY_kana_MI 0x04d0 /* U+30DF KATAKANA LETTER MI */ +#define XKB_KEY_kana_MU 0x04d1 /* U+30E0 KATAKANA LETTER MU */ +#define XKB_KEY_kana_ME 0x04d2 /* U+30E1 KATAKANA LETTER ME */ +#define XKB_KEY_kana_MO 0x04d3 /* U+30E2 KATAKANA LETTER MO */ +#define XKB_KEY_kana_YA 0x04d4 /* U+30E4 KATAKANA LETTER YA */ +#define XKB_KEY_kana_YU 0x04d5 /* U+30E6 KATAKANA LETTER YU */ +#define XKB_KEY_kana_YO 0x04d6 /* U+30E8 KATAKANA LETTER YO */ +#define XKB_KEY_kana_RA 0x04d7 /* U+30E9 KATAKANA LETTER RA */ +#define XKB_KEY_kana_RI 0x04d8 /* U+30EA KATAKANA LETTER RI */ +#define XKB_KEY_kana_RU 0x04d9 /* U+30EB KATAKANA LETTER RU */ +#define XKB_KEY_kana_RE 0x04da /* U+30EC KATAKANA LETTER RE */ +#define XKB_KEY_kana_RO 0x04db /* U+30ED KATAKANA LETTER RO */ +#define XKB_KEY_kana_WA 0x04dc /* U+30EF KATAKANA LETTER WA */ +#define XKB_KEY_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */ +#define XKB_KEY_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ +#define XKB_KEY_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ +#define XKB_KEY_kana_switch 0xff7e /* Alias for mode_switch */ + +/* + * Arabic + * Byte 3 = 5 + */ + +#define XKB_KEY_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */ +#define XKB_KEY_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */ +#define XKB_KEY_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */ +#define XKB_KEY_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */ +#define XKB_KEY_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */ +#define XKB_KEY_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */ +#define XKB_KEY_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */ +#define XKB_KEY_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */ +#define XKB_KEY_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */ +#define XKB_KEY_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */ +#define XKB_KEY_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */ +#define XKB_KEY_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */ +#define XKB_KEY_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */ +#define XKB_KEY_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */ +#define XKB_KEY_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */ +#define XKB_KEY_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */ +#define XKB_KEY_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */ +#define XKB_KEY_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */ +#define XKB_KEY_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */ +#define XKB_KEY_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */ +#define XKB_KEY_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */ +#define XKB_KEY_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */ +#define XKB_KEY_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */ +#define XKB_KEY_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */ +#define XKB_KEY_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */ +#define XKB_KEY_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */ +#define XKB_KEY_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */ +#define XKB_KEY_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */ +#define XKB_KEY_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */ +#define XKB_KEY_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */ +#define XKB_KEY_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */ +#define XKB_KEY_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */ +#define XKB_KEY_Arabic_maddaonalef 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */ +#define XKB_KEY_Arabic_hamzaonalef 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamzaonwaw 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamzaunderalef 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */ +#define XKB_KEY_Arabic_hamzaonyeh 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_alef 0x05c7 /* U+0627 ARABIC LETTER ALEF */ +#define XKB_KEY_Arabic_beh 0x05c8 /* U+0628 ARABIC LETTER BEH */ +#define XKB_KEY_Arabic_tehmarbuta 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */ +#define XKB_KEY_Arabic_teh 0x05ca /* U+062A ARABIC LETTER TEH */ +#define XKB_KEY_Arabic_theh 0x05cb /* U+062B ARABIC LETTER THEH */ +#define XKB_KEY_Arabic_jeem 0x05cc /* U+062C ARABIC LETTER JEEM */ +#define XKB_KEY_Arabic_hah 0x05cd /* U+062D ARABIC LETTER HAH */ +#define XKB_KEY_Arabic_khah 0x05ce /* U+062E ARABIC LETTER KHAH */ +#define XKB_KEY_Arabic_dal 0x05cf /* U+062F ARABIC LETTER DAL */ +#define XKB_KEY_Arabic_thal 0x05d0 /* U+0630 ARABIC LETTER THAL */ +#define XKB_KEY_Arabic_ra 0x05d1 /* U+0631 ARABIC LETTER REH */ +#define XKB_KEY_Arabic_zain 0x05d2 /* U+0632 ARABIC LETTER ZAIN */ +#define XKB_KEY_Arabic_seen 0x05d3 /* U+0633 ARABIC LETTER SEEN */ +#define XKB_KEY_Arabic_sheen 0x05d4 /* U+0634 ARABIC LETTER SHEEN */ +#define XKB_KEY_Arabic_sad 0x05d5 /* U+0635 ARABIC LETTER SAD */ +#define XKB_KEY_Arabic_dad 0x05d6 /* U+0636 ARABIC LETTER DAD */ +#define XKB_KEY_Arabic_tah 0x05d7 /* U+0637 ARABIC LETTER TAH */ +#define XKB_KEY_Arabic_zah 0x05d8 /* U+0638 ARABIC LETTER ZAH */ +#define XKB_KEY_Arabic_ain 0x05d9 /* U+0639 ARABIC LETTER AIN */ +#define XKB_KEY_Arabic_ghain 0x05da /* U+063A ARABIC LETTER GHAIN */ +#define XKB_KEY_Arabic_tatweel 0x05e0 /* U+0640 ARABIC TATWEEL */ +#define XKB_KEY_Arabic_feh 0x05e1 /* U+0641 ARABIC LETTER FEH */ +#define XKB_KEY_Arabic_qaf 0x05e2 /* U+0642 ARABIC LETTER QAF */ +#define XKB_KEY_Arabic_kaf 0x05e3 /* U+0643 ARABIC LETTER KAF */ +#define XKB_KEY_Arabic_lam 0x05e4 /* U+0644 ARABIC LETTER LAM */ +#define XKB_KEY_Arabic_meem 0x05e5 /* U+0645 ARABIC LETTER MEEM */ +#define XKB_KEY_Arabic_noon 0x05e6 /* U+0646 ARABIC LETTER NOON */ +#define XKB_KEY_Arabic_ha 0x05e7 /* U+0647 ARABIC LETTER HEH */ +#define XKB_KEY_Arabic_heh 0x05e7 /* deprecated */ +#define XKB_KEY_Arabic_waw 0x05e8 /* U+0648 ARABIC LETTER WAW */ +#define XKB_KEY_Arabic_alefmaksura 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */ +#define XKB_KEY_Arabic_yeh 0x05ea /* U+064A ARABIC LETTER YEH */ +#define XKB_KEY_Arabic_fathatan 0x05eb /* U+064B ARABIC FATHATAN */ +#define XKB_KEY_Arabic_dammatan 0x05ec /* U+064C ARABIC DAMMATAN */ +#define XKB_KEY_Arabic_kasratan 0x05ed /* U+064D ARABIC KASRATAN */ +#define XKB_KEY_Arabic_fatha 0x05ee /* U+064E ARABIC FATHA */ +#define XKB_KEY_Arabic_damma 0x05ef /* U+064F ARABIC DAMMA */ +#define XKB_KEY_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */ +#define XKB_KEY_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */ +#define XKB_KEY_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */ +#define XKB_KEY_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */ +#define XKB_KEY_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */ +#define XKB_KEY_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */ +#define XKB_KEY_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */ +#define XKB_KEY_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */ +#define XKB_KEY_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */ +#define XKB_KEY_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */ +#define XKB_KEY_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */ +#define XKB_KEY_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ +#define XKB_KEY_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ +#define XKB_KEY_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ +#define XKB_KEY_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ +#define XKB_KEY_Arabic_switch 0xff7e /* Alias for mode_switch */ + +/* + * Cyrillic + * Byte 3 = 6 + */ +#define XKB_KEY_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */ +#define XKB_KEY_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */ +#define XKB_KEY_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ +#define XKB_KEY_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */ +#define XKB_KEY_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */ +#define XKB_KEY_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */ +#define XKB_KEY_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ +#define XKB_KEY_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */ +#define XKB_KEY_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */ +#define XKB_KEY_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */ + +#define XKB_KEY_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */ +#define XKB_KEY_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */ +#define XKB_KEY_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */ +#define XKB_KEY_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */ +#define XKB_KEY_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */ +#define XKB_KEY_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */ +#define XKB_KEY_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */ +#define XKB_KEY_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */ + +#define XKB_KEY_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */ +#define XKB_KEY_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */ +#define XKB_KEY_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */ +#define XKB_KEY_Ukrainian_ie 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */ +#define XKB_KEY_Ukranian_je 0x06a4 /* deprecated */ +#define XKB_KEY_Macedonia_dse 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */ +#define XKB_KEY_Ukrainian_i 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ +#define XKB_KEY_Ukranian_i 0x06a6 /* deprecated */ +#define XKB_KEY_Ukrainian_yi 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */ +#define XKB_KEY_Ukranian_yi 0x06a7 /* deprecated */ +#define XKB_KEY_Cyrillic_je 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */ +#define XKB_KEY_Serbian_je 0x06a8 /* deprecated */ +#define XKB_KEY_Cyrillic_lje 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */ +#define XKB_KEY_Serbian_lje 0x06a9 /* deprecated */ +#define XKB_KEY_Cyrillic_nje 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */ +#define XKB_KEY_Serbian_nje 0x06aa /* deprecated */ +#define XKB_KEY_Serbian_tshe 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */ +#define XKB_KEY_Macedonia_kje 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */ +#define XKB_KEY_Ukrainian_ghe_with_upturn 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */ +#define XKB_KEY_Byelorussian_shortu 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */ +#define XKB_KEY_Cyrillic_dzhe 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */ +#define XKB_KEY_Serbian_dze 0x06af /* deprecated */ +#define XKB_KEY_numerosign 0x06b0 /* U+2116 NUMERO SIGN */ +#define XKB_KEY_Serbian_DJE 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */ +#define XKB_KEY_Macedonia_GJE 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */ +#define XKB_KEY_Cyrillic_IO 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */ +#define XKB_KEY_Ukrainian_IE 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */ +#define XKB_KEY_Ukranian_JE 0x06b4 /* deprecated */ +#define XKB_KEY_Macedonia_DSE 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */ +#define XKB_KEY_Ukrainian_I 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ +#define XKB_KEY_Ukranian_I 0x06b6 /* deprecated */ +#define XKB_KEY_Ukrainian_YI 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */ +#define XKB_KEY_Ukranian_YI 0x06b7 /* deprecated */ +#define XKB_KEY_Cyrillic_JE 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */ +#define XKB_KEY_Serbian_JE 0x06b8 /* deprecated */ +#define XKB_KEY_Cyrillic_LJE 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */ +#define XKB_KEY_Serbian_LJE 0x06b9 /* deprecated */ +#define XKB_KEY_Cyrillic_NJE 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */ +#define XKB_KEY_Serbian_NJE 0x06ba /* deprecated */ +#define XKB_KEY_Serbian_TSHE 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */ +#define XKB_KEY_Macedonia_KJE 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */ +#define XKB_KEY_Ukrainian_GHE_WITH_UPTURN 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ +#define XKB_KEY_Byelorussian_SHORTU 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */ +#define XKB_KEY_Cyrillic_DZHE 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */ +#define XKB_KEY_Serbian_DZE 0x06bf /* deprecated */ +#define XKB_KEY_Cyrillic_yu 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */ +#define XKB_KEY_Cyrillic_a 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */ +#define XKB_KEY_Cyrillic_be 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */ +#define XKB_KEY_Cyrillic_tse 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */ +#define XKB_KEY_Cyrillic_de 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */ +#define XKB_KEY_Cyrillic_ie 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */ +#define XKB_KEY_Cyrillic_ef 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */ +#define XKB_KEY_Cyrillic_ghe 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */ +#define XKB_KEY_Cyrillic_ha 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */ +#define XKB_KEY_Cyrillic_i 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */ +#define XKB_KEY_Cyrillic_shorti 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */ +#define XKB_KEY_Cyrillic_ka 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */ +#define XKB_KEY_Cyrillic_el 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */ +#define XKB_KEY_Cyrillic_em 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */ +#define XKB_KEY_Cyrillic_en 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */ +#define XKB_KEY_Cyrillic_o 0x06cf /* U+043E CYRILLIC SMALL LETTER O */ +#define XKB_KEY_Cyrillic_pe 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */ +#define XKB_KEY_Cyrillic_ya 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */ +#define XKB_KEY_Cyrillic_er 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */ +#define XKB_KEY_Cyrillic_es 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */ +#define XKB_KEY_Cyrillic_te 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */ +#define XKB_KEY_Cyrillic_u 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */ +#define XKB_KEY_Cyrillic_zhe 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */ +#define XKB_KEY_Cyrillic_ve 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */ +#define XKB_KEY_Cyrillic_softsign 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */ +#define XKB_KEY_Cyrillic_yeru 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */ +#define XKB_KEY_Cyrillic_ze 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */ +#define XKB_KEY_Cyrillic_sha 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */ +#define XKB_KEY_Cyrillic_e 0x06dc /* U+044D CYRILLIC SMALL LETTER E */ +#define XKB_KEY_Cyrillic_shcha 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +#define XKB_KEY_Cyrillic_che 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */ +#define XKB_KEY_Cyrillic_hardsign 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */ +#define XKB_KEY_Cyrillic_YU 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */ +#define XKB_KEY_Cyrillic_A 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */ +#define XKB_KEY_Cyrillic_BE 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */ +#define XKB_KEY_Cyrillic_TSE 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */ +#define XKB_KEY_Cyrillic_DE 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */ +#define XKB_KEY_Cyrillic_IE 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */ +#define XKB_KEY_Cyrillic_EF 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */ +#define XKB_KEY_Cyrillic_GHE 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */ +#define XKB_KEY_Cyrillic_HA 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */ +#define XKB_KEY_Cyrillic_I 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */ +#define XKB_KEY_Cyrillic_SHORTI 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */ +#define XKB_KEY_Cyrillic_KA 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */ +#define XKB_KEY_Cyrillic_EL 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */ +#define XKB_KEY_Cyrillic_EM 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */ +#define XKB_KEY_Cyrillic_EN 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */ +#define XKB_KEY_Cyrillic_O 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */ +#define XKB_KEY_Cyrillic_PE 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */ +#define XKB_KEY_Cyrillic_YA 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */ +#define XKB_KEY_Cyrillic_ER 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */ +#define XKB_KEY_Cyrillic_ES 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */ +#define XKB_KEY_Cyrillic_TE 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */ +#define XKB_KEY_Cyrillic_U 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */ +#define XKB_KEY_Cyrillic_ZHE 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */ +#define XKB_KEY_Cyrillic_VE 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */ +#define XKB_KEY_Cyrillic_SOFTSIGN 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */ +#define XKB_KEY_Cyrillic_YERU 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */ +#define XKB_KEY_Cyrillic_ZE 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */ +#define XKB_KEY_Cyrillic_SHA 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */ +#define XKB_KEY_Cyrillic_E 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */ +#define XKB_KEY_Cyrillic_SHCHA 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +#define XKB_KEY_Cyrillic_CHE 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */ +#define XKB_KEY_Cyrillic_HARDSIGN 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */ + +/* + * Greek + * (based on an early draft of, and not quite identical to, ISO/IEC 8859-7) + * Byte 3 = 7 + */ + +#define XKB_KEY_Greek_ALPHAaccent 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */ +#define XKB_KEY_Greek_EPSILONaccent 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */ +#define XKB_KEY_Greek_ETAaccent 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */ +#define XKB_KEY_Greek_IOTAaccent 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */ +#define XKB_KEY_Greek_IOTAdieresis 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ +#define XKB_KEY_Greek_IOTAdiaeresis 0x07a5 /* old typo */ +#define XKB_KEY_Greek_OMICRONaccent 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */ +#define XKB_KEY_Greek_UPSILONaccent 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */ +#define XKB_KEY_Greek_UPSILONdieresis 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ +#define XKB_KEY_Greek_OMEGAaccent 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */ +#define XKB_KEY_Greek_accentdieresis 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */ +#define XKB_KEY_Greek_horizbar 0x07af /* U+2015 HORIZONTAL BAR */ +#define XKB_KEY_Greek_alphaaccent 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */ +#define XKB_KEY_Greek_epsilonaccent 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */ +#define XKB_KEY_Greek_etaaccent 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */ +#define XKB_KEY_Greek_iotaaccent 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */ +#define XKB_KEY_Greek_iotadieresis 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */ +#define XKB_KEY_Greek_iotaaccentdieresis 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ +#define XKB_KEY_Greek_omicronaccent 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */ +#define XKB_KEY_Greek_upsilonaccent 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */ +#define XKB_KEY_Greek_upsilondieresis 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ +#define XKB_KEY_Greek_upsilonaccentdieresis 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ +#define XKB_KEY_Greek_omegaaccent 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */ +#define XKB_KEY_Greek_ALPHA 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */ +#define XKB_KEY_Greek_BETA 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */ +#define XKB_KEY_Greek_GAMMA 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */ +#define XKB_KEY_Greek_DELTA 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */ +#define XKB_KEY_Greek_EPSILON 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */ +#define XKB_KEY_Greek_ZETA 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */ +#define XKB_KEY_Greek_ETA 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */ +#define XKB_KEY_Greek_THETA 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */ +#define XKB_KEY_Greek_IOTA 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */ +#define XKB_KEY_Greek_KAPPA 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */ +#define XKB_KEY_Greek_LAMDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ +#define XKB_KEY_Greek_LAMBDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ +#define XKB_KEY_Greek_MU 0x07cc /* U+039C GREEK CAPITAL LETTER MU */ +#define XKB_KEY_Greek_NU 0x07cd /* U+039D GREEK CAPITAL LETTER NU */ +#define XKB_KEY_Greek_XI 0x07ce /* U+039E GREEK CAPITAL LETTER XI */ +#define XKB_KEY_Greek_OMICRON 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */ +#define XKB_KEY_Greek_PI 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */ +#define XKB_KEY_Greek_RHO 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */ +#define XKB_KEY_Greek_SIGMA 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */ +#define XKB_KEY_Greek_TAU 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */ +#define XKB_KEY_Greek_UPSILON 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */ +#define XKB_KEY_Greek_PHI 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */ +#define XKB_KEY_Greek_CHI 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */ +#define XKB_KEY_Greek_PSI 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */ +#define XKB_KEY_Greek_OMEGA 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */ +#define XKB_KEY_Greek_alpha 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */ +#define XKB_KEY_Greek_beta 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */ +#define XKB_KEY_Greek_gamma 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */ +#define XKB_KEY_Greek_delta 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */ +#define XKB_KEY_Greek_epsilon 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */ +#define XKB_KEY_Greek_zeta 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */ +#define XKB_KEY_Greek_eta 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */ +#define XKB_KEY_Greek_theta 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */ +#define XKB_KEY_Greek_iota 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */ +#define XKB_KEY_Greek_kappa 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */ +#define XKB_KEY_Greek_lamda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ +#define XKB_KEY_Greek_lambda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ +#define XKB_KEY_Greek_mu 0x07ec /* U+03BC GREEK SMALL LETTER MU */ +#define XKB_KEY_Greek_nu 0x07ed /* U+03BD GREEK SMALL LETTER NU */ +#define XKB_KEY_Greek_xi 0x07ee /* U+03BE GREEK SMALL LETTER XI */ +#define XKB_KEY_Greek_omicron 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */ +#define XKB_KEY_Greek_pi 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */ +#define XKB_KEY_Greek_rho 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */ +#define XKB_KEY_Greek_sigma 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */ +#define XKB_KEY_Greek_finalsmallsigma 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */ +#define XKB_KEY_Greek_tau 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */ +#define XKB_KEY_Greek_upsilon 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */ +#define XKB_KEY_Greek_phi 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */ +#define XKB_KEY_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */ +#define XKB_KEY_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */ +#define XKB_KEY_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */ +#define XKB_KEY_Greek_switch 0xff7e /* Alias for mode_switch */ + +/* + * Technical + * (from the DEC VT330/VT420 Technical Character Set, http://vt100.net/charsets/technical.html) + * Byte 3 = 8 + */ + +#define XKB_KEY_leftradical 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */ +#define XKB_KEY_topleftradical 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/ +#define XKB_KEY_horizconnector 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/ +#define XKB_KEY_topintegral 0x08a4 /* U+2320 TOP HALF INTEGRAL */ +#define XKB_KEY_botintegral 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */ +#define XKB_KEY_vertconnector 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/ +#define XKB_KEY_topleftsqbracket 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */ +#define XKB_KEY_botleftsqbracket 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */ +#define XKB_KEY_toprightsqbracket 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */ +#define XKB_KEY_botrightsqbracket 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */ +#define XKB_KEY_topleftparens 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */ +#define XKB_KEY_botleftparens 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */ +#define XKB_KEY_toprightparens 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */ +#define XKB_KEY_botrightparens 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */ +#define XKB_KEY_leftmiddlecurlybrace 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */ +#define XKB_KEY_rightmiddlecurlybrace 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */ +#define XKB_KEY_topleftsummation 0x08b1 +#define XKB_KEY_botleftsummation 0x08b2 +#define XKB_KEY_topvertsummationconnector 0x08b3 +#define XKB_KEY_botvertsummationconnector 0x08b4 +#define XKB_KEY_toprightsummation 0x08b5 +#define XKB_KEY_botrightsummation 0x08b6 +#define XKB_KEY_rightmiddlesummation 0x08b7 +#define XKB_KEY_lessthanequal 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */ +#define XKB_KEY_notequal 0x08bd /* U+2260 NOT EQUAL TO */ +#define XKB_KEY_greaterthanequal 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */ +#define XKB_KEY_integral 0x08bf /* U+222B INTEGRAL */ +#define XKB_KEY_therefore 0x08c0 /* U+2234 THEREFORE */ +#define XKB_KEY_variation 0x08c1 /* U+221D PROPORTIONAL TO */ +#define XKB_KEY_infinity 0x08c2 /* U+221E INFINITY */ +#define XKB_KEY_nabla 0x08c5 /* U+2207 NABLA */ +#define XKB_KEY_approximate 0x08c8 /* U+223C TILDE OPERATOR */ +#define XKB_KEY_similarequal 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */ +#define XKB_KEY_ifonlyif 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */ +#define XKB_KEY_implies 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */ +#define XKB_KEY_identical 0x08cf /* U+2261 IDENTICAL TO */ +#define XKB_KEY_radical 0x08d6 /* U+221A SQUARE ROOT */ +#define XKB_KEY_includedin 0x08da /* U+2282 SUBSET OF */ +#define XKB_KEY_includes 0x08db /* U+2283 SUPERSET OF */ +#define XKB_KEY_intersection 0x08dc /* U+2229 INTERSECTION */ +#define XKB_KEY_union 0x08dd /* U+222A UNION */ +#define XKB_KEY_logicaland 0x08de /* U+2227 LOGICAL AND */ +#define XKB_KEY_logicalor 0x08df /* U+2228 LOGICAL OR */ +#define XKB_KEY_partialderivative 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */ +#define XKB_KEY_function 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */ +#define XKB_KEY_leftarrow 0x08fb /* U+2190 LEFTWARDS ARROW */ +#define XKB_KEY_uparrow 0x08fc /* U+2191 UPWARDS ARROW */ +#define XKB_KEY_rightarrow 0x08fd /* U+2192 RIGHTWARDS ARROW */ +#define XKB_KEY_downarrow 0x08fe /* U+2193 DOWNWARDS ARROW */ + +/* + * Special + * (from the DEC VT100 Special Graphics Character Set) + * Byte 3 = 9 + */ + +#define XKB_KEY_blank 0x09df +#define XKB_KEY_soliddiamond 0x09e0 /* U+25C6 BLACK DIAMOND */ +#define XKB_KEY_checkerboard 0x09e1 /* U+2592 MEDIUM SHADE */ +#define XKB_KEY_ht 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */ +#define XKB_KEY_ff 0x09e3 /* U+240C SYMBOL FOR FORM FEED */ +#define XKB_KEY_cr 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */ +#define XKB_KEY_lf 0x09e5 /* U+240A SYMBOL FOR LINE FEED */ +#define XKB_KEY_nl 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */ +#define XKB_KEY_vt 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */ +#define XKB_KEY_lowrightcorner 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */ +#define XKB_KEY_uprightcorner 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */ +#define XKB_KEY_upleftcorner 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */ +#define XKB_KEY_lowleftcorner 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */ +#define XKB_KEY_crossinglines 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ +#define XKB_KEY_horizlinescan1 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */ +#define XKB_KEY_horizlinescan3 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */ +#define XKB_KEY_horizlinescan5 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */ +#define XKB_KEY_horizlinescan7 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */ +#define XKB_KEY_horizlinescan9 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */ +#define XKB_KEY_leftt 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ +#define XKB_KEY_rightt 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */ +#define XKB_KEY_bott 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */ +#define XKB_KEY_topt 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ +#define XKB_KEY_vertbar 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ + +/* + * Publishing + * (these are probably from a long forgotten DEC Publishing + * font that once shipped with DECwrite) + * Byte 3 = 0x0a + */ + +#define XKB_KEY_emspace 0x0aa1 /* U+2003 EM SPACE */ +#define XKB_KEY_enspace 0x0aa2 /* U+2002 EN SPACE */ +#define XKB_KEY_em3space 0x0aa3 /* U+2004 THREE-PER-EM SPACE */ +#define XKB_KEY_em4space 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */ +#define XKB_KEY_digitspace 0x0aa5 /* U+2007 FIGURE SPACE */ +#define XKB_KEY_punctspace 0x0aa6 /* U+2008 PUNCTUATION SPACE */ +#define XKB_KEY_thinspace 0x0aa7 /* U+2009 THIN SPACE */ +#define XKB_KEY_hairspace 0x0aa8 /* U+200A HAIR SPACE */ +#define XKB_KEY_emdash 0x0aa9 /* U+2014 EM DASH */ +#define XKB_KEY_endash 0x0aaa /* U+2013 EN DASH */ +#define XKB_KEY_signifblank 0x0aac /*(U+2423 OPEN BOX)*/ +#define XKB_KEY_ellipsis 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */ +#define XKB_KEY_doubbaselinedot 0x0aaf /* U+2025 TWO DOT LEADER */ +#define XKB_KEY_onethird 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */ +#define XKB_KEY_twothirds 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */ +#define XKB_KEY_onefifth 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */ +#define XKB_KEY_twofifths 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */ +#define XKB_KEY_threefifths 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */ +#define XKB_KEY_fourfifths 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */ +#define XKB_KEY_onesixth 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */ +#define XKB_KEY_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */ +#define XKB_KEY_careof 0x0ab8 /* U+2105 CARE OF */ +#define XKB_KEY_figdash 0x0abb /* U+2012 FIGURE DASH */ +#define XKB_KEY_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/ +#define XKB_KEY_decimalpoint 0x0abd /*(U+002E FULL STOP)*/ +#define XKB_KEY_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/ +#define XKB_KEY_marker 0x0abf +#define XKB_KEY_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */ +#define XKB_KEY_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */ +#define XKB_KEY_fiveeighths 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */ +#define XKB_KEY_seveneighths 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */ +#define XKB_KEY_trademark 0x0ac9 /* U+2122 TRADE MARK SIGN */ +#define XKB_KEY_signaturemark 0x0aca /*(U+2613 SALTIRE)*/ +#define XKB_KEY_trademarkincircle 0x0acb +#define XKB_KEY_leftopentriangle 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/ +#define XKB_KEY_rightopentriangle 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/ +#define XKB_KEY_emopencircle 0x0ace /*(U+25CB WHITE CIRCLE)*/ +#define XKB_KEY_emopenrectangle 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/ +#define XKB_KEY_leftsinglequotemark 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */ +#define XKB_KEY_rightsinglequotemark 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */ +#define XKB_KEY_leftdoublequotemark 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */ +#define XKB_KEY_rightdoublequotemark 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */ +#define XKB_KEY_prescription 0x0ad4 /* U+211E PRESCRIPTION TAKE */ +#define XKB_KEY_permille 0x0ad5 /* U+2030 PER MILLE SIGN */ +#define XKB_KEY_minutes 0x0ad6 /* U+2032 PRIME */ +#define XKB_KEY_seconds 0x0ad7 /* U+2033 DOUBLE PRIME */ +#define XKB_KEY_latincross 0x0ad9 /* U+271D LATIN CROSS */ +#define XKB_KEY_hexagram 0x0ada +#define XKB_KEY_filledrectbullet 0x0adb /*(U+25AC BLACK RECTANGLE)*/ +#define XKB_KEY_filledlefttribullet 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/ +#define XKB_KEY_filledrighttribullet 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/ +#define XKB_KEY_emfilledcircle 0x0ade /*(U+25CF BLACK CIRCLE)*/ +#define XKB_KEY_emfilledrect 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/ +#define XKB_KEY_enopencircbullet 0x0ae0 /*(U+25E6 WHITE BULLET)*/ +#define XKB_KEY_enopensquarebullet 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/ +#define XKB_KEY_openrectbullet 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/ +#define XKB_KEY_opentribulletup 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/ +#define XKB_KEY_opentribulletdown 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/ +#define XKB_KEY_openstar 0x0ae5 /*(U+2606 WHITE STAR)*/ +#define XKB_KEY_enfilledcircbullet 0x0ae6 /*(U+2022 BULLET)*/ +#define XKB_KEY_enfilledsqbullet 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/ +#define XKB_KEY_filledtribulletup 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/ +#define XKB_KEY_filledtribulletdown 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/ +#define XKB_KEY_leftpointer 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/ +#define XKB_KEY_rightpointer 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/ +#define XKB_KEY_club 0x0aec /* U+2663 BLACK CLUB SUIT */ +#define XKB_KEY_diamond 0x0aed /* U+2666 BLACK DIAMOND SUIT */ +#define XKB_KEY_heart 0x0aee /* U+2665 BLACK HEART SUIT */ +#define XKB_KEY_maltesecross 0x0af0 /* U+2720 MALTESE CROSS */ +#define XKB_KEY_dagger 0x0af1 /* U+2020 DAGGER */ +#define XKB_KEY_doubledagger 0x0af2 /* U+2021 DOUBLE DAGGER */ +#define XKB_KEY_checkmark 0x0af3 /* U+2713 CHECK MARK */ +#define XKB_KEY_ballotcross 0x0af4 /* U+2717 BALLOT X */ +#define XKB_KEY_musicalsharp 0x0af5 /* U+266F MUSIC SHARP SIGN */ +#define XKB_KEY_musicalflat 0x0af6 /* U+266D MUSIC FLAT SIGN */ +#define XKB_KEY_malesymbol 0x0af7 /* U+2642 MALE SIGN */ +#define XKB_KEY_femalesymbol 0x0af8 /* U+2640 FEMALE SIGN */ +#define XKB_KEY_telephone 0x0af9 /* U+260E BLACK TELEPHONE */ +#define XKB_KEY_telephonerecorder 0x0afa /* U+2315 TELEPHONE RECORDER */ +#define XKB_KEY_phonographcopyright 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */ +#define XKB_KEY_caret 0x0afc /* U+2038 CARET */ +#define XKB_KEY_singlelowquotemark 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */ +#define XKB_KEY_doublelowquotemark 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */ +#define XKB_KEY_cursor 0x0aff + +/* + * APL + * Byte 3 = 0x0b + */ + +#define XKB_KEY_leftcaret 0x0ba3 /*(U+003C LESS-THAN SIGN)*/ +#define XKB_KEY_rightcaret 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/ +#define XKB_KEY_downcaret 0x0ba8 /*(U+2228 LOGICAL OR)*/ +#define XKB_KEY_upcaret 0x0ba9 /*(U+2227 LOGICAL AND)*/ +#define XKB_KEY_overbar 0x0bc0 /*(U+00AF MACRON)*/ +#define XKB_KEY_downtack 0x0bc2 /* U+22A4 DOWN TACK */ +#define XKB_KEY_upshoe 0x0bc3 /*(U+2229 INTERSECTION)*/ +#define XKB_KEY_downstile 0x0bc4 /* U+230A LEFT FLOOR */ +#define XKB_KEY_underbar 0x0bc6 /*(U+005F LOW LINE)*/ +#define XKB_KEY_jot 0x0bca /* U+2218 RING OPERATOR */ +#define XKB_KEY_quad 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */ +#define XKB_KEY_uptack 0x0bce /* U+22A5 UP TACK */ +#define XKB_KEY_circle 0x0bcf /* U+25CB WHITE CIRCLE */ +#define XKB_KEY_upstile 0x0bd3 /* U+2308 LEFT CEILING */ +#define XKB_KEY_downshoe 0x0bd6 /*(U+222A UNION)*/ +#define XKB_KEY_rightshoe 0x0bd8 /*(U+2283 SUPERSET OF)*/ +#define XKB_KEY_leftshoe 0x0bda /*(U+2282 SUBSET OF)*/ +#define XKB_KEY_lefttack 0x0bdc /* U+22A3 LEFT TACK */ +#define XKB_KEY_righttack 0x0bfc /* U+22A2 RIGHT TACK */ + +/* + * Hebrew + * Byte 3 = 0x0c + */ + +#define XKB_KEY_hebrew_doublelowline 0x0cdf /* U+2017 DOUBLE LOW LINE */ +#define XKB_KEY_hebrew_aleph 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */ +#define XKB_KEY_hebrew_bet 0x0ce1 /* U+05D1 HEBREW LETTER BET */ +#define XKB_KEY_hebrew_beth 0x0ce1 /* deprecated */ +#define XKB_KEY_hebrew_gimel 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */ +#define XKB_KEY_hebrew_gimmel 0x0ce2 /* deprecated */ +#define XKB_KEY_hebrew_dalet 0x0ce3 /* U+05D3 HEBREW LETTER DALET */ +#define XKB_KEY_hebrew_daleth 0x0ce3 /* deprecated */ +#define XKB_KEY_hebrew_he 0x0ce4 /* U+05D4 HEBREW LETTER HE */ +#define XKB_KEY_hebrew_waw 0x0ce5 /* U+05D5 HEBREW LETTER VAV */ +#define XKB_KEY_hebrew_zain 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */ +#define XKB_KEY_hebrew_zayin 0x0ce6 /* deprecated */ +#define XKB_KEY_hebrew_chet 0x0ce7 /* U+05D7 HEBREW LETTER HET */ +#define XKB_KEY_hebrew_het 0x0ce7 /* deprecated */ +#define XKB_KEY_hebrew_tet 0x0ce8 /* U+05D8 HEBREW LETTER TET */ +#define XKB_KEY_hebrew_teth 0x0ce8 /* deprecated */ +#define XKB_KEY_hebrew_yod 0x0ce9 /* U+05D9 HEBREW LETTER YOD */ +#define XKB_KEY_hebrew_finalkaph 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */ +#define XKB_KEY_hebrew_kaph 0x0ceb /* U+05DB HEBREW LETTER KAF */ +#define XKB_KEY_hebrew_lamed 0x0cec /* U+05DC HEBREW LETTER LAMED */ +#define XKB_KEY_hebrew_finalmem 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */ +#define XKB_KEY_hebrew_mem 0x0cee /* U+05DE HEBREW LETTER MEM */ +#define XKB_KEY_hebrew_finalnun 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */ +#define XKB_KEY_hebrew_nun 0x0cf0 /* U+05E0 HEBREW LETTER NUN */ +#define XKB_KEY_hebrew_samech 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */ +#define XKB_KEY_hebrew_samekh 0x0cf1 /* deprecated */ +#define XKB_KEY_hebrew_ayin 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */ +#define XKB_KEY_hebrew_finalpe 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */ +#define XKB_KEY_hebrew_pe 0x0cf4 /* U+05E4 HEBREW LETTER PE */ +#define XKB_KEY_hebrew_finalzade 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */ +#define XKB_KEY_hebrew_finalzadi 0x0cf5 /* deprecated */ +#define XKB_KEY_hebrew_zade 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */ +#define XKB_KEY_hebrew_zadi 0x0cf6 /* deprecated */ +#define XKB_KEY_hebrew_qoph 0x0cf7 /* U+05E7 HEBREW LETTER QOF */ +#define XKB_KEY_hebrew_kuf 0x0cf7 /* deprecated */ +#define XKB_KEY_hebrew_resh 0x0cf8 /* U+05E8 HEBREW LETTER RESH */ +#define XKB_KEY_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */ +#define XKB_KEY_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */ +#define XKB_KEY_hebrew_taf 0x0cfa /* deprecated */ +#define XKB_KEY_Hebrew_switch 0xff7e /* Alias for mode_switch */ + +/* + * Thai + * Byte 3 = 0x0d + */ + +#define XKB_KEY_Thai_kokai 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */ +#define XKB_KEY_Thai_khokhai 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */ +#define XKB_KEY_Thai_khokhuat 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */ +#define XKB_KEY_Thai_khokhwai 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */ +#define XKB_KEY_Thai_khokhon 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */ +#define XKB_KEY_Thai_khorakhang 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */ +#define XKB_KEY_Thai_ngongu 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */ +#define XKB_KEY_Thai_chochan 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */ +#define XKB_KEY_Thai_choching 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */ +#define XKB_KEY_Thai_chochang 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */ +#define XKB_KEY_Thai_soso 0x0dab /* U+0E0B THAI CHARACTER SO SO */ +#define XKB_KEY_Thai_chochoe 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */ +#define XKB_KEY_Thai_yoying 0x0dad /* U+0E0D THAI CHARACTER YO YING */ +#define XKB_KEY_Thai_dochada 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */ +#define XKB_KEY_Thai_topatak 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */ +#define XKB_KEY_Thai_thothan 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */ +#define XKB_KEY_Thai_thonangmontho 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */ +#define XKB_KEY_Thai_thophuthao 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */ +#define XKB_KEY_Thai_nonen 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */ +#define XKB_KEY_Thai_dodek 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */ +#define XKB_KEY_Thai_totao 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */ +#define XKB_KEY_Thai_thothung 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */ +#define XKB_KEY_Thai_thothahan 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */ +#define XKB_KEY_Thai_thothong 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */ +#define XKB_KEY_Thai_nonu 0x0db9 /* U+0E19 THAI CHARACTER NO NU */ +#define XKB_KEY_Thai_bobaimai 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */ +#define XKB_KEY_Thai_popla 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */ +#define XKB_KEY_Thai_phophung 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */ +#define XKB_KEY_Thai_fofa 0x0dbd /* U+0E1D THAI CHARACTER FO FA */ +#define XKB_KEY_Thai_phophan 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */ +#define XKB_KEY_Thai_fofan 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */ +#define XKB_KEY_Thai_phosamphao 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */ +#define XKB_KEY_Thai_moma 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */ +#define XKB_KEY_Thai_yoyak 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */ +#define XKB_KEY_Thai_rorua 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */ +#define XKB_KEY_Thai_ru 0x0dc4 /* U+0E24 THAI CHARACTER RU */ +#define XKB_KEY_Thai_loling 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */ +#define XKB_KEY_Thai_lu 0x0dc6 /* U+0E26 THAI CHARACTER LU */ +#define XKB_KEY_Thai_wowaen 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */ +#define XKB_KEY_Thai_sosala 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */ +#define XKB_KEY_Thai_sorusi 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */ +#define XKB_KEY_Thai_sosua 0x0dca /* U+0E2A THAI CHARACTER SO SUA */ +#define XKB_KEY_Thai_hohip 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */ +#define XKB_KEY_Thai_lochula 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */ +#define XKB_KEY_Thai_oang 0x0dcd /* U+0E2D THAI CHARACTER O ANG */ +#define XKB_KEY_Thai_honokhuk 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */ +#define XKB_KEY_Thai_paiyannoi 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */ +#define XKB_KEY_Thai_saraa 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */ +#define XKB_KEY_Thai_maihanakat 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */ +#define XKB_KEY_Thai_saraaa 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */ +#define XKB_KEY_Thai_saraam 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */ +#define XKB_KEY_Thai_sarai 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */ +#define XKB_KEY_Thai_saraii 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */ +#define XKB_KEY_Thai_saraue 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */ +#define XKB_KEY_Thai_sarauee 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */ +#define XKB_KEY_Thai_sarau 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */ +#define XKB_KEY_Thai_sarauu 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */ +#define XKB_KEY_Thai_phinthu 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */ +#define XKB_KEY_Thai_maihanakat_maitho 0x0dde +#define XKB_KEY_Thai_baht 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */ +#define XKB_KEY_Thai_sarae 0x0de0 /* U+0E40 THAI CHARACTER SARA E */ +#define XKB_KEY_Thai_saraae 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */ +#define XKB_KEY_Thai_sarao 0x0de2 /* U+0E42 THAI CHARACTER SARA O */ +#define XKB_KEY_Thai_saraaimaimuan 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */ +#define XKB_KEY_Thai_saraaimaimalai 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */ +#define XKB_KEY_Thai_lakkhangyao 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */ +#define XKB_KEY_Thai_maiyamok 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */ +#define XKB_KEY_Thai_maitaikhu 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */ +#define XKB_KEY_Thai_maiek 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */ +#define XKB_KEY_Thai_maitho 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */ +#define XKB_KEY_Thai_maitri 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */ +#define XKB_KEY_Thai_maichattawa 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */ +#define XKB_KEY_Thai_thanthakhat 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */ +#define XKB_KEY_Thai_nikhahit 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */ +#define XKB_KEY_Thai_leksun 0x0df0 /* U+0E50 THAI DIGIT ZERO */ +#define XKB_KEY_Thai_leknung 0x0df1 /* U+0E51 THAI DIGIT ONE */ +#define XKB_KEY_Thai_leksong 0x0df2 /* U+0E52 THAI DIGIT TWO */ +#define XKB_KEY_Thai_leksam 0x0df3 /* U+0E53 THAI DIGIT THREE */ +#define XKB_KEY_Thai_leksi 0x0df4 /* U+0E54 THAI DIGIT FOUR */ +#define XKB_KEY_Thai_lekha 0x0df5 /* U+0E55 THAI DIGIT FIVE */ +#define XKB_KEY_Thai_lekhok 0x0df6 /* U+0E56 THAI DIGIT SIX */ +#define XKB_KEY_Thai_lekchet 0x0df7 /* U+0E57 THAI DIGIT SEVEN */ +#define XKB_KEY_Thai_lekpaet 0x0df8 /* U+0E58 THAI DIGIT EIGHT */ +#define XKB_KEY_Thai_lekkao 0x0df9 /* U+0E59 THAI DIGIT NINE */ + +/* + * Korean + * Byte 3 = 0x0e + */ + + +#define XKB_KEY_Hangul 0xff31 /* Hangul start/stop(toggle) */ +#define XKB_KEY_Hangul_Start 0xff32 /* Hangul start */ +#define XKB_KEY_Hangul_End 0xff33 /* Hangul end, English start */ +#define XKB_KEY_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */ +#define XKB_KEY_Hangul_Jamo 0xff35 /* Hangul Jamo mode */ +#define XKB_KEY_Hangul_Romaja 0xff36 /* Hangul Romaja mode */ +#define XKB_KEY_Hangul_Codeinput 0xff37 /* Hangul code input mode */ +#define XKB_KEY_Hangul_Jeonja 0xff38 /* Jeonja mode */ +#define XKB_KEY_Hangul_Banja 0xff39 /* Banja mode */ +#define XKB_KEY_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */ +#define XKB_KEY_Hangul_PostHanja 0xff3b /* Post Hanja conversion */ +#define XKB_KEY_Hangul_SingleCandidate 0xff3c /* Single candidate */ +#define XKB_KEY_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ +#define XKB_KEY_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ +#define XKB_KEY_Hangul_Special 0xff3f /* Special symbols */ +#define XKB_KEY_Hangul_switch 0xff7e /* Alias for mode_switch */ + +/* Hangul Consonant Characters */ +#define XKB_KEY_Hangul_Kiyeog 0x0ea1 +#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2 +#define XKB_KEY_Hangul_KiyeogSios 0x0ea3 +#define XKB_KEY_Hangul_Nieun 0x0ea4 +#define XKB_KEY_Hangul_NieunJieuj 0x0ea5 +#define XKB_KEY_Hangul_NieunHieuh 0x0ea6 +#define XKB_KEY_Hangul_Dikeud 0x0ea7 +#define XKB_KEY_Hangul_SsangDikeud 0x0ea8 +#define XKB_KEY_Hangul_Rieul 0x0ea9 +#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa +#define XKB_KEY_Hangul_RieulMieum 0x0eab +#define XKB_KEY_Hangul_RieulPieub 0x0eac +#define XKB_KEY_Hangul_RieulSios 0x0ead +#define XKB_KEY_Hangul_RieulTieut 0x0eae +#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf +#define XKB_KEY_Hangul_RieulHieuh 0x0eb0 +#define XKB_KEY_Hangul_Mieum 0x0eb1 +#define XKB_KEY_Hangul_Pieub 0x0eb2 +#define XKB_KEY_Hangul_SsangPieub 0x0eb3 +#define XKB_KEY_Hangul_PieubSios 0x0eb4 +#define XKB_KEY_Hangul_Sios 0x0eb5 +#define XKB_KEY_Hangul_SsangSios 0x0eb6 +#define XKB_KEY_Hangul_Ieung 0x0eb7 +#define XKB_KEY_Hangul_Jieuj 0x0eb8 +#define XKB_KEY_Hangul_SsangJieuj 0x0eb9 +#define XKB_KEY_Hangul_Cieuc 0x0eba +#define XKB_KEY_Hangul_Khieuq 0x0ebb +#define XKB_KEY_Hangul_Tieut 0x0ebc +#define XKB_KEY_Hangul_Phieuf 0x0ebd +#define XKB_KEY_Hangul_Hieuh 0x0ebe + +/* Hangul Vowel Characters */ +#define XKB_KEY_Hangul_A 0x0ebf +#define XKB_KEY_Hangul_AE 0x0ec0 +#define XKB_KEY_Hangul_YA 0x0ec1 +#define XKB_KEY_Hangul_YAE 0x0ec2 +#define XKB_KEY_Hangul_EO 0x0ec3 +#define XKB_KEY_Hangul_E 0x0ec4 +#define XKB_KEY_Hangul_YEO 0x0ec5 +#define XKB_KEY_Hangul_YE 0x0ec6 +#define XKB_KEY_Hangul_O 0x0ec7 +#define XKB_KEY_Hangul_WA 0x0ec8 +#define XKB_KEY_Hangul_WAE 0x0ec9 +#define XKB_KEY_Hangul_OE 0x0eca +#define XKB_KEY_Hangul_YO 0x0ecb +#define XKB_KEY_Hangul_U 0x0ecc +#define XKB_KEY_Hangul_WEO 0x0ecd +#define XKB_KEY_Hangul_WE 0x0ece +#define XKB_KEY_Hangul_WI 0x0ecf +#define XKB_KEY_Hangul_YU 0x0ed0 +#define XKB_KEY_Hangul_EU 0x0ed1 +#define XKB_KEY_Hangul_YI 0x0ed2 +#define XKB_KEY_Hangul_I 0x0ed3 + +/* Hangul syllable-final (JongSeong) Characters */ +#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4 +#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5 +#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6 +#define XKB_KEY_Hangul_J_Nieun 0x0ed7 +#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8 +#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9 +#define XKB_KEY_Hangul_J_Dikeud 0x0eda +#define XKB_KEY_Hangul_J_Rieul 0x0edb +#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc +#define XKB_KEY_Hangul_J_RieulMieum 0x0edd +#define XKB_KEY_Hangul_J_RieulPieub 0x0ede +#define XKB_KEY_Hangul_J_RieulSios 0x0edf +#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0 +#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1 +#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2 +#define XKB_KEY_Hangul_J_Mieum 0x0ee3 +#define XKB_KEY_Hangul_J_Pieub 0x0ee4 +#define XKB_KEY_Hangul_J_PieubSios 0x0ee5 +#define XKB_KEY_Hangul_J_Sios 0x0ee6 +#define XKB_KEY_Hangul_J_SsangSios 0x0ee7 +#define XKB_KEY_Hangul_J_Ieung 0x0ee8 +#define XKB_KEY_Hangul_J_Jieuj 0x0ee9 +#define XKB_KEY_Hangul_J_Cieuc 0x0eea +#define XKB_KEY_Hangul_J_Khieuq 0x0eeb +#define XKB_KEY_Hangul_J_Tieut 0x0eec +#define XKB_KEY_Hangul_J_Phieuf 0x0eed +#define XKB_KEY_Hangul_J_Hieuh 0x0eee + +/* Ancient Hangul Consonant Characters */ +#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef +#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0 +#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1 +#define XKB_KEY_Hangul_PanSios 0x0ef2 +#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3 +#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4 +#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5 + +/* Ancient Hangul Vowel Characters */ +#define XKB_KEY_Hangul_AraeA 0x0ef6 +#define XKB_KEY_Hangul_AraeAE 0x0ef7 + +/* Ancient Hangul syllable-final (JongSeong) Characters */ +#define XKB_KEY_Hangul_J_PanSios 0x0ef8 +#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9 +#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa + +/* Korean currency symbol */ +#define XKB_KEY_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/ + + +/* + * Armenian + */ + +#define XKB_KEY_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */ +#define XKB_KEY_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */ +#define XKB_KEY_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */ +#define XKB_KEY_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */ +#define XKB_KEY_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */ +#define XKB_KEY_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */ +#define XKB_KEY_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */ +#define XKB_KEY_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ +#define XKB_KEY_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ +#define XKB_KEY_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ +#define XKB_KEY_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ +#define XKB_KEY_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */ +#define XKB_KEY_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */ +#define XKB_KEY_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */ +#define XKB_KEY_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */ +#define XKB_KEY_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */ +#define XKB_KEY_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */ +#define XKB_KEY_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */ +#define XKB_KEY_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */ +#define XKB_KEY_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */ +#define XKB_KEY_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */ +#define XKB_KEY_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */ +#define XKB_KEY_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */ +#define XKB_KEY_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */ +#define XKB_KEY_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */ +#define XKB_KEY_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */ +#define XKB_KEY_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */ +#define XKB_KEY_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */ +#define XKB_KEY_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */ +#define XKB_KEY_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */ +#define XKB_KEY_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */ +#define XKB_KEY_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */ +#define XKB_KEY_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */ +#define XKB_KEY_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */ +#define XKB_KEY_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */ +#define XKB_KEY_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */ +#define XKB_KEY_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */ +#define XKB_KEY_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */ +#define XKB_KEY_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */ +#define XKB_KEY_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */ +#define XKB_KEY_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */ +#define XKB_KEY_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */ +#define XKB_KEY_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */ +#define XKB_KEY_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */ +#define XKB_KEY_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */ +#define XKB_KEY_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */ +#define XKB_KEY_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */ +#define XKB_KEY_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */ +#define XKB_KEY_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */ +#define XKB_KEY_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */ +#define XKB_KEY_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */ +#define XKB_KEY_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */ +#define XKB_KEY_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */ +#define XKB_KEY_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */ +#define XKB_KEY_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */ +#define XKB_KEY_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */ +#define XKB_KEY_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */ +#define XKB_KEY_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */ +#define XKB_KEY_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */ +#define XKB_KEY_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */ +#define XKB_KEY_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */ +#define XKB_KEY_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */ +#define XKB_KEY_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */ +#define XKB_KEY_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */ +#define XKB_KEY_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */ +#define XKB_KEY_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */ +#define XKB_KEY_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */ +#define XKB_KEY_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */ +#define XKB_KEY_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */ +#define XKB_KEY_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */ +#define XKB_KEY_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */ +#define XKB_KEY_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */ +#define XKB_KEY_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */ +#define XKB_KEY_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */ +#define XKB_KEY_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */ +#define XKB_KEY_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */ +#define XKB_KEY_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */ +#define XKB_KEY_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */ +#define XKB_KEY_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */ +#define XKB_KEY_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */ +#define XKB_KEY_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */ +#define XKB_KEY_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */ +#define XKB_KEY_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */ +#define XKB_KEY_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */ +#define XKB_KEY_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */ +#define XKB_KEY_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */ +#define XKB_KEY_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */ +#define XKB_KEY_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */ +#define XKB_KEY_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */ +#define XKB_KEY_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */ + +/* + * Georgian + */ + +#define XKB_KEY_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */ +#define XKB_KEY_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */ +#define XKB_KEY_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */ +#define XKB_KEY_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */ +#define XKB_KEY_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */ +#define XKB_KEY_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */ +#define XKB_KEY_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */ +#define XKB_KEY_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */ +#define XKB_KEY_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */ +#define XKB_KEY_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */ +#define XKB_KEY_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */ +#define XKB_KEY_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */ +#define XKB_KEY_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */ +#define XKB_KEY_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */ +#define XKB_KEY_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */ +#define XKB_KEY_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */ +#define XKB_KEY_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */ +#define XKB_KEY_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */ +#define XKB_KEY_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */ +#define XKB_KEY_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */ +#define XKB_KEY_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */ +#define XKB_KEY_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */ +#define XKB_KEY_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */ +#define XKB_KEY_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */ +#define XKB_KEY_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */ +#define XKB_KEY_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */ +#define XKB_KEY_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */ +#define XKB_KEY_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */ +#define XKB_KEY_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */ +#define XKB_KEY_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */ +#define XKB_KEY_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */ +#define XKB_KEY_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */ +#define XKB_KEY_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */ +#define XKB_KEY_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */ +#define XKB_KEY_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */ +#define XKB_KEY_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */ +#define XKB_KEY_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */ +#define XKB_KEY_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */ +#define XKB_KEY_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */ + +/* + * Azeri (and other Turkic or Caucasian languages) + */ + +/* latin */ +#define XKB_KEY_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */ +#define XKB_KEY_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */ +#define XKB_KEY_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */ +#define XKB_KEY_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */ +#define XKB_KEY_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */ +#define XKB_KEY_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ +#define XKB_KEY_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */ +#define XKB_KEY_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */ +#define XKB_KEY_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */ +#define XKB_KEY_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */ +#define XKB_KEY_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */ +#define XKB_KEY_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */ +#define XKB_KEY_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */ +#define XKB_KEY_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */ +#define XKB_KEY_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */ +#define XKB_KEY_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */ +/* those are not really Caucasus */ +/* For Inupiak */ +#define XKB_KEY_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */ +#define XKB_KEY_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */ + +/* + * Vietnamese + */ + +#define XKB_KEY_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */ +#define XKB_KEY_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */ +#define XKB_KEY_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */ +#define XKB_KEY_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */ +#define XKB_KEY_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ +#define XKB_KEY_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */ +#define XKB_KEY_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ +#define XKB_KEY_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */ +#define XKB_KEY_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ +#define XKB_KEY_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ +#define XKB_KEY_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ +#define XKB_KEY_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */ +#define XKB_KEY_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ +#define XKB_KEY_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ +#define XKB_KEY_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */ +#define XKB_KEY_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */ +#define XKB_KEY_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */ +#define XKB_KEY_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */ +#define XKB_KEY_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */ +#define XKB_KEY_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */ +#define XKB_KEY_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */ +#define XKB_KEY_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */ +#define XKB_KEY_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */ +#define XKB_KEY_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */ +#define XKB_KEY_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */ +#define XKB_KEY_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */ +#define XKB_KEY_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */ +#define XKB_KEY_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */ +#define XKB_KEY_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ +#define XKB_KEY_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */ +#define XKB_KEY_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ +#define XKB_KEY_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */ +#define XKB_KEY_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */ +#define XKB_KEY_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */ +#define XKB_KEY_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ +#define XKB_KEY_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ +#define XKB_KEY_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */ +#define XKB_KEY_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */ +#define XKB_KEY_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */ +#define XKB_KEY_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */ +#define XKB_KEY_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ +#define XKB_KEY_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */ +#define XKB_KEY_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ +#define XKB_KEY_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */ +#define XKB_KEY_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */ +#define XKB_KEY_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */ +#define XKB_KEY_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ +#define XKB_KEY_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ +#define XKB_KEY_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */ +#define XKB_KEY_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */ +#define XKB_KEY_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ +#define XKB_KEY_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */ +#define XKB_KEY_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */ +#define XKB_KEY_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */ +#define XKB_KEY_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ +#define XKB_KEY_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ +#define XKB_KEY_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */ +#define XKB_KEY_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */ + + +#define XKB_KEY_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */ +#define XKB_KEY_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */ +#define XKB_KEY_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */ +#define XKB_KEY_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */ +#define XKB_KEY_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */ +#define XKB_KEY_MillSign 0x10020a5 /* U+20A5 MILL SIGN */ +#define XKB_KEY_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */ +#define XKB_KEY_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */ +#define XKB_KEY_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */ +#define XKB_KEY_WonSign 0x10020a9 /* U+20A9 WON SIGN */ +#define XKB_KEY_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */ +#define XKB_KEY_DongSign 0x10020ab /* U+20AB DONG SIGN */ +#define XKB_KEY_EuroSign 0x20ac /* U+20AC EURO SIGN */ + +/* one, two and three are defined above. */ +#define XKB_KEY_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */ +#define XKB_KEY_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */ +#define XKB_KEY_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */ +#define XKB_KEY_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */ +#define XKB_KEY_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */ +#define XKB_KEY_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */ +#define XKB_KEY_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */ +#define XKB_KEY_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */ +#define XKB_KEY_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */ +#define XKB_KEY_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */ +#define XKB_KEY_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */ +#define XKB_KEY_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */ +#define XKB_KEY_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */ +#define XKB_KEY_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */ +#define XKB_KEY_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */ +#define XKB_KEY_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */ +#define XKB_KEY_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */ +#define XKB_KEY_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */ +#define XKB_KEY_emptyset 0x1002205 /* U+2205 NULL SET */ +#define XKB_KEY_elementof 0x1002208 /* U+2208 ELEMENT OF */ +#define XKB_KEY_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */ +#define XKB_KEY_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */ +#define XKB_KEY_squareroot 0x100221A /* U+221A SQUARE ROOT */ +#define XKB_KEY_cuberoot 0x100221B /* U+221B CUBE ROOT */ +#define XKB_KEY_fourthroot 0x100221C /* U+221C FOURTH ROOT */ +#define XKB_KEY_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */ +#define XKB_KEY_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */ +#define XKB_KEY_because 0x1002235 /* U+2235 BECAUSE */ +#define XKB_KEY_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */ +#define XKB_KEY_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */ +#define XKB_KEY_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */ +#define XKB_KEY_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */ + +#define XKB_KEY_braille_dot_1 0xfff1 +#define XKB_KEY_braille_dot_2 0xfff2 +#define XKB_KEY_braille_dot_3 0xfff3 +#define XKB_KEY_braille_dot_4 0xfff4 +#define XKB_KEY_braille_dot_5 0xfff5 +#define XKB_KEY_braille_dot_6 0xfff6 +#define XKB_KEY_braille_dot_7 0xfff7 +#define XKB_KEY_braille_dot_8 0xfff8 +#define XKB_KEY_braille_dot_9 0xfff9 +#define XKB_KEY_braille_dot_10 0xfffa +#define XKB_KEY_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */ +#define XKB_KEY_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */ +#define XKB_KEY_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */ +#define XKB_KEY_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */ +#define XKB_KEY_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */ +#define XKB_KEY_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */ +#define XKB_KEY_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */ +#define XKB_KEY_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */ +#define XKB_KEY_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */ +#define XKB_KEY_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */ +#define XKB_KEY_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */ +#define XKB_KEY_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */ +#define XKB_KEY_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */ +#define XKB_KEY_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */ +#define XKB_KEY_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */ +#define XKB_KEY_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */ +#define XKB_KEY_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */ +#define XKB_KEY_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */ +#define XKB_KEY_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */ +#define XKB_KEY_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */ +#define XKB_KEY_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */ +#define XKB_KEY_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */ +#define XKB_KEY_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */ +#define XKB_KEY_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */ +#define XKB_KEY_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */ +#define XKB_KEY_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */ +#define XKB_KEY_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */ +#define XKB_KEY_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */ +#define XKB_KEY_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */ +#define XKB_KEY_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */ +#define XKB_KEY_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */ +#define XKB_KEY_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */ +#define XKB_KEY_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */ +#define XKB_KEY_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */ +#define XKB_KEY_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */ +#define XKB_KEY_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */ +#define XKB_KEY_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */ +#define XKB_KEY_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */ +#define XKB_KEY_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */ +#define XKB_KEY_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */ +#define XKB_KEY_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */ +#define XKB_KEY_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */ +#define XKB_KEY_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */ +#define XKB_KEY_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */ +#define XKB_KEY_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */ +#define XKB_KEY_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */ +#define XKB_KEY_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */ +#define XKB_KEY_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */ +#define XKB_KEY_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */ +#define XKB_KEY_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */ +#define XKB_KEY_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */ +#define XKB_KEY_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */ +#define XKB_KEY_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */ +#define XKB_KEY_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */ +#define XKB_KEY_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */ +#define XKB_KEY_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */ +#define XKB_KEY_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */ +#define XKB_KEY_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */ +#define XKB_KEY_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */ +#define XKB_KEY_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */ +#define XKB_KEY_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */ +#define XKB_KEY_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */ +#define XKB_KEY_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */ +#define XKB_KEY_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */ +#define XKB_KEY_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */ +#define XKB_KEY_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */ +#define XKB_KEY_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */ +#define XKB_KEY_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */ +#define XKB_KEY_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */ +#define XKB_KEY_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */ +#define XKB_KEY_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */ +#define XKB_KEY_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */ +#define XKB_KEY_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */ +#define XKB_KEY_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */ +#define XKB_KEY_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */ +#define XKB_KEY_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */ +#define XKB_KEY_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */ +#define XKB_KEY_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */ +#define XKB_KEY_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */ +#define XKB_KEY_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */ +#define XKB_KEY_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */ +#define XKB_KEY_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */ +#define XKB_KEY_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */ +#define XKB_KEY_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */ +#define XKB_KEY_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */ +#define XKB_KEY_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */ +#define XKB_KEY_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */ +#define XKB_KEY_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */ +#define XKB_KEY_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */ +#define XKB_KEY_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */ +#define XKB_KEY_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */ +#define XKB_KEY_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */ +#define XKB_KEY_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */ +#define XKB_KEY_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */ +#define XKB_KEY_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */ +#define XKB_KEY_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */ +#define XKB_KEY_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */ +#define XKB_KEY_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */ +#define XKB_KEY_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */ +#define XKB_KEY_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */ +#define XKB_KEY_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */ +#define XKB_KEY_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */ +#define XKB_KEY_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */ +#define XKB_KEY_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */ +#define XKB_KEY_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */ +#define XKB_KEY_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */ +#define XKB_KEY_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */ +#define XKB_KEY_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */ +#define XKB_KEY_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */ +#define XKB_KEY_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */ +#define XKB_KEY_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */ +#define XKB_KEY_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */ +#define XKB_KEY_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */ +#define XKB_KEY_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */ +#define XKB_KEY_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */ +#define XKB_KEY_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */ +#define XKB_KEY_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */ +#define XKB_KEY_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */ +#define XKB_KEY_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */ +#define XKB_KEY_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */ +#define XKB_KEY_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */ +#define XKB_KEY_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */ +#define XKB_KEY_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */ +#define XKB_KEY_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */ +#define XKB_KEY_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */ +#define XKB_KEY_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */ +#define XKB_KEY_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */ +#define XKB_KEY_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */ +#define XKB_KEY_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */ +#define XKB_KEY_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */ +#define XKB_KEY_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */ +#define XKB_KEY_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */ +#define XKB_KEY_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */ +#define XKB_KEY_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */ +#define XKB_KEY_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */ +#define XKB_KEY_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */ +#define XKB_KEY_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */ +#define XKB_KEY_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */ +#define XKB_KEY_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */ +#define XKB_KEY_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */ +#define XKB_KEY_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */ +#define XKB_KEY_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */ +#define XKB_KEY_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */ +#define XKB_KEY_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */ +#define XKB_KEY_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */ +#define XKB_KEY_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */ +#define XKB_KEY_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */ +#define XKB_KEY_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */ +#define XKB_KEY_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */ +#define XKB_KEY_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */ +#define XKB_KEY_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */ +#define XKB_KEY_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */ +#define XKB_KEY_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */ +#define XKB_KEY_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */ +#define XKB_KEY_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */ +#define XKB_KEY_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */ +#define XKB_KEY_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */ +#define XKB_KEY_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */ +#define XKB_KEY_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */ +#define XKB_KEY_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */ +#define XKB_KEY_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */ +#define XKB_KEY_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */ +#define XKB_KEY_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */ +#define XKB_KEY_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */ +#define XKB_KEY_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */ +#define XKB_KEY_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */ +#define XKB_KEY_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */ +#define XKB_KEY_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */ +#define XKB_KEY_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */ +#define XKB_KEY_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */ +#define XKB_KEY_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */ +#define XKB_KEY_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */ +#define XKB_KEY_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */ +#define XKB_KEY_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */ +#define XKB_KEY_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */ +#define XKB_KEY_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */ +#define XKB_KEY_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */ +#define XKB_KEY_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */ +#define XKB_KEY_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */ +#define XKB_KEY_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */ +#define XKB_KEY_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */ +#define XKB_KEY_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */ +#define XKB_KEY_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */ +#define XKB_KEY_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */ +#define XKB_KEY_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */ +#define XKB_KEY_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */ +#define XKB_KEY_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */ +#define XKB_KEY_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */ +#define XKB_KEY_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */ +#define XKB_KEY_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */ +#define XKB_KEY_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */ +#define XKB_KEY_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */ +#define XKB_KEY_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */ +#define XKB_KEY_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */ +#define XKB_KEY_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */ +#define XKB_KEY_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */ +#define XKB_KEY_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */ +#define XKB_KEY_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */ +#define XKB_KEY_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */ +#define XKB_KEY_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */ +#define XKB_KEY_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */ +#define XKB_KEY_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */ +#define XKB_KEY_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */ +#define XKB_KEY_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */ +#define XKB_KEY_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */ +#define XKB_KEY_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */ +#define XKB_KEY_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */ +#define XKB_KEY_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */ +#define XKB_KEY_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */ +#define XKB_KEY_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */ +#define XKB_KEY_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */ +#define XKB_KEY_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */ +#define XKB_KEY_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */ +#define XKB_KEY_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */ +#define XKB_KEY_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */ +#define XKB_KEY_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */ +#define XKB_KEY_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */ +#define XKB_KEY_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */ +#define XKB_KEY_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */ +#define XKB_KEY_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */ +#define XKB_KEY_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */ +#define XKB_KEY_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */ +#define XKB_KEY_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */ +#define XKB_KEY_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */ +#define XKB_KEY_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */ +#define XKB_KEY_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */ +#define XKB_KEY_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */ +#define XKB_KEY_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */ +#define XKB_KEY_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */ +#define XKB_KEY_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */ +#define XKB_KEY_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */ +#define XKB_KEY_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */ +#define XKB_KEY_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */ +#define XKB_KEY_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */ +#define XKB_KEY_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */ +#define XKB_KEY_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */ +#define XKB_KEY_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */ +#define XKB_KEY_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */ +#define XKB_KEY_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */ +#define XKB_KEY_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */ +#define XKB_KEY_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */ +#define XKB_KEY_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */ +#define XKB_KEY_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */ +#define XKB_KEY_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */ +#define XKB_KEY_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */ +#define XKB_KEY_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */ +#define XKB_KEY_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */ +#define XKB_KEY_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */ +#define XKB_KEY_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */ +#define XKB_KEY_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */ +#define XKB_KEY_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */ +#define XKB_KEY_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */ +#define XKB_KEY_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */ +#define XKB_KEY_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */ +#define XKB_KEY_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */ +#define XKB_KEY_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */ + +/* + * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf) + * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html + */ + +#define XKB_KEY_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */ +#define XKB_KEY_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */ +#define XKB_KEY_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */ +#define XKB_KEY_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */ +#define XKB_KEY_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */ +#define XKB_KEY_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */ +#define XKB_KEY_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */ +#define XKB_KEY_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */ +#define XKB_KEY_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */ +#define XKB_KEY_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */ +#define XKB_KEY_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */ +#define XKB_KEY_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */ +#define XKB_KEY_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */ +#define XKB_KEY_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */ +#define XKB_KEY_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */ +#define XKB_KEY_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */ +#define XKB_KEY_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */ +#define XKB_KEY_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */ +#define XKB_KEY_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */ +#define XKB_KEY_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */ +#define XKB_KEY_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */ +#define XKB_KEY_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */ +#define XKB_KEY_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */ +#define XKB_KEY_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */ +#define XKB_KEY_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */ +#define XKB_KEY_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */ +#define XKB_KEY_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */ +#define XKB_KEY_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */ +#define XKB_KEY_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */ +#define XKB_KEY_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */ +#define XKB_KEY_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */ +#define XKB_KEY_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */ +#define XKB_KEY_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */ +#define XKB_KEY_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */ +#define XKB_KEY_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */ +#define XKB_KEY_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */ +#define XKB_KEY_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */ +#define XKB_KEY_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */ +#define XKB_KEY_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */ +#define XKB_KEY_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */ +#define XKB_KEY_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */ +#define XKB_KEY_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */ +#define XKB_KEY_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */ +#define XKB_KEY_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */ +#define XKB_KEY_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */ +#define XKB_KEY_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */ +#define XKB_KEY_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */ +#define XKB_KEY_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */ +#define XKB_KEY_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */ +#define XKB_KEY_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */ +#define XKB_KEY_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */ +#define XKB_KEY_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */ +#define XKB_KEY_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */ +#define XKB_KEY_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */ +#define XKB_KEY_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */ +#define XKB_KEY_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */ +#define XKB_KEY_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */ +#define XKB_KEY_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */ +#define XKB_KEY_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */ +#define XKB_KEY_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */ +#define XKB_KEY_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */ +#define XKB_KEY_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */ +#define XKB_KEY_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */ +#define XKB_KEY_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */ +#define XKB_KEY_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */ +#define XKB_KEY_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */ +#define XKB_KEY_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */ +#define XKB_KEY_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */ +#define XKB_KEY_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */ +#define XKB_KEY_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */ +#define XKB_KEY_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */ +#define XKB_KEY_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */ +#define XKB_KEY_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */ +#define XKB_KEY_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ +#define XKB_KEY_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ +#define XKB_KEY_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */ +#define XKB_KEY_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */ +#define XKB_KEY_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */ +#define XKB_KEY_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */ +#define XKB_KEY_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */ +/* + * XFree86 vendor specific keysyms. + * + * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. + * + * When adding new entries, the xc/lib/XKeysymDB file should also be + * updated to make the new entries visible to Xlib. + */ + +/* + * ModeLock + * + * This one is old, and not really used any more since XKB offers this + * functionality. + */ + +#define XKB_KEY_XF86ModeLock 0x1008FF01 /* Mode Switch Lock */ + +/* + * Note, 0x1008FF07 - 0x1008FF0F are free and should be used for misc new + * keysyms that don't fit into any of the groups below. + * + * 0x1008FF64, 0x1008FF6F, 0x1008FF71, 0x1008FF83 are no longer used, + * and should be used first for new keysyms. + * + * Check in keysymdef.h for generic symbols before adding new XFree86-specific + * symbols here. + * + * X.Org will not be adding to the XF86 set of keysyms, though they have + * been adopted and are considered a "standard" part of X keysym definitions. + * XFree86 never properly commented these keysyms, so we have done our + * best to explain the semantic meaning of these keys. + * + * XFree86 has removed their mail archives of the period, that might have + * shed more light on some of these definitions. Until/unless we resurrect + * these archives, these are from memory and usage. + */ + + +/* Backlight controls. */ +#define XKB_KEY_XF86MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ +#define XKB_KEY_XF86MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ +#define XKB_KEY_XF86KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ +#define XKB_KEY_XF86KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ +#define XKB_KEY_XF86KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ + +/* + * Keys found on some "Internet" keyboards. + */ +#define XKB_KEY_XF86Standby 0x1008FF10 /* System into standby mode */ +#define XKB_KEY_XF86AudioLowerVolume 0x1008FF11 /* Volume control down */ +#define XKB_KEY_XF86AudioMute 0x1008FF12 /* Mute sound from the system */ +#define XKB_KEY_XF86AudioRaiseVolume 0x1008FF13 /* Volume control up */ +#define XKB_KEY_XF86AudioPlay 0x1008FF14 /* Start playing of audio > */ +#define XKB_KEY_XF86AudioStop 0x1008FF15 /* Stop playing audio */ +#define XKB_KEY_XF86AudioPrev 0x1008FF16 /* Previous track */ +#define XKB_KEY_XF86AudioNext 0x1008FF17 /* Next track */ +#define XKB_KEY_XF86HomePage 0x1008FF18 /* Display user's home page */ +#define XKB_KEY_XF86Mail 0x1008FF19 /* Invoke user's mail program */ +#define XKB_KEY_XF86Start 0x1008FF1A /* Start application */ +#define XKB_KEY_XF86Search 0x1008FF1B /* Search */ +#define XKB_KEY_XF86AudioRecord 0x1008FF1C /* Record audio application */ + +/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ +#define XKB_KEY_XF86Calculator 0x1008FF1D /* Invoke calculator program */ +#define XKB_KEY_XF86Memo 0x1008FF1E /* Invoke Memo taking program */ +#define XKB_KEY_XF86ToDoList 0x1008FF1F /* Invoke To Do List program */ +#define XKB_KEY_XF86Calendar 0x1008FF20 /* Invoke Calendar program */ +#define XKB_KEY_XF86PowerDown 0x1008FF21 /* Deep sleep the system */ +#define XKB_KEY_XF86ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ +#define XKB_KEY_XF86RockerUp 0x1008FF23 /* Rocker switches exist up */ +#define XKB_KEY_XF86RockerDown 0x1008FF24 /* and down */ +#define XKB_KEY_XF86RockerEnter 0x1008FF25 /* and let you press them */ + +/* Some more "Internet" keyboard symbols */ +#define XKB_KEY_XF86Back 0x1008FF26 /* Like back on a browser */ +#define XKB_KEY_XF86Forward 0x1008FF27 /* Like forward on a browser */ +#define XKB_KEY_XF86Stop 0x1008FF28 /* Stop current operation */ +#define XKB_KEY_XF86Refresh 0x1008FF29 /* Refresh the page */ +#define XKB_KEY_XF86PowerOff 0x1008FF2A /* Power off system entirely */ +#define XKB_KEY_XF86WakeUp 0x1008FF2B /* Wake up system from sleep */ +#define XKB_KEY_XF86Eject 0x1008FF2C /* Eject device (e.g. DVD) */ +#define XKB_KEY_XF86ScreenSaver 0x1008FF2D /* Invoke screensaver */ +#define XKB_KEY_XF86WWW 0x1008FF2E /* Invoke web browser */ +#define XKB_KEY_XF86Sleep 0x1008FF2F /* Put system to sleep */ +#define XKB_KEY_XF86Favorites 0x1008FF30 /* Show favorite locations */ +#define XKB_KEY_XF86AudioPause 0x1008FF31 /* Pause audio playing */ +#define XKB_KEY_XF86AudioMedia 0x1008FF32 /* Launch media collection app */ +#define XKB_KEY_XF86MyComputer 0x1008FF33 /* Display "My Computer" window */ +#define XKB_KEY_XF86VendorHome 0x1008FF34 /* Display vendor home web site */ +#define XKB_KEY_XF86LightBulb 0x1008FF35 /* Light bulb keys exist */ +#define XKB_KEY_XF86Shop 0x1008FF36 /* Display shopping web site */ +#define XKB_KEY_XF86History 0x1008FF37 /* Show history of web surfing */ +#define XKB_KEY_XF86OpenURL 0x1008FF38 /* Open selected URL */ +#define XKB_KEY_XF86AddFavorite 0x1008FF39 /* Add URL to favorites list */ +#define XKB_KEY_XF86HotLinks 0x1008FF3A /* Show "hot" links */ +#define XKB_KEY_XF86BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ +#define XKB_KEY_XF86Finance 0x1008FF3C /* Display financial site */ +#define XKB_KEY_XF86Community 0x1008FF3D /* Display user's community */ +#define XKB_KEY_XF86AudioRewind 0x1008FF3E /* "rewind" audio track */ +#define XKB_KEY_XF86BackForward 0x1008FF3F /* ??? */ +#define XKB_KEY_XF86Launch0 0x1008FF40 /* Launch Application */ +#define XKB_KEY_XF86Launch1 0x1008FF41 /* Launch Application */ +#define XKB_KEY_XF86Launch2 0x1008FF42 /* Launch Application */ +#define XKB_KEY_XF86Launch3 0x1008FF43 /* Launch Application */ +#define XKB_KEY_XF86Launch4 0x1008FF44 /* Launch Application */ +#define XKB_KEY_XF86Launch5 0x1008FF45 /* Launch Application */ +#define XKB_KEY_XF86Launch6 0x1008FF46 /* Launch Application */ +#define XKB_KEY_XF86Launch7 0x1008FF47 /* Launch Application */ +#define XKB_KEY_XF86Launch8 0x1008FF48 /* Launch Application */ +#define XKB_KEY_XF86Launch9 0x1008FF49 /* Launch Application */ +#define XKB_KEY_XF86LaunchA 0x1008FF4A /* Launch Application */ +#define XKB_KEY_XF86LaunchB 0x1008FF4B /* Launch Application */ +#define XKB_KEY_XF86LaunchC 0x1008FF4C /* Launch Application */ +#define XKB_KEY_XF86LaunchD 0x1008FF4D /* Launch Application */ +#define XKB_KEY_XF86LaunchE 0x1008FF4E /* Launch Application */ +#define XKB_KEY_XF86LaunchF 0x1008FF4F /* Launch Application */ + +#define XKB_KEY_XF86ApplicationLeft 0x1008FF50 /* switch to application, left */ +#define XKB_KEY_XF86ApplicationRight 0x1008FF51 /* switch to application, right*/ +#define XKB_KEY_XF86Book 0x1008FF52 /* Launch bookreader */ +#define XKB_KEY_XF86CD 0x1008FF53 /* Launch CD/DVD player */ +#define XKB_KEY_XF86Calculater 0x1008FF54 /* Launch Calculater */ +#define XKB_KEY_XF86Clear 0x1008FF55 /* Clear window, screen */ +#define XKB_KEY_XF86Close 0x1008FF56 /* Close window */ +#define XKB_KEY_XF86Copy 0x1008FF57 /* Copy selection */ +#define XKB_KEY_XF86Cut 0x1008FF58 /* Cut selection */ +#define XKB_KEY_XF86Display 0x1008FF59 /* Output switch key */ +#define XKB_KEY_XF86DOS 0x1008FF5A /* Launch DOS (emulation) */ +#define XKB_KEY_XF86Documents 0x1008FF5B /* Open documents window */ +#define XKB_KEY_XF86Excel 0x1008FF5C /* Launch spread sheet */ +#define XKB_KEY_XF86Explorer 0x1008FF5D /* Launch file explorer */ +#define XKB_KEY_XF86Game 0x1008FF5E /* Launch game */ +#define XKB_KEY_XF86Go 0x1008FF5F /* Go to URL */ +#define XKB_KEY_XF86iTouch 0x1008FF60 /* Logitch iTouch- don't use */ +#define XKB_KEY_XF86LogOff 0x1008FF61 /* Log off system */ +#define XKB_KEY_XF86Market 0x1008FF62 /* ?? */ +#define XKB_KEY_XF86Meeting 0x1008FF63 /* enter meeting in calendar */ +#define XKB_KEY_XF86MenuKB 0x1008FF65 /* distingush keyboard from PB */ +#define XKB_KEY_XF86MenuPB 0x1008FF66 /* distinuish PB from keyboard */ +#define XKB_KEY_XF86MySites 0x1008FF67 /* Favourites */ +#define XKB_KEY_XF86New 0x1008FF68 /* New (folder, document... */ +#define XKB_KEY_XF86News 0x1008FF69 /* News */ +#define XKB_KEY_XF86OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ +#define XKB_KEY_XF86Open 0x1008FF6B /* Open */ +#define XKB_KEY_XF86Option 0x1008FF6C /* ?? */ +#define XKB_KEY_XF86Paste 0x1008FF6D /* Paste */ +#define XKB_KEY_XF86Phone 0x1008FF6E /* Launch phone; dial number */ +#define XKB_KEY_XF86Q 0x1008FF70 /* Compaq's Q - don't use */ +#define XKB_KEY_XF86Reply 0x1008FF72 /* Reply e.g., mail */ +#define XKB_KEY_XF86Reload 0x1008FF73 /* Reload web page, file, etc. */ +#define XKB_KEY_XF86RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ +#define XKB_KEY_XF86RotationPB 0x1008FF75 /* don't use */ +#define XKB_KEY_XF86RotationKB 0x1008FF76 /* don't use */ +#define XKB_KEY_XF86Save 0x1008FF77 /* Save (file, document, state */ +#define XKB_KEY_XF86ScrollUp 0x1008FF78 /* Scroll window/contents up */ +#define XKB_KEY_XF86ScrollDown 0x1008FF79 /* Scrool window/contentd down */ +#define XKB_KEY_XF86ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ +#define XKB_KEY_XF86Send 0x1008FF7B /* Send mail, file, object */ +#define XKB_KEY_XF86Spell 0x1008FF7C /* Spell checker */ +#define XKB_KEY_XF86SplitScreen 0x1008FF7D /* Split window or screen */ +#define XKB_KEY_XF86Support 0x1008FF7E /* Get support (??) */ +#define XKB_KEY_XF86TaskPane 0x1008FF7F /* Show tasks */ +#define XKB_KEY_XF86Terminal 0x1008FF80 /* Launch terminal emulator */ +#define XKB_KEY_XF86Tools 0x1008FF81 /* toolbox of desktop/app. */ +#define XKB_KEY_XF86Travel 0x1008FF82 /* ?? */ +#define XKB_KEY_XF86UserPB 0x1008FF84 /* ?? */ +#define XKB_KEY_XF86User1KB 0x1008FF85 /* ?? */ +#define XKB_KEY_XF86User2KB 0x1008FF86 /* ?? */ +#define XKB_KEY_XF86Video 0x1008FF87 /* Launch video player */ +#define XKB_KEY_XF86WheelButton 0x1008FF88 /* button from a mouse wheel */ +#define XKB_KEY_XF86Word 0x1008FF89 /* Launch word processor */ +#define XKB_KEY_XF86Xfer 0x1008FF8A +#define XKB_KEY_XF86ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ +#define XKB_KEY_XF86ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ + +#define XKB_KEY_XF86Away 0x1008FF8D /* mark yourself as away */ +#define XKB_KEY_XF86Messenger 0x1008FF8E /* as in instant messaging */ +#define XKB_KEY_XF86WebCam 0x1008FF8F /* Launch web camera app. */ +#define XKB_KEY_XF86MailForward 0x1008FF90 /* Forward in mail */ +#define XKB_KEY_XF86Pictures 0x1008FF91 /* Show pictures */ +#define XKB_KEY_XF86Music 0x1008FF92 /* Launch music application */ + +#define XKB_KEY_XF86Battery 0x1008FF93 /* Display battery information */ +#define XKB_KEY_XF86Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ +#define XKB_KEY_XF86WLAN 0x1008FF95 /* Enable/disable WLAN */ +#define XKB_KEY_XF86UWB 0x1008FF96 /* Enable/disable UWB */ + +#define XKB_KEY_XF86AudioForward 0x1008FF97 /* fast-forward audio track */ +#define XKB_KEY_XF86AudioRepeat 0x1008FF98 /* toggle repeat mode */ +#define XKB_KEY_XF86AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ +#define XKB_KEY_XF86Subtitle 0x1008FF9A /* cycle through subtitle */ +#define XKB_KEY_XF86AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ +#define XKB_KEY_XF86CycleAngle 0x1008FF9C /* cycle through angles */ +#define XKB_KEY_XF86FrameBack 0x1008FF9D /* video: go one frame back */ +#define XKB_KEY_XF86FrameForward 0x1008FF9E /* video: go one frame forward */ +#define XKB_KEY_XF86Time 0x1008FF9F /* display, or shows an entry for time seeking */ +#define XKB_KEY_XF86Select 0x1008FFA0 /* Select button on joypads and remotes */ +#define XKB_KEY_XF86View 0x1008FFA1 /* Show a view options/properties */ +#define XKB_KEY_XF86TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ + +#define XKB_KEY_XF86Red 0x1008FFA3 /* Red button */ +#define XKB_KEY_XF86Green 0x1008FFA4 /* Green button */ +#define XKB_KEY_XF86Yellow 0x1008FFA5 /* Yellow button */ +#define XKB_KEY_XF86Blue 0x1008FFA6 /* Blue button */ + +#define XKB_KEY_XF86Suspend 0x1008FFA7 /* Sleep to RAM */ +#define XKB_KEY_XF86Hibernate 0x1008FFA8 /* Sleep to disk */ +#define XKB_KEY_XF86TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ +#define XKB_KEY_XF86TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ +#define XKB_KEY_XF86TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ + +#define XKB_KEY_XF86AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ + +/* Keys for special action keys (hot keys) */ +/* Virtual terminals on some operating systems */ +#define XKB_KEY_XF86Switch_VT_1 0x1008FE01 +#define XKB_KEY_XF86Switch_VT_2 0x1008FE02 +#define XKB_KEY_XF86Switch_VT_3 0x1008FE03 +#define XKB_KEY_XF86Switch_VT_4 0x1008FE04 +#define XKB_KEY_XF86Switch_VT_5 0x1008FE05 +#define XKB_KEY_XF86Switch_VT_6 0x1008FE06 +#define XKB_KEY_XF86Switch_VT_7 0x1008FE07 +#define XKB_KEY_XF86Switch_VT_8 0x1008FE08 +#define XKB_KEY_XF86Switch_VT_9 0x1008FE09 +#define XKB_KEY_XF86Switch_VT_10 0x1008FE0A +#define XKB_KEY_XF86Switch_VT_11 0x1008FE0B +#define XKB_KEY_XF86Switch_VT_12 0x1008FE0C + +#define XKB_KEY_XF86Ungrab 0x1008FE20 /* force ungrab */ +#define XKB_KEY_XF86ClearGrab 0x1008FE21 /* kill application with grab */ +#define XKB_KEY_XF86Next_VMode 0x1008FE22 /* next video mode available */ +#define XKB_KEY_XF86Prev_VMode 0x1008FE23 /* prev. video mode available */ +#define XKB_KEY_XF86LogWindowTree 0x1008FE24 /* print window tree to log */ +#define XKB_KEY_XF86LogGrabInfo 0x1008FE25 /* print all active grabs to log */ +/* + * Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/************************************************************ + +Copyright 1991, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +***********************************************************/ + +/* + * Floating Accent + */ + +#define XKB_KEY_SunFA_Grave 0x1005FF00 +#define XKB_KEY_SunFA_Circum 0x1005FF01 +#define XKB_KEY_SunFA_Tilde 0x1005FF02 +#define XKB_KEY_SunFA_Acute 0x1005FF03 +#define XKB_KEY_SunFA_Diaeresis 0x1005FF04 +#define XKB_KEY_SunFA_Cedilla 0x1005FF05 + +/* + * Miscellaneous Functions + */ + +#define XKB_KEY_SunF36 0x1005FF10 /* Labeled F11 */ +#define XKB_KEY_SunF37 0x1005FF11 /* Labeled F12 */ + +#define XKB_KEY_SunSys_Req 0x1005FF60 +#define XKB_KEY_SunPrint_Screen 0x0000FF61 /* Same as XK_Print */ + +/* + * International & Multi-Key Character Composition + */ + +#define XKB_KEY_SunCompose 0x0000FF20 /* Same as XK_Multi_key */ +#define XKB_KEY_SunAltGraph 0x0000FF7E /* Same as XK_Mode_switch */ + +/* + * Cursor Control + */ + +#define XKB_KEY_SunPageUp 0x0000FF55 /* Same as XK_Prior */ +#define XKB_KEY_SunPageDown 0x0000FF56 /* Same as XK_Next */ + +/* + * Open Look Functions + */ + +#define XKB_KEY_SunUndo 0x0000FF65 /* Same as XK_Undo */ +#define XKB_KEY_SunAgain 0x0000FF66 /* Same as XK_Redo */ +#define XKB_KEY_SunFind 0x0000FF68 /* Same as XK_Find */ +#define XKB_KEY_SunStop 0x0000FF69 /* Same as XK_Cancel */ +#define XKB_KEY_SunProps 0x1005FF70 +#define XKB_KEY_SunFront 0x1005FF71 +#define XKB_KEY_SunCopy 0x1005FF72 +#define XKB_KEY_SunOpen 0x1005FF73 +#define XKB_KEY_SunPaste 0x1005FF74 +#define XKB_KEY_SunCut 0x1005FF75 + +#define XKB_KEY_SunPowerSwitch 0x1005FF76 +#define XKB_KEY_SunAudioLowerVolume 0x1005FF77 +#define XKB_KEY_SunAudioMute 0x1005FF78 +#define XKB_KEY_SunAudioRaiseVolume 0x1005FF79 +#define XKB_KEY_SunVideoDegauss 0x1005FF7A +#define XKB_KEY_SunVideoLowerBrightness 0x1005FF7B +#define XKB_KEY_SunVideoRaiseBrightness 0x1005FF7C +#define XKB_KEY_SunPowerSwitchShift 0x1005FF7D +/*********************************************************** + +Copyright 1988, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * DEC private keysyms + * (29th bit set) + */ + +/* two-key compose sequence initiators, chosen to map to Latin1 characters */ + +#define XKB_KEY_Dring_accent 0x1000FEB0 +#define XKB_KEY_Dcircumflex_accent 0x1000FE5E +#define XKB_KEY_Dcedilla_accent 0x1000FE2C +#define XKB_KEY_Dacute_accent 0x1000FE27 +#define XKB_KEY_Dgrave_accent 0x1000FE60 +#define XKB_KEY_Dtilde 0x1000FE7E +#define XKB_KEY_Ddiaeresis 0x1000FE22 + +/* special keysym for LK2** "Remove" key on editing keypad */ + +#define XKB_KEY_DRemove 0x1000FF00 /* Remove */ +/* + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett Packard +or Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD +TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. Hewlett-Packard shall not be liable for errors +contained herein or direct, indirect, special, incidental or +consequential damages in connection with the furnishing, +performance, or use of this material. + +*/ + + + +#define XKB_KEY_hpClearLine 0x1000FF6F +#define XKB_KEY_hpInsertLine 0x1000FF70 +#define XKB_KEY_hpDeleteLine 0x1000FF71 +#define XKB_KEY_hpInsertChar 0x1000FF72 +#define XKB_KEY_hpDeleteChar 0x1000FF73 +#define XKB_KEY_hpBackTab 0x1000FF74 +#define XKB_KEY_hpKP_BackTab 0x1000FF75 +#define XKB_KEY_hpModelock1 0x1000FF48 +#define XKB_KEY_hpModelock2 0x1000FF49 +#define XKB_KEY_hpReset 0x1000FF6C +#define XKB_KEY_hpSystem 0x1000FF6D +#define XKB_KEY_hpUser 0x1000FF6E +#define XKB_KEY_hpmute_acute 0x100000A8 +#define XKB_KEY_hpmute_grave 0x100000A9 +#define XKB_KEY_hpmute_asciicircum 0x100000AA +#define XKB_KEY_hpmute_diaeresis 0x100000AB +#define XKB_KEY_hpmute_asciitilde 0x100000AC +#define XKB_KEY_hplira 0x100000AF +#define XKB_KEY_hpguilder 0x100000BE +#define XKB_KEY_hpYdiaeresis 0x100000EE +#define XKB_KEY_hpIO 0x100000EE +#define XKB_KEY_hplongminus 0x100000F6 +#define XKB_KEY_hpblock 0x100000FC + + + +#define XKB_KEY_osfCopy 0x1004FF02 +#define XKB_KEY_osfCut 0x1004FF03 +#define XKB_KEY_osfPaste 0x1004FF04 +#define XKB_KEY_osfBackTab 0x1004FF07 +#define XKB_KEY_osfBackSpace 0x1004FF08 +#define XKB_KEY_osfClear 0x1004FF0B +#define XKB_KEY_osfEscape 0x1004FF1B +#define XKB_KEY_osfAddMode 0x1004FF31 +#define XKB_KEY_osfPrimaryPaste 0x1004FF32 +#define XKB_KEY_osfQuickPaste 0x1004FF33 +#define XKB_KEY_osfPageLeft 0x1004FF40 +#define XKB_KEY_osfPageUp 0x1004FF41 +#define XKB_KEY_osfPageDown 0x1004FF42 +#define XKB_KEY_osfPageRight 0x1004FF43 +#define XKB_KEY_osfActivate 0x1004FF44 +#define XKB_KEY_osfMenuBar 0x1004FF45 +#define XKB_KEY_osfLeft 0x1004FF51 +#define XKB_KEY_osfUp 0x1004FF52 +#define XKB_KEY_osfRight 0x1004FF53 +#define XKB_KEY_osfDown 0x1004FF54 +#define XKB_KEY_osfEndLine 0x1004FF57 +#define XKB_KEY_osfBeginLine 0x1004FF58 +#define XKB_KEY_osfEndData 0x1004FF59 +#define XKB_KEY_osfBeginData 0x1004FF5A +#define XKB_KEY_osfPrevMenu 0x1004FF5B +#define XKB_KEY_osfNextMenu 0x1004FF5C +#define XKB_KEY_osfPrevField 0x1004FF5D +#define XKB_KEY_osfNextField 0x1004FF5E +#define XKB_KEY_osfSelect 0x1004FF60 +#define XKB_KEY_osfInsert 0x1004FF63 +#define XKB_KEY_osfUndo 0x1004FF65 +#define XKB_KEY_osfMenu 0x1004FF67 +#define XKB_KEY_osfCancel 0x1004FF69 +#define XKB_KEY_osfHelp 0x1004FF6A +#define XKB_KEY_osfSelectAll 0x1004FF71 +#define XKB_KEY_osfDeselectAll 0x1004FF72 +#define XKB_KEY_osfReselect 0x1004FF73 +#define XKB_KEY_osfExtend 0x1004FF74 +#define XKB_KEY_osfRestore 0x1004FF78 +#define XKB_KEY_osfDelete 0x1004FFFF + + + +/************************************************************** + * The use of the following macros is deprecated. + * They are listed below only for backwards compatibility. + */ +#define XKB_KEY_Reset 0x1000FF6C +#define XKB_KEY_System 0x1000FF6D +#define XKB_KEY_User 0x1000FF6E +#define XKB_KEY_ClearLine 0x1000FF6F +#define XKB_KEY_InsertLine 0x1000FF70 +#define XKB_KEY_DeleteLine 0x1000FF71 +#define XKB_KEY_InsertChar 0x1000FF72 +#define XKB_KEY_DeleteChar 0x1000FF73 +#define XKB_KEY_BackTab 0x1000FF74 +#define XKB_KEY_KP_BackTab 0x1000FF75 +#define XKB_KEY_Ext16bit_L 0x1000FF76 +#define XKB_KEY_Ext16bit_R 0x1000FF77 +#define XKB_KEY_mute_acute 0x100000a8 +#define XKB_KEY_mute_grave 0x100000a9 +#define XKB_KEY_mute_asciicircum 0x100000aa +#define XKB_KEY_mute_diaeresis 0x100000ab +#define XKB_KEY_mute_asciitilde 0x100000ac +#define XKB_KEY_lira 0x100000af +#define XKB_KEY_guilder 0x100000be +#define XKB_KEY_IO 0x100000ee +#define XKB_KEY_longminus 0x100000f6 +#define XKB_KEY_block 0x100000fc + + + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h new file mode 100644 index 000000000..ecb551ff1 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h @@ -0,0 +1,45 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_NAMES_H +#define _XKBCOMMON_NAMES_H + +/** + * @file + * @brief Predefined names for common modifiers and LEDs. + */ + +#define XKB_MOD_NAME_SHIFT "Shift" +#define XKB_MOD_NAME_CAPS "Lock" +#define XKB_MOD_NAME_CTRL "Control" +#define XKB_MOD_NAME_ALT "Mod1" +#define XKB_MOD_NAME_NUM "Mod2" +#define XKB_MOD_NAME_LOGO "Mod4" + +#define XKB_LED_NAME_CAPS "Caps Lock" +#define XKB_LED_NAME_NUM "Num Lock" +#define XKB_LED_NAME_SCROLL "Scroll Lock" + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h new file mode 100644 index 000000000..015831568 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h @@ -0,0 +1,244 @@ +/* + * Copyright © 2013 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XKBCOMMON_X11_H +#define _XKBCOMMON_X11_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * libxkbcommon-x11 API - Additional X11 support for xkbcommon. + */ + +/** + * @defgroup x11 X11 support + * Additional X11 support for xkbcommon. + * @since 0.4.0 + * + * @{ + */ + +/** + * @page x11-overview Overview + * @parblock + * + * The xkbcommon-x11 module provides a means for creating an xkb_keymap + * corresponding to the currently active keymap on the X server. To do + * so, it queries the XKB X11 extension using the xcb-xkb library. It + * can be used as a replacement for Xlib's keyboard handling. + * + * Following is an example workflow using xkbcommon-x11. A complete + * example may be found in the test/interactive-x11.c file in the + * xkbcommon source repository. On startup: + * + * 1. Connect to the X server using xcb_connect(). + * 2. Setup the XKB X11 extension. You can do this either by using the + * xcb_xkb_use_extension() request directly, or by using the + * xkb_x11_setup_xkb_extension() helper function. + * + * The XKB extension supports using separate keymaps and states for + * different keyboard devices. The devices are identified by an integer + * device ID and are managed by another X11 extension, XInput (or its + * successor, XInput2). The original X11 protocol only had one keyboard + * device, called the "core keyboard", which is still supported as a + * "virtual device". + * + * 3. We will use the core keyboard as an example. To get its device ID, + * use either the xcb_xkb_get_device_info() request directly, or the + * xkb_x11_get_core_keyboard_device_id() helper function. + * 4. Create an initial xkb_keymap for this device, using the + * xkb_x11_keymap_new_from_device() function. + * 5. Create an initial xkb_state for this device, using the + * xkb_x11_state_new_from_device() function. + * + * @note At this point, you may consider setting various XKB controls and + * XKB per-client flags. For example, enabling detectable autorepeat: \n + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Detectable_Autorepeat + * + * Next, you need to react to state changes (e.g. a modifier was pressed, + * the layout was changed) and to keymap changes (e.g. a tool like xkbcomp, + * setxkbmap or xmodmap was used): + * + * 6. Select to listen to at least the following XKB events: + * NewKeyboardNotify, MapNotify, StateNotify; using the + * xcb_xkb_select_events_aux() request. + * 7. When NewKeyboardNotify or MapNotify are received, recreate the + * xkb_keymap and xkb_state as described above. + * 8. When StateNotify is received, update the xkb_state accordingly + * using the xkb_state_update_mask() function. + * + * @note It is also possible to use the KeyPress/KeyRelease @p state + * field to find the effective modifier and layout state, instead of + * using XkbStateNotify: \n + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Computing_A_State_Field_from_an_XKB_State + * \n However, XkbStateNotify is more accurate. + * + * @note There is no need to call xkb_state_update_key(); the state is + * already synchronized. + * + * Finally, when a key event is received, you can use ordinary xkbcommon + * functions, like xkb_state_key_get_one_sym() and xkb_state_key_get_utf8(), + * as you normally would. + * + * @endparblock + */ + +/** + * The minimal compatible major version of the XKB X11 extension which + * this library can use. + */ +#define XKB_X11_MIN_MAJOR_XKB_VERSION 1 +/** + * The minimal compatible minor version of the XKB X11 extension which + * this library can use (for the minimal major version). + */ +#define XKB_X11_MIN_MINOR_XKB_VERSION 0 + +/** Flags for the xkb_x11_setup_xkb_extension() function. */ +enum xkb_x11_setup_xkb_extension_flags { + /** Do not apply any flags. */ + XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS = 0 +}; + +/** + * Setup the XKB X11 extension for this X client. + * + * The xkbcommon-x11 library uses various XKB requests. Before doing so, + * an X client must notify the server that it will be using the extension. + * This function (or an XCB equivalent) must be called before any other + * function in this library is used. + * + * Some X servers may not support or disable the XKB extension. If you + * want to support such servers, you need to use a different fallback. + * + * You may call this function several times; it is idempotent. + * + * @param connection + * An XCB connection to the X server. + * @param major_xkb_version + * See @p minor_xkb_version. + * @param minor_xkb_version + * The XKB extension version to request. To operate correctly, you + * must have (major_xkb_version, minor_xkb_version) >= + * (XKB_X11_MIN_MAJOR_XKB_VERSION, XKB_X11_MIN_MINOR_XKB_VERSION), + * though this is not enforced. + * @param flags + * Optional flags, or 0. + * @param[out] major_xkb_version_out + * See @p minor_xkb_version_out. + * @param[out] minor_xkb_version_out + * Backfilled with the compatible XKB extension version numbers picked + * by the server. Can be NULL. + * @param[out] base_event_out + * Backfilled with the XKB base (also known as first) event code, needed + * to distinguish XKB events. Can be NULL. + * @param[out] base_error_out + * Backfilled with the XKB base (also known as first) error code, needed + * to distinguish XKB errors. Can be NULL. + * + * @returns 1 on success, or 0 on failure. + */ +int +xkb_x11_setup_xkb_extension(xcb_connection_t *connection, + uint16_t major_xkb_version, + uint16_t minor_xkb_version, + enum xkb_x11_setup_xkb_extension_flags flags, + uint16_t *major_xkb_version_out, + uint16_t *minor_xkb_version_out, + uint8_t *base_event_out, + uint8_t *base_error_out); + +/** + * Get the keyboard device ID of the core X11 keyboard. + * + * @param connection An XCB connection to the X server. + * + * @returns A device ID which may be used with other xkb_x11_* functions, + * or -1 on failure. + */ +int32_t +xkb_x11_get_core_keyboard_device_id(xcb_connection_t *connection); + +/** + * Create a keymap from an X11 keyboard device. + * + * This function queries the X server with various requests, fetches the + * details of the active keymap on a keyboard device, and creates an + * xkb_keymap from these details. + * + * @param context + * The context in which to create the keymap. + * @param connection + * An XCB connection to the X server. + * @param device_id + * An XInput 1 device ID (in the range 0-255) with input class KEY. + * Passing values outside of this range is an error. + * @param flags + * Optional flags for the keymap, or 0. + * + * @returns A keymap retrieved from the X server, or NULL on failure. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_x11_keymap_new_from_device(struct xkb_context *context, + xcb_connection_t *connection, + int32_t device_id, + enum xkb_keymap_compile_flags flags); + +/** + * Create a new keyboard state object from an X11 keyboard device. + * + * This function is the same as xkb_state_new(), only pre-initialized + * with the state of the device at the time this function is called. + * + * @param keymap + * The keymap for which to create the state. + * @param connection + * An XCB connection to the X server. + * @param device_id + * An XInput 1 device ID (in the range 0-255) with input class KEY. + * Passing values outside of this range is an error. + * + * @returns A new keyboard state object, or NULL on failure. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_x11_state_new_from_device(struct xkb_keymap *keymap, + xcb_connection_t *connection, + int32_t device_id); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_X11_H */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h new file mode 100644 index 000000000..f0c92028f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h @@ -0,0 +1,1723 @@ +/* + * Copyright 1985, 1987, 1990, 1998 The Open Group + * Copyright 2008 Dan Nicholson + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or their + * institutions shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization from the authors. + */ + +/************************************************************ + * Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of Silicon Graphics not be + * used in advertising or publicity pertaining to distribution + * of the software without specific prior written permission. + * Silicon Graphics makes no representation about the suitability + * of this software for any purpose. It is provided "as is" + * without any express or implied warranty. + * + * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON + * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH + * THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + ********************************************************/ + +/* + * Copyright © 2009-2012 Daniel Stone + * Copyright © 2012 Intel Corporation + * Copyright © 2012 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_H_ +#define _XKBCOMMON_H_ + +#include +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * Main libxkbcommon API. + */ + +/** + * @struct xkb_context + * Opaque top level library context object. + * + * The context contains various general library data and state, like + * logging level and include paths. + * + * Objects are created in a specific context, and multiple contexts may + * coexist simultaneously. Objects from different contexts are completely + * separated and do not share any memory or state. + */ +struct xkb_context; + +/** + * @struct xkb_keymap + * Opaque compiled keymap object. + * + * The keymap object holds all of the static keyboard information obtained + * from compiling XKB files. + * + * A keymap is immutable after it is created (besides reference counts, etc.); + * if you need to change it, you must create a new one. + */ +struct xkb_keymap; + +/** + * @struct xkb_state + * Opaque keyboard state object. + * + * State objects contain the active state of a keyboard (or keyboards), such + * as the currently effective layout and the active modifiers. It acts as a + * simple state machine, wherein key presses and releases are the input, and + * key symbols (keysyms) are the output. + */ +struct xkb_state; + +/** + * A number used to represent a physical key on a keyboard. + * + * A standard PC-compatible keyboard might have 102 keys. An appropriate + * keymap would assign each of them a keycode, by which the user should + * refer to the key throughout the library. + * + * Historically, the X11 protocol, and consequentially the XKB protocol, + * assign only 8 bits for keycodes. This limits the number of different + * keys that can be used simultaneously in a single keymap to 256 + * (disregarding other limitations). This library does not share this limit; + * keycodes beyond 255 ('extended keycodes') are not treated specially. + * Keymaps and applications which are compatible with X11 should not use + * these keycodes. + * + * The values of specific keycodes are determined by the keymap and the + * underlying input system. For example, with an X11-compatible keymap + * and Linux evdev scan codes (see linux/input.h), a fixed offset is used: + * + * @code + * xkb_keycode_t keycode_A = KEY_A + 8; + * @endcode + * + * @sa xkb_keycode_is_legal_ext() xkb_keycode_is_legal_x11() + */ +typedef uint32_t xkb_keycode_t; + +/** + * A number used to represent the symbols generated from a key on a keyboard. + * + * A key, represented by a keycode, may generate different symbols according + * to keyboard state. For example, on a QWERTY keyboard, pressing the key + * labled \ generates the symbol 'a'. If the Shift key is held, it + * generates the symbol 'A'. If a different layout is used, say Greek, + * it generates the symbol 'α'. And so on. + * + * Each such symbol is represented by a keysym. Note that keysyms are + * somewhat more general, in that they can also represent some "function", + * such as "Left" or "Right" for the arrow keys. For more information, + * see: + * http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html#keysym_encoding + * + * Specifically named keysyms can be found in the + * xkbcommon/xkbcommon-keysyms.h header file. Their name does not include + * the XKB_KEY_ prefix. + * + * Besides those, any Unicode/ISO 10646 character in the range U0100 to + * U10FFFF can be represented by a keysym value in the range 0x01000100 to + * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "UA1B2". + * + * The name of other unnamed keysyms is the hexadecimal representation of + * their value, e.g. "0xabcd1234". + * + * Keysym names are case-sensitive. + */ +typedef uint32_t xkb_keysym_t; + +/** + * Index of a keyboard layout. + * + * The layout index is a state component which detemines which keyboard + * layout is active. These may be different alphabets, different key + * arrangements, etc. + * + * Layout indices are consecutive. The first layout has index 0. + * + * Each layout is not required to have a name, and the names are not + * guaranteed to be unique (though they are usually provided and unique). + * Therefore, it is not safe to use the name as a unique identifier for a + * layout. Layout names are case-sensitive. + * + * Layouts are also called "groups" by XKB. + * + * @sa xkb_keymap_num_layouts() xkb_keymap_num_layouts_for_key() + */ +typedef uint32_t xkb_layout_index_t; +/** A mask of layout indices. */ +typedef uint32_t xkb_layout_mask_t; + +/** + * Index of a shift level. + * + * Any key, in any layout, can have several shift levels. Each + * shift level can assign different keysyms to the key. The shift level + * to use is chosen according to the current keyboard state; for example, + * if no keys are pressed, the first level may be used; if the Left Shift + * key is pressed, the second; if Num Lock is pressed, the third; and + * many such combinations are possible (see xkb_mod_index_t). + * + * Level indices are consecutive. The first level has index 0. + */ +typedef uint32_t xkb_level_index_t; + +/** + * Index of a modifier. + * + * A @e modifier is a state component which changes the way keys are + * interpreted. A keymap defines a set of modifiers, such as Alt, Shift, + * Num Lock or Meta, and specifies which keys may @e activate which + * modifiers (in a many-to-many relationship, i.e. a key can activate + * several modifiers, and a modifier may be activated by several keys. + * Different keymaps do this differently). + * + * When retrieving the keysyms for a key, the active modifier set is + * consulted; this detemines the correct shift level to use within the + * currently active layout (see xkb_level_index_t). + * + * Modifier indices are consecutive. The first modifier has index 0. + * + * Each modifier must have a name, and the names are unique. Therefore, it + * is safe to use the name as a unique identifier for a modifier. The names + * of some common modifiers are provided in the xkbcommon/xkbcommon-names.h + * header file. Modifier names are case-sensitive. + * + * @sa xkb_keymap_num_mods() + */ +typedef uint32_t xkb_mod_index_t; +/** A mask of modifier indices. */ +typedef uint32_t xkb_mod_mask_t; + +/** + * Index of a keyboard LED. + * + * LEDs are logical objects which may be @e active or @e inactive. They + * typically correspond to the lights on the keyboard. Their state is + * determined by the current keyboard state. + * + * LED indices are non-consecutive. The first LED has index 0. + * + * Each LED must have a name, and the names are unique. Therefore, + * it is safe to use the name as a unique identifier for a LED. The names + * of some common LEDs are provided in the xkbcommon/xkbcommon-names.h + * header file. LED names are case-sensitive. + * + * @warning A given keymap may specify an exact index for a given LED. + * Therefore, LED indexing is not necessarily sequential, as opposed to + * modifiers and layouts. This means that when iterating over the LEDs + * in a keymap using e.g. xkb_keymap_num_leds(), some indices might be + * invalid. Given such an index, functions like xkb_keymap_led_get_name() + * will return NULL, and xkb_state_led_index_is_active() will return -1. + * + * LEDs are also called "indicators" by XKB. + * + * @sa xkb_keymap_num_leds() + */ +typedef uint32_t xkb_led_index_t; +/** A mask of LED indices. */ +typedef uint32_t xkb_led_mask_t; + +#define XKB_KEYCODE_INVALID (0xffffffff) +#define XKB_LAYOUT_INVALID (0xffffffff) +#define XKB_LEVEL_INVALID (0xffffffff) +#define XKB_MOD_INVALID (0xffffffff) +#define XKB_LED_INVALID (0xffffffff) + +#define XKB_KEYCODE_MAX (0xffffffff - 1) + +/** + * Test whether a value is a valid extended keycode. + * @sa xkb_keycode_t + **/ +#define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX) + +/** + * Test whether a value is a valid X11 keycode. + * @sa xkb_keycode_t + */ +#define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255) + +/** + * Names to compile a keymap with, also known as RMLVO. + * + * The names are the common configuration values by which a user picks + * a keymap. + * + * If the entire struct is NULL, then each field is taken to be NULL. + * You should prefer passing NULL instead of choosing your own defaults. + */ +struct xkb_rule_names { + /** + * The rules file to use. The rules file describes how to interpret + * the values of the model, layout, variant and options fields. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_RULES environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *rules; + /** + * The keyboard model by which to interpret keycodes and LEDs. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_MODEL environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *model; + /** + * A comma separated list of layouts (languages) to include in the + * keymap. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_LAYOUT environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *layout; + /** + * A comma separated list of variants, one per layout, which may + * modify or augment the respective layout in various ways. + * + * If NULL or the empty string "", and a default value is also used + * for the layout, a default value is used. Otherwise no variant is + * used. + * If the XKB_DEFAULT_VARIANT environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *variant; + /** + * A comma separated list of options, through which the user specifies + * non-layout related preferences, like which key combinations are used + * for switching layouts, or which key is the Compose key. + * + * If NULL, a default value is used. If the empty string "", no + * options are used. + * If the XKB_DEFAULT_OPTIONS environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *options; +}; + +/** + * @defgroup keysyms Keysyms + * Utility functions related to keysyms. + * + * @{ + */ + +/** + * @page keysym-transformations Keysym Transformations + * + * Keysym translation is subject to several "keysym transformations", + * as described in the XKB specification. These are: + * + * - Capitalization transformation. If the Caps Lock modifier is + * active and was not consumed by the translation process, a single + * keysym is transformed to its upper-case form (if applicable). + * Similarly, the UTF-8/UTF-32 string produced is capitalized. + * + * This is described in: + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier + * + * - Control transformation. If the Control modifier is active and + * was not consumed by the translation process, the string produced + * is transformed to its matching ASCII control character (if + * applicable). Keysyms are not affected. + * + * This is described in: + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier + * + * Each relevant function discusses which transformations it performs. + * + * These transformations are not applicable when a key produces multiple + * keysyms. + */ + + +/** + * Get the name of a keysym. + * + * For a description of how keysyms are named, see @ref xkb_keysym_t. + * + * @param[in] keysym The keysym. + * @param[out] buffer A string buffer to write the name into. + * @param[in] size Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated); a size of at least 64 bytes is recommended. + * + * @returns The number of bytes in the name, excluding the NUL byte. If + * the keysym is invalid, returns -1. + * + * You may check if truncation has occurred by comparing the return value + * with the length of buffer, similarly to the snprintf(3) function. + * + * @sa xkb_keysym_t + */ +int +xkb_keysym_get_name(xkb_keysym_t keysym, char *buffer, size_t size); + +/** Flags for xkb_keysym_from_name(). */ +enum xkb_keysym_flags { + /** Do not apply any flags. */ + XKB_KEYSYM_NO_FLAGS = 0, + /** Find keysym by case-insensitive search. */ + XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0) +}; + +/** + * Get a keysym from its name. + * + * @param name The name of a keysym. See remarks in xkb_keysym_get_name(); + * this function will accept any name returned by that function. + * @param flags A set of flags controlling how the search is done. If + * invalid flags are passed, this will fail with XKB_KEY_NoSymbol. + * + * If you use the XKB_KEYSYM_CASE_INSENSITIVE flag and two keysym names + * differ only by case, then the lower-case keysym is returned. For + * instance, for KEY_a and KEY_A, this function would return KEY_a for the + * case-insensitive search. If this functionality is needed, it is + * recommended to first call this function without this flag; and if that + * fails, only then to try with this flag, while possibly warning the user + * he had misspelled the name, and might get wrong results. + * + * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol. + * + * @sa xkb_keysym_t + */ +xkb_keysym_t +xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags); + +/** + * Get the Unicode/UTF-8 representation of a keysym. + * + * @param[in] keysym The keysym. + * @param[out] buffer A buffer to write the UTF-8 string into. + * @param[in] size The size of buffer. Must be at least 7. + * + * @returns The number of bytes written to the buffer (including the + * terminating byte). If the keysym does not have a Unicode + * representation, returns 0. If the buffer is too small, returns -1. + * + * This function does not perform any @ref keysym-transformations. + * Therefore, prefer to use xkb_state_key_get_utf8() if possible. + * + * @sa xkb_state_key_get_utf8() + */ +int +xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size); + +/** + * Get the Unicode/UTF-32 representation of a keysym. + * + * @returns The Unicode/UTF-32 representation of keysym, which is also + * compatible with UCS-4. If the keysym does not have a Unicode + * representation, returns 0. + * + * This function does not perform any @ref keysym-transformations. + * Therefore, prefer to use xkb_state_key_get_utf32() if possible. + * + * @sa xkb_state_key_get_utf32() + */ +uint32_t +xkb_keysym_to_utf32(xkb_keysym_t keysym); + +/** @} */ + +/** + * @defgroup context Library Context + * Creating, destroying and using library contexts. + * + * Every keymap compilation request must have a context associated with + * it. The context keeps around state such as the include path. + * + * @{ + */ + +/** Flags for context creation. */ +enum xkb_context_flags { + /** Do not apply any context flags. */ + XKB_CONTEXT_NO_FLAGS = 0, + /** Create this context with an empty include path. */ + XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0), + /** + * Don't take RMLVO names from the environment. + * @since 0.3.0 + */ + XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1) +}; + +/** + * Create a new context. + * + * @param flags Optional flags for the context, or 0. + * + * @returns A new context, or NULL on failure. + * + * The user may set some environment variables to affect default values in + * the context. See e.g. xkb_context_set_log_level() and + * xkb_context_set_log_verbosity(). + * + * @memberof xkb_context + */ +struct xkb_context * +xkb_context_new(enum xkb_context_flags flags); + +/** + * Take a new reference on a context. + * + * @returns The passed in context. + * + * @memberof xkb_context + */ +struct xkb_context * +xkb_context_ref(struct xkb_context *context); + +/** + * Release a reference on a context, and possibly free it. + * + * @param context The context. If it is NULL, this function does nothing. + * + * @memberof xkb_context + */ +void +xkb_context_unref(struct xkb_context *context); + +/** + * Store custom user data in the context. + * + * This may be useful in conjunction with xkb_context_set_log_fn() or other + * callbacks. + * + * @memberof xkb_context + */ +void +xkb_context_set_user_data(struct xkb_context *context, void *user_data); + +/** + * Retrieves stored user data from the context. + * + * @returns The stored user data. If the user data wasn't set, or the + * passed in context is NULL, returns NULL. + * + * This may be useful to access private user data from callbacks like a + * custom logging function. + * + * @memberof xkb_context + **/ +void * +xkb_context_get_user_data(struct xkb_context *context); + +/** @} */ + +/** + * @defgroup include-path Include Paths + * Manipulating the include paths in a context. + * + * The include paths are the file-system paths that are searched when an + * include statement is encountered during keymap compilation. + * In most cases, the default include paths are sufficient. + * + * @{ + */ + +/** + * Append a new entry to the context's include path. + * + * @returns 1 on success, or 0 if the include path could not be added or is + * inaccessible. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_append(struct xkb_context *context, const char *path); + +/** + * Append the default include paths to the context's include path. + * + * @returns 1 on success, or 0 if the primary include path could not be added. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_append_default(struct xkb_context *context); + +/** + * Reset the context's include path to the default. + * + * Removes all entries from the context's include path, and inserts the + * default paths. + * + * @returns 1 on success, or 0 if the primary include path could not be added. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_reset_defaults(struct xkb_context *context); + +/** + * Remove all entries from the context's include path. + * + * @memberof xkb_context + */ +void +xkb_context_include_path_clear(struct xkb_context *context); + +/** + * Get the number of paths in the context's include path. + * + * @memberof xkb_context + */ +unsigned int +xkb_context_num_include_paths(struct xkb_context *context); + +/** + * Get a specific include path from the context's include path. + * + * @returns The include path at the specified index. If the index is + * invalid, returns NULL. + * + * @memberof xkb_context + */ +const char * +xkb_context_include_path_get(struct xkb_context *context, unsigned int index); + +/** @} */ + +/** + * @defgroup logging Logging Handling + * Manipulating how logging from this library is handled. + * + * @{ + */ + +/** Specifies a logging level. */ +enum xkb_log_level { + XKB_LOG_LEVEL_CRITICAL = 10, /**< Log critical internal errors only. */ + XKB_LOG_LEVEL_ERROR = 20, /**< Log all errors. */ + XKB_LOG_LEVEL_WARNING = 30, /**< Log warnings and errors. */ + XKB_LOG_LEVEL_INFO = 40, /**< Log information, warnings, and errors. */ + XKB_LOG_LEVEL_DEBUG = 50 /**< Log everything. */ +}; + +/** + * Set the current logging level. + * + * @param context The context in which to set the logging level. + * @param level The logging level to use. Only messages from this level + * and below will be logged. + * + * The default level is XKB_LOG_LEVEL_ERROR. The environment variable + * XKB_LOG_LEVEL, if set in the time the context was created, overrides the + * default value. It may be specified as a level number or name. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_level(struct xkb_context *context, + enum xkb_log_level level); + +/** + * Get the current logging level. + * + * @memberof xkb_context + */ +enum xkb_log_level +xkb_context_get_log_level(struct xkb_context *context); + +/** + * Sets the current logging verbosity. + * + * The library can generate a number of warnings which are not helpful to + * ordinary users of the library. The verbosity may be increased if more + * information is desired (e.g. when developing a new keymap). + * + * The default verbosity is 0. The environment variable XKB_LOG_VERBOSITY, + * if set in the time the context was created, overrides the default value. + * + * @param context The context in which to use the set verbosity. + * @param verbosity The verbosity to use. Currently used values are + * 1 to 10, higher values being more verbose. 0 would result in no verbose + * messages being logged. + * + * Most verbose messages are of level XKB_LOG_LEVEL_WARNING or lower. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_verbosity(struct xkb_context *context, int verbosity); + +/** + * Get the current logging verbosity of the context. + * + * @memberof xkb_context + */ +int +xkb_context_get_log_verbosity(struct xkb_context *context); + +/** + * Set a custom function to handle logging messages. + * + * @param context The context in which to use the set logging function. + * @param log_fn The function that will be called for logging messages. + * Passing NULL restores the default function, which logs to stderr. + * + * By default, log messages from this library are printed to stderr. This + * function allows you to replace the default behavior with a custom + * handler. The handler is only called with messages which match the + * current logging level and verbosity settings for the context. + * level is the logging level of the message. @a format and @a args are + * the same as in the vprintf(3) function. + * + * You may use xkb_context_set_user_data() on the context, and then call + * xkb_context_get_user_data() from within the logging function to provide + * it with additional private context. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_fn(struct xkb_context *context, + void (*log_fn)(struct xkb_context *context, + enum xkb_log_level level, + const char *format, va_list args)); + +/** @} */ + +/** + * @defgroup keymap Keymap Creation + * Creating and destroying keymaps. + * + * @{ + */ + +/** Flags for keymap compilation. */ +enum xkb_keymap_compile_flags { + /** Do not apply any flags. */ + XKB_KEYMAP_COMPILE_NO_FLAGS = 0 +}; + +/** + * Create a keymap from RMLVO names. + * + * The primary keymap entry point: creates a new XKB keymap from a set of + * RMLVO (Rules + Model + Layouts + Variants + Options) names. + * + * @param context The context in which to create the keymap. + * @param names The RMLVO names to use. See xkb_rule_names. + * @param flags Optional flags for the keymap, or 0. + * + * @returns A keymap compiled according to the RMLVO names, or NULL if + * the compilation failed. + * + * @sa xkb_rule_names + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_names(struct xkb_context *context, + const struct xkb_rule_names *names, + enum xkb_keymap_compile_flags flags); + +/** The possible keymap formats. */ +enum xkb_keymap_format { + /** The current/classic XKB text format, as generated by xkbcomp -xkb. */ + XKB_KEYMAP_FORMAT_TEXT_V1 = 1 +}; + +/** + * Create a keymap from a keymap file. + * + * @param context The context in which to create the keymap. + * @param file The keymap file to compile. + * @param format The text format of the keymap file to compile. + * @param flags Optional flags for the keymap, or 0. + * + * @returns A keymap compiled from the given XKB keymap file, or NULL if + * the compilation failed. + * + * The file must contain a complete keymap. For example, in the + * XKB_KEYMAP_FORMAT_TEXT_V1 format, this means the file must contain one + * top level '%xkb_keymap' section, which in turn contains other required + * sections. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_file(struct xkb_context *context, FILE *file, + enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Create a keymap from a keymap string. + * + * This is just like xkb_keymap_new_from_file(), but instead of a file, gets + * the keymap as one enormous string. + * + * @see xkb_keymap_new_from_file() + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_string(struct xkb_context *context, const char *string, + enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Create a keymap from a memory buffer. + * + * This is just like xkb_keymap_new_from_string(), but takes a length argument + * so the input string does not have to be zero-terminated. + * + * @see xkb_keymap_new_from_string() + * @memberof xkb_keymap + * @since 0.3.0 + */ +struct xkb_keymap * +xkb_keymap_new_from_buffer(struct xkb_context *context, const char *buffer, + size_t length, enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Take a new reference on a keymap. + * + * @returns The passed in keymap. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_ref(struct xkb_keymap *keymap); + +/** + * Release a reference on a keymap, and possibly free it. + * + * @param keymap The keymap. If it is NULL, this function does nothing. + * + * @memberof xkb_keymap + */ +void +xkb_keymap_unref(struct xkb_keymap *keymap); + +/** + * Get the keymap as a string in the format from which it was created. + * @sa xkb_keymap_get_as_string() + **/ +#define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1) + +/** + * Get the compiled keymap as a string. + * + * @param keymap The keymap to get as a string. + * @param format The keymap format to use for the string. You can pass + * in the special value XKB_KEYMAP_USE_ORIGINAL_FORMAT to use the format + * from which the keymap was originally created. + * + * @returns The keymap as a NUL-terminated string, or NULL if unsuccessful. + * + * The returned string may be fed back into xkb_map_new_from_string() to get + * the exact same keymap (possibly in another process, etc.). + * + * The returned string is dynamically allocated and should be freed by the + * caller. + * + * @memberof xkb_keymap + */ +char * +xkb_keymap_get_as_string(struct xkb_keymap *keymap, + enum xkb_keymap_format format); + +/** @} */ + +/** + * @defgroup components Keymap Components + * Enumeration of state components in a keymap. + * + * @{ + */ + +/** + * Get the minimum keycode in the keymap. + * + * @sa xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +xkb_keycode_t +xkb_keymap_min_keycode(struct xkb_keymap *keymap); + +/** + * Get the maximum keycode in the keymap. + * + * @sa xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +xkb_keycode_t +xkb_keymap_max_keycode(struct xkb_keymap *keymap); + +/** + * The iterator used by xkb_keymap_key_for_each(). + * + * @sa xkb_keymap_key_for_each + * @memberof xkb_keymap + * @since 0.3.1 + */ +typedef void +(*xkb_keymap_key_iter_t)(struct xkb_keymap *keymap, xkb_keycode_t key, + void *data); + +/** + * Run a specified function for every valid keycode in the keymap. If a + * keymap is sparse, this function may be called fewer than + * (max_keycode - min_keycode + 1) times. + * + * @sa xkb_keymap_min_keycode() xkb_keymap_max_keycode() xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +void +xkb_keymap_key_for_each(struct xkb_keymap *keymap, xkb_keymap_key_iter_t iter, + void *data); + +/** + * Get the number of modifiers in the keymap. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +xkb_mod_index_t +xkb_keymap_num_mods(struct xkb_keymap *keymap); + +/** + * Get the name of a modifier by index. + * + * @returns The name. If the index is invalid, returns NULL. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +const char * +xkb_keymap_mod_get_name(struct xkb_keymap *keymap, xkb_mod_index_t idx); + +/** + * Get the index of a modifier by name. + * + * @returns The index. If no modifier with this name exists, returns + * XKB_MOD_INVALID. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +xkb_mod_index_t +xkb_keymap_mod_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of layouts in the keymap. + * + * @sa xkb_layout_index_t xkb_rule_names xkb_keymap_num_layouts_for_key() + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_num_layouts(struct xkb_keymap *keymap); + +/** + * Get the name of a layout by index. + * + * @returns The name. If the index is invalid, or the layout does not have + * a name, returns NULL. + * + * @sa xkb_layout_index_t + * @memberof xkb_keymap + */ +const char * +xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx); + +/** + * Get the index of a layout by name. + * + * @returns The index. If no layout exists with this name, returns + * XKB_LAYOUT_INVALID. If more than one layout in the keymap has this name, + * returns the lowest index among them. + * + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of LEDs in the keymap. + * + * @warning The range [ 0...xkb_keymap_num_leds() ) includes all of the LEDs + * in the keymap, but may also contain inactive LEDs. When iterating over + * this range, you need the handle this case when calling functions such as + * xkb_keymap_led_get_name() or xkb_state_led_index_is_active(). + * + * @sa xkb_led_index_t + * @memberof xkb_keymap + */ +xkb_led_index_t +xkb_keymap_num_leds(struct xkb_keymap *keymap); + +/** + * Get the name of a LED by index. + * + * @returns The name. If the index is invalid, returns NULL. + * + * @memberof xkb_keymap + */ +const char * +xkb_keymap_led_get_name(struct xkb_keymap *keymap, xkb_led_index_t idx); + +/** + * Get the index of a LED by name. + * + * @returns The index. If no LED with this name exists, returns + * XKB_LED_INVALID. + * + * @memberof xkb_keymap + */ +xkb_led_index_t +xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of layouts for a specific key. + * + * This number can be different from xkb_keymap_num_layouts(), but is always + * smaller. It is the appropriate value to use when iterating over the + * layouts of a key. + * + * @sa xkb_layout_index_t + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_num_layouts_for_key(struct xkb_keymap *keymap, xkb_keycode_t key); + +/** + * Get the number of shift levels for a specific key and layout. + * + * If @c layout is out of range for this key (that is, larger or equal to + * the value returned by xkb_keymap_num_layouts_for_key()), it is brought + * back into range in a manner consistent with xkb_state_key_get_layout(). + * + * @sa xkb_level_index_t + * @memberof xkb_keymap + */ +xkb_level_index_t +xkb_keymap_num_levels_for_key(struct xkb_keymap *keymap, xkb_keycode_t key, + xkb_layout_index_t layout); + +/** + * Get the keysyms obtained from pressing a key in a given layout and + * shift level. + * + * This function is like xkb_state_key_get_syms(), only the layout and + * shift level are not derived from the keyboard state but are instead + * specified explicitly. + * + * @param[in] keymap The keymap. + * @param[in] key The keycode of the key. + * @param[in] layout The layout for which to get the keysyms. + * @param[in] level The shift level in the layout for which to get the + * keysyms. This must be smaller than: + * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode + * @param[out] syms_out An immutable array of keysyms corresponding to the + * key in the given layout and shift level. + * + * If @c layout is out of range for this key (that is, larger or equal to + * the value returned by xkb_keymap_num_layouts_for_key()), it is brought + * back into range in a manner consistent with xkb_state_key_get_layout(). + * + * @returns The number of keysyms in the syms_out array. If no keysyms + * are produced by the key in the given layout and shift level, returns 0 + * and sets syms_out to NULL. + * + * @sa xkb_state_key_get_syms() + * @memberof xkb_keymap + */ +int +xkb_keymap_key_get_syms_by_level(struct xkb_keymap *keymap, + xkb_keycode_t key, + xkb_layout_index_t layout, + xkb_level_index_t level, + const xkb_keysym_t **syms_out); + +/** + * Determine whether a key should repeat or not. + * + * A keymap may specify different repeat behaviors for different keys. + * Most keys should generally exhibit repeat behavior; for example, holding + * the 'a' key down in a text editor should normally insert a single 'a' + * character every few milliseconds, until the key is released. However, + * there are keys which should not or do not need to be repeated. For + * example, repeating modifier keys such as Left/Right Shift or Caps Lock + * is not generally useful or desired. + * + * @returns 1 if the key should repeat, 0 otherwise. + * + * @memberof xkb_keymap + */ +int +xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key); + +/** @} */ + +/** + * @defgroup state Keyboard State + * Creating, destroying and manipulating keyboard state objects. + * + * @{ + */ + +/** + * Create a new keyboard state object. + * + * @param keymap The keymap which the state will use. + * + * @returns A new keyboard state object, or NULL on failure. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_state_new(struct xkb_keymap *keymap); + +/** + * Take a new reference on a keyboard state object. + * + * @returns The passed in object. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_state_ref(struct xkb_state *state); + +/** + * Release a reference on a keybaord state object, and possibly free it. + * + * @param state The state. If it is NULL, this function does nothing. + * + * @memberof xkb_state + */ +void +xkb_state_unref(struct xkb_state *state); + +/** + * Get the keymap which a keyboard state object is using. + * + * @returns The keymap which was passed to xkb_state_new() when creating + * this state object. + * + * This function does not take a new reference on the keymap; you must + * explicitly reference it yourself if you plan to use it beyond the + * lifetime of the state. + * + * @memberof xkb_state + */ +struct xkb_keymap * +xkb_state_get_keymap(struct xkb_state *state); + +/** Specifies the direction of the key (press / release). */ +enum xkb_key_direction { + XKB_KEY_UP, /**< The key was released. */ + XKB_KEY_DOWN /**< The key was pressed. */ +}; + +/** + * Modifier and layout types for state objects. This enum is bitmaskable, + * e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to + * exclude locked modifiers. + * + * In XKB, the DEPRESSED components are also known as 'base'. + */ +enum xkb_state_component { + /** Depressed modifiers, i.e. a key is physically holding them. */ + XKB_STATE_MODS_DEPRESSED = (1 << 0), + /** Latched modifiers, i.e. will be unset after the next non-modifier + * key press. */ + XKB_STATE_MODS_LATCHED = (1 << 1), + /** Locked modifiers, i.e. will be unset after the key provoking the + * lock has been pressed again. */ + XKB_STATE_MODS_LOCKED = (1 << 2), + /** Effective modifiers, i.e. currently active and affect key + * processing (derived from the other state components). + * Use this unless you explictly care how the state came about. */ + XKB_STATE_MODS_EFFECTIVE = (1 << 3), + /** Depressed layout, i.e. a key is physically holding it. */ + XKB_STATE_LAYOUT_DEPRESSED = (1 << 4), + /** Latched layout, i.e. will be unset after the next non-modifier + * key press. */ + XKB_STATE_LAYOUT_LATCHED = (1 << 5), + /** Locked layout, i.e. will be unset after the key provoking the lock + * has been pressed again. */ + XKB_STATE_LAYOUT_LOCKED = (1 << 6), + /** Effective layout, i.e. currently active and affects key processing + * (derived from the other state components). + * Use this unless you explictly care how the state came about. */ + XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7), + /** LEDs (derived from the other state components). */ + XKB_STATE_LEDS = (1 << 8) +}; + +/** + * Update the keyboard state to reflect a given key being pressed or + * released. + * + * This entry point is intended for programs which track the keyboard state + * explictly (like an evdev client). If the state is serialized to you by + * a master process (like a Wayland compositor) using functions like + * xkb_state_serialize_mods(), you should use xkb_state_update_mask() instead. + * The two functins should not generally be used together. + * + * A series of calls to this function should be consistent; that is, a call + * with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key + * is pressed twice, it should be released twice; etc. Otherwise (e.g. due + * to missed input events), situations like "stuck modifiers" may occur. + * + * This function is often used in conjunction with the function + * xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example, + * when handling a key event. In this case, you should prefer to get the + * keysyms *before* updating the key, such that the keysyms reported for + * the key event are not affected by the event itself. This is the + * conventional behavior. + * + * @returns A mask of state components that have changed as a result of + * the update. If nothing in the state has changed, returns 0. + * + * @memberof xkb_state + * + * @sa xkb_state_update_mask() + */ +enum xkb_state_component +xkb_state_update_key(struct xkb_state *state, xkb_keycode_t key, + enum xkb_key_direction direction); + +/** + * Update a keyboard state from a set of explicit masks. + * + * This entry point is intended for window systems and the like, where a + * master process holds an xkb_state, then serializes it over a wire + * protocol, and clients then use the serialization to feed in to their own + * xkb_state. + * + * All parameters must always be passed, or the resulting state may be + * incoherent. + * + * The serialization is lossy and will not survive round trips; it must only + * be used to feed slave state objects, and must not be used to update the + * master state. + * + * If you do not fit the description above, you should use + * xkb_state_update_key() instead. The two functions should not generally be + * used together. + * + * @returns A mask of state components that have changed as a result of + * the update. If nothing in the state has changed, returns 0. + * + * @memberof xkb_state + * + * @sa xkb_state_component + * @sa xkb_state_update_key + */ +enum xkb_state_component +xkb_state_update_mask(struct xkb_state *state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout); + +/** + * Get the keysyms obtained from pressing a particular key in a given + * keyboard state. + * + * Get the keysyms for a key according to the current active layout, + * modifiers and shift level for the key, as determined by a keyboard + * state. + * + * @param[in] state The keyboard state object. + * @param[in] key The keycode of the key. + * @param[out] syms_out An immutable array of keysyms corresponding the + * key in the given keyboard state. + * + * As an extension to XKB, this function can return more than one keysym. + * If you do not want to handle this case, you can use + * xkb_state_key_get_one_sym() for a simpler interface. + * + * This function does not perform any @ref keysym-transformations. + * (This might change). + * + * @returns The number of keysyms in the syms_out array. If no keysyms + * are produced by the key in the given keyboard state, returns 0 and sets + * syms_out to NULL. + * + * @memberof xkb_state + */ +int +xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key, + const xkb_keysym_t **syms_out); + +/** + * Get the Unicode/UTF-8 string obtained from pressing a particular key + * in a given keyboard state. + * + * @param[in] state The keyboard state object. + * @param[in] key The keycode of the key. + * @param[out] buffer A buffer to write the string into. + * @param[in] size Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated). + * + * @returns The number of bytes required for the string, excluding the + * NUL byte. If there is nothing to write, returns 0. + * + * You may check if truncation has occurred by comparing the return value + * with the size of @p buffer, similarly to the snprintf(3) function. + * You may safely pass NULL and 0 to @p buffer and @p size to find the + * required size (without the NUL-byte). + * + * This function performs Capitalization and Control @ref + * keysym-transformations. + * + * @memberof xkb_state + * @since 0.4.1 + */ +int +xkb_state_key_get_utf8(struct xkb_state *state, xkb_keycode_t key, + char *buffer, size_t size); + +/** + * Get the Unicode/UTF-32 codepoint obtained from pressing a particular + * key in a a given keyboard state. + * + * @returns The UTF-32 representation for the key, if it consists of only + * a single codepoint. Otherwise, returns 0. + * + * This function performs Capitalization and Control @ref + * keysym-transformations. + * + * @memberof xkb_state + * @since 0.4.1 + */ +uint32_t +xkb_state_key_get_utf32(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the single keysym obtained from pressing a particular key in a + * given keyboard state. + * + * This function is similar to xkb_state_key_get_syms(), but intended + * for users which cannot or do not want to handle the case where + * multiple keysyms are returned (in which case this function is + * preferred). + * + * @returns The keysym. If the key does not have exactly one keysym, + * returns XKB_KEY_NoSymbol + * + * This function performs Capitalization @ref keysym-transformations. + * + * @sa xkb_state_key_get_syms() + * @memberof xkb_state + */ +xkb_keysym_t +xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the effective layout index for a key in a given keyboard state. + * + * @returns The layout index for the key in the given keyboard state. If + * the given keycode is invalid, or if the key is not included in any + * layout at all, returns XKB_LAYOUT_INVALID. + * + * @invariant If the returned layout is valid, the following always holds: + * @code + * xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key) + * @endcode + * + * @memberof xkb_state + */ +xkb_layout_index_t +xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the effective shift level for a key in a given keyboard state and + * layout. + * + * @param state The keyboard state. + * @param key The keycode of the key. + * @param layout The layout for which to get the shift level. This must be + * smaller than: + * @code xkb_keymap_num_layouts_for_key(keymap, key) @endcode + * usually it would be: + * @code xkb_state_key_get_layout(state, key) @endcode + * + * @return The shift level index. If the key or layout are invalid, + * returns XKB_LEVEL_INVALID. + * + * @invariant If the returned level is valid, the following always holds: + * @code + * xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout) + * @endcode + * + * @memberof xkb_state + */ +xkb_level_index_t +xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key, + xkb_layout_index_t layout); + +/** + * Match flags for xkb_state_mod_indices_are_active() and + * xkb_state_mod_names_are_active(), specifying the conditions for a + * successful match. XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with + * the other modes. + */ +enum xkb_state_match { + /** Returns true if any of the modifiers are active. */ + XKB_STATE_MATCH_ANY = (1 << 0), + /** Returns true if all of the modifiers are active. */ + XKB_STATE_MATCH_ALL = (1 << 1), + /** Makes matching non-exclusive, i.e. will not return false if a + * modifier not specified in the arguments is active. */ + XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16) +}; + +/** + * The counterpart to xkb_state_update_mask for modifiers, to be used on + * the server side of serialization. + * + * @param state The keyboard state. + * @param components A mask of the modifier state components to serialize. + * State components other than XKB_STATE_MODS_* are ignored. + * If XKB_STATE_MODS_EFFECTIVE is included, all other state components are + * ignored. + * + * @returns A xkb_mod_mask_t representing the given components of the + * modifier state. + * + * This function should not be used in regular clients; please use the + * xkb_state_mod_*_is_active API instead. + * + * @memberof xkb_state + */ +xkb_mod_mask_t +xkb_state_serialize_mods(struct xkb_state *state, + enum xkb_state_component components); + +/** + * The counterpart to xkb_state_update_mask for layouts, to be used on + * the server side of serialization. + * + * @param state The keyboard state. + * @param components A mask of the layout state components to serialize. + * State components other than XKB_STATE_LAYOUT_* are ignored. + * If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are + * ignored. + * + * @returns A layout index representing the given components of the + * layout state. + * + * This function should not be used in regular clients; please use the + * xkb_state_layout_*_is_active API instead. + * + * @memberof xkb_state + */ +xkb_layout_index_t +xkb_state_serialize_layout(struct xkb_state *state, + enum xkb_state_component components); + +/** + * Test whether a modifier is active in a given keyboard state by name. + * + * @returns 1 if the modifier is active, 0 if it is not. If the modifier + * name does not exist in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_name_is_active(struct xkb_state *state, const char *name, + enum xkb_state_component type); + +/** + * Test whether a set of modifiers are active in a given keyboard state by + * name. + * + * @param state The keyboard state. + * @param type The component of the state against which to match the + * given modifiers. + * @param match The manner by which to match the state against the + * given modifiers. + * @param ... The set of of modifier names to test, terminated by a NULL + * argument (sentinel). + * + * @returns 1 if the modifiers are active, 0 if they are not. If any of + * the modifier names do not exist in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_names_are_active(struct xkb_state *state, + enum xkb_state_component type, + enum xkb_state_match match, + ...); + +/** + * Test whether a modifier is active in a given keyboard state by index. + * + * @returns 1 if the modifier is active, 0 if it is not. If the modifier + * index is invalid in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_index_is_active(struct xkb_state *state, xkb_mod_index_t idx, + enum xkb_state_component type); + +/** + * Test whether a set of modifiers are active in a given keyboard state by + * index. + * + * @param state The keyboard state. + * @param type The component of the state against which to match the + * given modifiers. + * @param match The manner by which to match the state against the + * given modifiers. + * @param ... The set of of modifier indices to test, terminated by a + * XKB_MOD_INVALID argument (sentinel). + * + * @returns 1 if the modifiers are active, 0 if they are not. If any of + * the modifier indices are invalid in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_indices_are_active(struct xkb_state *state, + enum xkb_state_component type, + enum xkb_state_match match, + ...); + +/** + * @page consumed-modifiers Consumed Modifiers + * @parblock + * + * Some functions, like xkb_state_key_get_syms(), look at the state of + * the modifiers in the keymap and derive from it the correct shift level + * to use for the key. For example, in a US layout, pressing the key + * labeled \ while the Shift modifier is active, generates the keysym + * 'A'. In this case, the Shift modifier is said to be "consumed". + * However, the Num Lock modifier does not affect this translation at all, + * even if it is active, so it is not consumed by this translation. + * + * It may be desirable for some application to not reuse consumed modifiers + * for further processing, e.g. for hotkeys or keyboard shortcuts. To + * understand why, consider some requirements from a standard shortcut + * mechanism, and how they are implemented: + * + * 1. The shortcut's modifiers must match exactly to the state. For + * example, it is possible to bind separate actions to \\ + * and to \\\. Further, if only \\ is + * bound to an action, pressing \\\ should not + * trigger the shortcut. + * Effectively, this means that the modifiers are compared using the + * equality operator (==). + * + * 2. Only relevant modifiers are considered for the matching. For example, + * Caps Lock and Num Lock should not generally affect the matching, e.g. + * when matching \\ against the state, it does not matter + * whether Num Lock is active or not. These relevant, or "significant", + * modifiers usually include Alt, Control, Shift, Super and similar. + * Effectively, this means that non-significant modifiers are masked out, + * before doing the comparison as described above. + * + * 3. The matching must be independent of the layout/keymap. For example, + * the \ (+) symbol is found on the first level on some layouts, + * but requires holding Shift on others. If you simply bind the action + * to the \ keysym, it would work for the unshifted kind, but + * not for the others, because the match against Shift would fail. If + * you bind the action to \\, only the shifted kind would + * work. So what is needed is to recognize that Shift is used up in the + * translation of the keysym itself, and therefore should not be included + * in the matching. + * Effectively, this means that consumed modifiers (Shift in this example) + * are masked out as well, before doing the comparison. + * + * In summary, this is how the matching would be performed: + * @code + * (keysym == shortcut_keysym) && + * ((state_mods & ~consumed_mods & significant_mods) == shortcut_mods) + * @endcode + * + * @c state_mods are the modifiers reported by + * xkb_state_mod_index_is_active() and similar functions. + * @c consumed_mods are the modifiers reported by + * xkb_state_mod_index_is_consumed() and similar functions. + * @c significant_mods are decided upon by the application/toolkit/user; + * it is up to them to decide whether these are configurable or hard-coded. + * + * @endparblock + */ + +/** + * Test whether a modifier is consumed by keyboard state translation for + * a key. + * + * @returns 1 if the modifier is consumed, 0 if it is not. If the modifier + * index is not valid in the keymap, returns -1. + * + * @sa xkb_state_mod_mask_remove_consumed() + * @sa xkb_state_key_get_consumed_mods() + * @memberof xkb_state + */ +int +xkb_state_mod_index_is_consumed(struct xkb_state *state, xkb_keycode_t key, + xkb_mod_index_t idx); + +/** + * Remove consumed modifiers from a modifier mask for a key. + * + * Takes the given modifier mask, and removes all modifiers which are + * consumed for that particular key (as in xkb_state_mod_index_is_consumed()). + * + * @sa xkb_state_mod_index_is_consumed() + * @memberof xkb_state + */ +xkb_mod_mask_t +xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key, + xkb_mod_mask_t mask); + +/** + * Get the mask of modifiers consumed by translating a given key. + * + * @returns a mask of the consumed modifiers. + * + * @sa xkb_state_mod_index_is_consumed() + * @memberof xkb_state + * @since 0.4.1 + */ +xkb_mod_mask_t +xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key); + +/** + * Test whether a layout is active in a given keyboard state by name. + * + * @returns 1 if the layout is active, 0 if it is not. If no layout with + * this name exists in the keymap, return -1. + * + * If multiple layouts in the keymap have this name, the one with the lowest + * index is tested. + * + * @sa xkb_layout_index_t + * @memberof xkb_state + */ +int +xkb_state_layout_name_is_active(struct xkb_state *state, const char *name, + enum xkb_state_component type); + +/** + * Test whether a layout is active in a given keyboard state by index. + * + * @returns 1 if the layout is active, 0 if it is not. If the layout index + * is not valid in the keymap, returns -1. + * + * @sa xkb_layout_index_t + * @memberof xkb_state + */ +int +xkb_state_layout_index_is_active(struct xkb_state *state, + xkb_layout_index_t idx, + enum xkb_state_component type); + +/** + * Test whether a LED is active in a given keyboard state by name. + * + * @returns 1 if the LED is active, 0 if it not. If no LED with this name + * exists in the keymap, returns -1. + * + * @sa xkb_led_index_t + * @memberof xkb_state + */ +int +xkb_state_led_name_is_active(struct xkb_state *state, const char *name); + +/** + * Test whether a LED is active in a given keyboard state by index. + * + * @returns 1 if the LED is active, 0 if it not. If the LED index is not + * valid in the keymap, returns -1. + * + * @sa xkb_led_index_t + * @memberof xkb_state + */ +int +xkb_state_led_index_is_active(struct xkb_state *state, xkb_led_index_t idx); + +/** @} */ + +/* Leave this include last, so it can pick up our types, etc. */ +#include + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_H_ */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro new file mode 100644 index 000000000..0967cb3d8 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro @@ -0,0 +1,10 @@ +TEMPLATE = subdirs + +qtHaveModule(dbus) { +!mac:!win32:SUBDIRS += fcitx +!mac:!win32:SUBDIRS += ibus +} + +contains(QT_CONFIG, xcb-plugin): SUBDIRS += compose + + diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm similarity index 92% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index 5df151437..643ebdd53 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -88,12 +80,14 @@ QT_USE_NAMESPACE +QT_BEGIN_NAMESPACE static QCocoaApplicationDelegate *sharedCocoaApplicationDelegate = nil; static void cleanupCocoaApplicationDelegate() { [sharedCocoaApplicationDelegate release]; } +QT_END_NAMESPACE @implementation QCocoaApplicationDelegate diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm similarity index 91% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm index 7f7bd24f4..9c695aaec 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm @@ -1,41 +1,33 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2015 The Qt Company Ltd. ** Copyright (C) 2012 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Christoph Schleifenbaum -** Contact: http://www.qt-project.org/legal +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -102,7 +94,7 @@ QT_USE_NAMESPACE QCocoaSystemTrayIcon *systray; NSStatusItem *item; QCocoaMenu *menu; - bool menuVisible, iconSelected; + bool menuVisible, iconSelected; QIcon icon; QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; } @@ -188,7 +180,7 @@ void QCocoaSystemTrayIcon::cleanup() } static bool heightCompareFunction (QSize a, QSize b) { return (a.height() < b.height()); } -static QList sortByHeight(const QList sizes) +static QList sortByHeight(const QList &sizes) { QList sorted = sizes; std::sort(sorted.begin(), sorted.end(), heightCompareFunction); @@ -216,7 +208,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) // devicePixelRatio for the "best" screen on the system. qreal devicePixelRatio = qApp->devicePixelRatio(); const int maxPixmapHeight = maxImageHeight * devicePixelRatio; - const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; + const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; QSize selectedSize; Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { // Select a pixmap based on the height. We want the largest pixmap @@ -232,6 +224,10 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) } } + // Handle SVG icons, which do not return anything for availableSizes(). + if (!selectedSize.isValid()) + selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight), mode); + QPixmap pixmap = icon.pixmap(selectedSize, mode); // Draw a low-resolution icon if there is not enough pixels for a retina @@ -391,8 +387,8 @@ QT_END_NAMESPACE down = YES; int clickCount = [mouseEvent clickCount]; [self setNeedsDisplay:YES]; - - parent->iconSelected = (clickCount != 2) && parent->menu; + + parent->iconSelected = (clickCount != 2) && parent->menu; parent->systray->updateIcon(parent->icon); if (clickCount == 2) { @@ -445,7 +441,7 @@ QT_END_NAMESPACE } -(void)drawRect:(NSRect)rect { - [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; + [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; [super drawRect:rect]; } @end @@ -458,7 +454,7 @@ QT_END_NAMESPACE if (self) { item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; menu = 0; - menuVisible = false; + menuVisible = false; systray = sys; imageCell = [[QNSImageView alloc] initWithParent:self]; [item setView: imageCell]; @@ -468,6 +464,7 @@ QT_END_NAMESPACE -(void)dealloc { [[NSStatusBar systemStatusBar] removeStatusItem:item]; + [[NSNotificationCenter defaultCenter] removeObserver:imageCell]; [imageCell release]; [item release]; [super dealloc]; @@ -502,7 +499,7 @@ QT_END_NAMESPACE selector:@selector(menuTrackingDone:) name:NSMenuDidEndTrackingNotification object:m]; - menuVisible = true; + menuVisible = true; [item popUpStatusItemMenu: m]; } } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm similarity index 93% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm index 486fda0ff..d18884ad5 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -82,31 +74,6 @@ static bool isMouseEvent(NSEvent *ev) } } -static void selectNextKeyWindow(NSWindow *currentKeyWindow) -{ - if (!currentKeyWindow) - return; - - const QCocoaAutoReleasePool pool; - - if ([[NSApplication sharedApplication] keyWindow] != currentKeyWindow) - return;//currentKeyWindow is not a key window actually. - - NSArray *const windows = [[NSApplication sharedApplication] windows]; - bool startLookup = false; - for (NSWindow *candidate in [windows reverseObjectEnumerator]) { - if (!startLookup) { - if (candidate == currentKeyWindow) - startLookup = true; - } else { - if ([candidate isVisible] && [candidate canBecomeKeyWindow]) { - [candidate makeKeyWindow]; - break; - } - } - } -} - @implementation QNSWindowHelper @synthesize window = _window; @@ -379,6 +346,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) , m_synchedWindowState(Qt::WindowActive) , m_windowModality(Qt::NonModal) , m_windowUnderMouse(false) + , m_ignoreWindowShouldClose(false) , m_inConstructor(true) , m_inSetVisible(false) , m_inSetGeometry(false) @@ -447,11 +415,28 @@ QCocoaWindow::~QCocoaWindow() if (m_isNSWindowChild) { if (m_parentCocoaWindow) m_parentCocoaWindow->removeChildWindow(this); - } else if (parent()) { + } else if ([m_contentView superview]) { [m_contentView removeFromSuperview]; - } else if (m_qtView) { - [[NSNotificationCenter defaultCenter] removeObserver:m_qtView - name:nil object:m_nsWindow]; + } + + // Make sure to disconnect observer in all case if view is valid + // to avoid notifications received when deleting when using Qt::AA_NativeWindows attribute + if (m_qtView) { + [[NSNotificationCenter defaultCenter] removeObserver:m_qtView]; + } + + // The QNSView object may outlive the corresponding QCocoaWindow object, + // for example during app shutdown when the QNSView is embedded in a + // foregin NSView hiearchy. Clear the pointers to the QWindow/QCocoaWindow + // here to make sure QNSView does not dereference stale pointers. + if (m_qtView) { + [m_qtView clearQWindowPointers]; + } + + // While it is unlikely that this window will be in the popup stack + // during deletetion we clear any pointers here to make sure. + if (QCocoaIntegration::instance()) { + QCocoaIntegration::instance()->popupWindowStack()->removeAll(this); } foreach (QCocoaWindow *child, m_childWindows) { @@ -466,7 +451,13 @@ QCocoaWindow::~QCocoaWindow() QSurfaceFormat QCocoaWindow::format() const { - return window()->requestedFormat(); + QSurfaceFormat format = window()->requestedFormat(); + + // Upgrade the default surface format to include an alpha channel. The default RGB format + // causes Cocoa to spend an unreasonable amount of time converting it to RGBA internally. + if (format == QSurfaceFormat()) + format.setAlphaBufferSize(8); + return format; } void QCocoaWindow::setGeometry(const QRect &rectIn) @@ -599,9 +590,6 @@ void QCocoaWindow::hide(bool becauseOfAncestor) foreach (QCocoaWindow *childWindow, m_childWindows) childWindow->hide(true); - if (window()->transientParent() && m_nsWindow == [[NSApplication sharedApplication] keyWindow]) - selectNextKeyWindow(m_nsWindow); // Otherwise, Cocoa can do it wrong. - [m_nsWindow orderOut:nil]; } @@ -646,17 +634,17 @@ void QCocoaWindow::setVisible(bool visible) // We need to recreate if the modality has changed as the style mask will need updating if (m_windowModality != window()->modality()) recreateWindow(parent()); + + // Register popup windows. The Cocoa platform plugin will forward mouse events + // to them and close them when needed. + if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) + QCocoaIntegration::instance()->pushPopupWindow(this); + if (parentCocoaWindow) { // The parent window might have moved while this window was hidden, // update the window geometry if there is a parent. setGeometry(window()->geometry()); - // Register popup windows so that the parent window can close them when needed. - if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) { - // qDebug() << "transientParent and popup" << window()->type() << Qt::Popup << (window()->type() & Qt::Popup); - parentCocoaWindow->m_activePopupWindow = window(); - } - if (window()->type() == Qt::Popup) { // QTBUG-30266: a window should not be resizable while a transient popup is open // Since this isn't a native popup, the window manager doesn't close the popup when you click outside @@ -708,8 +696,10 @@ void QCocoaWindow::setVisible(bool visible) && [m_nsWindow isKindOfClass:[NSPanel class]]) { [(NSPanel *)m_nsWindow setWorksWhenModal:YES]; if (!(parentCocoaWindow && window()->transientParent()->isActive()) && window()->type() == Qt::Popup) { - monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDown handler:^(NSEvent *) { - QWindowSystemInterface::handleMouseEvent(window(), QPointF(-1, -1), QPointF(window()->framePosition() - QPointF(1, 1)), Qt::LeftButton); + monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDownMask|NSMouseMovedMask handler:^(NSEvent *e) { + QPointF localPoint = qt_mac_flipPoint([NSEvent mouseLocation]); + QWindowSystemInterface::handleMouseEvent(window(), window()->mapFromGlobal(localPoint.toPoint()), localPoint, + cocoaButton2QtButton([e buttonNumber])); }]; } } @@ -758,8 +748,11 @@ void QCocoaWindow::setVisible(bool visible) [NSEvent removeMonitor:monitor]; monitor = nil; } + + if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) + QCocoaIntegration::instance()->popupWindowStack()->removeAll(this); + if (parentCocoaWindow && window()->type() == Qt::Popup) { - parentCocoaWindow->m_activePopupWindow = 0; if (m_resizableTransientParent && !([parentCocoaWindow->m_nsWindow styleMask] & NSFullScreenWindowMask)) // QTBUG-30266: a window should not be resizable while a transient popup is open @@ -806,9 +799,22 @@ NSUInteger QCocoaWindow::windowStyleMask(Qt::WindowFlags flags) if (flags & Qt::FramelessWindowHint) return styleMask; if ((type & Qt::Popup) == Qt::Popup) { - if (!windowIsPopupType(type)) - styleMask = (NSUtilityWindowMask | NSResizableWindowMask | NSClosableWindowMask | - NSMiniaturizableWindowMask | NSTitledWindowMask); + if (!windowIsPopupType(type)) { + styleMask = NSUtilityWindowMask; + if (!(flags & Qt::CustomizeWindowHint)) { + styleMask |= NSResizableWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSTitledWindowMask; + } else { + if (flags & Qt::WindowMaximizeButtonHint) + styleMask |= NSResizableWindowMask; + if (flags & Qt::WindowTitleHint) + styleMask |= NSTitledWindowMask; + if (flags & Qt::WindowCloseButtonHint) + styleMask |= NSClosableWindowMask; + if (flags & Qt::WindowMinimizeButtonHint) + styleMask |= NSMiniaturizableWindowMask; + } + } } else { if (type == Qt::Window && !(flags & Qt::CustomizeWindowHint)) { styleMask = (NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask); @@ -1181,10 +1187,9 @@ void QCocoaWindow::setEmbeddedInForeignView(bool embedded) void QCocoaWindow::windowWillMove() { // Close any open popups on window move - if (m_activePopupWindow) { - QWindowSystemInterface::handleCloseEvent(m_activePopupWindow); + while (QCocoaWindow *popup = QCocoaIntegration::instance()->popPopupWindow()) { + QWindowSystemInterface::handleCloseEvent(popup->window()); QWindowSystemInterface::flushWindowSystemEvents(); - m_activePopupWindow = 0; } } @@ -1218,6 +1223,9 @@ void QCocoaWindow::windowDidEndLiveResize() bool QCocoaWindow::windowShouldClose() { + // might have been set from qnsview.mm + if (m_ignoreWindowShouldClose) + return false; bool accepted = false; QWindowSystemInterface::handleCloseEvent(window(), &accepted); QWindowSystemInterface::flushWindowSystemEvents(); @@ -1512,19 +1520,33 @@ void QCocoaWindow::syncWindowState(Qt::WindowState newState) } Qt::WindowState predictedState = newState; + if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized)) { + const int styleMask = [m_nsWindow styleMask]; + const bool usePerform = styleMask & NSResizableWindowMask; + [m_nsWindow setStyleMask:styleMask | NSResizableWindowMask]; + if (usePerform) + [m_nsWindow performZoom : m_nsWindow]; // toggles + else + [m_nsWindow zoom : m_nsWindow]; // toggles + [m_nsWindow setStyleMask:styleMask]; + } if ((m_synchedWindowState & Qt::WindowMinimized) != (newState & Qt::WindowMinimized)) { if (newState & Qt::WindowMinimized) { - [m_nsWindow performMiniaturize : m_nsWindow]; + if ([m_nsWindow styleMask] & NSMiniaturizableWindowMask) + [m_nsWindow performMiniaturize : m_nsWindow]; + else + [m_nsWindow miniaturize : m_nsWindow]; } else { [m_nsWindow deminiaturize : m_nsWindow]; } } + const bool effMax = m_effectivelyMaximized; if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized) || (m_effectivelyMaximized && newState == Qt::WindowNoState)) { if ((m_synchedWindowState & Qt::WindowFullScreen) == (newState & Qt::WindowFullScreen)) { [m_nsWindow zoom : m_nsWindow]; // toggles - m_effectivelyMaximized = !m_effectivelyMaximized; + m_effectivelyMaximized = !effMax; } else if (!(newState & Qt::WindowMaximized)) { // it would be nice to change the target geometry that toggleFullScreen will animate toward // but there is no known way, so the maximized state is not possible at this time diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm similarity index 89% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm index 0357bf4b6..cfc8705e4 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -83,7 +75,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (CGFloat)deviceDeltaZ; @end -@interface QNSViewMouseMoveHelper : NSObject +@interface QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) : NSObject { QNSView *view; } @@ -97,7 +89,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; @end -@implementation QNSViewMouseMoveHelper +@implementation QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) - (id)initWithView:(QNSView *)theView { @@ -158,13 +150,14 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; currentCustomDragTypes = 0; m_sendUpAsRightButton = false; m_inputSource = 0; - m_mouseMoveHelper = [[QNSViewMouseMoveHelper alloc] initWithView:self]; + m_mouseMoveHelper = [[QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) alloc] initWithView:self]; m_resendKeyEvent = false; + m_scrolling = false; if (!touchDevice) { touchDevice = new QTouchDevice; touchDevice->setType(QTouchDevice::TouchPad); - touchDevice->setCapabilities(QTouchDevice::Position | QTouchDevice::NormalizedPosition); + touchDevice->setCapabilities(QTouchDevice::Position | QTouchDevice::NormalizedPosition | QTouchDevice::MouseEmulation); QWindowSystemInterface::registerTouchDevice(touchDevice); } } @@ -174,6 +167,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (void)dealloc { CGImageRelease(m_maskImage); + [m_trackingArea release]; m_maskImage = 0; m_window = 0; m_subscribesForGlobalFrameNotifications = false; @@ -195,6 +189,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_window = window; m_platformWindow = platformWindow; m_sendKeyEvent = false; + m_trackingArea = nil; #ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR // prevent rift in space-time continuum, disable @@ -221,6 +216,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; return self; } +- (void) clearQWindowPointers +{ + m_window = 0; + m_platformWindow = 0; +} + #ifndef QT_NO_OPENGL - (void) setQCocoaGLContext:(QCocoaGLContext *)context { @@ -271,10 +272,13 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (self.window) { // This is the case of QWidgetAction's generated QWidget inserted in an NSMenu. // 10.9 and newer get the NSWindowDidChangeOcclusionStateNotification - if (!_q_NSWindowDidChangeOcclusionStateNotification - && [self.window.className isEqualToString:@"NSCarbonMenuWindow"]) + if ((!_q_NSWindowDidChangeOcclusionStateNotification + && [self.window.className isEqualToString:@"NSCarbonMenuWindow"])) { + m_exposedOnMoveToWindow = true; m_platformWindow->exposeWindow(); - } else { + } + } else if (m_exposedOnMoveToWindow) { + m_exposedOnMoveToWindow = false; m_platformWindow->obscureWindow(); } } @@ -366,6 +370,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; // calles, which Qt and Qt applications do not excpect. if (!m_platformWindow->m_inSetGeometry) QWindowSystemInterface::flushWindowSystemEvents(); + else + m_backingStore = QImage(); } } @@ -415,8 +421,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; && [notificationName isEqualToString:_q_NSWindowDidChangeOcclusionStateNotification]) { #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 // ### HACK Remove the enum declaration, the warning disabling and the cast further down once 10.8 is unsupported -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-method-access" +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wobjc-method-access") enum { NSWindowOcclusionStateVisible = 1UL << 1 }; #endif if ((NSUInteger)[self.window occlusionState] & NSWindowOcclusionStateVisible) { @@ -431,7 +437,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_platformWindow->obscureWindow(); } #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 -#pragma clang diagnostic pop +QT_WARNING_POP #endif } else if (notificationName == NSWindowDidChangeScreenNotification) { if (m_window) { @@ -485,6 +491,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (BOOL) isOpaque { + if (!m_platformWindow) + return true; return m_platformWindow->isOpaque(); } @@ -689,6 +697,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_platformWindow->m_forwardWindow = 0; } + // Popups implicitly grap mouse events; forward to the active popup if there is one + if (QCocoaWindow *popup = QCocoaIntegration::instance()->activePopupWindow()) { + if (QNSView *popupView = popup->qtView()) + targetView = popupView; + } + [targetView convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint]; ulong timestamp = [theEvent timestamp] * 1000; @@ -739,12 +753,13 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; NSPoint windowPoint = [theEvent locationInWindow]; int windowScreenY = [window frame].origin.y + [window frame].size.height; - int viewScreenY = [window convertBaseToScreen:[self convertPoint:[self frame].origin toView:nil]].y; + NSPoint windowCoord = [self convertPoint:[self frame].origin toView:nil]; + int viewScreenY = [window convertRectToScreen:NSMakeRect(windowCoord.x, windowCoord.y, 0, 0)].origin.y; int titleBarHeight = windowScreenY - viewScreenY; NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil]; QPoint qtWindowPoint = QPoint(nsViewPoint.x, titleBarHeight + nsViewPoint.y); - NSPoint screenPoint = [window convertBaseToScreen:windowPoint]; + NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 0, 0)].origin; QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); ulong timestamp = [theEvent timestamp] * 1000; @@ -756,21 +771,41 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super mouseDown:theEvent]; m_sendUpAsRightButton = false; - if (m_platformWindow->m_activePopupWindow) { - Qt::WindowType type = m_platformWindow->m_activePopupWindow->type(); - QWindowSystemInterface::handleCloseEvent(m_platformWindow->m_activePopupWindow); - QWindowSystemInterface::flushWindowSystemEvents(); - m_platformWindow->m_activePopupWindow = 0; - // Consume the mouse event when closing the popup, except for tool tips - // were it's expected that the event is processed normally. - if (type != Qt::ToolTip) - return; - } - if ([self hasMarkedText]) { - NSInputManager* inputManager = [NSInputManager currentInputManager]; - if ([inputManager wantsToHandleMouseEvents]) { - [inputManager handleMouseEvent:theEvent]; + + // Handle any active poup windows; clicking outisde them should close them + // all. Don't do anything or clicks inside one of the menus, let Cocoa + // handle that case. Note that in practice many windows of the Qt::Popup type + // will actually close themselves in this case using logic implemented in + // that particular poup type (for example context menus). However, Qt expects + // that plain popup QWindows will also be closed, so we implement the logic + // here as well. + QList *popups = QCocoaIntegration::instance()->popupWindowStack(); + if (!popups->isEmpty()) { + // Check if the click is outside all popups. + bool inside = false; + QPointF qtScreenPoint = qt_mac_flipPoint([self screenMousePoint:theEvent]); + for (QList::const_iterator it = popups->begin(); it != popups->end(); ++it) { + if ((*it)->geometry().contains(qtScreenPoint.toPoint())) { + inside = true; + break; + } } + // Close the popups if the click was outside. + if (!inside) { + Qt::WindowType type = QCocoaIntegration::instance()->activePopupWindow()->window()->type(); + while (QCocoaWindow *popup = QCocoaIntegration::instance()->popPopupWindow()) { + QWindowSystemInterface::handleCloseEvent(popup->window()); + QWindowSystemInterface::flushWindowSystemEvents(); + } + // Consume the mouse event when closing the popup, except for tool tips + // were it's expected that the event is processed normally. + if (type != Qt::ToolTip) + return; + } + } + + if ([self hasMarkedText]) { + [[NSTextInputContext currentInputContext] handleEvent:theEvent]; } else { if ([QNSView convertKeyModifiers:[theEvent modifierFlags]] & Qt::MetaModifier) { m_buttons |= Qt::RightButton; @@ -808,19 +843,11 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; { [super updateTrackingAreas]; - // [NSView addTrackingArea] is slow, so bail out early if we can: - if (NSIsEmptyRect([self visibleRect])) - return; - - // Remove current trakcing areas: QCocoaAutoReleasePool pool; - if (NSArray *trackingArray = [self trackingAreas]) { - NSUInteger size = [trackingArray count]; - for (NSUInteger i = 0; i < size; ++i) { - NSTrackingArea *t = [trackingArray objectAtIndex:i]; - [self removeTrackingArea:t]; - } - } + + // NSTrackingInVisibleRect keeps care of updating once the tracking is set up, so bail out early + if (m_trackingArea && [[self trackingAreas] containsObject:m_trackingArea]) + return; // Ideally, we shouldn't have NSTrackingMouseMoved events included below, it should // only be turned on if mouseTracking, hover is on or a tool tip is set. @@ -830,12 +857,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; // is a performance hit). So it goes. NSUInteger trackingOptions = NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp | NSTrackingInVisibleRect | NSTrackingMouseMoved | NSTrackingCursorUpdate; - NSTrackingArea *ta = [[[NSTrackingArea alloc] initWithRect:[self frame] - options:trackingOptions - owner:m_mouseMoveHelper - userInfo:nil] - autorelease]; - [self addTrackingArea:ta]; + [m_trackingArea release]; + m_trackingArea = [[NSTrackingArea alloc] initWithRect:[self frame] + options:trackingOptions + owner:m_mouseMoveHelper + userInfo:nil]; + [self addTrackingArea:m_trackingArea]; } -(void)cursorUpdateImpl:(NSEvent *)theEvent @@ -925,6 +952,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super rightMouseDown:theEvent]; m_buttons |= Qt::RightButton; + m_sendUpAsRightButton = true; [self handleMouseEvent:theEvent]; } @@ -942,6 +970,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super rightMouseUp:theEvent]; m_buttons &= ~Qt::RightButton; + m_sendUpAsRightButton = false; [self handleMouseEvent:theEvent]; } @@ -1265,12 +1294,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) { if (m_window->flags() & Qt::WindowTransparentForInput) return [super scrollWheel:theEvent]; - const EventRef carbonEvent = (EventRef)[theEvent eventRef]; - const UInt32 carbonEventKind = carbonEvent ? ::GetEventKind(carbonEvent) : 0; - const bool scrollEvent = carbonEventKind == kEventMouseScroll; QPoint angleDelta; - if (scrollEvent) { + Qt::MouseEventSource source = Qt::MouseEventNotSynthesized; + if ([theEvent hasPreciseScrollingDeltas]) { // The mouse device contains pixel scroll wheel support (Mighty Mouse, Trackpad). // Since deviceDelta is delivered as pixels rather than degrees, we need to // convert from pixels to degrees in a sensible manner. @@ -1279,8 +1306,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) const int pixelsToDegrees = 2; // 8 * 1/4 angleDelta.setX([theEvent scrollingDeltaX] * pixelsToDegrees); angleDelta.setY([theEvent scrollingDeltaY] * pixelsToDegrees); + source = Qt::MouseEventSynthesizedBySystem; } else { - // carbonEventKind == kEventMouseWheelMoved // Remove acceleration, and use either -120 or 120 as delta: angleDelta.setX(qBound(-120, int([theEvent deltaX] * 10000), 120)); angleDelta.setY(qBound(-120, int([theEvent deltaY] * 10000), 120)); @@ -1321,19 +1348,24 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. - if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) - ph = Qt::ScrollBegin; - } else -#endif - if (phase == NSEventPhaseBegan) { - // On 10.7, MayBegin will not happen, so Began is the actual beginning. + if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) { + m_scrolling = true; ph = Qt::ScrollBegin; } - if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled) { + } +#endif + if (phase == NSEventPhaseBegan) { + // If MayBegin did not happen, Began is the actual beginning. + if (!m_scrolling) + ph = Qt::ScrollBegin; + m_scrolling = true; + } else if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled || + momentumPhase == NSEventPhaseEnded || momentumPhase == NSEventPhaseCancelled) { ph = Qt::ScrollEnd; + m_scrolling = false; } - QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph); + QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph, source); } #endif //QT_NO_WHEELEVENT @@ -1403,6 +1435,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) QObject *fo = QGuiApplication::focusObject(); if (m_sendKeyEvent && fo) { + // if escape is pressed we don't want interpretKeyEvents to close a dialog. This will be done via QWindowSystemInterface + if (keyCode == Qt::Key_Escape) + m_platformWindow->m_ignoreWindowShouldClose = true; + QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImHints); if (QCoreApplication::sendEvent(fo, &queryEvent)) { bool imEnabled = queryEvent.value(Qt::ImEnabled).toBool(); @@ -1412,6 +1448,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) [self interpretKeyEvents:[NSArray arrayWithObject:nsevent]]; } } + + m_platformWindow->m_ignoreWindowShouldClose = false;; } if (m_resendKeyEvent) m_sendKeyEvent = true; @@ -1419,7 +1457,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) if (m_sendKeyEvent && m_composingText.isEmpty()) QWindowSystemInterface::handleExtendedKeyEvent(focusWindow, timestamp, QEvent::Type(eventType), keyCode, modifiers, - nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat]); + nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat], 1, false); m_sendKeyEvent = false; m_resendKeyEvent = false; @@ -1451,7 +1489,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) && qtKey == Qt::Key_Period) { [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; return YES; - } else if ([nsevent modifierFlags] & NSControlKeyMask && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { + } else if ([nsevent modifierFlags] & NSControlKeyMask + && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; return YES; } @@ -1809,6 +1848,50 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin return NO; } +- (void)updateCursorFromDragResponse:(QPlatformDragQtResponse)response drag:(QCocoaDrag *)drag +{ + const QPixmap pixmapCursor = drag->currentDrag()->dragCursor(response.acceptedAction()); + NSCursor *nativeCursor = nil; + + if (pixmapCursor.isNull()) { + switch (response.acceptedAction()) { + case Qt::CopyAction: + nativeCursor = [NSCursor dragCopyCursor]; + break; + case Qt::LinkAction: + nativeCursor = [NSCursor dragLinkCursor]; + break; + case Qt::IgnoreAction: + // Uncomment the next lines if forbiden cursor wanted on non droppable targets. + /*nativeCursor = [NSCursor operationNotAllowedCursor]; + break;*/ + case Qt::MoveAction: + default: + nativeCursor = [NSCursor arrowCursor]; + break; + } + } + else { + NSImage *nsimage = qt_mac_create_nsimage(pixmapCursor); + nativeCursor = [[NSCursor alloc] initWithImage:nsimage hotSpot:NSZeroPoint]; + [nsimage release]; + } + + // change the cursor + [nativeCursor set]; + + // Make sure the cursor is updated correctly if the mouse does not move and window is under cursor + // by creating a fake move event + const QPoint mousePos(QCursor::pos()); + CGEventRef moveEvent(CGEventCreateMouseEvent( + NULL, kCGEventMouseMoved, + CGPointMake(mousePos.x(), mousePos.y()), + kCGMouseButtonLeft // ignored + )); + CGEventPost(kCGHIDEventTap, moveEvent); + CFRelease(moveEvent); +} + - (NSDragOperation)draggingEntered:(id )sender { return [self handleDrag : sender]; @@ -1827,14 +1910,18 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); QWindow *target = findEventTargetWindow(m_window); + if (!target) + return NSDragOperationNone; // update these so selecting move/copy/link works QGuiApplicationPrivate::modifier_buttons = [QNSView convertKeyModifiers: [[NSApp currentEvent] modifierFlags]]; QPlatformDragQtResponse response(false, Qt::IgnoreAction, QRect()); - if ([sender draggingSource] != nil) { - QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + if (nativeDrag->currentDrag()) { + // The drag was started from within the application response = QWindowSystemInterface::handleDrag(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + [self updateCursorFromDragResponse:response drag:nativeDrag]; } else { QCocoaDropData mimeData([sender draggingPasteboard]); response = QWindowSystemInterface::handleDrag(target, &mimeData, mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); @@ -1846,6 +1933,8 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin - (void)draggingExited:(id )sender { QWindow *target = findEventTargetWindow(m_window); + if (!target) + return; NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; QPoint qt_windowPoint(windowPoint.x, windowPoint.y); @@ -1858,14 +1947,17 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin - (BOOL)performDragOperation:(id )sender { QWindow *target = findEventTargetWindow(m_window); + if (!target) + return false; NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; QPoint qt_windowPoint(windowPoint.x, windowPoint.y); Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); QPlatformDropQtResponse response(false, Qt::IgnoreAction); - if ([sender draggingSource] != nil) { - QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + if (nativeDrag->currentDrag()) { + // The drag was started from within the application response = QWindowSystemInterface::handleDrop(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); } else { QCocoaDropData mimeData([sender draggingPasteboard]); @@ -1883,6 +1975,8 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin Q_UNUSED(img); Q_UNUSED(operation); QWindow *target = findEventTargetWindow(m_window); + if (!target) + return; // keep our state, and QGuiApplication state (buttons member) in-sync, // or future mouse events will be processed incorrectly @@ -1892,7 +1986,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin QPoint qtWindowPoint(windowPoint.x, windowPoint.y); NSWindow *window = [self window]; - NSPoint screenPoint = [window convertBaseToScreen :point]; + NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(point.x, point.y, 0, 0)].origin; QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); QWindowSystemInterface::handleMouseEvent(target, mapWindowCoordinates(m_window, target, qtWindowPoint), qtScreenPoint, m_buttons); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp similarity index 94% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index 97819ddc8..1d42b7970 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -58,16 +58,14 @@ #include #include #include +#include +#include #include #include #include "qtwindows_additional.h" -#define STRICT_TYPED_ITEMIDS -#include -#include - // #define USE_NATIVE_COLOR_DIALOG /* Testing purposes only */ #ifdef Q_CC_MINGW /* Add missing declarations for MinGW */ @@ -381,7 +379,12 @@ static inline QString guidToString(const GUID &g) } inline QDebug operator<<(QDebug d, const GUID &g) -{ d.nospace() << guidToString(g); return d; } +{ + QDebugStateSaver saver(d); + d.nospace(); + d << guidToString(g); + return d; +} // Return an allocated wchar_t array from a QString, reserve more memory if desired. static wchar_t *qStringToWCharArray(const QString &s, size_t reserveSize = 0) @@ -890,8 +893,8 @@ public: virtual void setWindowTitle(const QString &title); inline void setMode(QFileDialogOptions::FileMode mode, QFileDialogOptions::AcceptMode acceptMode, QFileDialogOptions::FileDialogOptions options); - inline void setDirectory(const QString &directory); - inline void updateDirectory() { setDirectory(m_data.directory().toLocalFile()); } + inline void setDirectory(const QUrl &directory); + inline void updateDirectory() { setDirectory(m_data.directory()); } inline QString directory() const; virtual void doExec(HWND owner = 0); virtual void setNameFilters(const QStringList &f); @@ -934,7 +937,7 @@ protected: static QList libraryItemFolders(IShellItem *item); static QString libraryItemDefaultSaveFolder(IShellItem *item); static int itemPaths(IShellItemArray *items, QList *fileResult = 0); - static IShellItem *shellItem(const QString &path); + static IShellItem *shellItem(const QUrl &url); const QWindowsFileDialogSharedData &data() const { return m_data; } QWindowsFileDialogSharedData &data() { return m_data; } @@ -994,25 +997,58 @@ void QWindowsNativeFileDialogBase::setWindowTitle(const QString &title) m_fileDialog->SetTitle(reinterpret_cast(title.utf16())); } -IShellItem *QWindowsNativeFileDialogBase::shellItem(const QString &path) +IShellItem *QWindowsNativeFileDialogBase::shellItem(const QUrl &url) { #ifndef Q_OS_WINCE - if (QWindowsContext::shell32dll.sHCreateItemFromParsingName) { - IShellItem *result = 0; - const QString native = QDir::toNativeSeparators(path); + if (url.isLocalFile()) { + if (!QWindowsContext::shell32dll.sHCreateItemFromParsingName) + return Q_NULLPTR; + IShellItem *result = Q_NULLPTR; + const QString native = QDir::toNativeSeparators(url.toLocalFile()); const HRESULT hr = - QWindowsContext::shell32dll.sHCreateItemFromParsingName(reinterpret_cast(native.utf16()), - NULL, IID_IShellItem, - reinterpret_cast(&result)); - if (SUCCEEDED(hr)) - return result; + QWindowsContext::shell32dll.sHCreateItemFromParsingName(reinterpret_cast(native.utf16()), + NULL, IID_IShellItem, + reinterpret_cast(&result)); + if (FAILED(hr)) { + qErrnoWarning("%s: SHCreateItemFromParsingName(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + return result; + } else if (url.scheme() == QLatin1String("clsid")) { + if (!QWindowsContext::shell32dll.sHGetKnownFolderIDList || !QWindowsContext::shell32dll.sHCreateItemFromIDList) + return Q_NULLPTR; + // Support for virtual folders via GUID + // (see https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx) + // specified as "clsid:" (without '{', '}'). + IShellItem *result = Q_NULLPTR; + const QUuid uuid(url.path()); + if (uuid.isNull()) { + qWarning() << __FUNCTION__ << ": Invalid CLSID: " << url.path(); + return Q_NULLPTR; + } + PIDLIST_ABSOLUTE idList; + HRESULT hr = QWindowsContext::shell32dll.sHGetKnownFolderIDList(uuid, 0, 0, &idList); + if (FAILED(hr)) { + qErrnoWarning("%s: SHGetKnownFolderIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + hr = QWindowsContext::shell32dll.sHCreateItemFromIDList(idList, IID_IShellItem, reinterpret_cast(&result)); + CoTaskMemFree(idList); + if (FAILED(hr)) { + qErrnoWarning("%s: SHCreateItemFromIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + return result; + } else { + qWarning() << __FUNCTION__ << ": Unhandled scheme: " << url.scheme(); } +#else // !Q_OS_WINCE + Q_UNUSED(url) #endif - qErrnoWarning("%s: SHCreateItemFromParsingName(%s)) failed", __FUNCTION__, qPrintable(path)); return 0; } -void QWindowsNativeFileDialogBase::setDirectory(const QString &directory) +void QWindowsNativeFileDialogBase::setDirectory(const QUrl &directory) { if (!directory.isEmpty()) { if (IShellItem *psi = QWindowsNativeFileDialogBase::shellItem(directory)) { @@ -1302,14 +1338,27 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel } } +static inline bool isClsid(const QString &s) +{ + // detect "374DE290-123F-4565-9164-39C4925E467B". + static const QRegularExpression pattern(QLatin1String("[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{8}")); + Q_ASSERT(pattern.isValid()); + return pattern.match(s).hasMatch(); +} + void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const { - QString file = QDir::toNativeSeparators(fileName); - int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); - if (lastBackSlash >= 0) { - file = file.mid(lastBackSlash + 1); + // Hack to prevent CLSIDs from being set as file name due to + // QFileDialogPrivate::initialSelection() being QString-based. + if (!isClsid(fileName)) + { + QString file = QDir::toNativeSeparators(fileName); + int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); + if (lastBackSlash >= 0) { + file = file.mid(lastBackSlash + 1); + } + m_fileDialog->SetFileName((wchar_t*)file.utf16());; } - m_fileDialog->SetFileName((wchar_t*)file.utf16());; } // Return the index of the selected filter, accounting for QFileDialog @@ -1654,14 +1703,14 @@ QWindowsNativeDialogBase *QWindowsFileDialogHelper::createNativeDialog() QWindowsNativeFileDialogBase *result = QWindowsNativeFileDialogBase::create(options()->acceptMode(), m_data); if (!result) return 0; - QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept())); - QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject())); - QObject::connect(result, SIGNAL(directoryEntered(QUrl)), - this, SIGNAL(directoryEntered(QUrl))); - QObject::connect(result, SIGNAL(currentChanged(QUrl)), - this, SIGNAL(currentChanged(QUrl))); - QObject::connect(result, SIGNAL(filterSelected(QString)), - this, SIGNAL(filterSelected(QString))); + QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); + QObject::connect(result, &QWindowsNativeFileDialogBase::directoryEntered, + this, &QPlatformFileDialogHelper::directoryEntered); + QObject::connect(result, &QWindowsNativeFileDialogBase::currentChanged, + this, &QPlatformFileDialogHelper::currentChanged); + QObject::connect(result, &QWindowsNativeFileDialogBase::filterSelected, + this, &QPlatformFileDialogHelper::filterSelected); // Apply settings. const QSharedPointer &opts = options(); @@ -2041,8 +2090,8 @@ QWindowsNativeDialogBase *QWindowsXpFileDialogHelper::createNativeDialog() { m_data.fromOptions(options()); if (QWindowsXpNativeFileDialog *result = QWindowsXpNativeFileDialog::create(options(), m_data)) { - QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept())); - QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject())); + QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); return result; } return 0; @@ -2202,8 +2251,8 @@ QWindowsNativeDialogBase *QWindowsColorDialogHelper::createNativeDialog() { QWindowsNativeColorDialog *nativeDialog = new QWindowsNativeColorDialog(m_currentColor); nativeDialog->setWindowTitle(options()->windowTitle()); - connect(nativeDialog, SIGNAL(accepted()), this, SIGNAL(accept())); - connect(nativeDialog, SIGNAL(rejected()), this, SIGNAL(reject())); + connect(nativeDialog, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + connect(nativeDialog, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); return nativeDialog; } #endif // USE_NATIVE_COLOR_DIALOG diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp similarity index 85% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp index 16fda2677..d80429b6d 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -37,6 +37,8 @@ #include "qwindowsdrag.h" #include "qwindowsscreen.h" #include "qwindowsscaling.h" +#include "qwindowsintegration.h" +#include "qwindowsopenglcontext.h" #ifdef QT_NO_CURSOR # include "qwindowscursor.h" #endif @@ -104,31 +106,16 @@ static QByteArray debugWinExStyle(DWORD exStyle) return rc; } -static QByteArray debugWindowStates(Qt::WindowStates s) -{ - - QByteArray rc = "0x"; - rc += QByteArray::number(int(s), 16); - if (s & Qt::WindowMinimized) - rc += " WindowMinimized"; - if (s & Qt::WindowMaximized) - rc += " WindowMaximized"; - if (s & Qt::WindowFullScreen) - rc += " WindowFullScreen"; - if (s & Qt::WindowActive) - rc += " WindowActive"; - return rc; -} - #ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO QDebug operator<<(QDebug d, const MINMAXINFO &i) { - d.nospace() << "MINMAXINFO maxSize=" << i.ptMaxSize.x << ',' - << i.ptMaxSize.y << " maxpos=" << i.ptMaxPosition.x - << ',' << i.ptMaxPosition.y << " mintrack=" - << i.ptMinTrackSize.x << ',' << i.ptMinTrackSize.y - << " maxtrack=" << i.ptMaxTrackSize.x << ',' - << i.ptMaxTrackSize.y; + QDebugStateSaver saver(d); + d.nospace(); + d << "MINMAXINFO maxSize=" << i.ptMaxSize.x << ',' + << i.ptMaxSize.y << " maxpos=" << i.ptMaxPosition.x + << ',' << i.ptMaxPosition.y << " mintrack=" + << i.ptMinTrackSize.x << ',' << i.ptMinTrackSize.y + << " maxtrack=" << i.ptMaxTrackSize.x << ',' << i.ptMaxTrackSize.y; return d; } #endif // !Q_OS_WINCE @@ -153,22 +140,43 @@ static inline RECT RECTfromQRect(const QRect &rect) QDebug operator<<(QDebug d, const RECT &r) { - d.nospace() << "RECT: left/top=" << r.left << ',' << r.top - << " right/bottom=" << r.right << ',' << r.bottom; + QDebugStateSaver saver(d); + d.nospace(); + d << "RECT: left/top=" << r.left << ',' << r.top + << " right/bottom=" << r.right << ',' << r.bottom; return d; } #ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_NCCALCSIZE QDebug operator<<(QDebug d, const NCCALCSIZE_PARAMS &p) { - qDebug().nospace() << "NCCALCSIZE_PARAMS " - << qrectFromRECT(p.rgrc[0]) - << ' ' << qrectFromRECT(p.rgrc[1]) << ' ' - << qrectFromRECT(p.rgrc[2]); + QDebugStateSaver saver(d); + d.nospace(); + d << "NCCALCSIZE_PARAMS " << qrectFromRECT(p.rgrc[0]) + << ' ' << qrectFromRECT(p.rgrc[1]) << ' ' << qrectFromRECT(p.rgrc[2]); return d; } #endif // !Q_OS_WINCE +// QTBUG-43872, for windows that do not have WS_EX_TOOLWINDOW set, WINDOWPLACEMENT +// is in workspace/available area coordinates. +static QPoint windowPlacementOffset(HWND hwnd, const QPoint &point) +{ +#ifndef Q_OS_WINCE + if (GetWindowLongPtr(hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) + return QPoint(0, 0); + const QWindowsScreenManager &screenManager = QWindowsContext::instance()->screenManager(); + const QWindowsScreen *screen = screenManager.screens().size() == 1 + ? screenManager.screens().first() : screenManager.screenAtDp(point); + if (screen) + return screen->availableGeometryDp().topLeft() - screen->geometryDp().topLeft(); +#else + Q_UNUSED(hwnd) + Q_UNUSED(point) +#endif + return QPoint(0, 0); +} + // Return the frame geometry relative to the parent // if there is one. static inline QRect frameGeometry(HWND hwnd, bool topLevel) @@ -179,8 +187,10 @@ static inline QRect frameGeometry(HWND hwnd, bool topLevel) WINDOWPLACEMENT windowPlacement; windowPlacement.length = sizeof(WINDOWPLACEMENT); GetWindowPlacement(hwnd, &windowPlacement); - if (windowPlacement.showCmd == SW_SHOWMINIMIZED) - return qrectFromRECT(windowPlacement.rcNormalPosition); + if (windowPlacement.showCmd == SW_SHOWMINIMIZED) { + const QRect result = qrectFromRECT(windowPlacement.rcNormalPosition); + return result.translated(windowPlacementOffset(hwnd, result.topLeft())); + } } #endif // !Q_OS_WINCE GetWindowRect(hwnd, &rect); // Screen coordinates. @@ -205,6 +215,18 @@ static inline QSize clientSize(HWND hwnd) return qSizeOfRect(rect); } +static inline bool windowIsOpenGL(const QWindow *w) +{ + switch (w->surfaceType()) { + case QSurface::OpenGLSurface: + return true; + case QSurface::RasterGLSurface: + return qt_window_private(const_cast(w))->compositing; + default: + return false; + } +} + static bool applyBlurBehindWindow(HWND hwnd) { #ifdef Q_OS_WINCE @@ -328,6 +350,17 @@ static void setWindowOpacity(HWND hwnd, Qt::WindowFlags flags, bool hasAlpha, bo #endif // !Q_OS_WINCE } +static inline void updateGLWindowSettings(const QWindow *w, HWND hwnd, Qt::WindowFlags flags, qreal opacity) +{ + const bool isGL = windowIsOpenGL(w); + const bool hasAlpha = w->format().hasAlpha(); + + if (isGL && hasAlpha) + applyBlurBehindWindow(hwnd); + + setWindowOpacity(hwnd, flags, hasAlpha, isGL, opacity); +} + /*! \class WindowCreationData \brief Window creation code. @@ -369,14 +402,13 @@ struct WindowCreationData void fromWindow(const QWindow *w, const Qt::WindowFlags flags, unsigned creationFlags = 0); inline WindowData create(const QWindow *w, const WindowData &data, QString title) const; inline void applyWindowFlags(HWND hwnd) const; - void initialize(HWND h, bool frameChange, qreal opacityLevel) const; + void initialize(const QWindow *w, HWND h, bool frameChange, qreal opacityLevel) const; Qt::WindowFlags flags; HWND parentHandle; Qt::WindowType type; unsigned style; unsigned exStyle; - bool isGL; bool topLevel; bool popup; bool dialog; @@ -388,19 +420,26 @@ struct WindowCreationData QDebug operator<<(QDebug debug, const WindowCreationData &d) { - debug.nospace() << QWindowsWindow::debugWindowFlags(d.flags) - << " GL=" << d.isGL << " topLevel=" << d.topLevel << " popup=" - << d.popup << " dialog=" << d.dialog << " desktop=" << d.desktop - << " embedded=" << d.embedded - << " tool=" << d.tool << " style=" << debugWinStyle(d.style) - << " exStyle=" << debugWinExStyle(d.exStyle) - << " parent=" << d.parentHandle; + QDebugStateSaver saver(debug); + debug.nospace(); + debug.noquote(); + debug << "WindowCreationData: " << d.flags + << "\n topLevel=" << d.topLevel; + if (d.parentHandle) + debug << " parent=" << d.parentHandle; + debug << " popup=" << d.popup << " dialog=" << d.dialog << " desktop=" << d.desktop + << " embedded=" << d.embedded << " tool=" << d.tool + << "\n style=" << debugWinStyle(d.style); + if (d.exStyle) + debug << "\n exStyle=" << debugWinExStyle(d.exStyle); return debug; } // Fix top level window flags in case only the type flags are passed. static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) { + // Not supported on Windows, also do correction when it is set. + flags &= ~Qt::WindowFullscreenButtonHint; switch (flags) { case Qt::Window: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint @@ -420,8 +459,6 @@ static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flagsIn, unsigned creationFlags) { - isGL = w->surfaceType() == QWindow::OpenGLSurface; - hasAlpha = w->format().hasAlpha(); flags = flagsIn; // Sometimes QWindow doesn't have a QWindow parent but does have a native parent window, @@ -494,7 +531,7 @@ void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flag // ### Commented out for now as it causes some problems, but // this should be correct anyway, so dig some more into this #ifdef Q_FLATTEN_EXPOSE - if (isGL) + if (windowIsOpenGL(w)) // a bit incorrect since the is-opengl status may change from false to true at any time later on style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // see SetPixelFormat #else style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN ; @@ -513,7 +550,7 @@ void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flag } if (flags & Qt::WindowSystemMenuHint) style |= WS_SYSMENU; - else if (dialog) { + else if (dialog && (flags & Qt::WindowCloseButtonHint) && !(flags & Qt::FramelessWindowHint)) { style |= WS_SYSMENU | WS_BORDER; // QTBUG-2027, dialogs without system menu. exStyle |= WS_EX_DLGMODALFRAME; } @@ -559,16 +596,17 @@ QWindowsWindowData Q_ASSERT(result.hwnd); const LONG_PTR style = GetWindowLongPtr(result.hwnd, GWL_STYLE); const LONG_PTR exStyle = GetWindowLongPtr(result.hwnd, GWL_EXSTYLE); - result.geometry = frameGeometry(result.hwnd, !GetParent(result.hwnd)); - result.frame = QWindowsGeometryHint::frame(style, exStyle); result.embedded = false; - qCDebug(lcQpaWindows) << "Foreign window: " << w << result.hwnd << result.geometry << result.frame; + result.frame = QWindowsGeometryHint::frame(style, exStyle); + result.geometry = frameGeometry(result.hwnd, !GetParent(result.hwnd)) + .marginsRemoved(result.frame); + qCDebug(lcQpaWindows) << "Foreign window: " << w << result.hwnd << result.geometry; return result; } const HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - const QString windowClassName = QWindowsContext::instance()->registerWindowClass(w, isGL); + const QString windowClassName = QWindowsContext::instance()->registerWindowClass(w); const QRect geometryDip = QWindowsScaling::mapFromNative(data.geometry); QRect fixedGeometryDip = QPlatformWindow::initialGeometry(w, geometryDip, defaultWindowWidth, defaultWindowHeight); @@ -586,8 +624,8 @@ QWindowsWindowData QWindowsContext::instance()->setWindowCreationContext(context); qCDebug(lcQpaWindows).nospace() - << "CreateWindowEx: " << w << *this << " class=" <frameWidth << 'x' << context->frameHeight << '+' << context->frameX << '+' << context->frameY << " custom margins: " << context->customMargins; @@ -597,9 +635,13 @@ QWindowsWindowData context->frameX, context->frameY, context->frameWidth, context->frameHeight, parentHandle, NULL, appinst, NULL); +#ifdef Q_OS_WINCE + if (DisableGestures(result.hwnd, TGF_GID_ALL, TGF_SCOPE_WINDOW)) + EnableGestures(result.hwnd, TGF_GID_DIRECTMANIPULATION, TGF_SCOPE_WINDOW); +#endif qCDebug(lcQpaWindows).nospace() << "CreateWindowEx: returns " << w << ' ' << result.hwnd << " obtained geometry: " - << context->obtainedGeometry << context->margins; + << context->obtainedGeometry << ' ' << context->margins; if (!result.hwnd) { qErrnoWarning("%s: CreateWindowEx failed", __FUNCTION__); @@ -611,9 +653,6 @@ QWindowsWindowData result.embedded = embedded; result.customMargins = context->customMargins; - if (isGL && hasAlpha) - applyBlurBehindWindow(result.hwnd); - return result; } @@ -636,7 +675,7 @@ void WindowCreationData::applyWindowFlags(HWND hwnd) const << debugWinExStyle(newExStyle); } -void WindowCreationData::initialize(HWND hwnd, bool frameChange, qreal opacityLevel) const +void WindowCreationData::initialize(const QWindow *w, HWND hwnd, bool frameChange, qreal opacityLevel) const { if (desktop || !hwnd) return; @@ -661,8 +700,7 @@ void WindowCreationData::initialize(HWND hwnd, bool frameChange, qreal opacityLe else EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND|MF_GRAYED); } - - setWindowOpacity(hwnd, flags, hasAlpha, isGL, opacityLevel); + updateGLWindowSettings(w, hwnd, flags, opacityLevel); } else { // child. SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, swpFlags); } @@ -704,9 +742,9 @@ QMargins QWindowsGeometryHint::frame(DWORD style, DWORD exStyle) qErrnoWarning("%s: AdjustWindowRectEx failed", __FUNCTION__); const QMargins result(qAbs(rect.left), qAbs(rect.top), qAbs(rect.right), qAbs(rect.bottom)); - qCDebug(lcQpaWindows).nospace() << __FUNCTION__ << " style= 0x" - << QString::number(style, 16) << " exStyle=0x" << QString::number(exStyle, 16) << ' ' << rect << ' ' << result; - + qCDebug(lcQpaWindows).nospace() << __FUNCTION__ << " style=" + << showbase << hex << style << " exStyle=" << exStyle << dec << noshowbase + << ' ' << rect << ' ' << result; return result; } @@ -801,7 +839,7 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w, const QRect &geometry, const QMargins &cm, DWORD style_, DWORD exStyle_) : - geometryHint(w, cm), style(style_), exStyle(exStyle_), + geometryHint(w, cm), window(w), style(style_), exStyle(exStyle_), requestedGeometry(geometry), obtainedGeometry(geometry), margins(QWindowsGeometryHint::frame(style, exStyle)), customMargins(cm), frameX(CW_USEDEFAULT), frameY(CW_USEDEFAULT), @@ -825,12 +863,12 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w, } qCDebug(lcQpaWindows).nospace() - << __FUNCTION__ << ' ' << w << geometry - << " pos incl. frame" << QWindowsGeometryHint::positionIncludesFrame(w) - << " frame: " << frameWidth << 'x' << frameHeight << '+' + << __FUNCTION__ << ' ' << w << ' ' << geometry + << " pos incl. frame=" << QWindowsGeometryHint::positionIncludesFrame(w) + << " frame=" << frameWidth << 'x' << frameHeight << '+' << frameX << '+' << frameY - << " min" << geometryHint.minimumSize << " max" << geometryHint.maximumSize - << " custom margins " << customMargins; + << " min=" << geometryHint.minimumSize << " max=" << geometryHint.maximumSize + << " custom margins=" << customMargins; } /*! @@ -886,17 +924,9 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data) setFlag(OpenGL_ES2); } #endif // QT_NO_OPENGL - updateDropSite(); + updateDropSite(window()->isTopLevel()); -#ifndef Q_OS_WINCE - if (QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch) { - if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, 0)) { - setFlag(TouchRegistered); - } else { - qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(aWindow->objectName())); - } - } -#endif // !Q_OS_WINCE + registerTouchWindow(); setWindowState(aWindow->windowState()); const qreal opacity = qt_window_private(aWindow)->opacity; if (!qFuzzyCompare(opacity, qreal(1.0))) @@ -952,7 +982,8 @@ void QWindowsWindow::destroyWindow() setDropSiteEnabled(false); #ifndef QT_NO_OPENGL if (m_surface) { - m_data.staticOpenGLContext->destroyWindowSurface(m_surface); + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + staticOpenGLContext->destroyWindowSurface(m_surface); m_surface = 0; } #endif @@ -971,10 +1002,10 @@ void QWindowsWindow::destroyWindow() } } -void QWindowsWindow::updateDropSite() +void QWindowsWindow::updateDropSite(bool topLevel) { bool enabled = false; - if (window()->isTopLevel()) { + if (topLevel) { switch (window()->type()) { case Qt::Window: case Qt::Dialog: @@ -1043,13 +1074,14 @@ QWindowsWindowData creationData.fromWindow(w, parameters.flags); QWindowsWindowData result = creationData.create(w, parameters, title); // Force WM_NCCALCSIZE (with wParam=1) via SWP_FRAMECHANGED for custom margin. - creationData.initialize(result.hwnd, !parameters.customMargins.isNull(), 1); + creationData.initialize(w, result.hwnd, !parameters.customMargins.isNull(), 1); return result; } void QWindowsWindow::setVisible(bool visible) { - qCDebug(lcQpaWindows) << __FUNCTION__ << this << window() << m_data.hwnd << visible; + const QWindow *win = window(); + qCDebug(lcQpaWindows) << __FUNCTION__ << this << win << m_data.hwnd << visible; if (m_data.hwnd) { if (visible) { show_sys(); @@ -1057,11 +1089,13 @@ void QWindowsWindow::setVisible(bool visible) // When the window is layered, we won't get WM_PAINT, and "we" are in control // over the rendering of the window // There is nobody waiting for this, so we don't need to flush afterwards. - if (isLayered()) { - QWindow *w = window(); - fireExpose(QRect(0, 0, w->width(), w->height())); - } + if (isLayered()) + fireExpose(QRect(0, 0, win->width(), win->height())); + // QTBUG-44928, QTBUG-7386: This is to resolve the problem where popups are + // opened from the system tray and not being implicitly activated + if (win->type() == Qt::Popup && !win->parent() && !QGuiApplication::focusWindow()) + SetForegroundWindow(m_data.hwnd); } else { if (hasMouseCapture()) setMouseGrabEnabled(false); @@ -1270,7 +1304,7 @@ void QWindowsWindow::setParent_sys(const QPlatformWindow *parent) if (wasTopLevel != isTopLevel) { setDropSiteEnabled(false); setWindowFlags_sys(window()->flags(), unsigned(isTopLevel ? WindowCreationData::ForceTopLevel : WindowCreationData::ForceChild)); - updateDropSite(); + updateDropSite(isTopLevel); } } } @@ -1292,8 +1326,10 @@ static QRect normalFrameGeometry(HWND hwnd) #ifndef Q_OS_WINCE WINDOWPLACEMENT wp; wp.length = sizeof(WINDOWPLACEMENT); - if (GetWindowPlacement(hwnd, &wp)) - return qrectFromRECT(wp.rcNormalPosition); + if (GetWindowPlacement(hwnd, &wp)) { + const QRect result = qrectFromRECT(wp.rcNormalPosition); + return result.translated(windowPlacementOffset(hwnd, result.topLeft())); + } #else Q_UNUSED(hwnd) #endif @@ -1318,21 +1354,8 @@ void QWindowsWindow::setGeometryDp(const QRect &rectIn) const QMargins margins = frameMarginsDp(); rect.moveTopLeft(rect.topLeft() + QPoint(margins.left(), margins.top())); } - const QSize oldSize = m_data.geometry.size(); - m_data.geometry = rect; - const QSize newSize = rect.size(); - // Check on hint. - if (newSize != oldSize) { - const QWindowsGeometryHint hint(window(), m_data.customMargins); - if (!hint.validSize(newSize)) { - qWarning("%s: Attempt to set a size (%dx%d) violating the constraints" - "(%dx%d - %dx%d) on window %s/'%s'.", __FUNCTION__, - newSize.width(), newSize.height(), - hint.minimumSize.width(), hint.minimumSize.height(), - hint.maximumSize.width(), hint.maximumSize.height(), - window()->metaObject()->className(), qPrintable(window()->objectName())); - } - } + if (m_windowState == Qt::WindowMinimized) + m_data.geometry = rect; // Otherwise set by handleGeometryChange() triggered by event. if (m_data.hwnd) { // A ResizeEvent with resulting geometry will be sent. If we cannot // achieve that size (for example, window title minimal constraint), @@ -1403,11 +1426,11 @@ void QWindowsWindow::handleGeometryChange() // QTBUG-32121: OpenGL/normal windows (with exception of ANGLE) do not receive // expose events when shrinking, synthesize. if (!testFlag(OpenGL_ES2) && isExposed() - && !(m_data.geometry.width() > previousGeometry.width() || m_data.geometry.height() > previousGeometry.height())) { + && !(m_data.geometry.width() >= previousGeometry.width() || m_data.geometry.height() >= previousGeometry.height())) { fireExpose(QRect(QPoint(0, 0), m_data.geometry.size()), true); } if (previousGeometry.topLeft() != m_data.geometry.topLeft()) { - QPlatformScreen *newScreen = screenForGeometry(m_data.geometry); + QPlatformScreen *newScreen = screenForGeometry(geometryDip); if (newScreen != screen()) QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen()); } @@ -1422,10 +1445,10 @@ void QWindowsWindow::setGeometry_sys(const QRect &rect) const const QMargins margins = frameMarginsDp(); const QRect frameGeometry = rect + margins; - qCDebug(lcQpaWindows) << '>' << __FUNCTION__ << this << window() - << " \n from " << geometry_sys() << " frame: " - << margins << " to " <' << __FUNCTION__ << window() + << "\n from " << geometry_sys() << " frame: " + << margins << " to " <' << __FUNCTION__ << this << window() << "\n from: " - << QWindowsWindow::debugWindowFlags(m_data.flags) - << "\n to: " << QWindowsWindow::debugWindowFlags(flags); + << m_data.flags << "\n to: " << flags; const QRect oldGeometry = geometryDp(); if (m_data.flags != flags) { m_data.flags = flags; if (m_data.hwnd) { m_data = setWindowFlags_sys(flags); - updateDropSite(); + updateDropSite(window()->isTopLevel()); } } // When switching to a frameless window, geometry @@ -1547,8 +1570,7 @@ void QWindowsWindow::setWindowFlags(Qt::WindowFlags flags) handleGeometryChange(); qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << "\n returns: " - << QWindowsWindow::debugWindowFlags(m_data.flags) - << " geometry " << oldGeometry << "->" << newGeometry; + << m_data.flags << " geometry " << oldGeometry << "->" << newGeometry; } QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, @@ -1557,7 +1579,7 @@ QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, WindowCreationData creationData; creationData.fromWindow(window(), wt, flags); creationData.applyWindowFlags(m_data.hwnd); - creationData.initialize(m_data.hwnd, true, m_opacity); + creationData.initialize(window(), m_data.hwnd, true, m_opacity); QWindowsWindowData result = m_data; result.flags = creationData.flags; @@ -1569,8 +1591,7 @@ QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, void QWindowsWindow::handleWindowStateChange(Qt::WindowState state) { qCDebug(lcQpaWindows) << __FUNCTION__ << this << window() - << "\n from " << debugWindowStates(m_windowState) - << " to " << debugWindowStates(state); + << "\n from " << m_windowState << " to " << state; setFlag(FrameDirty); m_windowState = state; QWindowSystemInterface::handleWindowStateChanged(window(), state); @@ -1639,23 +1660,12 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) if (oldState == newState) return; qCDebug(lcQpaWindows) << '>' << __FUNCTION__ << this << window() - << " from " << debugWindowStates(oldState) << " to " << debugWindowStates(newState); + << " from " << oldState << " to " << newState; const bool visible = isVisible(); setFlag(FrameDirty); - if ((oldState == Qt::WindowMaximized) != (newState == Qt::WindowMaximized)) { - if (visible && !(newState == Qt::WindowMinimized)) { - setFlag(WithinMaximize); - if (newState == Qt::WindowFullScreen) - setFlag(MaximizeToFullScreen); - ShowWindow(m_data.hwnd, (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); - clearFlag(WithinMaximize); - clearFlag(MaximizeToFullScreen); - } - } - if ((oldState == Qt::WindowFullScreen) != (newState == Qt::WindowFullScreen)) { #ifdef Q_OS_WINCE HWND handle = FindWindow(L"HHTaskBar", L""); @@ -1735,6 +1745,15 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) m_savedStyle = 0; m_savedFrameGeometry = QRect(); } + } else if ((oldState == Qt::WindowMaximized) != (newState == Qt::WindowMaximized)) { + if (visible && !(newState == Qt::WindowMinimized)) { + setFlag(WithinMaximize); + if (newState == Qt::WindowFullScreen) + setFlag(MaximizeToFullScreen); + ShowWindow(m_data.hwnd, (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); + clearFlag(WithinMaximize); + clearFlag(MaximizeToFullScreen); + } } if ((oldState == Qt::WindowMinimized) != (newState == Qt::WindowMinimized)) { @@ -1742,7 +1761,7 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) ShowWindow(m_data.hwnd, (newState == Qt::WindowMinimized) ? SW_MINIMIZE : (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); } - qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << this << window() << debugWindowStates(newState); + qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << this << window() << newState; } void QWindowsWindow::setStyle(unsigned s) const @@ -1781,6 +1800,8 @@ void QWindowsWindow::windowEvent(QEvent *event) case QEvent::WindowBlocked: // Blocked by another modal window. setEnabled(false); setFlag(BlockedByModal); + if (hasMouseCapture()) + ReleaseCapture(); break; case QEvent::WindowUnblocked: setEnabled(true); @@ -1796,6 +1817,47 @@ void QWindowsWindow::propagateSizeHints() qCDebug(lcQpaWindows) << __FUNCTION__ << this << window(); } +bool QWindowsWindow::handleGeometryChangingMessage(MSG *message, const QWindow *qWindow, const QMargins &marginsDp) +{ +#ifndef Q_OS_WINCE + if (!qWindow->isTopLevel()) // Implement hasHeightForWidth(). + return false; + WINDOWPOS *windowPos = reinterpret_cast(message->lParam); + if ((windowPos->flags & (SWP_NOCOPYBITS | SWP_NOSIZE))) + return false; + const QRect suggestedFrameGeometryDp(windowPos->x, windowPos->y, + windowPos->cx, windowPos->cy); + const qreal factor = QWindowsScaling::factor(); + const QRect suggestedGeometryDp = suggestedFrameGeometryDp - marginsDp; + const QRectF suggestedGeometry = QRectF(QPointF(suggestedGeometryDp.topLeft()) / factor, + QSizeF(suggestedGeometryDp.size()) / factor); + const QRectF correctedGeometryF = + qt_window_private(const_cast(qWindow))->closestAcceptableGeometry(suggestedGeometry); + if (!correctedGeometryF.isValid()) + return false; + const QRect correctedFrameGeometryDp + = QRectF(correctedGeometryF.topLeft() * factor, + correctedGeometryF.size() * factor).toRect() + + marginsDp; + if (correctedFrameGeometryDp == suggestedFrameGeometryDp) + return false; + windowPos->x = correctedFrameGeometryDp.left(); + windowPos->y = correctedFrameGeometryDp.top(); + windowPos->cx = correctedFrameGeometryDp.width(); + windowPos->cy = correctedFrameGeometryDp.height(); + return true; +#else // !Q_OS_WINCE + Q_UNUSED(message) + return false; +#endif +} + +bool QWindowsWindow::handleGeometryChanging(MSG *message) const +{ + const QMargins marginsDp = window()->isTopLevel() ? frameMarginsDp() : QMargins(); + return QWindowsWindow::handleGeometryChangingMessage(message, window(), marginsDp); +} + QMargins QWindowsWindow::frameMarginsDp() const { // Frames are invalidated by style changes (window state, flags). @@ -1803,7 +1865,12 @@ QMargins QWindowsWindow::frameMarginsDp() const // event sequences, introduce a dirty flag mechanism to be able // to cache results. if (testFlag(FrameDirty)) { - m_data.frame = QWindowsGeometryHint::frame(style(), exStyle()); + // Always skip calculating style-dependent margins for windows claimed to be frameless. + // This allows users to remove the margins by handling WM_NCCALCSIZE with WS_THICKFRAME set + // to ensure Areo snap still works (QTBUG-40578). + m_data.frame = window()->flags() & Qt::FramelessWindowHint + ? QMargins(0, 0, 0, 0) + : QWindowsGeometryHint::frame(style(), exStyle()); clearFlag(FrameDirty); } return m_data.frame + m_data.customMargins; @@ -2087,8 +2154,8 @@ void QWindowsWindow::setCursor(const QWindowsWindowCursor &c) #ifndef QT_NO_CURSOR if (c.handle() != m_cursor.handle()) { const bool apply = applyNewCursor(window()); - qCDebug(lcQpaWindows) <createWindowSurface(m_data.hwnd, nativeConfig); + if (!m_surface) { + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + m_surface = staticOpenGLContext->createWindowSurface(m_data.hwnd, nativeConfig, err); + } return m_surface; #endif } +void QWindowsWindow::invalidateSurface() +{ +#ifndef QT_NO_OPENGL + if (m_surface) { + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + staticOpenGLContext->destroyWindowSurface(m_surface); + m_surface = 0; + } +#endif // QT_NO_OPENGL +} + +void QWindowsWindow::setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes) +{ + if (!window->handle()) + return; + static_cast(window->handle())->registerTouchWindow(touchTypes); +} + +void QWindowsWindow::registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes) +{ +#ifndef Q_OS_WINCE + if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch) + && window()->type() != Qt::ForeignWindow) { + ULONG touchFlags = 0; + const bool ret = QWindowsContext::user32dll.isTouchWindow(m_data.hwnd, &touchFlags); + // Return if it is not a touch window or the flags are already set by a hook + // such as HCBT_CREATEWND + if (ret || touchFlags != 0) + return; + if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, (ULONG)touchTypes)) + setFlag(TouchRegistered); + else + qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(window()->objectName())); + } +#endif // !Q_OS_WINCE +} + +void QWindowsWindow::aboutToMakeCurrent() +{ +#ifndef QT_NO_OPENGL + // For RasterGLSurface windows, that become OpenGL windows dynamically, it might be + // time to set up some GL specifics. This is particularly important for layered + // windows (WS_EX_LAYERED due to alpha > 0). + const bool isCompositing = qt_window_private(window())->compositing; + if (isCompositing != testFlag(Compositing)) { + if (isCompositing) + setFlag(Compositing); + else + clearFlag(Compositing); + + updateGLWindowSettings(window(), m_data.hwnd, m_data.flags, m_opacity); + } +#endif +} + QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h similarity index 91% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h index 4fa2e5dba..71d060ba2 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -40,9 +40,9 @@ #endif #include "qwindowsscaling.h" #include "qwindowscursor.h" -#include "qwindowsopenglcontext.h" #include +#include QT_BEGIN_NAMESPACE @@ -84,6 +84,7 @@ struct QWindowCreationContext #endif QWindowsGeometryHint geometryHint; + const QWindow *window; DWORD style; DWORD exStyle; QRect requestedGeometry; @@ -106,9 +107,6 @@ struct QWindowsWindowData QMargins customMargins; // User-defined, additional frame for NCCALCSIZE HWND hwnd; bool embedded; -#ifndef QT_NO_OPENGL - QSharedPointer staticOpenGLContext; -#endif // QT_NO_OPENGL static QWindowsWindowData create(const QWindow *w, const QWindowsWindowData ¶meters, @@ -138,7 +136,9 @@ public: Exposed = 0x10000, WithinCreate = 0x20000, WithinMaximize = 0x40000, - MaximizeToFullScreen = 0x80000 + MaximizeToFullScreen = 0x80000, + InputMethodDisabled = 0x100000, + Compositing = 0x200000 }; QWindowsWindow(QWindow *window, const QWindowsWindowData &data); @@ -182,6 +182,8 @@ public: void windowEvent(QEvent *event); void propagateSizeHints() Q_DECL_OVERRIDE; + static bool handleGeometryChangingMessage(MSG *message, const QWindow *qWindow, const QMargins &marginsDp); + bool handleGeometryChanging(MSG *message) const; QMargins frameMarginsDp() const; QMargins frameMargins() const Q_DECL_OVERRIDE { return frameMarginsDp() / QWindowsScaling::factor(); } @@ -238,8 +240,6 @@ public: void setCursor(const QWindowsWindowCursor &c); void applyCursor(); - static QByteArray debugWindowFlags(Qt::WindowFlags wf); - inline bool testFlag(unsigned f) const { return (m_flags & f) != 0; } inline void setFlag(unsigned f) const { m_flags |= f; } inline void clearFlag(unsigned f) const { m_flags &= ~f; } @@ -248,7 +248,9 @@ public: bool isEnabled() const; void setWindowIcon(const QIcon &icon); - void *surface(void *nativeConfig); + void *surface(void *nativeConfig, int *err); + void invalidateSurface() Q_DECL_OVERRIDE; + void aboutToMakeCurrent(); #ifndef Q_OS_WINCE void setAlertState(bool enabled); @@ -257,6 +259,9 @@ public: void stopAlertWindow(); #endif + static void setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes); + void registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes = QWindowsWindowFunctions::NormalTouch); + private: inline void show_sys() const; inline void hide_sys() const; @@ -272,7 +277,7 @@ private: void destroyWindow(); inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } void setDropSiteEnabled(bool enabled); - void updateDropSite(); + void updateDropSite(bool topLevel); void handleGeometryChange(); void handleWindowStateChange(Qt::WindowState state); inline void destroyIcon(); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp similarity index 95% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp index 03fad7a72..ea8aa43b2 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -327,16 +327,13 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) This signal is emitted when the user selects a \a filter. */ -//#if defined(Q_WS_WIN) || defined(Q_WS_MAC) -//bool Q_WIDGETS_EXPORT qt_use_native_dialogs = true; // for the benefit of testing tools, until we have a proper API -//#endif - QT_BEGIN_INCLUDE_NAMESPACE -#ifdef Q_WS_WIN +#ifdef Q_DEAD_CODE_FROM_QT4_WIN #include #endif +#include #include -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC #include #endif QT_END_INCLUDE_NAMESPACE @@ -389,9 +386,8 @@ QFileDialog::QFileDialog(const QFileDialogArgs &args) QFileDialog::~QFileDialog() { #ifndef QT_NO_SETTINGS - QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - settings.beginGroup(QLatin1String("Qt")); - settings.setValue(QLatin1String("filedialog"), saveState()); + Q_D(QFileDialog); + d->saveSettings(); #endif } @@ -507,34 +503,7 @@ bool QFileDialog::restoreState(const QByteArray &state) if (!d->usingWidgets()) return true; - if (!d->qFileDialogUi->splitter->restoreState(d->splitterState)) - return false; - QList list = d->qFileDialogUi->splitter->sizes(); - if (list.count() >= 2 && (list.at(0) == 0 || list.at(1) == 0)) { - for (int i = 0; i < list.count(); ++i) - list[i] = d->qFileDialogUi->splitter->widget(i)->sizeHint().width(); - d->qFileDialogUi->splitter->setSizes(list); - } - - d->qFileDialogUi->sidebar->setUrls(d->sidebarUrls); - while (history.count() > 5) - history.pop_front(); - setHistory(history); - QHeaderView *headerView = d->qFileDialogUi->treeView->header(); - if (!headerView->restoreState(d->headerData)) - return false; - - QList actions = headerView->actions(); - QAbstractItemModel *abstractModel = d->model; -#ifndef QT_NO_PROXYMODEL - if (d->proxyModel) - abstractModel = d->proxyModel; -#endif - int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1); - for (int i = 1; i < total; ++i) - actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i)); - - return true; + return d->restoreWidgetState(history, -1); } /*! @@ -590,10 +559,6 @@ void QFileDialogPrivate::helperPrepareShow(QPlatformDialogHelper *) options->setHistory(q->history()); if (usingWidgets()) options->setSidebarUrls(qFileDialogUi->sidebar->urls()); - const QDir directory = q->directory(); - options->setInitialDirectory(directory.exists() ? - QUrl::fromLocalFile(directory.absolutePath()) : - QUrl()); if (options->initiallySelectedNameFilter().isEmpty()) options->setInitiallySelectedNameFilter(q->selectedNameFilter()); if (options->initiallySelectedFiles().isEmpty()) @@ -928,12 +893,17 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url) /*! Sets the file dialog's current \a directory. + + \note On iOS, if you set \a directory to \l{QStandardPaths::standardLocations()} + {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}, + a native image picker dialog will be used for accessing the user's photo album. + The filename returned can be loaded using QFile and related APIs. + This feature was added in Qt 5.5. */ void QFileDialog::setDirectory(const QString &directory) { Q_D(QFileDialog); QString newDirectory = directory; - QFileInfo info(directory); //we remove .. and . from the given path if exist if (!directory.isEmpty()) newDirectory = QDir::cleanPath(directory); @@ -942,7 +912,7 @@ void QFileDialog::setDirectory(const QString &directory) return; QUrl newDirUrl = QUrl::fromLocalFile(newDirectory); - d->setLastVisitedDirectory(newDirUrl); + QFileDialogPrivate::setLastVisitedDirectory(newDirUrl); d->options->setInitialDirectory(QUrl::fromLocalFile(directory)); if (!d->usingWidgets()) { @@ -985,6 +955,16 @@ QDir QFileDialog::directory() const \note The non-native QFileDialog supports only local files. + \note On Windows, it is possible to pass URLs representing + one of the \e {virtual folders}, such as "Computer" or "Network". + This is done by passing a QUrl using the scheme \c clsid followed + by the CLSID value with the curly braces removed. For example the URL + \c clsid:374DE290-123F-4565-9164-39C4925E467B denotes the download + location. For a complete list of possible values, see the MSDN documentation on + \l{https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx}{KNOWNFOLDERID}. + This feature was added in Qt 5.5. + + \sa QUuid \since 5.2 */ void QFileDialog::setDirectoryUrl(const QUrl &directory) @@ -993,14 +973,14 @@ void QFileDialog::setDirectoryUrl(const QUrl &directory) if (!directory.isValid()) return; - d->setLastVisitedDirectory(directory); + QFileDialogPrivate::setLastVisitedDirectory(directory); d->options->setInitialDirectory(directory); if (d->nativeDialogInUse) d->setDirectory_sys(directory); else if (directory.isLocalFile()) setDirectory(directory.toLocalFile()); - else + else if (d->usingWidgets()) qWarning() << "Non-native QFileDialog supports only local files"; } @@ -1227,7 +1207,7 @@ QByteArray QFileDialogPrivate::userSelectedRemoteContent() const return QByteArray(); } -QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const +QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList &filesToFix) const { QStringList files; for (int i=0; ishowHiddenAction->setChecked((filters & QDir::Hidden)); } +#ifndef QT_NO_MIMETYPE + static QString nameFilterForMime(const QString &mimeType) { QMimeDatabase db; @@ -1609,6 +1591,8 @@ void QFileDialog::selectMimeTypeFilter(const QString &filter) selectNameFilter(text); } +#endif // QT_NO_MIMETYPE + /*! \property QFileDialog::viewMode \brief the way files and directories are displayed in the dialog @@ -2680,6 +2664,104 @@ void QFileDialog::accept() } } +#ifndef QT_NO_SETTINGS +void QFileDialogPrivate::saveSettings() +{ + Q_Q(QFileDialog); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + settings.beginGroup(QLatin1String("FileDialog")); + + if (usingWidgets()) { + settings.setValue(QLatin1String("sidebarWidth"), qFileDialogUi->splitter->sizes().first()); + settings.setValue(QLatin1String("shortcuts"), QUrl::toStringList(qFileDialogUi->sidebar->urls())); + settings.setValue(QLatin1String("treeViewHeader"), qFileDialogUi->treeView->header()->saveState()); + } + QStringList historyUrls; + foreach (const QString &path, q->history()) + historyUrls << QUrl::fromLocalFile(path).toString(); + settings.setValue(QLatin1String("history"), historyUrls); + settings.setValue(QLatin1String("lastVisited"), lastVisitedDir()->toString()); + const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode")); + settings.setValue(QLatin1String("viewMode"), QLatin1String(viewModeMeta.key(q->viewMode()))); + settings.setValue(QLatin1String("qtVersion"), QLatin1String(QT_VERSION_STR)); +} + +bool QFileDialogPrivate::restoreFromSettings() +{ + Q_Q(QFileDialog); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + if (!settings.childGroups().contains(QLatin1String("FileDialog"))) + return false; + settings.beginGroup(QLatin1String("FileDialog")); + + q->setDirectoryUrl(lastVisitedDir()->isEmpty() ? settings.value(QLatin1String("lastVisited")).toUrl() : *lastVisitedDir()); + + QByteArray viewModeStr = settings.value(QLatin1String("viewMode")).toString().toLatin1(); + const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode")); + bool ok = false; + int viewMode = viewModeMeta.keyToValue(viewModeStr.constData(), &ok); + if (!ok) + viewMode = QFileDialog::List; + q->setViewMode(static_cast(viewMode)); + + sidebarUrls = QUrl::fromStringList(settings.value(QLatin1String("shortcuts")).toStringList()); + headerData = settings.value(QLatin1String("treeViewHeader")).toByteArray(); + + if (!usingWidgets()) + return true; + + QStringList history; + foreach (const QString &urlStr, settings.value(QLatin1String("history")).toStringList()) { + QUrl url(urlStr); + if (url.isLocalFile()) + history << url.toLocalFile(); + } + + return restoreWidgetState(history, settings.value(QLatin1String("sidebarWidth"), -1).toInt()); +} +#endif // QT_NO_SETTINGS + +bool QFileDialogPrivate::restoreWidgetState(QStringList &history, int splitterPosition) +{ + Q_Q(QFileDialog); + if (splitterPosition >= 0) { + QList splitterSizes; + splitterSizes.append(splitterPosition); + splitterSizes.append(qFileDialogUi->splitter->widget(1)->sizeHint().width()); + qFileDialogUi->splitter->setSizes(splitterSizes); + } else { + if (!qFileDialogUi->splitter->restoreState(splitterState)) + return false; + QList list = qFileDialogUi->splitter->sizes(); + if (list.count() >= 2 && (list.at(0) == 0 || list.at(1) == 0)) { + for (int i = 0; i < list.count(); ++i) + list[i] = qFileDialogUi->splitter->widget(i)->sizeHint().width(); + qFileDialogUi->splitter->setSizes(list); + } + } + + qFileDialogUi->sidebar->setUrls(sidebarUrls); + while (history.count() > 5) + history.pop_front(); + q->setHistory(history); + + QHeaderView *headerView = qFileDialogUi->treeView->header(); + if (!headerView->restoreState(headerData)) + return false; + + QList actions = headerView->actions(); + QAbstractItemModel *abstractModel = model; +#ifndef QT_NO_PROXYMODEL + if (proxyModel) + abstractModel = proxyModel; +#endif + int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1); + for (int i = 1; i < total; ++i) + actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i)); + + return true; +} + /*! \internal @@ -2706,8 +2788,12 @@ void QFileDialogPrivate::init(const QUrl &directory, const QString &nameFilter, q->selectFile(initialSelection(directory)); #ifndef QT_NO_SETTINGS - const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + // Try to restore from the FileDialog settings group; if it fails, fall back + // to the pre-5.5 QByteArray serialized settings. + if (!restoreFromSettings()) { + const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + } #endif #if defined(Q_EMBEDDED_SMALLSCREEN) @@ -2731,7 +2817,7 @@ void QFileDialogPrivate::createWidgets() return; Q_Q(QFileDialog); model = new QFileSystemModel(q); - options->setFilter(model->filter()); + model->setFilter(options->filter()); model->setObjectName(QLatin1String("qt_filesystem_model")); if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) model->setNameFilterDisables(helper->defaultNameFilterDisables()); @@ -2855,8 +2941,12 @@ void QFileDialogPrivate::createWidgets() createMenuActions(); #ifndef QT_NO_SETTINGS - const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + // Try to restore from the FileDialog settings group; if it fails, fall back + // to the pre-5.5 QByteArray serialized settings. + if (!restoreFromSettings()) { + const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + } #endif // Initial widget states from options @@ -2867,9 +2957,12 @@ void QFileDialogPrivate::createWidgets() if (!options->sidebarUrls().isEmpty()) q->setSidebarUrls(options->sidebarUrls()); q->setDirectoryUrl(options->initialDirectory()); +#ifndef QT_NO_MIMETYPE if (!options->mimeTypeFilters().isEmpty()) q->setMimeTypeFilters(options->mimeTypeFilters()); - else if (!options->nameFilters().isEmpty()) + else +#endif + if (!options->nameFilters().isEmpty()) q->setNameFilters(options->nameFilters()); q->selectNameFilter(options->initiallySelectedNameFilter()); q->setDefaultSuffix(options->defaultSuffix()); @@ -3610,7 +3703,7 @@ void QFileDialogPrivate::_q_rowsInserted(const QModelIndex &parent) return; } -void QFileDialogPrivate::_q_fileRenamed(const QString &path, const QString oldName, const QString newName) +void QFileDialogPrivate::_q_fileRenamed(const QString &path, const QString &oldName, const QString &newName) { const QFileDialog::FileMode fileMode = q_func()->fileMode(); if (fileMode == QFileDialog::Directory || fileMode == QFileDialog::DirectoryOnly) { diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h similarity index 93% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h index b13e8b2c6..0dca0ef18 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -55,7 +55,6 @@ class QAbstractProxyModel; class Q_WIDGETS_EXPORT QFileDialog : public QDialog { Q_OBJECT - Q_ENUMS(ViewMode FileMode AcceptMode Option) Q_FLAGS(Options) Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) @@ -70,8 +69,11 @@ class Q_WIDGETS_EXPORT QFileDialog : public QDialog public: enum ViewMode { Detail, List }; + Q_ENUM(ViewMode) enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }; + Q_ENUM(FileMode) enum AcceptMode { AcceptOpen, AcceptSave }; + Q_ENUM(AcceptMode) enum DialogLabel { LookIn, FileName, FileType, Accept, Reject }; enum Option @@ -85,6 +87,7 @@ public: HideNameFilterDetails = 0x00000040, DontUseCustomDirectoryIcons = 0x00000080 }; + Q_ENUM(Option) Q_DECLARE_FLAGS(Options, Option) QFileDialog(QWidget *parent, Qt::WindowFlags f); @@ -117,9 +120,11 @@ public: void selectNameFilter(const QString &filter); QString selectedNameFilter() const; +#ifndef QT_NO_MIMETYPE void setMimeTypeFilters(const QStringList &filters); QStringList mimeTypeFilters() const; void selectMimeTypeFilter(const QString &filter); +#endif QDir::Filters filter() const; void setFilter(QDir::Filters filters); @@ -173,15 +178,9 @@ public: void setOptions(Options options); Options options() const; -#ifdef Q_NO_USING_KEYWORD -#ifndef Q_QDOC - void open() { QDialog::open(); } -#endif -#else using QDialog::open; -#endif void open(QObject *receiver, const char *member); - void setVisible(bool visible); + void setVisible(bool visible) Q_DECL_OVERRIDE; Q_SIGNALS: void fileSelected(const QString &file); @@ -257,9 +256,9 @@ public: protected: QFileDialog(const QFileDialogArgs &args); - void done(int result); - void accept(); - void changeEvent(QEvent *e); + void done(int result) Q_DECL_OVERRIDE; + void accept() Q_DECL_OVERRIDE; + void changeEvent(QEvent *e) Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QFileDialog) @@ -293,7 +292,8 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_autoCompleteFileName(const QString &text)) Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent)) Q_PRIVATE_SLOT(d_func(), void _q_fileRenamed(const QString &path, - const QString oldName, const QString newName)) + const QString &oldName, + const QString &newName)) friend class QPlatformDialogHelper; }; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h similarity index 89% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h index cf70355fd..16fa44ed9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -124,7 +124,7 @@ public: QStringList typedFiles() const; QList userSelectedFiles() const; QByteArray userSelectedRemoteContent() const; - QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const; + QStringList addDefaultSuffixToFiles(const QStringList &filesToFix) const; QList addDefaultSuffixToUrls(const QList &urlsToFix) const; bool removeDirectory(const QString &path); void setLabelTextControl(QFileDialog::DialogLabel label, const QString &text); @@ -182,7 +182,13 @@ public: #endif } - void setLastVisitedDirectory(const QUrl &dir); +#ifndef QT_NO_SETTINGS + void saveSettings(); + bool restoreFromSettings(); +#endif + + bool restoreWidgetState(QStringList &history, int splitterPosition); + static void setLastVisitedDirectory(const QUrl &dir); void retranslateWindowTitle(); void retranslateStrings(); void emitFilesSelected(const QStringList &files); @@ -213,7 +219,7 @@ public: void _q_goToUrl(const QUrl &url); void _q_autoCompleteFileName(const QString &); void _q_rowsInserted(const QModelIndex & parent); - void _q_fileRenamed(const QString &path, const QString oldName, const QString newName); + void _q_fileRenamed(const QString &path, const QString &oldName, const QString &newName); // layout #ifndef QT_NO_PROXYMODEL @@ -244,7 +250,7 @@ public: // setVisible_sys returns true if it ends up showing a native // dialog. Returning false means that a non-native dialog must be // used instead. - bool canBeNativeDialog() const; + bool canBeNativeDialog() const Q_DECL_OVERRIDE; inline bool usingWidgets() const; void setDirectory_sys(const QUrl &directory); @@ -275,9 +281,9 @@ public: ~QFileDialogPrivate(); private: - virtual void initHelper(QPlatformDialogHelper *); - virtual void helperPrepareShow(QPlatformDialogHelper *); - virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *); + virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE; + virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE; + virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE; Q_DISABLE_COPY(QFileDialogPrivate) }; @@ -287,7 +293,7 @@ class QFileDialogLineEdit : public QLineEdit public: QFileDialogLineEdit(QWidget *parent = 0) : QLineEdit(parent), d_ptr(0){} void setFileDialogPrivate(QFileDialogPrivate *d_pointer) {d_ptr = d_pointer; } - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; bool hideOnEsc; private: QFileDialogPrivate *d_ptr; @@ -298,10 +304,10 @@ class QFileDialogComboBox : public QComboBox public: QFileDialogComboBox(QWidget *parent = 0) : QComboBox(parent), urlModel(0) {} void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - void showPopup(); + void showPopup() Q_DECL_OVERRIDE; void setHistory(const QStringList &paths); QStringList history() const { return m_history; } - void paintEvent(QPaintEvent *); + void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; private: QUrlModel *urlModel; @@ -314,9 +320,9 @@ class QFileDialogListView : public QListView public: QFileDialogListView(QWidget *parent = 0); void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - QSize sizeHint() const; + QSize sizeHint() const Q_DECL_OVERRIDE; protected: - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; private: QFileDialogPrivate *d_ptr; }; @@ -326,10 +332,10 @@ class QFileDialogTreeView : public QTreeView public: QFileDialogTreeView(QWidget *parent); void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - QSize sizeHint() const; + QSize sizeHint() const Q_DECL_OVERRIDE; protected: - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; private: QFileDialogPrivate *d_ptr; }; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp similarity index 97% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp index e99b1c322..1bdaff5b7 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -35,7 +35,7 @@ #include "qapplication_p.h" #include "qbrush.h" #include "qcursor.h" -#include "qdesktopwidget.h" +#include "qdesktopwidget_p.h" #include "qevent.h" #include "qhash.h" #include "qlayout.h" @@ -53,7 +53,7 @@ #ifndef QT_NO_ACCESSIBILITY # include "qaccessible.h" #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # include "qt_mac_p.h" # include "qt_cocoa_helpers_mac_p.h" # include "qmainwindow.h" @@ -76,7 +76,7 @@ #include #include #include -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # include #endif #include @@ -108,7 +108,7 @@ QT_BEGIN_NAMESPACE static bool qt_enable_backingstore = true; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 // for compatibility with Qt 4.0 Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) { @@ -116,7 +116,7 @@ Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) } #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false; #endif @@ -131,7 +131,7 @@ static inline bool hasBackingStoreSupport() return true; } -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # define QT_NO_PAINT_DEBUG #endif @@ -272,13 +272,13 @@ QWidgetPrivate::QWidgetPrivate(int version) #if defined(Q_OS_WIN) , noPaintOnScreen(0) #endif -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) , picture(0) -#elif defined(Q_WS_WIN) +#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) #ifndef QT_NO_GESTURES , nativeGesturePanEnabled(0) #endif -#elif defined(Q_WS_MAC) +#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) , needWindowChange(0) , window_event(0) , qd_hd(0) @@ -294,7 +294,7 @@ QWidgetPrivate::QWidgetPrivate(int version) isWidget = true; memset(high_attributes, 0, sizeof(high_attributes)); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC drawRectOriginalAdded = false; originalDrawMethod = true; changeMethods = false; @@ -303,7 +303,7 @@ QWidgetPrivate::QWidgetPrivate(int version) toolbar_ancestor = 0; flushRequested = false; touchEventsEnabled = false; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "widgets" << ++count; @@ -359,12 +359,12 @@ void QWidgetPrivate::setWSGeometry() void QWidgetPrivate::updateWidgetTransform(QEvent *event) { Q_Q(QWidget); - if (q == qGuiApp->focusObject() || event->type() == QEvent::FocusIn) { + if (q == QGuiApplication::focusObject() || event->type() == QEvent::FocusIn) { QTransform t; QPoint p = q->mapTo(q->topLevelWidget(), QPoint(0,0)); t.translate(p.x(), p.y()); - qApp->inputMethod()->setInputItemTransform(t); - qApp->inputMethod()->setInputItemRectangle(q->rect()); + QGuiApplication::inputMethod()->setInputItemTransform(t); + QGuiApplication::inputMethod()->setInputItemRectangle(q->rect()); } } @@ -1063,7 +1063,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) // Only enable this on non-Mac platforms. Since the old way of doing this would // interpret WindowSystemMenuHint as a close button and we can't change that behavior // we can't just add this in. -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint)) # ifdef Q_OS_WIN && type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs. @@ -1111,9 +1111,10 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) if (allWidgets) allWidgets->insert(q); - QWidget *desktopWidget = 0; + int targetScreen = -1; if (parentWidget && parentWidget->windowType() == Qt::Desktop) { - desktopWidget = parentWidget; + const QDesktopScreenWidget *sw = qobject_cast(parentWidget); + targetScreen = sw ? sw->screenNumber() : 0; parentWidget = 0; } @@ -1126,17 +1127,17 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) } #endif -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (desktopWidget) { // make sure the widget is created on the same screen as the // programmer specified desktop widget xinfo = desktopWidget->d_func()->xinfo; } #endif - if (desktopWidget) { - const int screen = desktopWidget->d_func()->topData()->screenIndex; + if (targetScreen >= 0) { + topData()->initialScreenIndex = targetScreen; if (QWindow *window = q->windowHandle()) - window->setScreen(QGuiApplication::screens().value(screen, 0)); + window->setScreen(QGuiApplication::screens().value(targetScreen, Q_NULLPTR)); } data.fstrut_dirty = true; @@ -1160,7 +1161,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) mustHaveWindowHandle = 1; q->setAttribute(Qt::WA_NativeWindow); } -//#ifdef Q_WS_MAC +//#ifdef Q_DEAD_CODE_FROM_QT4_MAC // q->setAttribute(Qt::WA_NativeWindow); //#endif @@ -1185,9 +1186,9 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque()); } data.fnt = QFont(data.fnt, q); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) data.fnt.x11SetScreen(xinfo.screen()); -#endif // Q_WS_X11 +#endif // Q_DEAD_CODE_FROM_QT4_X11 q->setAttribute(Qt::WA_PendingMoveEvent); q->setAttribute(Qt::WA_PendingResizeEvent); @@ -1204,7 +1205,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) extraPaintEngine = 0; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If we add a child to the unified toolbar, we have to redirect the painting. if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) { if (parentWidget->d_func()->unifiedSurface) { @@ -1212,7 +1213,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset); } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC } @@ -1283,10 +1284,8 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) } - static int paintOnScreenEnv = -1; - if (paintOnScreenEnv == -1) - paintOnScreenEnv = qgetenv("QT_ONSCREEN_PAINT").toInt() > 0 ? 1 : 0; - if (paintOnScreenEnv == 1) + static const bool paintOnScreenEnv = qEnvironmentVariableIntValue("QT_ONSCREEN_PAINT") > 0; + if (paintOnScreenEnv) setAttribute(Qt::WA_PaintOnScreen); if (QApplicationPrivate::testAttribute(Qt::AA_NativeWindows)) @@ -1297,14 +1296,14 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) << "Alien?" << !testAttribute(Qt::WA_NativeWindow); #endif -#if defined (Q_WS_WIN) && !defined(QT_NO_DRAGANDDROP) +#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) // Unregister the dropsite (if already registered) before we // re-create the widget with a native window. if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow) && d->extra && d->extra->dropTarget) { d->registerDropSite(false); } -#endif // defined (Q_WS_WIN) && !defined(QT_NO_DRAGANDDROP) +#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) d->updateIsOpaque(); @@ -1414,8 +1413,15 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO win->setGeometry(q->geometry()); else win->resize(q->size()); - if (win->isTopLevel()) - win->setScreen(QGuiApplication::screens().value(topData()->screenIndex, 0)); + if (win->isTopLevel()) { + int screenNumber = topData()->initialScreenIndex; + topData()->initialScreenIndex = -1; + if (screenNumber < 0) { + screenNumber = q->windowType() != Qt::Desktop + ? QApplication::desktop()->screenNumber(q) : 0; + } + win->setScreen(QGuiApplication::screens().value(screenNumber, Q_NULLPTR)); + } QSurfaceFormat format = win->requestedFormat(); if ((flags & Qt::Window) && win->surfaceType() != QSurface::OpenGLSurface @@ -1585,7 +1591,7 @@ QWidget::~QWidget() } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11)|| defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC) else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } @@ -1629,7 +1635,7 @@ QWidget::~QWidget() d->blockSig = blocked; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // QCocoaView holds a pointer back to this widget. Clear it now // to make sure it's not followed later on. The lifetime of the // QCocoaView might exceed the lifetime of this widget in cases @@ -1680,7 +1686,7 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier const WId oldWinId = data.winid; data.winid = id; -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) hd = id; // X11: hd == ident #endif if (mapper && id && !userDesktopWidget) { @@ -1715,10 +1721,10 @@ void QWidgetPrivate::createTLExtra() x->embedded = 0; x->window = 0; x->shareContext = 0; - x->screenIndex = 0; -#ifdef Q_WS_MAC + x->initialScreenIndex = -1; +#ifdef Q_DEAD_CODE_FROM_QT4_MAC x->wasMaximized = false; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "tlextra" << ++count; @@ -2112,14 +2118,14 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt bool alsoNonOpaque) const { Q_Q(const QWidget); - static int disableSubtractOpaqueSiblings = qgetenv("QT_NO_SUBTRACTOPAQUESIBLINGS").toInt(); + static int disableSubtractOpaqueSiblings = qEnvironmentVariableIntValue("QT_NO_SUBTRACTOPAQUESIBLINGS"); if (disableSubtractOpaqueSiblings || q->isWindow()) return; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (q->d_func()->isInUnifiedToolbar) return; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC QRect clipBoundingRect; bool dirtyClipBoundingRect = true; @@ -2253,7 +2259,7 @@ void QWidgetPrivate::updateIsOpaque() #endif //QT_NO_GRAPHICSEFFECT Q_Q(QWidget); -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 if (q->testAttribute(Qt::WA_X11OpenGLOverlay)) { setOpaque(false); return; @@ -2312,7 +2318,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus Q_ASSERT(painter); if (brush.style() == Qt::TexturePattern) { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // Optimize pattern filling on mac by using HITheme directly // when filling with the standard widget background. // Defined in qmacstyle_mac.cpp @@ -2324,7 +2330,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC } else if (brush.gradient() && brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode) { @@ -2396,7 +2402,7 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int visible widgets. */ -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC extern QPointer qt_button_down; #else extern QWidget *qt_button_down; @@ -2602,6 +2608,8 @@ QString QWidget::styleSheet() const void QWidget::setStyleSheet(const QString& styleSheet) { Q_D(QWidget); + if (data->in_destructor) + return; d->createExtra(); QStyleSheetStyle *proxy = qobject_cast(d->extra->style); @@ -2683,7 +2691,7 @@ void QWidget::setStyle(QStyle *style) } void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC metalHack #endif ) @@ -2694,7 +2702,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool QPointer origStyle; #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // the metalhack boolean allows Qt/Mac to do a proper re-polish depending // on how the Qt::WA_MacBrushedMetal attribute is set. It is only ever // set when changing that attribute and passes the widget's CURRENT style. @@ -2714,12 +2722,12 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool if (q->windowType() != Qt::Desktop) { if (polished) { oldStyle->unpolish(q); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (metalHack) macUpdateMetalAttribute(); #endif q->style()->polish(q); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC } else if (metalHack) { macUpdateMetalAttribute(); #endif @@ -3084,7 +3092,7 @@ bool QWidget::isFullScreen() const */ void QWidget::showFullScreen() { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar is enabled, we have to disable it before going fullscreen. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) { @@ -3092,7 +3100,7 @@ void QWidget::showFullScreen() QMainWindowLayout *mainLayout = qobject_cast(mainWindow->layout()); mainLayout->activateUnifiedToolbarAfterFullScreen = true; } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC ensurePolished(); setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized)) @@ -3120,7 +3128,7 @@ void QWidget::showMaximized() setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowMaximized); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3131,7 +3139,7 @@ void QWidget::showMaximized() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC setVisible(true); } @@ -3149,7 +3157,7 @@ void QWidget::showNormal() setWindowState(windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen)); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3160,7 +3168,7 @@ void QWidget::showNormal() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC setVisible(true); } @@ -3221,7 +3229,11 @@ void QWidget::addAction(QAction *action) \sa removeAction(), QMenu, addAction() */ +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +void QWidget::addActions(const QList &actions) +#else void QWidget::addActions(QList actions) +#endif { for(int i = 0; i < actions.count(); i++) insertAction(0, actions.at(i)); @@ -3368,7 +3380,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (w && !w->testAttribute(attribute)) w->d_func()->setEnabled_helper(enable); } -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (q->testAttribute(Qt::WA_SetCursor) || q->isWindow()) { // enforce the windows behavior of clearing the cursor on // disabled widgets @@ -3382,7 +3394,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) qt_qpa_set_cursor(q, false); } #endif -#if defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_MAC) setEnabled_helper_sys(enable); #endif #ifndef QT_NO_IM @@ -3391,10 +3403,10 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (enable) { if (focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } else { - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } } #endif //QT_NO_IM @@ -4274,7 +4286,7 @@ QPoint QWidget::mapFromParent(const QPoint &pos) const QWidget *QWidget::window() const { - QWidget *w = (QWidget *)this; + QWidget *w = const_cast(this); QWidget *p = w->parentWidget(); while (!w->isWindow() && p) { w = p; @@ -4486,7 +4498,7 @@ const QPalette &QWidget::palette() const ) { data->pal.setCurrentColorGroup(QPalette::Active); } else { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC extern bool qt_mac_can_clickThrough(const QWidget *); //qwidget_mac.cpp if (qt_mac_can_clickThrough(this)) data->pal.setCurrentColorGroup(QPalette::Active); @@ -4730,7 +4742,7 @@ void QWidgetPrivate::updateFont(const QFont &font) #endif data.fnt = QFont(font, q); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) // make sure the font set on this widget is associated with the correct screen data.fnt.x11SetScreen(xinfo.screen()); #endif @@ -4847,7 +4859,7 @@ void QWidget::unsetLayoutDirection() \fn QFontMetrics QWidget::fontMetrics() const Returns the font metrics for the widget's current font. - Equivalent to QFontMetrics(widget->font()). + Equivalent to \c QFontMetrics(widget->font()). \sa font(), fontInfo(), setFont() */ @@ -4856,7 +4868,7 @@ void QWidget::unsetLayoutDirection() \fn QFontInfo QWidget::fontInfo() const Returns the font info for the widget's current font. - Equivalent to QFontInto(widget->font()). + Equivalent to \c QFontInfo(widget->font()). \sa font(), fontMetrics(), setFont() */ @@ -4903,7 +4915,7 @@ void QWidget::setCursor(const QCursor &cursor) { Q_D(QWidget); // On Mac we must set the cursor even if it is the ArrowCursor. -#if !defined(Q_WS_MAC) +#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) if (cursor.shape() != Qt::ArrowCursor || (d->extra && d->extra->curs)) #endif @@ -5219,6 +5231,9 @@ QGraphicsEffect *QWidget::graphicsEffect() const \note This function will apply the effect on itself and all its children. + \note Graphics effects are not supported for OpenGL-based widgets, such as QGLWidget, + QOpenGLWidget and QQuickWidget. + \since 4.6 \sa graphicsEffect() @@ -5328,7 +5343,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset Q_ASSERT(!toBePainted.isEmpty()); Q_Q(QWidget); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC const QTransform originalTransform = painter->worldTransform(); const bool useDeviceCoordinates = originalTransform.isScaling(); if (!useDeviceCoordinates) { @@ -5339,7 +5354,10 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (size.isNull()) return; - QPixmap pixmap(size); + const qreal pixmapDevicePixelRatio = qreal(painter->device()->devicePixelRatio()); + QPixmap pixmap(size * pixmapDevicePixelRatio); + pixmap.setDevicePixelRatio(pixmapDevicePixelRatio); + if (!(renderFlags & QWidget::DrawWindowBackground) || !isOpaque) pixmap.fill(Qt::transparent); q->render(&pixmap, QPoint(), toBePainted, renderFlags); @@ -5352,7 +5370,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (restore) painter->setRenderHints(QPainter::SmoothPixmapTransform, false); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC } else { // Render via a pixmap in device coordinates (to avoid pixmap scaling). QTransform transform = originalTransform; @@ -5461,7 +5479,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP if (paintEngine) { setRedirected(pdev, -offset); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // (Alien support) Special case for Mac when redirecting: If the paint device // is of the Widget type we need to set WA_WState_InPaintEvent since painting // outside the paint event is not supported on QWidgets. The attributeis @@ -5538,12 +5556,12 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP } // Native widgets need to be marked dirty on screen so painting will be done in correct context - if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow())) + if (backingStore && !onScreen && !asRoot && (q->internalWinId() || (q->nativeParentWidget() && !q->nativeParentWidget()->isWindow()))) backingStore->markDirtyOnScreen(toBePainted, q, offset); //restore if (paintEngine) { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (pdev->devType() == QInternal::Widget) static_cast(pdev)->setAttribute(Qt::WA_WState_InPaintEvent, false); #endif @@ -5617,7 +5635,7 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset, if (paintRegion.isEmpty()) return; -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC QPainter *oldSharedPainter = inRenderWithPainter ? sharedPainter() : 0; // Use the target's shared painter if set (typically set when doing @@ -6236,7 +6254,7 @@ QString QWidget::windowRole() const */ void QWidget::setWindowRole(const QString &role) { -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) Q_D(QWidget); d->topData()->role = role; d->setWindowRole(); @@ -6378,7 +6396,7 @@ void QWidget::setFocus(Qt::FocusReason reason) f = f->d_func()->extra->focus_proxy; if (QApplication::focusWidget() == f -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) && GetFocus() == f->internalWinId() #endif ) @@ -6414,7 +6432,7 @@ void QWidget::setFocus(Qt::FocusReason reason) if (prev) { if (reason != Qt::PopupFocusReason && reason != Qt::MenuBarFocusReason && prev->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); } if (reason != Qt::NoFocusReason) { @@ -6537,7 +6555,7 @@ void QWidget::clearFocus() { if (hasFocus()) { if (testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); QFocusEvent focusAboutToChange(QEvent::FocusAboutToChange); QApplication::sendEvent(this, &focusAboutToChange); @@ -6563,7 +6581,7 @@ void QWidget::clearFocus() if (hasFocus()) { // Update proxy state QApplicationPrivate::setFocusWidget(0, Qt::OtherFocusReason); -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) if (!(windowType() == Qt::Popup) && GetFocus() == internalWinId()) SetFocus(0); else @@ -7118,14 +7136,16 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) bool needsShow = false; - if (!(data.window_state & Qt::WindowFullScreen) && (w == 0 || h == 0)) { - q->setAttribute(Qt::WA_OutsideWSRange, true); - if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) - hide_sys(); - data.crect = QRect(x, y, w, h); - } else if (q->isVisible() && q->testAttribute(Qt::WA_OutsideWSRange)) { - q->setAttribute(Qt::WA_OutsideWSRange, false); - needsShow = true; + if (q->isWindow()) { + if (!(data.window_state & Qt::WindowFullScreen) && (w == 0 || h == 0)) { + q->setAttribute(Qt::WA_OutsideWSRange, true); + if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) + hide_sys(); + data.crect = QRect(x, y, w, h); + } else if (q->isVisible() && q->testAttribute(Qt::WA_OutsideWSRange)) { + q->setAttribute(Qt::WA_OutsideWSRange, false); + needsShow = true; + } } if (q->isVisible()) { @@ -7193,7 +7213,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) */ QByteArray QWidget::saveGeometry() const { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // We check if the window was maximized during this invocation. If so, we need to record the // starting position as 0,0. Q_D(const QWidget); @@ -7204,7 +7224,7 @@ QByteArray QWidget::saveGeometry() const newFramePosition.moveTo(0, 0); newNormalPosition.moveTo(0, 0); } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC QByteArray array; QDataStream stream(&array, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_4_0); @@ -7218,13 +7238,13 @@ QByteArray QWidget::saveGeometry() const stream << magicNumber << majorVersion << minorVersion -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC << newFramePosition << newNormalPosition #else << frameGeometry() << normalGeometry() -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) @@ -7235,7 +7255,7 @@ QByteArray QWidget::saveGeometry() const /*! \since 4.2 - Restores the geometry and state top-level widgets stored in the + Restores the geometry and state of top-level widgets stored in the byte array \a geometry. Returns \c true on success; otherwise returns \c false. @@ -7295,6 +7315,8 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) stream >> restoredScreenWidth; const QDesktopWidget * const desktop = QApplication::desktop(); + if (restoredScreenNumber >= desktop->numScreens()) + restoredScreenNumber = desktop->primaryScreen(); const qreal screenWidthF = qreal(desktop->screenGeometry(restoredScreenNumber).width()); // Sanity check bailing out when large variations of screen sizes occur due to // high DPI scaling or different levels of DPI awareness. @@ -7322,9 +7344,6 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) .expandedTo(d_func()->adjustedSize())); } - if (restoredScreenNumber >= desktop->numScreens()) - restoredScreenNumber = desktop->primaryScreen(); - const QRect availableGeometry = desktop->availableGeometry(restoredScreenNumber); // Modify the restored geometry if we are about to restore to coordinates @@ -7333,7 +7352,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) // - The title bar is outside the available geometry. // - (Mac only) The window is higher than the available geometry. It must // be possible to bring the size grip on screen by moving the window. -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC restoredFrameGeometry.setHeight(qMin(restoredFrameGeometry.height(), availableGeometry.height())); restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight)); #endif @@ -7382,7 +7401,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) d_func()->topData()->normalGeometry = restoredNormalGeometry; } else { QPoint offset; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 if (isFullScreen()) offset = d_func()->topData()->fullScreenOffset; #endif @@ -7738,10 +7757,17 @@ void QWidgetPrivate::show_helper() + const bool isWindow = q->isWindow(); +#ifndef QT_NO_GRAPHICSVIEW + bool isEmbedded = isWindow && q->graphicsProxyWidget() != Q_NULLPTR; +#else + bool isEmbedded = false; +#endif + // popup handling: new popups and tools need to be raised, and // existing popups must be closed. Also propagate the current // windows's KeyboardFocusChange status. - if (q->isWindow()) { + if (isWindow && !isEmbedded) { if ((q->windowType() == Qt::Tool) || (q->windowType() == Qt::Popup) || q->windowType() == Qt::ToolTip) { q->raise(); if (q->parentWidget() && q->parentWidget()->window()->testAttribute(Qt::WA_KeyboardFocusChange)) @@ -7756,10 +7782,8 @@ void QWidgetPrivate::show_helper() // Automatic embedding of child windows of widgets already embedded into // QGraphicsProxyWidget when they are shown the first time. - bool isEmbedded = false; #ifndef QT_NO_GRAPHICSVIEW - if (q->isWindow()) { - isEmbedded = q->graphicsProxyWidget() ? true : false; + if (isWindow) { if (!isEmbedded && !bypassGraphicsProxyWidget(q)) { QGraphicsProxyWidget *ancestorProxy = nearestGraphicsProxyWidget(q->parentWidget()); if (ancestorProxy) { @@ -7775,7 +7799,7 @@ void QWidgetPrivate::show_helper() // On Windows, show the popup now so that our own focus handling // stores the correct old focus widget even if it's stolen in the // showevent -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) if (!isEmbedded && q->windowType() == Qt::Popup) qApp->d_func()->openPopup(q); #endif @@ -7898,7 +7922,7 @@ void QWidgetPrivate::hide_helper() if (!isEmbedded && (q->windowType() == Qt::Popup)) qApp->d_func()->closePopup(q); -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) if (q->isWindow() && !(q->windowType() == Qt::Popup) && q->parentWidget() && !q->parentWidget()->isHidden() && q->isActiveWindow()) q->parentWidget()->activateWindow(); // Activate parent @@ -8013,28 +8037,13 @@ void QWidget::setVisible(bool visible) && !parentWidget()->testAttribute(Qt::WA_WState_Created)) parentWidget()->window()->d_func()->createRecursively(); - //we have to at least create toplevels before applyX11SpecificCommandLineArguments - //but not children of non-visible parents + //create toplevels but not children of non-visible parents QWidget *pw = parentWidget(); if (!testAttribute(Qt::WA_WState_Created) && (isWindow() || pw->testAttribute(Qt::WA_WState_Created))) { create(); } - // Handling of the -qwindowgeometry, -geometry command line arguments - if (windowType() == Qt::Window && windowHandle()) { - static bool done = false; - if (!done) { - done = true; - const QRect oldGeometry = frameGeometry(); - const QRect geometry = QGuiApplicationPrivate::applyWindowGeometrySpecification(oldGeometry, windowHandle()); - if (oldGeometry.size() != geometry.size()) - resize(geometry.size()); - if (geometry.topLeft() != oldGeometry.topLeft()) - move(geometry.topLeft()); - } // done - } - bool wasResized = testAttribute(Qt::WA_Resized); Qt::WindowStates initialWindowState = windowState(); @@ -8093,7 +8102,7 @@ void QWidget::setVisible(bool visible) } else { // hide if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) return; -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) // reset WS_DISABLED style in a Blocked window if(isWindow() && testAttribute(Qt::WA_WState_Created) && QApplicationPrivate::isBlockedByModal(this)) @@ -8178,7 +8187,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) QWidget *widget = qobject_cast(childList.at(i)); if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden)) continue; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // Before doing anything we need to make sure that we don't leave anything in a non-consistent state. // When hiding a widget we need to make sure that no mouse_down events are active, because // the mouse_up event will never be received by a hidden widget or one of its descendants. @@ -8194,7 +8203,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) // supposed to trigger because it is not visible. if(widget == qt_button_down) qt_button_down = 0; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC if (spontaneous) widget->setAttribute(Qt::WA_Mapped, false); else @@ -8429,7 +8438,7 @@ QSize QWidgetPrivate::adjustedSize() const s.setWidth(qMax(s.width(), 200)); if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen()); #else // all others QRect screen = QApplication::desktop()->screenGeometry(q->pos()); @@ -8562,7 +8571,7 @@ bool QWidget::isAncestorOf(const QWidget *child) const return false; } -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) inline void setDisabledStyle(QWidget *w, bool setStyle) { // set/reset WS_DISABLED style. @@ -8674,7 +8683,7 @@ bool QWidget::event(QEvent *event) case QEvent::KeyPress: { QKeyEvent *k = (QKeyEvent *)event; bool res = false; - if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? + if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier))) res = focusNextPrevChild(false); @@ -8984,7 +8993,7 @@ bool QWidget::event(QEvent *event) } } } -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) setDisabledStyle(this, (event->type() == QEvent::WindowBlocked)); #endif break; @@ -9011,7 +9020,7 @@ bool QWidget::event(QEvent *event) case QEvent::EmbeddingControl: d->topData()->frameStrut.setCoords(0 ,0, 0, 0); data->fstrut_dirty = false; -#if defined(Q_WS_WIN) || defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) d->topData()->embedded = 1; #endif break; @@ -9036,7 +9045,7 @@ bool QWidget::event(QEvent *event) } break; } -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC case QEvent::MacGLWindowChange: d->needWindowChange = false; break; @@ -9147,7 +9156,7 @@ void QWidget::changeEvent(QEvent * event) case QEvent::MacSizeChange: updateGeometry(); break; -#elif defined Q_WS_MAC +#elif defined Q_DEAD_CODE_FROM_QT4_MAC case QEvent::ToolTipChange: case QEvent::MouseTrackingChange: qt_mac_update_mouseTracking(this); @@ -9408,9 +9417,11 @@ void QWidget::focusOutEvent(QFocusEvent *) if (focusPolicy() != Qt::NoFocus || !isWindow()) update(); - // automatically hide the SIP +#ifndef Q_OS_IOS + // FIXME: revisit autoSIP logic, QTBUG-42906 if (qApp->autoSipEnabled() && testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->hide(); + QGuiApplication::inputMethod()->hide(); +#endif } /*! @@ -9698,8 +9709,8 @@ void QWidget::setInputMethodHints(Qt::InputMethodHints hints) if (d->imHints == hints) return; d->imHints = hints; - if (this == qApp->focusObject()) - qApp->inputMethod()->update(Qt::ImHints); + if (this == QGuiApplication::focusObject()) + QGuiApplication::inputMethod()->update(Qt::ImHints); #endif //QT_NO_IM } @@ -10415,7 +10426,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) // (f & Qt::MSWindowsOwnDC) clause (which is set on QGLWidgets on all // platforms). if (newParent -#if defined(Q_WS_WIN) || defined(QT_OPENGL_ES) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(QT_OPENGL_ES) || (f & Qt::MSWindowsOwnDC) #endif ) { @@ -10435,7 +10446,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) } //### already hidden above ---> must probably do something smart on the mac -// #ifdef Q_WS_MAC +// #ifdef Q_DEAD_CODE_FROM_QT4_MAC // extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp // if(!qt_mac_is_macdrawer(q)) //special case // q->setAttribute(Qt::WA_WState_Hidden); @@ -10496,9 +10507,8 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (newparent && newparent->windowType() == Qt::Desktop) { // make sure the widget is created on the same screen as the // programmer specified desktop widget - - // get the desktop's screen number - targetScreen = newparent->window()->d_func()->topData()->screenIndex; + const QDesktopScreenWidget *sw = qobject_cast(newparent); + targetScreen = sw ? sw->screenNumber() : 0; newparent = 0; } @@ -10511,8 +10521,9 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) QWidget *parentWithWindow = newparent ? (newparent->windowHandle() ? newparent : newparent->nativeParentWidget()) : 0; if (parentWithWindow) { - if (f & Qt::Window) { - q->windowHandle()->setTransientParent(parentWithWindow->windowHandle()); + QWidget *topLevel = parentWithWindow->window(); + if ((f & Qt::Window) && topLevel && topLevel->windowHandle()) { + q->windowHandle()->setTransientParent(topLevel->windowHandle()); q->windowHandle()->setParent(0); } else { q->windowHandle()->setTransientParent(0); @@ -10529,7 +10540,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) f |= Qt::Window; if (targetScreen == -1) { if (parent) - targetScreen = q->parentWidget()->window()->d_func()->topData()->screenIndex; + targetScreen = QApplication::desktop()->screenNumber(q->parentWidget()->window()); } } @@ -10573,12 +10584,11 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) // move the window to the selected screen if (!newparent && targetScreen != -1) { - if (maybeTopData()) - maybeTopData()->screenIndex = targetScreen; // only if it is already created - if (q->testAttribute(Qt::WA_WState_Created)) { + if (q->testAttribute(Qt::WA_WState_Created)) q->windowHandle()->setScreen(QGuiApplication::screens().value(targetScreen, 0)); - } + else + topData()->initialScreenIndex = targetScreen; } } @@ -10914,9 +10924,9 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) return; Q_D(QWidget); - Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), - "QWidget::setAttribute(WidgetAttribute, bool)", - "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); + Q_STATIC_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), + "QWidget::setAttribute(WidgetAttribute, bool): " + "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); #ifdef Q_OS_WIN // ### Don't use PaintOnScreen+paintEngine() to do native painting in some future release if (attribute == Qt::WA_PaintOnScreen && on && windowType() != Qt::Desktop && !inherits("QGLWidget")) { @@ -10966,7 +10976,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->receiveChildEvents = !on; break; case Qt::WA_MacBrushedMetal: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly. // fall through since changing the metal attribute affects the opaque size grip. case Qt::WA_MacOpaqueSizeGrip: @@ -10983,7 +10993,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; #endif case Qt::WA_MacAlwaysShowToolWindow: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->macUpdateHideOnSuspend(); #endif break; @@ -11042,25 +11052,25 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->createTLSysExtra(); #ifndef QT_NO_IM QWidget *focusWidget = d->effectiveFocusWidget(); - if (on && !internalWinId() && this == qApp->focusObject() + if (on && !internalWinId() && this == QGuiApplication::focusObject() && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } if (!qApp->testAttribute(Qt::AA_DontCreateNativeWidgetSiblings) && parentWidget()) parentWidget()->d_func()->enforceNativeChildren(); if (on && !internalWinId() && testAttribute(Qt::WA_WState_Created)) d->createWinId(); - if (isEnabled() && focusWidget->isEnabled() && this == qApp->focusObject() + if (isEnabled() && focusWidget->isEnabled() && this == QGuiApplication::focusObject() && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } #endif //QT_NO_IM break; } case Qt::WA_PaintOnScreen: d->updateIsOpaque(); -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_MAC) // Recreate the widget if it's already created as an alien widget and // WA_PaintOnScreen is enabled. Paint on screen widgets must have win id. // So must their children. @@ -11080,16 +11090,16 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->updateSystemBackground(); break; case Qt::WA_TransparentForMouseEvents: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->macUpdateIgnoreMouseEvents(); #endif break; case Qt::WA_InputMethodEnabled: { #ifndef QT_NO_IM - if (qApp->focusObject() == this) { + if (QGuiApplication::focusObject() == this) { if (!on) - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } #endif //QT_NO_IM break; @@ -11099,7 +11109,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->resolveFont(); d->resolveLocale(); break; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 case Qt::WA_NoX11EventCompression: if (!d->extra) d->createExtra(); @@ -11124,7 +11134,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; } -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 case Qt::WA_X11NetWmWindowTypeDesktop: case Qt::WA_X11NetWmWindowTypeDock: case Qt::WA_X11NetWmWindowTypeToolBar: @@ -11159,7 +11169,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; case Qt::WA_AcceptTouchEvents: -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) if (on) d->registerTouchWindow(); #endif @@ -11577,8 +11587,8 @@ void QWidget::setShortcutAutoRepeat(int id, bool enable) void QWidget::updateMicroFocus() { // updating everything since this is currently called for any kind of state change - if (this == qApp->focusObject()) - qApp->inputMethod()->update(Qt::ImQueryAll); + if (this == QGuiApplication::focusObject()) + QGuiApplication::inputMethod()->update(Qt::ImQueryAll); } /*! @@ -11780,7 +11790,7 @@ QRect QWidgetPrivate::frameStrut() const } if (data.fstrut_dirty -#ifndef Q_WS_WIN +#ifndef Q_DEAD_CODE_FROM_QT4_WIN // ### Fix properly for 4.3 && q->isVisible() #endif @@ -12063,6 +12073,7 @@ QOpenGLContext *QWidgetPrivate::shareContext() const QOpenGLContext *ctx = new QOpenGLContext; ctx->setShareContext(qt_gl_global_share_context()); ctx->setFormat(extra->topextra->window->format()); + ctx->setScreen(extra->topextra->window->screen()); ctx->create(); that->extra->topextra->shareContext = ctx; } @@ -12255,7 +12266,7 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPointF scenePos = d->extra->proxyWidget->mapToScene(pos); @@ -12290,7 +12301,7 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPoint viewPortPos = views.first()->viewport()->mapFromGlobal(pos); @@ -12389,10 +12400,9 @@ static void releaseMouseGrabOfWidget(QWidget *widget) \note Only visible widgets can grab mouse input. If isVisible() returns \c false for a widget, that widget cannot call grabMouse(). - \note \b{(Mac OS X developers)} For \e Cocoa, calling - grabMouse() on a widget only works when the mouse is inside the - frame of that widget. For \e Carbon, it works outside the widget's - frame as well, like for Windows and X11. + \note On Windows, grabMouse() only works when the mouse is inside a window + owned by the process. + On OS X, grabMouse() only works when the mouse is inside the frame of that widget. \sa releaseMouse(), grabKeyboard(), releaseKeyboard() */ @@ -12413,7 +12423,7 @@ void QWidget::grabMouse() \warning Grabbing the mouse might lock the terminal. - \note \b{(Mac OS X developers)} See the note in QWidget::grabMouse(). + \note See the note in QWidget::grabMouse(). \sa releaseMouse(), grabKeyboard(), releaseKeyboard(), setCursor() */ @@ -12576,13 +12586,10 @@ int QWidget::metric(PaintDeviceMetric m) const QWindow *topLevelWindow = 0; QScreen *screen = 0; - if (QWidget *topLevel = window()) + if (QWidget *topLevel = window()) { topLevelWindow = topLevel->windowHandle(); - - if (topLevelWindow) { - QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(topLevelWindow); - if (platformScreen) - screen = platformScreen->screen(); + if (topLevelWindow) + screen = topLevelWindow->screen(); } if (!screen && QGuiApplication::primaryScreen()) screen = QGuiApplication::primaryScreen(); @@ -12692,7 +12699,7 @@ void QWidget::setMask(const QRegion &newMask) d->extra->mask = newMask; d->extra->hasMask = !newMask.isEmpty(); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC if (!testAttribute(Qt::WA_WState_Created)) return; #endif @@ -12781,6 +12788,14 @@ void QWidget::clearMask() setMask(QRegion()); } +void QWidgetPrivate::setWidgetParentHelper(QObject *widgetAsObject, QObject *newParent) +{ + Q_ASSERT(widgetAsObject->isWidgetType()); + Q_ASSERT(!newParent || newParent->isWidgetType()); + QWidget *widget = static_cast(widgetAsObject); + widget->setParent(static_cast(newParent)); +} + QT_END_NAMESPACE #include "moc_qwidget.cpp" diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp similarity index 92% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp index 53c285654..aa9bc91a6 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -37,6 +37,7 @@ #ifndef QT_NO_SYSTEMTRAYICON #include "qmenu.h" +#include "qlist.h" #include "qevent.h" #include "qpoint.h" #include "qlabel.h" @@ -69,8 +70,12 @@ QT_BEGIN_NAMESPACE \list \li All supported versions of Windows. - \li All window managers for X11 that implement the \l{freedesktop.org} system - tray specification, including recent versions of KDE and GNOME. + \li All window managers and independent tray implementations for X11 that implement the + \l{http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html freedesktop.org} + XEmbed system tray specification. + \li All X11 desktop environments that implement the D-Bus + \l{http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/ StatusNotifierItem} + specification, including recent versions of KDE and Unity. \li All supported versions of Mac OS X. Note that the Growl notification system must be installed for QSystemTrayIcon::showMessage() to display messages on Mac OS X prior to 10.8 (Mountain Lion). @@ -279,7 +284,7 @@ bool QSystemTrayIcon::isVisible() const */ bool QSystemTrayIcon::event(QEvent *e) { -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (e->type() == QEvent::ToolTip) { Q_D(QSystemTrayIcon); return d->sys->deliverToolTipEvent(e); @@ -582,7 +587,7 @@ void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) } QPainterPath path; -#if defined(QT_NO_XSHAPE) && defined(Q_WS_X11) +#if defined(QT_NO_XSHAPE) && defined(Q_DEAD_CODE_FROM_QT4_X11) // XShape is required for setting the mask, so we just // draw an ugly square when its not available path.moveTo(0, 0); @@ -704,15 +709,11 @@ void QSystemTrayIconPrivate::updateIcon_sys_qpa() void QSystemTrayIconPrivate::updateMenu_sys_qpa() { if (menu) { - if (!menu->platformMenu()) { - QPlatformMenu *platformMenu = qpa_sys->createMenu(); - if (platformMenu) - menu->setPlatformMenu(platformMenu); - } + addPlatformMenu(menu); qpa_sys->updateMenu(menu->platformMenu()); } else { qpa_sys->updateMenu(0); - } + } } void QSystemTrayIconPrivate::updateToolTip_sys_qpa() @@ -720,8 +721,8 @@ void QSystemTrayIconPrivate::updateToolTip_sys_qpa() qpa_sys->updateToolTip(toolTip); } -void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message, - const QString &title, +void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &title, + const QString &message, QSystemTrayIcon::MessageIcon icon, int msecs) { @@ -739,10 +740,31 @@ void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message, default: break; } - qpa_sys->showMessage(message, title, notificationIcon, + qpa_sys->showMessage(title, message, notificationIcon, static_cast(icon), msecs); } +void QSystemTrayIconPrivate::addPlatformMenu(QMenu *menu) const +{ + if (menu->platformMenu()) + return; // The platform menu already exists. + + // The recursion depth is the same as menu depth, so should not + // be higher than 3 levels. + QListIterator it(menu->actions()); + while (it.hasNext()) { + QAction *action = it.next(); + if (action->menu()) + addPlatformMenu(action->menu()); + } + + // This menu should be processed *after* its children, otherwise + // setMenu() is not called on respective QPlatformMenuItems. + QPlatformMenu *platformMenu = qpa_sys->createMenu(); + if (platformMenu) + menu->setPlatformMenu(platformMenu); +} + QT_END_NAMESPACE #endif // QT_NO_SYSTEMTRAYICON diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp index 8e1543eb2..fbd306438 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -66,7 +66,7 @@ int QWidgetLineControl::redoTextLayout() const QTextLine l = m_textLayout.createLine(); m_textLayout.endLayout(); -#if defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_MAC) if (m_threadChecks) m_textLayoutThread = QThread::currentThread(); #endif @@ -183,7 +183,7 @@ void QWidgetLineControl::commitPreedit() if (!composeMode()) return; - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); if (!composeMode()) return; @@ -279,6 +279,23 @@ void QWidgetLineControl::clear() separate(); finishChange(priorState, /*update*/false, /*edited*/false); } +/*! + \internal + + Undoes the previous operation. +*/ + +void QWidgetLineControl::undo() +{ + // Undo works only for clearing the line when in any of password the modes + if (m_echoMode == QLineEdit::Normal) { + internalUndo(); + finishChange(-1, true); + } else { + cancelPasswordEchoTimer(); + clear(); + } +} /*! \internal @@ -919,7 +936,7 @@ void QWidgetLineControl::parseInputMask(const QString &maskFields) delete [] m_maskData; m_maskData = 0; m_maxLength = 32767; - internalSetText(QString()); + internalSetText(QString(), -1, false); } return; } @@ -1005,7 +1022,7 @@ void QWidgetLineControl::parseInputMask(const QString &maskFields) } } } - internalSetText(m_text); + internalSetText(m_text, -1, false); } @@ -1278,12 +1295,6 @@ void QWidgetLineControl::internalUndo(int until) cancelPasswordEchoTimer(); internalDeselect(); - // Undo works only for clearing the line when in any of password the modes - if (m_echoMode != QLineEdit::Normal) { - clear(); - return; - } - while (m_undoState && m_undoState > until) { Command& cmd = m_history[--m_undoState]; switch (cmd.type) { @@ -1868,9 +1879,12 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) unknown = false; } - if (unknown && !isReadOnly()) { + // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards + if (unknown && !isReadOnly() + && event->modifiers() != Qt::ControlModifier + && event->modifiers() != (Qt::ControlModifier | Qt::ShiftModifier)) { QString t = event->text(); - if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { + if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { insert(t); #ifndef QT_NO_COMPLETER complete(event->key()); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp index a1be4a14b..f3de5397c 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -110,7 +110,7 @@ QWidgetTextControlPrivate::QWidgetTextControlPrivate() #ifndef Q_OS_ANDROID interactionFlags(Qt::TextEditorInteraction), #else - interactionFlags(Qt::TextEditable), + interactionFlags(Qt::TextEditable | Qt::TextSelectableByKeyboard), #endif dragEnabled(true), #ifndef QT_NO_DRAGANDDROP @@ -1312,8 +1312,10 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) else if (e == QKeySequence::Delete) { QTextCursor localCursor = cursor; localCursor.deleteChar(); - } - else if (e == QKeySequence::DeleteEndOfWord) { + } else if (e == QKeySequence::Backspace) { + QTextCursor localCursor = cursor; + localCursor.deletePreviousChar(); + }else if (e == QKeySequence::DeleteEndOfWord) { if (!cursor.hasSelection()) cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor); cursor.removeSelectedText(); @@ -1339,8 +1341,14 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) process: { + // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards + if (e->modifiers() == Qt::ControlModifier + || e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { + e->ignore(); + return; + } QString text = e->text(); - if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { + if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { if (overwriteMode // no need to call deleteChar() if we have a selection, insertText // does it already @@ -1731,7 +1739,7 @@ void QWidgetTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button _q_updateCurrentCharFormatAndSelection(); #ifndef QT_NO_IM if (contextWidget) - qApp->inputMethod()->update(Qt::ImQueryInput); + QGuiApplication::inputMethod()->update(Qt::ImQueryInput); #endif //QT_NO_IM } else { //emit q->visibilityRequest(QRectF(mousePos, QSizeF(1, 1))); @@ -1879,7 +1887,7 @@ bool QWidgetTextControlPrivate::sendMouseEventToInputContext( if (cursorPos >= 0) { if (eventType == QEvent::MouseButtonRelease) - qApp->inputMethod()->invokeAction(QInputMethod::Click, cursorPos); + QGuiApplication::inputMethod()->invokeAction(QInputMethod::Click, cursorPos); e->setAccepted(true); return true; @@ -2219,15 +2227,18 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget if (d->interactionFlags & Qt::TextEditable) { a = menu->addAction(tr("&Undo") + ACCEL_KEY(QKeySequence::Undo), this, SLOT(undo())); a->setEnabled(d->doc->isUndoAvailable()); + a->setObjectName(QStringLiteral("edit-undo")); setActionIcon(a, QStringLiteral("edit-undo")); a = menu->addAction(tr("&Redo") + ACCEL_KEY(QKeySequence::Redo), this, SLOT(redo())); a->setEnabled(d->doc->isRedoAvailable()); + a->setObjectName(QStringLiteral("edit-redo")); setActionIcon(a, QStringLiteral("edit-redo")); menu->addSeparator(); #ifndef QT_NO_CLIPBOARD a = menu->addAction(tr("Cu&t") + ACCEL_KEY(QKeySequence::Cut), this, SLOT(cut())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-cut")); setActionIcon(a, QStringLiteral("edit-cut")); #endif } @@ -2236,6 +2247,7 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget if (showTextSelectionActions) { a = menu->addAction(tr("&Copy") + ACCEL_KEY(QKeySequence::Copy), this, SLOT(copy())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-copy")); setActionIcon(a, QStringLiteral("edit-copy")); } @@ -2244,6 +2256,7 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget a = menu->addAction(tr("Copy &Link Location"), this, SLOT(_q_copyLink())); a->setEnabled(!d->linkToCopy.isEmpty()); + a->setObjectName(QStringLiteral("link-copy")); } #endif // QT_NO_CLIPBOARD @@ -2251,10 +2264,12 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget #ifndef QT_NO_CLIPBOARD a = menu->addAction(tr("&Paste") + ACCEL_KEY(QKeySequence::Paste), this, SLOT(paste())); a->setEnabled(canPaste()); + a->setObjectName(QStringLiteral("edit-paste")); setActionIcon(a, QStringLiteral("edit-paste")); #endif a = menu->addAction(tr("Delete"), this, SLOT(_q_deleteSelected())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-delete")); setActionIcon(a, QStringLiteral("edit-delete")); } @@ -2263,9 +2278,10 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget menu->addSeparator(); a = menu->addAction(tr("Select All") + ACCEL_KEY(QKeySequence::SelectAll), this, SLOT(selectAll())); a->setEnabled(!d->doc->isEmpty()); + a->setObjectName(QStringLiteral("select-all")); } - if ((d->interactionFlags & Qt::TextEditable) && qApp->styleHints()->useRtlExtensions()) { + if ((d->interactionFlags & Qt::TextEditable) && QGuiApplication::styleHints()->useRtlExtensions()) { menu->addSeparator(); QUnicodeControlCharacterMenu *ctrlCharacterMenu = new QUnicodeControlCharacterMenu(this, menu); menu->addMenu(ctrlCharacterMenu); @@ -2851,7 +2867,7 @@ void QWidgetTextControlPrivate::commitPreedit() if (!isPreediting()) return; - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); if (!isPreediting()) return; diff --git a/XCODE.md b/XCODE.md index 23d2ca40b..d68c98408 100644 --- a/XCODE.md +++ b/XCODE.md @@ -1,4 +1,4 @@ -##Build instructions for Xcode 6.3.1 +##Build instructions for Xcode 6.4 ###Prepare folder @@ -131,31 +131,31 @@ Then in Terminal go to **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** and run LDFLAGS=`freetype-config --libs` PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig - ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" make sudo make install -####Qt 5.4.0, slightly patched +####Qt 5.5.0, slightly patched -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz -Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder +Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder Apply patch: -* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_4\_0\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** -* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_4\_0\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run +* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_5\_0\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** +* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_5\_0\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run - git apply _qt_5_4_0_patch.diff + git apply _qt_5_5_0_patch.diff #####Building library In Terminal go to **/Users/user/TBuild/Libraries/QtStatic** and there run - ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -nomake examples -nomake tests -platform macx-clang - make -j4 module-qtbase module-qtimageformats module-qtmultimedia - sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets module-qtmultimedia-install_subtargets + ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -no-openssl -securetransport -nomake examples -nomake tests -platform macx-clang + make -j4 module-qtbase module-qtimageformats + sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets building (**make** command) will take really long time. @@ -167,4 +167,4 @@ building (**make** command) will take really long time. * Open MetaLang.xcodeproj and build for Debug (Release optionally) * Open Telegram.xcodeproj and build for Debug * Build Updater target as well, it is required for Telegram relaunch -* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 5.1 - Custom Compiler Flags > Other C / C++ Flags > Release) +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 6.1 - Custom Compiler Flags > Other C / C++ Flags > Release) diff --git a/XCODEold.md b/XCODEold.md new file mode 100644 index 000000000..2b3e62024 --- /dev/null +++ b/XCODEold.md @@ -0,0 +1,172 @@ +##Build instructions for Xcode 6.4 + +###Prepare folder + +Choose a folder for the future build, for example **/Users/user/TBuild** There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app. + +###Clone source code + +By git – in Terminal go to **/Users/user/TBuild** and run + + git clone https://github.com/telegramdesktop/tdesktop.git + +or download in ZIP and extract to **/Users/user/TBuild** rename **tdesktop-master** to **tdesktop** to have **/Users/user/TBuild/tdesktop/Telegram/Telegram.xcodeproj** project, then go to **/Users/user/TBuild/tdesktop** and run + + git checkout mac32 + +###Prepare libraries + +In your build Terminal run + + MACOSX_DEPLOYMENT_TARGET=10.6 + +to set minimal supported OS version to 10.6 for future console builds. + +####OpenSSL 1.0.1g + +Get sources from https://github.com/telegramdesktop/openssl-xcode, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/openssl-xcode.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **openssl-xcode-master** to **openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** project + +http://www.openssl.org/source/ > Download [**openssl-1.0.1h.tar.gz**](http://www.openssl.org/source/openssl-1.0.1h.tar.gz) (4.3 Mb) + +Extract openssl-1.0.1h.tar.gz and copy everything from **openssl-1.0.1h** to **/Users/user/TBuild/Libraries/openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/include** + +#####Building library + +* Open **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** with Xcode +* Product > Build + +####liblzma + +http://tukaani.org/xz/ > Download [**xz-5.0.5.tar.gz**](http://tukaani.org/xz/xz-5.0.5.tar.gz) + +Extract to **/Users/user/TBuild/Libraries** + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/xz-5.0.5** and there run + + ./configure + make + sudo make install + +####zlib 1.2.8 + +Using se system lib + +####libexif 0.6.20 + +Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/libexif-0.6.20.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **/Users/user/TBuild/Libraries/libexif-0.6.20/configure** script + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/libexif-0.6.20** and there run + + ./configure + make + sudo make install + +####OpenAL Soft + +Get sources by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone git://repo.or.cz/openal-soft.git + +to have **/Users/user/TBuild/Libraries/openal-soft/CMakeLists.txt** + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/openal-soft/build** and there run + + cmake -D LIBTYPE:STRING=STATIC -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.6 .. + make + sudo make install + +####Opus codec + +Download sources [opus-1.1.tar.gz](http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz) from http://www.opus-codec.org/downloads/, extract to **/Users/user/TBuild/Libraries** and rename to have **/Users/user/TBuild/Libraries/opus/configure** + +#####Building libraries + +Download [pkg-config 0.28](http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz) from http://pkg-config.freedesktop.org, extract it to **/Users/user/TBuild/Libraries** + +In Terminal go to **/Users/user/TBuild/Libraries/pkg-config-0.28** and run + + ./configure --with-internal-glib + make + sudo make install + +then go to **/Users/user/TBuild/Libraries/opus** and there run + + ./configure + make + sudo make install + +####FFmpeg + +Download sources [ffmpeg-2.6.3.tar.bz2](http://ffmpeg.org/releases/ffmpeg-2.6.3.tar.bz2) from https://www.ffmpeg.org/download.html, extract to **/Users/user/TBuild/Libraries** to have **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** + +#####Building libraries + +Download [libiconv-1.14](http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz) from http://www.gnu.org/software/libiconv/#downloading, extract it to **/Users/user/TBuild/Libraries** + +In Termianl go to **/Users/user/TBuild/Libraries/libiconv-1.14** and run + + ./configure --enable-static + make + sudo make install + +Then in Terminal go to **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** and run + + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + + brew install automake fdk-aac git lame libass libtool libvorbis libvpx opus sdl shtool texi2html theora wget x264 xvid yasm + + CFLAGS=`freetype-config --cflags` + LDFLAGS=`freetype-config --libs` + PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig + + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" + + make + sudo make install + +####Qt 5.3.2, slightly patched + +http://download.qt-project.org/official_releases/qt/5.3/5.3.2/single/qt-everywhere-opensource-src-5.3.2.tar.gz + +Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.3.2** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder + +Apply patch: + +* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_3\_2\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** +* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_3\_2\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run + + git apply _qt_5_3_2_patch.diff + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/QtStatic** and there run + + ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -no-openssl -securetransport -nomake examples -nomake tests -platform macx-g++ + make -j4 module-qtbase module-qtimageformats + sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets + +building (**make** command) will take really long time. + +###Building Telegram Desktop + +* Launch Xcode, all projects will be taken from **/Users/user/TBuild/tdesktop/Telegram** +* Open MetaStyle.xcodeproj and build for Debug (Release optionally) +* Open MetaEmoji.xcodeproj and build for Debug (Release optionally) +* Open MetaLang.xcodeproj and build for Debug (Release optionally) +* Open Telegram.xcodeproj and build for Debug +* Build Updater target as well, it is required for Telegram relaunch +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 6.1 - Custom Compiler Flags > Other C / C++ Flags > Release) From 2dad73143d07fcb0ee9b94ade03442d03bf4bdbb Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 18 Aug 2015 22:37:57 +0300 Subject: [PATCH 3/4] InputField done by QTextEdit --- Telegram/Resources/style.txt | 6 +- Telegram/SourceFiles/gui/flatinput.cpp | 186 ++++++++++++++++--------- Telegram/SourceFiles/gui/flatinput.h | 165 ++++++---------------- 3 files changed, 164 insertions(+), 193 deletions(-) diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index d8c0f33f0..62e6cccc9 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -66,9 +66,9 @@ defaultInputField: InputField { placeholderFg: #999; placeholderFgActive: #aaa; placeholderMargins: margins(2px, 0px, 2px, 0px); - placeholderAlign: align(left); + placeholderAlign: align(topleft); placeholderShift: 50px; - duration: 200; + duration: 100; borderFg: #e0e0e0; borderFgActive: #62c0f7; @@ -83,7 +83,7 @@ defaultInputField: InputField { height: 32px; } dialogsSearchField: InputField(defaultInputField) { - textMargins: margins(34px, 5px, 34px, 5px); + textMargins: margins(34px, 7px, 34px, 7px); iconSprite: sprite(227px, 21px, 24px, 24px); iconPosition: point(6px, 5px); diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index 79bb320ef..1d6f6e03f 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -42,7 +42,6 @@ namespace { } }; InputStyle _flatInputStyle; - InputStyle _inputFieldStyle; } FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), @@ -384,7 +383,8 @@ void CountryCodeInput::correctValue(QKeyEvent *e, const QString &was) { } } -InputField::InputField(QWidget *parent, const style::InputField &st, const QString &ph, const QString &val) : QTextEdit(val, parent), +InputField::InputField(QWidget *parent, const style::InputField &st, const QString &ph, const QString &val) : TWidget(parent), +_inner(this, val), _oldtext(val), _keyEvent(0), @@ -406,20 +406,22 @@ a_borderFg(st.borderFg->c), a_borderOpacityActive(0), _borderAnim(animFunc(this, &InputField::borderStep)), +_focused(false), _error(false), + _st(&st), _touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) { - setAcceptRichText(false); + _inner.setAcceptRichText(false); resize(_st->width, _st->height); - setWordWrapMode(QTextOption::NoWrap); - setLineWrapMode(QTextEdit::NoWrap); + _inner.setWordWrapMode(QTextOption::NoWrap); + _inner.setLineWrapMode(QTextEdit::NoWrap); - setFont(_st->font->f); - setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft); + _inner.setFont(_st->font->f); + _inner.setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft); _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); @@ -427,42 +429,39 @@ _replacingEmojis(false) { p.setColor(QPalette::Text, _st->textFg->c); setPalette(p); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + _inner.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + _inner.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setFrameStyle(QFrame::NoFrame | QFrame::Plain); - viewport()->setAutoFillBackground(false); + _inner.setFrameStyle(QFrame::NoFrame | QFrame::Plain); + _inner.viewport()->setAutoFillBackground(false); - setContentsMargins(0, 0, 0, 0); + _inner.setContentsMargins(0, 0, 0, 0); + _inner.document()->setDocumentMargin(0); - //switch (cScale()) { - //case dbisOneAndQuarter: _fakeMargin = 1; break; - //case dbisOneAndHalf: _fakeMargin = 2; break; - //case dbisTwo: _fakeMargin = 4; break; - //} - //setStyleSheet(qsl("QTextEdit { margin: %1px; }").arg(_fakeMargin)); - setStyleSheet(qsl("QTextEdit { padding: 2px 74px; }")); - - viewport()->setAttribute(Qt::WA_AcceptTouchEvents); + setAttribute(Qt::WA_AcceptTouchEvents); + _inner.viewport()->setAttribute(Qt::WA_AcceptTouchEvents); _touchTimer.setSingleShot(true); connect(&_touchTimer, SIGNAL(timeout()), this, SLOT(onTouchTimer())); - connect(document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(onDocumentContentsChange(int, int, int))); - connect(document(), SIGNAL(contentsChanged()), this, SLOT(onDocumentContentsChanged())); - connect(this, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool))); - connect(this, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool))); - if (App::wnd()) connect(this, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu())); + connect(_inner.document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(onDocumentContentsChange(int, int, int))); + connect(_inner.document(), SIGNAL(contentsChanged()), this, SLOT(onDocumentContentsChanged())); + connect(&_inner, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool))); + connect(&_inner, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool))); + if (App::wnd()) connect(&_inner, SIGNAL(selectionChanged()), App::wnd(), SLOT(updateGlobalMenu())); } void InputField::onTouchTimer() { _touchRightButton = true; } -bool InputField::viewportEvent(QEvent *e) { +InputField::InputFieldInner::InputFieldInner(InputField *parent, const QString &val) : QTextEdit(val, parent) { +} + +bool InputField::InputFieldInner::viewportEvent(QEvent *e) { if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate || e->type() == QEvent::TouchEnd || e->type() == QEvent::TouchCancel) { QTouchEvent *ev = static_cast(e); if (ev->device()->type() == QTouchDevice::TouchScreen) { - touchEvent(ev); + qobject_cast(parentWidget())->touchEvent(ev); return QTextEdit::viewportEvent(e); } } @@ -508,16 +507,12 @@ void InputField::touchEvent(QTouchEvent *e) { } } -QRect InputField::getTextRect() const { - return rect().marginsRemoved(_st->textMargins + st::textRectMargins); -} - int32 InputField::fakeMargin() const { return _fakeMargin; } void InputField::paintEvent(QPaintEvent *e) { - Painter p(viewport()); + Painter p(this); QRect r(rect().intersected(e->rect())); p.fillRect(r, st::white->b); @@ -552,37 +547,57 @@ void InputField::paintEvent(QPaintEvent *e) { p.restore(); } - QTextEdit::paintEvent(e); + TWidget::paintEvent(e); } void InputField::focusInEvent(QFocusEvent *e) { + _inner.setFocus(); +} + +void InputField::mousePressEvent(QMouseEvent *e) { + _inner.setFocus(); +} + +void InputField::contextMenuEvent(QContextMenuEvent *e) { + _inner.contextMenuEvent(e); +} + +void InputField::InputFieldInner::focusInEvent(QFocusEvent *e) { + f()->focusInInner(); + QTextEdit::focusInEvent(e); + emit f()->focused(); +} + +void InputField::focusInInner() { if (!_focused) { _focused = true; - + a_placeholderFg.start(_st->placeholderFgActive->c); _placeholderFgAnim.start(); - + a_borderFg.start((_error ? _st->borderFgError : _st->borderFgActive)->c); a_borderOpacityActive.start(1); _borderAnim.start(); } - QTextEdit::focusInEvent(e); - emit focused(); } -void InputField::focusOutEvent(QFocusEvent *e) { +void InputField::InputFieldInner::focusOutEvent(QFocusEvent *e) { + f()->focusOutInner(); + QTextEdit::focusOutEvent(e); + emit f()->blurred(); +} + +void InputField::focusOutInner() { if (_focused) { _focused = false; - + a_placeholderFg.start(_st->placeholderFg->c); _placeholderFgAnim.start(); - + a_borderFg.start((_error ? _st->borderFgError : _st->borderFg)->c); a_borderOpacityActive.start(_error ? 1 : 0); _borderAnim.start(); } - QTextEdit::focusOutEvent(e); - emit blurred(); } QSize InputField::sizeHint() const { @@ -599,7 +614,7 @@ QString InputField::getText(int32 start, int32 end) const { if (start < 0) start = 0; bool full = (start == 0) && (end < 0); - QTextDocument *doc(document()); + QTextDocument *doc(_inner.document()); QTextBlock from = full ? doc->begin() : doc->findBlock(start), till = (end < 0) ? doc->end() : doc->findBlock(end); if (till.isValid()) till = till.next(); @@ -671,7 +686,7 @@ QString InputField::getText(int32 start, int32 end) const { } bool InputField::hasText() const { - QTextDocument *doc(document()); + QTextDocument *doc(_inner.document()); QTextBlock from = doc->begin(), till = doc->end(); if (from == till) return false; @@ -704,11 +719,11 @@ void InputField::insertEmoji(EmojiPtr emoji, QTextCursor c) { c.insertText(objectReplacement, imageFormat); } -QVariant InputField::loadResource(int type, const QUrl &name) { +QVariant InputField::InputFieldInner::loadResource(int type, const QUrl &name) { QString imageName = name.toDisplayString(); if (imageName.startsWith(qstr("emoji://e."))) { if (EmojiPtr emoji = emojiFromUrl(imageName)) { - return QVariant(App::emojiSingle(emoji, _st->font->height)); + return QVariant(App::emojiSingle(emoji, f()->_st->font->height)); } } return QVariant(); @@ -718,8 +733,11 @@ void InputField::processDocumentContentsChange(int position, int charsAdded) { int32 emojiPosition = 0, emojiLen = 0; const EmojiData *emoji = 0; - QTextDocument *doc(document()); + static QString space(' '); + QTextDocument *doc(_inner.document()); + QTextCursor c(_inner.textCursor()); + c.joinPreviousEditBlock(); while (true) { int32 start = position, end = position + charsAdded; QTextBlock from = doc->findBlock(start), till = doc->findBlock(end); @@ -738,6 +756,19 @@ void InputField::processDocumentContentsChange(int position, int charsAdded) { QString t(fragment.text()); const QChar *ch = t.constData(), *e = ch + t.size(); for (; ch != e; ++ch) { + // QTextBeginningOfFrame // QTextEndOfFrame + if (ch->unicode() == 0xfdd0 || ch->unicode() == 0xfdd1 || ch->unicode() == QChar::ParagraphSeparator || ch->unicode() == QChar::LineSeparator || ch->unicode() == '\n' || ch->unicode() == '\r') { + if (!_inner.document()->pageSize().isNull()) { + _inner.document()->setPageSize(QSizeF(0, 0)); + } + int32 nlPosition = fp + (ch - t.constData()); + QTextCursor c(doc->docHandle(), nlPosition); + c.setPosition(nlPosition + 1, QTextCursor::KeepAnchor); + c.insertText(space); + position = nlPosition + 1; + emoji = TwoSymbolEmoji; // just a flag + break; + } emoji = emojiFromText(ch, e, emojiLen); if (emoji) { emojiPosition = fp + (ch - t.constData()); @@ -748,10 +779,22 @@ void InputField::processDocumentContentsChange(int position, int charsAdded) { if (emoji) break; } if (emoji) break; + if (b.next() != doc->end()) { + int32 nlPosition = b.next().position() - 1; + QTextCursor c(doc->docHandle(), nlPosition); + c.setPosition(nlPosition + 1, QTextCursor::KeepAnchor); + c.insertText(space); + position = nlPosition + 1; + emoji = TwoSymbolEmoji; // just a flag + break; + } } - if (emoji) { - if (!document()->pageSize().isNull()) { - document()->setPageSize(QSizeF(0, 0)); + if (emoji == TwoSymbolEmoji) { // just skip + emoji = 0; + emojiPosition = 0; + } else if (emoji) { + if (!_inner.document()->pageSize().isNull()) { + _inner.document()->setPageSize(QSizeF(0, 0)); } QTextCursor c(doc->docHandle(), emojiPosition); @@ -780,12 +823,13 @@ void InputField::processDocumentContentsChange(int position, int charsAdded) { break; } } + c.endEditBlock(); } void InputField::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { if (_replacingEmojis) return; - if (document()->availableRedoSteps() > 0) return; + if (_inner.document()->availableRedoSteps() > 0) return; const int takeBack = 3; @@ -799,10 +843,10 @@ void InputField::onDocumentContentsChange(int position, int charsRemoved, int ch // _insertions.push_back(Insertion(position, charsAdded)); _replacingEmojis = true; - QSizeF s = document()->pageSize(); + QSizeF s = _inner.document()->pageSize(); processDocumentContentsChange(position, charsAdded); - if (document()->pageSize() != s) { - document()->setPageSize(s); + if (_inner.document()->pageSize() != s) { + _inner.document()->setPageSize(s); } _replacingEmojis = false; } @@ -811,11 +855,11 @@ void InputField::onDocumentContentsChanged() { if (_replacingEmojis) return; if (!_insertions.isEmpty()) { - if (document()->availableRedoSteps() > 0) { + if (_inner.document()->availableRedoSteps() > 0) { _insertions.clear(); } else { _replacingEmojis = true; - QSizeF s = document()->pageSize(); + QSizeF s = _inner.document()->pageSize(); do { Insertion i = _insertions.front(); @@ -825,8 +869,8 @@ void InputField::onDocumentContentsChanged() { } } while (!_insertions.isEmpty()); - if (document()->pageSize() != s) { - document()->setPageSize(s); + if (_inner.document()->pageSize() != s) { + _inner.document()->setPageSize(s); } _replacingEmojis = false; } @@ -911,12 +955,12 @@ void InputField::updatePlaceholder() { void InputField::correctValue(QKeyEvent *e, const QString &was) { } -QMimeData *InputField::createMimeDataFromSelection() const { +QMimeData *InputField::InputFieldInner::createMimeDataFromSelection() const { QMimeData *result = new QMimeData(); QTextCursor c(textCursor()); int32 start = c.selectionStart(), end = c.selectionEnd(); if (end > start) { - result->setText(getText(start, end)); + result->setText(f()->getText(start, end)); } return result; } @@ -925,10 +969,10 @@ void InputField::customUpDown(bool custom) { _customUpDown = custom; } -void InputField::keyPressEvent(QKeyEvent *e) { +void InputField::InputFieldInner::keyPressEvent(QKeyEvent *e) { bool shift = e->modifiers().testFlag(Qt::ShiftModifier); bool macmeta = (cPlatform() == dbipMac) && e->modifiers().testFlag(Qt::ControlModifier) && !e->modifiers().testFlag(Qt::MetaModifier) && !e->modifiers().testFlag(Qt::AltModifier); - bool ctrl = e->modifiers().testFlag(Qt::ControlModifier) || e->modifiers().testFlag(Qt::MetaModifier), ctrlGood = (ctrl && cCtrlEnter()) || (!ctrl && !shift && !cCtrlEnter()) || (ctrl && shift); + bool ctrl = e->modifiers().testFlag(Qt::ControlModifier) || e->modifiers().testFlag(Qt::MetaModifier), ctrlGood = true; bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return); if (macmeta && e->key() == Qt::Key_Backspace) { @@ -937,17 +981,19 @@ void InputField::keyPressEvent(QKeyEvent *e) { tc.setPosition(start.position(), QTextCursor::KeepAnchor); tc.removeSelectedText(); } else if (enter && ctrlGood) { - emit submitted(ctrl && shift); + emit f()->submitted(ctrl && shift); } else if (e->key() == Qt::Key_Escape) { - emit cancelled(); + emit f()->cancelled(); } else if (e->key() == Qt::Key_Tab || (ctrl && e->key() == Qt::Key_Backtab)) { if (ctrl) { e->ignore(); } else { - emit tabbed(); + emit f()->tabbed(); } } else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) { e->ignore(); + } else if (f()->_customUpDown && (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down)) { + e->ignore(); } else { QTextCursor tc(textCursor()); if (enter && ctrl) { @@ -974,8 +1020,12 @@ void InputField::keyPressEvent(QKeyEvent *e) { } } +void InputField::InputFieldInner::paintEvent(QPaintEvent *e) { + return QTextEdit::paintEvent(e); +} + void InputField::resizeEvent(QResizeEvent *e) { _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); - viewport()->setGeometry(rect().marginsRemoved(_st->textMargins)); - QTextEdit::resizeEvent(e); + _inner.setGeometry(rect().marginsRemoved(_st->textMargins)); + TWidget::resizeEvent(e); } diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index 871e45af5..62139e845 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -127,129 +127,24 @@ private: bool _nosignal; }; -// -//class InputField : public QTextEdit { -// Q_OBJECT -// -//public: -// -// InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); -// -// bool event(QEvent *e); -// void touchEvent(QTouchEvent *e); -// void paintEvent(QPaintEvent *e); -// void focusInEvent(QFocusEvent *e); -// void focusOutEvent(QFocusEvent *e); -// void keyPressEvent(QKeyEvent *e); -// void resizeEvent(QResizeEvent *e); -// -// void setError(bool error); -// -// void updatePlaceholder(); -// -// QRect getTextRect() const; -// -// bool placeholderFgStep(float64 ms); -// bool placeholderShiftStep(float64 ms); -// bool borderStep(float64 ms); -// -// QSize sizeHint() const; -// QSize minimumSizeHint() const; -// -// void setCustomUpDown(bool customUpDown); -// -//public slots: -// -// void onTextChange(const QString &text); -// void onTextEdited(); -// -// void onTouchTimer(); -// -// void onDocumentContentsChange(int position, int charsRemoved, int charsAdded); -// void onDocumentContentsChanged(); -// -// void onUndoAvailable(bool avail); -// void onRedoAvailable(bool avail); -// -//signals: -// -// void changed(); -// void cancelled(); -// void accepted(); -// void focused(); -// void blurred(); -// -//protected: -// -// virtual void correctValue(QKeyEvent *e, const QString &was); -// -// void insertEmoji(EmojiPtr emoji, QTextCursor c); -// TWidget *tparent() { -// return qobject_cast(parentWidget()); -// } -// const TWidget *tparent() const { -// return qobject_cast(parentWidget()); -// } -// void enterEvent(QEvent *e) { -// TWidget *p(tparent()); -// if (p) p->leaveToChildEvent(e); -// return QTextEdit::enterEvent(e); -// } -// void leaveEvent(QEvent *e) { -// TWidget *p(tparent()); -// if (p) p->enterFromChildEvent(e); -// return QTextEdit::leaveEvent(e); -// } -// -// QVariant loadResource(int type, const QUrl &name); -// -//private: -// -// QString _lastText; -// QKeyEvent *_keyEvent; -// -// bool _customUpDown; -// -// QString _placeholder, _placeholderFull; -// bool _placeholderVisible; -// anim::ivalue a_placeholderLeft; -// anim::fvalue a_placeholderOpacity; -// anim::cvalue a_placeholderFg; -// Animation _placeholderFgAnim, _placeholderShiftAnim; -// -// anim::fvalue a_borderOpacityActive; -// anim::cvalue a_borderFg; -// Animation _borderAnim; -// -// bool _focused, _error; -// -// const style::InputField *_st; -// -// QTimer _touchTimer; -// bool _touchPress, _touchRightButton, _touchMove; -// QPoint _touchStart; -//}; - -class InputField : public QTextEdit { +class InputField : public TWidget { Q_OBJECT public: InputField(QWidget *parent, const style::InputField &st, const QString &ph = QString(), const QString &val = QString()); - bool viewportEvent(QEvent *e); void touchEvent(QTouchEvent *e); void paintEvent(QPaintEvent *e); void focusInEvent(QFocusEvent *e); - void focusOutEvent(QFocusEvent *e); - void keyPressEvent(QKeyEvent *e); + void mousePressEvent(QMouseEvent *e); + void contextMenuEvent(QContextMenuEvent *e); void resizeEvent(QResizeEvent *e); const QString &getLastText() const; void updatePlaceholder(); - QRect getTextRect() const; int32 fakeMargin() const; bool placeholderFgStep(float64 ms); @@ -265,10 +160,22 @@ public: bool isUndoAvailable() const; bool isRedoAvailable() const; - QMimeData *createMimeDataFromSelection() const; - void customUpDown(bool isCustom); + void setTextCursor(const QTextCursor &cursor) { + return _inner.setTextCursor(cursor); + } + QTextCursor textCursor() const { + return _inner.textCursor(); + } + void setText(const QString &text) { + return _inner.setText(text); + } + void clear() { + return _inner.clear(); + } + + public slots: void onTouchTimer(); @@ -300,21 +207,35 @@ protected: const TWidget *tparent() const { return qobject_cast(parentWidget()); } - void enterEvent(QEvent *e) { - TWidget *p(tparent()); - if (p) p->leaveToChildEvent(e); - return QTextEdit::enterEvent(e); - } - void leaveEvent(QEvent *e) { - TWidget *p(tparent()); - if (p) p->enterFromChildEvent(e); - return QTextEdit::leaveEvent(e); - } - - QVariant loadResource(int type, const QUrl &name); private: + friend class InputFieldInner; + class InputFieldInner : public QTextEdit { + public: + InputFieldInner(InputField *parent, const QString &val = QString()); + + bool viewportEvent(QEvent *e); + void focusInEvent(QFocusEvent *e); + void focusOutEvent(QFocusEvent *e); + void keyPressEvent(QKeyEvent *e); + void paintEvent(QPaintEvent *e); + + QMimeData *createMimeDataFromSelection() const; + + QVariant loadResource(int type, const QUrl &name); + + private: + + InputField *f() const { + return static_cast(parentWidget()); + } + friend class InputField; + }; + InputFieldInner _inner; + void focusInInner(); + void focusOutInner(); + void processDocumentContentsChange(int position, int charsAdded); QString _oldtext; From e8ab968e5aeac61993ceea3c2a18520459f0bfef Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 3 Sep 2015 14:47:16 +0300 Subject: [PATCH 4/4] fixed merge with master --- Telegram/SourceFiles/historywidget.cpp | 18 --------------- Telegram/SourceFiles/mainwidget.cpp | 10 --------- Telegram/SourceFiles/overviewwidget.cpp | 4 ++-- Telegram/SourceFiles/profilewidget.cpp | 8 ------- Telegram/Telegram.vcxproj | 14 ------------ Telegram/Telegram.xcodeproj/project.pbxproj | 10 --------- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 22 +++---------------- 7 files changed, 5 insertions(+), 81 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index eaa3f4ca7..4e13ecb21 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -3062,24 +3062,6 @@ void HistoryWidget::updateControlsVisibility() { resizeEvent(0); update(); } - } else { - _attachMention.hide(); - _send.hide(); - _unblock.hide(); - _botStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - _attachEmoji.hide(); - _kbShow.hide(); - _kbHide.hide(); - _cmdStart.hide(); - _attachType.hide(); - _emojiPan.hide(); - if (!_field.isHidden()) { - _field.hide(); - resizeEvent(0); - update(); - } } } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 0ec1c8763..8e273cf68 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2574,16 +2574,6 @@ void MainWidget::searchInPeer(PeerData *peer) { } } -void MainWidget::searchInPeer(PeerData *peer) { - dialogs.searchInPeer(peer); - if (cWideMode()) { - dialogs.activate(); - } else { - dialogsToUp(); - showDialogs(); - } -} - void MainWidget::onUpdateNotifySettings() { if (this != App::main()) return; while (!updateNotifySettingPeers.isEmpty()) { diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 813631424..247adb06e 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -2389,7 +2389,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -2475,7 +2475,7 @@ void OverviewInner::showAll(bool recountHeights) { newHeight = _height; _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + if (newHeight < _minHeight) { newHeight = _minHeight; } diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index e7f1fca3c..9ac98db87 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -68,14 +68,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _blockRequest(0), _blockUser(this, lang((_peerUser && _peerUser->botInfo) ? lng_profile_block_bot : lng_profile_block_user), st::btnRedLink), - // actions - _searchInPeer(this, lang(lng_profile_search_messages)), - _clearHistory(this, lang(lng_profile_clear_history)), - _deleteConversation(this, lang(_peer->chat ? lng_profile_clear_and_exit : lng_profile_delete_conversation)), - _wasBlocked(_peerUser ? _peerUser->blocked : UserBlockUnknown), - _blockRequest(0), - _blockUser(this, lang((_peerUser && _peerUser->botInfo) ? lng_profile_block_bot : lng_profile_block_user), st::btnRedLink), - // participants _pHeight(st::profileListPhotoSize + st::profileListPadding.height() * 2), _kickWidth(st::linkFont->m.width(lang(lng_profile_kick))), diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index e70bb69f7..971426476 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -1477,20 +1477,6 @@ $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) - - Moc%27ing countrycodeinput.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - Moc%27ing countrycodeinput.h... - Moc%27ing countrycodeinput.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 885112ac8..ad3a363b0 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -179,10 +179,8 @@ ADE99904299B99EB6135E8D9 /* scrollarea.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6E1859D714E4471E053D90C9 /* scrollarea.cpp */; settings = {ATTRIBUTES = (); }; }; B0B88EFE444C0DE673389418 /* moc_flatbutton.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */; settings = {ATTRIBUTES = (); }; }; B2F5B08BFFBBE7E37D3863BB /* moc_button.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 46292F489228B60010794CE4 /* moc_button.cpp */; settings = {ATTRIBUTES = (); }; }; - B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */; settings = {ATTRIBUTES = (); }; }; B460F624007324313696BE86 /* QuartzCore.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */; }; B6346B66B0A2228A91D8A5D9 /* mtpDC.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */; settings = {ATTRIBUTES = (); }; }; - B6F50D5FBFAEB16DD0E5B1C3 /* moc_countrycodeinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */; settings = {ATTRIBUTES = (); }; }; B780F9E21269259B90A1F32A /* moc_mtpDC.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */; settings = {ATTRIBUTES = (); }; }; B78304F135DEF1F7A68393A6 /* CoreMedia.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 547CCADBD1CC5050167EF948 /* CoreMedia.framework */; }; B8CA3E1E11A7E0E7DF9E1CDE /* mtpFileLoader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -469,7 +467,6 @@ 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; - 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -496,7 +493,6 @@ 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; @@ -567,7 +563,6 @@ A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; @@ -839,7 +834,6 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */, 4D55B83DFDFE3D492CDBD27A /* button.cpp */, 074FCB8C19D36851004C6EB2 /* contextmenu.cpp */, - 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */, 3E329D4547CC23585307FA32 /* countryinput.cpp */, B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */, DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */, @@ -859,7 +853,6 @@ BDAB6725B830DEE896DC0F55 /* boxshadow.h */, 4604687EBA85611C9E8A9CDF /* button.h */, 074FCB8D19D36851004C6EB2 /* contextmenu.h */, - 60C0061633AC4244EA634B2A /* countrycodeinput.h */, 6868ADA9E9A9801B2BA92B97 /* countryinput.h */, 19618554524B8D928F13940D /* emoji_config.h */, 9BD0BE66E93ACE27D00D6D75 /* filedialog.h */, @@ -1155,7 +1148,6 @@ 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */, A1479F94376F9732B57C69DB /* moc_animation.cpp */, 46292F489228B60010794CE4 /* moc_button.cpp */, - A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */, 9D9F4744B2F9FF22569D4535 /* moc_countryinput.cpp */, C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */, 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */, @@ -1549,7 +1541,6 @@ D1FC601FC2F9F3E33F3A14E9 /* animation.cpp in Compile Sources */, 8F65F0D95B1F0CEB859F2FB3 /* boxshadow.cpp in Compile Sources */, D7EF8F129FCCE9AB3F3F081F /* button.cpp in Compile Sources */, - B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */, 07DC42A01B5EA15300B6B888 /* numbers.cpp in Compile Sources */, C03447C9A7D9FF73463B8BB5 /* countryinput.cpp in Compile Sources */, 07BE850F1A2093C9008ACB9F /* localstorage.cpp in Compile Sources */, @@ -1625,7 +1616,6 @@ 9A523F51135FD4E2464673A6 /* moc_mtpSession.cpp in Compile Sources */, C329997D36D34D568CE16C9A /* moc_animation.cpp in Compile Sources */, B2F5B08BFFBBE7E37D3863BB /* moc_button.cpp in Compile Sources */, - B6F50D5FBFAEB16DD0E5B1C3 /* moc_countrycodeinput.cpp in Compile Sources */, 6A8BC88AB464B92706EFE6FF /* moc_countryinput.cpp in Compile Sources */, 0764D55A1ABAD6F900FBFEED /* apiwrap.cpp in Compile Sources */, 07DE92A01AA4923300A18F6F /* passcodewidget.cpp in Compile Sources */, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 662fd8be5..e3df7d04d 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -40,7 +40,7 @@ compilers: GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp\ GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp\ GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp\ - GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp\ + GeneratedFiles/Debug/moc_contextmenu.cpp\ GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp\ GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp\ GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp\ @@ -99,9 +99,9 @@ GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png /usr/local/Qt-5.5.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp -compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: - -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp + -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h @@ -352,20 +352,6 @@ GeneratedFiles/Debug/moc_contextmenu.cpp: ../../Libraries/QtStatic/qtbase/includ SourceFiles/gui/contextmenu.h /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp -GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ - ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ - SourceFiles/style.h \ - GeneratedFiles/style_classes.h \ - GeneratedFiles/style_auto.h \ - SourceFiles/gui/animation.h \ - SourceFiles/types.h \ - ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ - SourceFiles/logs.h \ - ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ - ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ - SourceFiles/gui/countrycodeinput.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp - GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/style.h \ GeneratedFiles/style_classes.h \ @@ -646,7 +632,6 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/gui/phoneinput.h \ SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ - SourceFiles/gui/countrycodeinput.h \ SourceFiles/gui/countryinput.h \ SourceFiles/gui/scrollarea.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ @@ -672,7 +657,6 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl SourceFiles/gui/phoneinput.h \ SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ - SourceFiles/gui/countrycodeinput.h \ SourceFiles/gui/countryinput.h \ SourceFiles/gui/scrollarea.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \