Skip to content

Commit

Permalink
Merge v1.14.1 into community
Browse files Browse the repository at this point in the history
  • Loading branch information
GovernikusAusweisApp2 committed Mar 28, 2018
2 parents 8fe1abd + 6c17e68 commit b4c1fbe
Show file tree
Hide file tree
Showing 1,230 changed files with 7,198 additions and 3,932 deletions.
3 changes: 2 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2014-2016 Governikus GmbH & Co. KG
Copyright (c) 2014-2018 Governikus GmbH & Co. KG


Authors
Expand All @@ -10,6 +10,7 @@ Ingo Weinhold
Giorgio Busatto
Jan Murawski
Lars Schmertmann
Jens Trillmann



Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ ELSE()
ENDIF()


PROJECT(AusweisApp2 VERSION 1.14.0 LANGUAGES ${LANGUAGES})
PROJECT(AusweisApp2 VERSION 1.14.1 LANGUAGES ${LANGUAGES})

# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
Expand Down
2 changes: 1 addition & 1 deletion LICENSE.officially.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Bitte lesen Sie zunächst die Allgemeinen Geschäftsbedingungen so wie die Lizen
Allgemeine Geschäftsbedingungen

§ 1 Nutzungsbedingungen und Datenschutzhinweis
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern, für Bau und Heimat (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen.

§ 2 Vertragsgegenstand und Unentgeltlichkeit
Expand Down
2 changes: 1 addition & 1 deletion cmake/Appcast.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ IF(MAC OR LINUX OR WIN32)
ENDIF()

MESSAGE(STATUS "Processing: ${file}")
IF(NOT "${_system}" STREQUAL "SOURCES")
IF(NOT "${_system}" STREQUAL "src")
FILE(READ ${PACKAGING_DIR}/updater/Appcast.item.json.in item)

STRING(REPLACE "AusweisApp2-" "" APPCAST_FILE_VERSION ${file})
Expand Down
4 changes: 3 additions & 1 deletion cmake/CompilerFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ IF(MSVC)
IF(WARNINGS_ARE_ERRORS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
ENDIF()
ADD_FLAG(/Qspectre)
ELSE()
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)

Expand Down Expand Up @@ -61,9 +62,10 @@ ELSE()


IF(ANDROID)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
IF(CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64 -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64")
ENDIF()
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
ENDIF()
Expand Down
19 changes: 19 additions & 0 deletions cmake/Helper.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,25 @@ FUNCTION(ADD_FLAG)
ENDFUNCTION()


FUNCTION(QUERY_QMAKE _out _var)
IF(NOT TARGET Qt5::qmake)
MESSAGE(WARNING "qmake not found")
RETURN()
ENDIF()

GET_TARGET_PROPERTY(qmake_bin Qt5::qmake LOCATION)
EXECUTE_PROCESS(COMMAND "${qmake_bin}" -query ${_var}
RESULT_VARIABLE _result
OUTPUT_VARIABLE _output
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)

IF(_result EQUAL 0)
SET(${_out} "${_output}" PARENT_SCOPE)
ENDIF()
ENDFUNCTION()


FUNCTION(GET_FILE_MATCHER _result_remove _result_keep)
IF(NOT ANDROID)
LIST(APPEND matcher_remove "_android")
Expand Down
4 changes: 4 additions & 0 deletions cmake/Libraries.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ FOREACH(dest "" "share/qt" "share/qt5")
ENDIF()
ENDFOREACH()

IF(NOT QT_TRANSLATIONS_DIR)
QUERY_QMAKE(QT_TRANSLATIONS_DIR QT_INSTALL_TRANSLATIONS)
ENDIF()

MESSAGE(STATUS "QT_HOST_PREFIX: ${QT_HOST_PREFIX}")
MESSAGE(STATUS "QT_TRANSLATIONS_DIR: ${QT_TRANSLATIONS_DIR}")

Expand Down
15 changes: 15 additions & 0 deletions cmake/android.toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,21 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.7.1)
SET(ANDROID_SDK $ENV{ANDROID_HOME})
SET(ANDROID_BUILD_TOOLS_REVISION $ENV{ANDROID_BUILD_TOOLS_REVISION})

IF(NOT EXISTS "${ANDROID_SDK}")
MESSAGE(FATAL_ERROR "Environment variable ANDROID_HOME is undefined")
ENDIF()

IF(NOT ANDROID_BUILD_TOOLS_REVISION)
SET(_android_build_tools_dir "${ANDROID_SDK}/build-tools")
FILE(GLOB build_tools ${_android_build_tools_dir}/*)
LIST(LENGTH build_tools build_tools_len)
IF(NOT build_tools_len EQUAL 1)
MESSAGE(FATAL_ERROR "Cannot determine ANDROID_BUILD_TOOLS_REVISION: ${_android_build_tools_dir}")
ENDIF()

GET_FILENAME_COMPONENT(ANDROID_BUILD_TOOLS_REVISION "${build_tools}" NAME)
ENDIF()

SET(CMAKE_SYSTEM_NAME Android)
SET(CMAKE_ANDROID_STL_TYPE gnustl_shared)

Expand Down
68 changes: 68 additions & 0 deletions docs/releasenotes/1.14.1.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
AusweisApp2 1.14.1
^^^^^^^^^^^^^^^^^^

**Releasedatum:** 28. März 2018



Anwender
""""""""
- Die Nutzung der PIN-Verwaltung ist nun auch mit der Funktion
"Smartphone als Kartenleser" möglich.

- Die mobile Startseite wurde überarbeitet.

- Beim Koppeln von zwei Geräten für die Funktion "Smartphone als Kartenleser"
wird nun eine einheitliche PIN-Tastatur verwendet.

- Während einer Authentisierung wird nun eine Fortschrittsanzeige
zusammen mit dem Namen des aktuellen Authentisierungsschrittes angezeigt.

- Während der Verwendung der Funktion "Smartphone als Kartenleser" wird auf
beiden Geräten jeweils der Name des verbundenen Gerätes angezeigt.

- Die Anzeige der unterstützten Kartenlesegeräte wurde optimiert.

- Das Koppeln für die Funktion "Smartphone als Kartenleser" ist jetzt während
eines Authentisierungsvorgangs möglich und führt nicht mehr zum Abbruch des
Vorgangs.

- Bei der Android-Version der AusweisApp2 ist es jetzt möglich, den Verlauf
zu deaktivieren und Einträge zu löschen.

- Die AusweisApp2 kommt nun auch beim erneuten Starten aus dem Launchpad oder
per Doppelklick in den Vordergrund. Voraussetzung ist, dass sie bereits
vorher gestartet wurde.

- Bei einem Update bleibt der Autostart-Eintrag erhalten.

- Bei der Android-Version wird die letzte Auswahl einer
Authentisierungsmethode (NFC, Bluetooth oder WLAN) nun als bevorzugte
Methode gespeichert.

- Bei der Android-Version wurden die Fehlermeldungen / Hinweise bei
Fehleingaben optimiert.

- Der Begriff "Handbuch" wurde gegen "Online-Hilfe" ausgetauscht und an
geeigneten Stellen wurden Verlinkungen eingefügt.

- Optimierung der Anzeige der Diensteanbieter im Anbieterverzeichnis
(macOS und Windows).

- Die Funktion "Smartphone als Kartenleser" unterstützt nun auch einen
mobilen Hotspot des selben Gerätes.

- Die Unterstützung von Bildschirmlesern wurde verbessert.


Entwickler
""""""""""
- Beim Aufruf von "eID-Client?status" wird nun auch
der Header "Access-Control-Allow-Origin" gesetzt.

- Im Protokoll wird nun auch das TLS-Zertifikat angezeigt,
welches einen Fehler verursacht.

- Es wird nun TLS-Session-Resumption beim Attached-eID erzwungen.

- Fehlercode bei fehlgeschlagenen Transmits korrigiert.
8 changes: 7 additions & 1 deletion docs/releasenotes/announce.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
Abkündigungen
=============

Mit der Version 1.14.0 der AusweisApp2 wird die Unterstützung
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
folgender Systeme eingestellt.

- OS X 10.10


Mit der Version 1.14.0 der AusweisApp2 wurde die Unterstützung
folgender Systeme eingestellt.

- OS X 10.9
1 change: 1 addition & 0 deletions docs/releasenotes/appcast.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Release Notes
.. toctree::
:maxdepth: 1

1.14.1
1.14.0
announce
issues
3 changes: 0 additions & 3 deletions docs/releasenotes/issues.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,5 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
kann es unter Windows und macOS zu einem Absturz kommen.

- Die PIN-Änderung über ein Smartphone als Kartenlesegerät wird nicht
unterstützt.

- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
auf Android.
1 change: 1 addition & 0 deletions docs/releasenotes/versions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Versionszweig 1.14
.. toctree::
:maxdepth: 1

1.14.1
1.14.0


Expand Down
16 changes: 7 additions & 9 deletions docs/sdk/android.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ secure connection to AusweisApp2.
with another session ID.

- An attacker cannot grab the session ID of the previous app because
AusweisApp2 uses multiple sources of secure random number generator and
provides an optional API for the app to provide additional random number
entropy.
AusweisApp2 uses multiple sources of secure random number generator.

- An attacker cannot fake AusweisApp2 for other apps because the connection
via AIDL is bound with package name "com.governikus.ausweisapp2". Google
Expand Down Expand Up @@ -130,7 +128,7 @@ fingerprint of the authentic SDK certificate is the following:

.. code-block:: text
B0:2A:C7:6B:50:A4:97:AE:81:0A:EA:C2:25:98:18:7B:3D:42:90:27:7D:08:51:A7:FA:8E:1A:EA:5A:97:98:70
B0 2A C7 6B 50 A4 97 AE 81 0A EA C2 25 98 18 7B 3D 42 90 27 7D 08 51 A7 FA 8E 1A EA 5A 97 98 70
Expand Down Expand Up @@ -637,11 +635,11 @@ are shown in code listing below.
class ForegroundDispatcher
{
private Activity mActivity;
private NfcAdapter mAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
private final Activity mActivity;
private final NfcAdapter mAdapter;
private final PendingIntent mPendingIntent;
private final IntentFilter[] mFilters;
private final String[][] mTechLists;
ForegroundDispatcher(Activity pActivity)
{
Expand Down
1 change: 1 addition & 0 deletions libs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ ExternalProject_Add(qt
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-macOS-iOS-Fix-garbled-text-under-some-conditions.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Fix-reopening-on-macOS.patch &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
Expand Down
49 changes: 49 additions & 0 deletions patches/qt-Fix-reopening-on-macOS.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
From d9c149dbc2021ed1e82cd34ae30dfd39f7d82a8d Mon Sep 17 00:00:00 2001
From: Jens Trillmann <[email protected]>
Date: Mon, 12 Mar 2018 12:06:05 +0100
Subject: [PATCH] Fix reopening on macOS

When a user reopens an application while the application is already
running, then macOS does not run the application a second time but
sends kAEReopenApplication to inform the running instance.
Qt ignores this event and the application does not open. To handle this
event a new event handler is registered. The application state is set
to Qt::ApplicationActive when the handler is called. An application that
wants to react to reopening has to react to QEvent::ApplicationActivate
in the running QApplication.

Change-Id: Ic3adeb6b334c85f36671c254657170c71a2dfb59
---
src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git x/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm y/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
index a94e0dc517..ccf16addea 100644
--- x/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
+++ y/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
@@ -259,6 +259,10 @@ - (void) applicationWillFinishLaunching:(NSNotification *)notification
andSelector:@selector(appleEventQuit:withReplyEvent:)
forEventClass:kCoreEventClass
andEventID:kAEQuitApplication];
+ [eventManager setEventHandler:self
+ andSelector:@selector(appleEventReopen:withReplyEvent:)
+ forEventClass:kCoreEventClass
+ andEventID:kAEReopenApplication];
[eventManager setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
@@ -438,4 +442,11 @@ - (void)appleEventQuit:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEv
[NSApp terminate:self];
}

+- (void)appleEventReopen:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
+{
+ Q_UNUSED(event);
+ Q_UNUSED(replyEvent);
+ QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive, true);
+}
+
@end
--
2.14.3 (Apple Git-98)

1 change: 1 addition & 0 deletions resources/ausweisapp.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,6 @@
<file>images/phone_bluetooth.svg</file>
<file>images/location_flag_de.svg</file>
<file>images/location_flag_en.svg</file>
<file>images/siteWithLogo.png</file>
</qresource>
</RCC>
4 changes: 0 additions & 4 deletions resources/ausweisapp_desktop.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@
<qresource prefix="/">
<file>html_templates/alreadyactive.html</file>
<file>html_templates/error.html</file>
<file>stylesheets/common.qss</file>
<file>stylesheets/macos.qss</file>
<file>stylesheets/windows.qss</file>
<file>stylesheets/desktop.qss</file>
<file>images/beta.svg</file>
<file>images/green_check_mark.svg</file>
<file>images/MenuSelected.png</file>
<file>images/MenuUnselected.png</file>
<file>images/MenuUnselectedDisabled.png</file>
<file>images/npa.ico</file>
<file>images/siteWithLogo.png</file>
<file>images/Logo_AutentApp2_2014.png</file>
<file>images/AppLogo_AutentApp2_2014.png</file>
<file>images/start_nPA_eAT.png</file>
Expand Down
5 changes: 0 additions & 5 deletions resources/ausweisapp_mobile.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@
<file>images/android/navigation/support.svg</file>
<file>images/android/navigation/bewerten.svg</file>
<file>images/android/navigation/teilen.svg</file>
<file>images/android/mdpi/haken.png</file>
<file>images/android/hdpi/haken.png</file>
<file>images/android/xhdpi/haken.png</file>
<file>images/android/xxhdpi/haken.png</file>
<file>images/android/xxxhdpi/haken.png</file>
<file>images/android/checkbox_0.svg</file>
<file>images/android/checkbox_1.svg</file>
<file>images/android/tabDivider.svg</file>
Expand Down
4 changes: 1 addition & 3 deletions resources/config.json.in
Original file line number Diff line number Diff line change
Expand Up @@ -173,9 +173,7 @@
"selfAuthentication": {
"_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)",
"url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
"certDescr": "308202E0060A04007F00070301030101A10E0C0C442D547275737420476D6248A2181316687474703A2F2F7777772E642D74727573742E6E6574A3190C17476F7665726E696B757320476D6248202620436F2E4B47A41A131868747470733A2F2F7777772E617574656E746170702E6465A58202050C8202014E616D652C20416E7363687269667420756E6420452D4D61696C2D4164726573736520646573204469656E737465616E626965746572733A0D0A476F7665726E696B757320476D6248202620436F2E4B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E0D0A6B6F6E74616B7440676F7665726E696B75732E636F6D0D0A0D0A4765736368C3A46674737A7765636B3A0D0A53656C6273746175736B756E66740D0A0D0A48696E7765697320617566206469652066C3BC722064656E204469656E737465616E626965746572207A757374C3A46E646967656E205374656C6C656E2C20646965206469652045696E68616C74756E672064657220566F7273636872696674656E207A756D20446174656E73636875747A206B6F6E74726F6C6C696572656E3A0D0A446572204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656E0D0A303432312F3336312D323031300D0A6F666669636540646174656E73636875747A2E6272656D656E2E64650D0A687474703A2F2F7777772E646174656E73636875747A2E6272656D656E2E64650D0AA7683166042029F04459C39E4B68C70AA3961FA7B1B40E8A49238446CFE606C56FF8DC0989F404203FFF612368211F69D460DFF157F541BEBC96217D7AF6C2D4F57BF6E4A126A86C04209D8EB0BDF36B19C4AF3147E57401FD792845F0413102A7BD784DF9418098BEBE",
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
"testCertDescr": "30820266060A04007F00070301030101A1160C14476F7665726E696B757320546573742044564341A21A1318687474703A2F2F7777772E676F7665726E696B75732E6465A31A0C18476F7665726E696B757320476D6248202620436F2E204B47A420131E68747470733A2F2F746573742E676F7665726E696B75732D6569642E6465A582014F0C82014B416E736368726966743A090D0A476F7665726E696B757320476D6248202620436F2E204B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E090D0A0D0A452D4D61696C2D416472657373653A09686240626F732D6272656D656E2E6465090D0A0D0A5A7765636B20646573204175736C657365766F7267616E67733A0944656D6F6E7374726174696F6E20646573206549442D53657276696365090D0A0D0A5A757374C3A46E6469676520446174656E73636875747A61756673696368743A090D0A446965204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656EA64B134968747470733A2F2F746573742E676F7665726E696B75732D6569642E64653A3434332F417574656E742D44656D6F4170706C69636174696F6E2F5265636569766572536572766C6574A74631440420D2E54E1D26FC5DFC3408609831BBE4CFE3204365604849E7B094623566B54A760420E224D25B448DC054C023392CA11017751041D762F83D880895B3018D8EC2B290"
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml"
},

"updateServer": {
Expand Down
Binary file removed resources/images/android/hdpi/haken.png
Binary file not shown.
Binary file removed resources/images/android/mdpi/haken.png
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed resources/images/android/xhdpi/haken.png
Binary file not shown.
Binary file removed resources/images/android/xxhdpi/haken.png
Binary file not shown.
Binary file removed resources/images/android/xxxhdpi/haken.png
Binary file not shown.
2 changes: 1 addition & 1 deletion resources/jenkins/docker/alpine/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM scratch
MAINTAINER Governikus KG <[email protected]>

ARG version="3.6.2"
ARG version="3.7.0"
ARG arch="x86_64"
ADD alpine-minirootfs-$version-$arch.tar.gz /

Expand Down
Loading

0 comments on commit b4c1fbe

Please sign in to comment.