forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/3.6'
Change-Id: I8f034f91de04e319dd5ba24b8837f1daca54d918
This commit is contained in:
@@ -961,7 +961,7 @@ class Dumper(DumperBase):
|
||||
#if int(addr) == 0xffffffffffffffff:
|
||||
# raise RuntimeError("Illegal address")
|
||||
if self.currentPrintsAddress and not addr is None:
|
||||
self.put('addr="0x%x",' % int(addr))
|
||||
self.put('address="0x%x",' % int(addr))
|
||||
|
||||
def isFunctionType(self, typeobj):
|
||||
if self.isGoodLldb:
|
||||
@@ -994,7 +994,7 @@ class Dumper(DumperBase):
|
||||
self.put('iname="%s",' % self.currentIName)
|
||||
self.putType(typeName)
|
||||
self.put('numchild="%s",' % numchild)
|
||||
self.put('addr="0x%x",' % value.GetLoadAddress())
|
||||
self.put('address="0x%x",' % value.GetLoadAddress())
|
||||
self.putItemCount(numchild)
|
||||
if self.currentIName in self.expandedINames:
|
||||
with Children(self):
|
||||
|
@@ -41,6 +41,14 @@
|
||||
{
|
||||
"items":
|
||||
[
|
||||
{
|
||||
"trKey": "Qt 5.6",
|
||||
"value":
|
||||
"{
|
||||
'qtQuickVersion': '2.6',
|
||||
'qtQuickWindowVersion': '2.2'
|
||||
}"
|
||||
},
|
||||
{
|
||||
"trKey": "Qt 5.5",
|
||||
"value":
|
||||
|
@@ -43,6 +43,16 @@
|
||||
{
|
||||
"items":
|
||||
[
|
||||
{
|
||||
"trKey": "Qt 5.6",
|
||||
"value":
|
||||
"{
|
||||
'qtQuickVersion': '2.6',
|
||||
'qtQuickControlsVersion': '1.5',
|
||||
'qtQuickDialogsVersion': '1.2',
|
||||
'qtQuickLayoutsVersion': '1.3'
|
||||
}"
|
||||
},
|
||||
{
|
||||
"trKey": "Qt 5.5",
|
||||
"value":
|
||||
|
@@ -28819,6 +28819,10 @@ This is independent of the visibility property in QML.</source>
|
||||
</context>
|
||||
<context>
|
||||
<name>QmlDesigner::QmlDesignerPlugin</name>
|
||||
<message>
|
||||
<source>Cannot create OpenGL context.</source>
|
||||
<translation>Не удалось создать контекст OpenGL.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Switch Text/Design</source>
|
||||
<translation>Переключить текст/дизайн</translation>
|
||||
@@ -30591,6 +30595,10 @@ references to elements in other files, loops, and so on.)</source>
|
||||
</context>
|
||||
<context>
|
||||
<name>QmlProfiler::Internal::QmlProfilerPlugin</name>
|
||||
<message>
|
||||
<source>Cannot create OpenGL context.</source>
|
||||
<translation>Не удалось создать контекст OpenGL.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>QML Profiler</source>
|
||||
<translation>Профайлер QML</translation>
|
||||
@@ -38677,6 +38685,13 @@ should a repository require SSH-authentication (see documentation on SSH and the
|
||||
<translation>Ошибка загрузки режима приветствия</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Welcome::Internal::WelcomePlugin</name>
|
||||
<message>
|
||||
<source>Cannot create OpenGL context.</source>
|
||||
<translation>Не удалось создать контекст OpenGL.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WidgetPluginManager</name>
|
||||
<message>
|
||||
|
@@ -511,9 +511,21 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
|
||||
AndroidBuildApkStep *buildApkStep
|
||||
= AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
|
||||
|
||||
if (!buildApkStep || !buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("gradlew")).exists())
|
||||
if (!buildApkStep || !buildApkStep->useGradle() || !buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("gradlew")).exists())
|
||||
return false;
|
||||
|
||||
Utils::FileName wrapperProps(buildApkStep->androidPackageSourceDir());
|
||||
wrapperProps.appendPath(QLatin1String("gradle/wrapper/gradle-wrapper.properties"));
|
||||
if (wrapperProps.exists()) {
|
||||
GradleProperties wrapperProperties = readGradleProperties(wrapperProps.toString());
|
||||
QString distributionUrl = QString::fromLocal8Bit(wrapperProperties["distributionUrl"]);
|
||||
QRegExp re(QLatin1String(".*services.gradle.org/distributions/gradle-2..*.zip"));
|
||||
if (!re.exactMatch(distributionUrl)) {
|
||||
wrapperProperties["distributionUrl"] = "https\\://services.gradle.org/distributions/gradle-2.2.1-all.zip";
|
||||
mergeGradleProperties(wrapperProps.toString(), wrapperProperties);
|
||||
}
|
||||
}
|
||||
|
||||
GradleProperties localProperties;
|
||||
localProperties["sdk.dir"] = AndroidConfigurations::currentConfig().sdkLocation().toString().toLocal8Bit();
|
||||
if (!mergeGradleProperties(buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("local.properties")).toString(), localProperties))
|
||||
|
@@ -34,10 +34,15 @@
|
||||
|
||||
#include <android/androidmanager.h>
|
||||
#include <android/androidconfigurations.h>
|
||||
|
||||
#include <projectexplorer/buildmanager.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
|
||||
#include <qmakeprojectmanager/qmakebuildinfo.h>
|
||||
#include <qmakeprojectmanager/qmakeproject.h>
|
||||
|
||||
using namespace QmakeAndroidSupport::Internal;
|
||||
|
||||
@@ -93,7 +98,16 @@ ProjectExplorer::BuildConfiguration *AndroidQmakeBuildConfigurationFactory::rest
|
||||
AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target)
|
||||
: QmakeProjectManager::QmakeBuildConfiguration(target)
|
||||
{
|
||||
using QmakeProjectManager::QmakeProject;
|
||||
auto updateGrade = [this] {
|
||||
Android::AndroidManager::updateGradleProperties(BuildConfiguration::target());
|
||||
};
|
||||
|
||||
QmakeProject *project = qobject_cast<QmakeProject *>(target->project());
|
||||
if (project)
|
||||
connect(project, &QmakeProject::proFilesEvaluated, this, updateGrade);
|
||||
else
|
||||
connect(this, &AndroidQmakeBuildConfiguration::enabledChanged, this, updateGrade);
|
||||
}
|
||||
|
||||
AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, AndroidQmakeBuildConfiguration *source)
|
||||
@@ -110,6 +124,27 @@ AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(ProjectExplorer::
|
||||
|
||||
void AndroidQmakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
||||
{
|
||||
env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
|
||||
Android::AndroidConfigurations::currentConfig().bestNdkPlatformMatch(Android::AndroidManager::minimumSDK(target())));
|
||||
m_androidNdkPlatform = Android::AndroidConfigurations::currentConfig().bestNdkPlatformMatch(Android::AndroidManager::minimumSDK(target()));
|
||||
env.set(QLatin1String("ANDROID_NDK_PLATFORM"), m_androidNdkPlatform);
|
||||
}
|
||||
|
||||
void AndroidQmakeBuildConfiguration::manifestSaved()
|
||||
{
|
||||
using QmakeProjectManager::QMakeStep;
|
||||
QString androidNdkPlatform = Android::AndroidConfigurations::currentConfig().bestNdkPlatformMatch(Android::AndroidManager::minimumSDK(target()));
|
||||
if (m_androidNdkPlatform == androidNdkPlatform)
|
||||
return;
|
||||
|
||||
emitEnvironmentChanged();
|
||||
|
||||
QMakeStep *qs = qmakeStep();
|
||||
if (!qs)
|
||||
return;
|
||||
|
||||
qs->setForced(true);
|
||||
|
||||
ProjectExplorer::BuildManager::buildList(stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
|
||||
ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||
ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||
setSubNodeBuild(0);
|
||||
}
|
||||
|
@@ -61,8 +61,11 @@ public:
|
||||
AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, AndroidQmakeBuildConfiguration *source);
|
||||
AndroidQmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
|
||||
void addToEnvironment(Utils::Environment &env) const;
|
||||
void manifestSaved();
|
||||
|
||||
using BuildConfiguration::emitEnvironmentChanged;
|
||||
private:
|
||||
mutable QString m_androidNdkPlatform;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -36,17 +36,9 @@
|
||||
|
||||
#include <android/androidconstants.h>
|
||||
#include <android/androidglobal.h>
|
||||
#include <projectexplorer/buildmanager.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/deployconfiguration.h>
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||
#include <qmakeprojectmanager/qmakenodes.h>
|
||||
#include <qmakeprojectmanager/qmakeproject.h>
|
||||
#include <qmakeprojectmanager/qmakestep.h>
|
||||
|
||||
using namespace QmakeProjectManager;
|
||||
|
||||
@@ -136,20 +128,8 @@ Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Targ
|
||||
void QmakeAndroidSupport::manifestSaved(const ProjectExplorer::Target *target)
|
||||
{
|
||||
ProjectExplorer::BuildConfiguration *bc = target->activeBuildConfiguration();
|
||||
if (auto qbc = qobject_cast<AndroidQmakeBuildConfiguration *>(bc)) {
|
||||
qbc->emitEnvironmentChanged();
|
||||
|
||||
QMakeStep *qs = qbc->qmakeStep();
|
||||
if (!qs)
|
||||
return;
|
||||
|
||||
qs->setForced(true);
|
||||
|
||||
ProjectExplorer::BuildManager::buildList(bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN),
|
||||
ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||
ProjectExplorer::BuildManager::appendStep(qs, ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
|
||||
qbc->setSubNodeBuild(0);
|
||||
}
|
||||
if (auto qbc = qobject_cast<AndroidQmakeBuildConfiguration *>(bc))
|
||||
qbc->manifestSaved();
|
||||
}
|
||||
|
||||
Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::Target *target)
|
||||
|
@@ -1812,7 +1812,7 @@ void QmakeProFileNode::asyncUpdate()
|
||||
m_project->incrementPendingEvaluateFutures();
|
||||
setupReader();
|
||||
if (!includedInExactParse())
|
||||
m_readerExact->setVerbose(false);
|
||||
m_readerExact->setExact(false);
|
||||
m_parseFutureWatcher.waitForFinished();
|
||||
EvalInput input = evalInput();
|
||||
QFuture<EvalResult *> future = QtConcurrent::run(&QmakeProFileNode::asyncEvaluate, this, input);
|
||||
|
@@ -65,10 +65,12 @@ static inline bool isSupportedAttachedProperties(const QString &propertyName)
|
||||
|
||||
static inline QStringList supportedVersionsList()
|
||||
{
|
||||
QStringList list;
|
||||
list << QStringLiteral("2.0") << QStringLiteral("2.1")
|
||||
<< QStringLiteral("2.2") << QStringLiteral("2.3")
|
||||
<< QStringLiteral("2.4") << QStringLiteral("2.5");
|
||||
static const QStringList list = {
|
||||
QStringLiteral("2.0"), QStringLiteral("2.1"),
|
||||
QStringLiteral("2.2"), QStringLiteral("2.3"),
|
||||
QStringLiteral("2.4"), QStringLiteral("2.5"),
|
||||
QStringLiteral("2.6")
|
||||
};
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@@ -46,8 +46,11 @@ static QString format(const QString &fileName, int lineNo, const QString &msg)
|
||||
return msg;
|
||||
}
|
||||
|
||||
ProMessageHandler::ProMessageHandler(bool verbose)
|
||||
ProMessageHandler::ProMessageHandler(bool verbose, bool exact)
|
||||
: m_verbose(verbose)
|
||||
, m_exact(exact)
|
||||
//: Prefix used for output from the cumulative evaluation of project files.
|
||||
, m_prefix(tr("[Inexact] "))
|
||||
{
|
||||
QObject::connect(this, SIGNAL(writeMessage(QString,Core::MessageManager::PrintToOutputPaneFlags)),
|
||||
Core::MessageManager::instance(), SLOT(write(QString,Core::MessageManager::PrintToOutputPaneFlags)),
|
||||
@@ -56,14 +59,24 @@ ProMessageHandler::ProMessageHandler(bool verbose)
|
||||
|
||||
void ProMessageHandler::message(int type, const QString &msg, const QString &fileName, int lineNo)
|
||||
{
|
||||
if ((type & CategoryMask) == ErrorMessage && ((type & SourceMask) == SourceParser || m_verbose))
|
||||
emit writeMessage(format(fileName, lineNo, msg), Core::MessageManager::NoModeSwitch);
|
||||
if ((type & CategoryMask) == ErrorMessage && ((type & SourceMask) == SourceParser || m_verbose)) {
|
||||
QString fmsg = format(fileName, lineNo, msg);
|
||||
if ((type & SourceMask) == SourceParser || m_exact)
|
||||
emit writeMessage(fmsg, Core::MessageManager::NoModeSwitch);
|
||||
else
|
||||
emit writeMessage(m_prefix + fmsg, Core::MessageManager::NoModeSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
void ProMessageHandler::fileMessage(const QString &msg)
|
||||
void ProMessageHandler::fileMessage(int type, const QString &msg)
|
||||
{
|
||||
if (m_verbose)
|
||||
emit writeMessage(msg, Core::MessageManager::NoModeSwitch);
|
||||
Q_UNUSED(type)
|
||||
if (m_verbose) {
|
||||
if (m_exact)
|
||||
emit writeMessage(msg, Core::MessageManager::NoModeSwitch);
|
||||
else
|
||||
emit writeMessage(m_prefix + msg, Core::MessageManager::NoModeSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -49,21 +49,24 @@ class QTSUPPORT_EXPORT ProMessageHandler : public QObject, public QMakeHandler
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ProMessageHandler(bool verbose = true);
|
||||
ProMessageHandler(bool verbose = true, bool exact = true);
|
||||
virtual ~ProMessageHandler() {}
|
||||
|
||||
virtual void aboutToEval(ProFile *, ProFile *, EvalFileType) {}
|
||||
virtual void doneWithEval(ProFile *) {}
|
||||
virtual void message(int type, const QString &msg, const QString &fileName, int lineNo);
|
||||
virtual void fileMessage(const QString &msg);
|
||||
virtual void fileMessage(int type, const QString &msg);
|
||||
|
||||
void setVerbose(bool on) { m_verbose = on; }
|
||||
void setExact(bool on) { m_exact = on; }
|
||||
|
||||
signals:
|
||||
void writeMessage(const QString &error, Core::MessageManager::PrintToOutputPaneFlags flag);
|
||||
|
||||
private:
|
||||
bool m_verbose;
|
||||
bool m_exact;
|
||||
QString m_prefix;
|
||||
};
|
||||
|
||||
class QTSUPPORT_EXPORT ProFileReader : public ProMessageHandler, public QMakeParser, public ProFileEvaluator
|
||||
|
@@ -399,7 +399,9 @@ QByteArray QMakeEvaluator::getCommandOutput(const QString &args) const
|
||||
if (!errout.isEmpty()) {
|
||||
if (errout.endsWith('\n'))
|
||||
errout.chop(1);
|
||||
m_handler->message(QMakeHandler::EvalError, QString::fromLocal8Bit(errout));
|
||||
m_handler->message(
|
||||
QMakeHandler::EvalError | (m_cumulative ? QMakeHandler::CumulativeEvalMessage : 0),
|
||||
QString::fromLocal8Bit(errout));
|
||||
}
|
||||
# endif
|
||||
out = proc.readAllStandardOutput();
|
||||
@@ -1467,8 +1469,12 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
|
||||
fputs(msg.toLatin1().constData(), stderr);
|
||||
#endif
|
||||
} else {
|
||||
m_handler->fileMessage(fL1S("Project %1: %2")
|
||||
.arg(function.toQString(m_tmp1).toUpper(), msg));
|
||||
m_handler->fileMessage(
|
||||
(func_t == T_ERROR ? QMakeHandler::ErrorMessage :
|
||||
func_t == T_WARNING ? QMakeHandler::WarningMessage :
|
||||
QMakeHandler::InfoMessage)
|
||||
| (m_cumulative ? QMakeHandler::CumulativeEvalMessage : 0),
|
||||
fL1S("Project %1: %2").arg(function.toQString(m_tmp1).toUpper(), msg));
|
||||
}
|
||||
}
|
||||
return (func_t == T_ERROR && !m_cumulative) ? ReturnError : ReturnTrue;
|
||||
|
@@ -1303,7 +1303,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConfigFeatures()
|
||||
config.detach();
|
||||
processed.insert(config);
|
||||
VisitReturn vr = evaluateFeatureFile(config, true);
|
||||
if (vr == ReturnError)
|
||||
if (vr == ReturnError && !m_cumulative)
|
||||
return vr;
|
||||
if (vr == ReturnTrue) {
|
||||
finished = false;
|
||||
@@ -1981,7 +1981,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFileInto(
|
||||
void QMakeEvaluator::message(int type, const QString &msg) const
|
||||
{
|
||||
if (!m_skipLevel)
|
||||
m_handler->message(type, msg,
|
||||
m_handler->message(type | (m_cumulative ? QMakeHandler::CumulativeEvalMessage : 0), msg,
|
||||
m_current.line ? m_current.pro->fileName() : QString(),
|
||||
m_current.line != 0xffff ? m_current.line : -1);
|
||||
}
|
||||
|
@@ -65,6 +65,8 @@ public:
|
||||
enum {
|
||||
SourceEvaluator = 0x10,
|
||||
|
||||
CumulativeEvalMessage = 0x1000,
|
||||
|
||||
EvalWarnLanguage = SourceEvaluator | WarningMessage | WarnLanguage,
|
||||
EvalWarnDeprecated = SourceEvaluator | WarningMessage | WarnDeprecated,
|
||||
|
||||
@@ -72,7 +74,7 @@ public:
|
||||
};
|
||||
|
||||
// error(), warning() and message() from .pro file
|
||||
virtual void fileMessage(const QString &msg) = 0;
|
||||
virtual void fileMessage(int type, const QString &msg) = 0;
|
||||
|
||||
enum EvalFileType { EvalProjectFile, EvalIncludeFile, EvalConfigFile, EvalFeatureFile, EvalAuxFile };
|
||||
virtual void aboutToEval(ProFile *parent, ProFile *proFile, EvalFileType type) = 0;
|
||||
|
@@ -47,8 +47,9 @@ class QMAKE_EXPORT QMakeParserHandler
|
||||
public:
|
||||
enum {
|
||||
CategoryMask = 0xf00,
|
||||
WarningMessage = 0x000,
|
||||
ErrorMessage = 0x100,
|
||||
InfoMessage = 0x100,
|
||||
WarningMessage = 0x200,
|
||||
ErrorMessage = 0x300,
|
||||
|
||||
SourceMask = 0xf0,
|
||||
SourceParser = 0,
|
||||
|
@@ -16,5 +16,5 @@ SOURCES += clangbackendmain.cpp
|
||||
|
||||
unix {
|
||||
!osx: QMAKE_LFLAGS += -Wl,-z,origin
|
||||
QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
|
||||
!disable_external_rpath: QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
|
||||
}
|
||||
|
@@ -261,7 +261,6 @@ class JIRA:
|
||||
def __initBugDict__(self):
|
||||
self.__bugs__= {
|
||||
'QTCREATORBUG-6853':self._workaroundCreator6853_,
|
||||
'QTCREATORBUG-15456':self._workaroundCreator15456_,
|
||||
}
|
||||
# helper function - will be called if no workaround for the requested bug is deposited
|
||||
def _exitFatal_(self, bugType, number):
|
||||
@@ -272,13 +271,3 @@ class JIRA:
|
||||
def _workaroundCreator6853_(self, *args):
|
||||
if "Release" in args[0] and platform.system() == "Linux":
|
||||
snooze(2)
|
||||
|
||||
def _workaroundCreator15456_(self, *args):
|
||||
isMsvc = args[0]
|
||||
isQt5 = args[1]
|
||||
config = args[2]
|
||||
if isMsvc and isQt5 and config != "Release":
|
||||
unexpectedExitMessage = ("{type='QMessageBox' unnamed='1' visible='1' "
|
||||
"windowTitle='Unexpected CDB Exit'}")
|
||||
clickButton(waitForObject("{text='OK' type='QPushButton' unnamed='1' "
|
||||
"visible='1' window=%s}" % unexpectedExitMessage))
|
||||
|
@@ -95,8 +95,6 @@ def main():
|
||||
invokeMenuItem("Debug", "Start Debugging", "Start Debugging")
|
||||
JIRA.performWorkaroundForBug(6853, JIRA.Bug.CREATOR, config)
|
||||
handleDebuggerWarnings(config, isMsvc)
|
||||
JIRA.performWorkaroundForBug(15456, JIRA.Bug.CREATOR, isMsvc,
|
||||
checkedTargets[kit] & ~Targets.qt4Classes(), config)
|
||||
ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton")
|
||||
outputWindow = waitForObject(":Qt Creator_Core::OutputWindow")
|
||||
waitFor("'Debugging has finished' in str(outputWindow.plainText)", 20000)
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user