Your message dated Thu, 12 Jun 2025 08:28:39 +0000
with message-id <[email protected]>
and subject line unblock krdp
has caused the Debian Bug report #1107669,
regarding unblock: krdp/6.3.5-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1107669: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107669
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: [email protected], Debian Qt/KDE Maintainers 
<[email protected]>
Control: affects -1 + src:krdp
User: [email protected]
Usertags: unblock

Dear Release Team,

please unblock package krdp.

[ Reason ]
It contains the following changes:
* New upstream release (6.3.5).
  - Translation fixes.
* Backport upstream commits:
  - Fix mouse wheel scroll triggering screen hot corners when using xfreerdp
  under Wayland.
  - Increase default video stream quality to make it readable.
  - Use new kpipewire asynchronous methods, tentative fix for issues when
  restoring sessions.
  - Support horizontal wheel event. (kde#496747)

[ Tests ]
Tested that basic remote connection feature works.

[ Risks ]
Only backport of upstream commits that apply cleanly. Further fixes can
easily be backported or the changes reverted.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing


Thanks!


unblock krdp/6.3.5-1
diff -Nru krdp-6.3.4/CMakeLists.txt krdp-6.3.5/CMakeLists.txt
--- krdp-6.3.4/CMakeLists.txt   2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/CMakeLists.txt   2025-05-06 19:57:09.000000000 +0200
@@ -1,7 +1,7 @@
 # SPDX-FileCopyrightText: 2023 Arjen Hiemstra <[email protected]>
 # SPDX-License-Identifier: BSD-2-Clause
 
-set(PROJECT_VERSION "6.3.4")
+set(PROJECT_VERSION "6.3.5")
 
 cmake_minimum_required(VERSION 3.16)
 
diff -Nru krdp-6.3.4/debian/changelog krdp-6.3.5/debian/changelog
--- krdp-6.3.4/debian/changelog 2025-04-03 01:01:20.000000000 +0200
+++ krdp-6.3.5/debian/changelog 2025-05-19 23:39:08.000000000 +0200
@@ -1,3 +1,17 @@
+krdp (6.3.5-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (6.3.5).
+  * Backport upstream commits:
+    - Fix mouse wheel scroll triggering screen hot corners when using xfreerdp
+    under Wayland.
+    - Increase default video stream quality to make it readable.
+    - Use new kpipewire asynchronous methods, tentative fix for issues when
+    restoring sessions.
+    - Support horizontal wheel event. (kde#496747)
+
+ -- AurĂ©lien COUDERC <[email protected]>  Mon, 19 May 2025 23:39:08 +0200
+
 krdp (6.3.4-1) unstable; urgency=medium
 
   [ Patrick Franz ]
diff -Nru krdp-6.3.4/debian/patches/series krdp-6.3.5/debian/patches/series
--- krdp-6.3.4/debian/patches/series    2025-02-12 01:38:00.000000000 +0100
+++ krdp-6.3.5/debian/patches/series    2025-05-19 23:39:08.000000000 +0200
@@ -1 +1,6 @@
 upstream_mr_69_add-support-for-freerdp3.patch
+upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
+upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
+upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
+upstream_31faf21d_SessionController-Start-the-initialization-session.patch
+upstream_e2b88aaa_Support-horizontal-wheel-event.patch
diff -Nru 
krdp-6.3.4/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
 
krdp-6.3.5/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
--- 
krdp-6.3.4/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
   1970-01-01 01:00:00.000000000 +0100
+++ 
krdp-6.3.5/debian/patches/upstream_18539a15_Fix-mouse-wheel-scrolling-issue.patch
   2025-05-13 17:59:27.000000000 +0200
@@ -0,0 +1,81 @@
+From 18539a157a51e7e71552c328ca45766a3dedc907 Mon Sep 17 00:00:00 2001
+From: Jack Xu <[email protected]>
+Date: Mon, 14 Apr 2025 09:38:08 +0000
+Subject: [PATCH] Fix mouse wheel scrolling issue
+
+Currently, mouse wheel scrolling via KRDP triggers screen corners when using 
xfreerdp under Wayland environment.
+---
+ src/InputHandler.cpp              | 12 ++++++------
+ src/PlasmaScreencastV1Session.cpp |  2 +-
+ src/PortalSession.cpp             |  2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/InputHandler.cpp b/src/InputHandler.cpp
+index d829295..12b8d7e 100644
+--- a/src/InputHandler.cpp
++++ b/src/InputHandler.cpp
+@@ -124,18 +124,18 @@ bool InputHandler::mouseEvent(uint16_t x, uint16_t y, 
uint16_t flags)
+         }
+         axis *= flags & PTR_FLAGS_WHEEL_NEGATIVE ? 1 : -1;
+         auto event =
+-            std::make_shared<QWheelEvent>(QPointF{}, position, QPoint{}, 
QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, 
false);
++            std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, 
QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, 
false);
+         Q_EMIT inputEvent(event);
+         return true;
+     }
+ 
+     std::shared_ptr<QMouseEvent> event;
+     if (flags & PTR_FLAGS_DOWN) {
+-        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, 
QPointF{}, position, button, button, Qt::NoModifier);
++        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, 
position, QPointF{}, button, button, Qt::NoModifier);
+     } else if (flags & PTR_FLAGS_MOVE) {
+-        event = std::make_shared<QMouseEvent>(QEvent::MouseMove, QPointF{}, 
position, button, button, Qt::NoModifier);
++        event = std::make_shared<QMouseEvent>(QEvent::MouseMove, position, 
QPointF{}, button, button, Qt::NoModifier);
+     } else {
+-        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, 
QPointF{}, position, button, button, Qt::NoModifier);
++        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, 
position, QPointF{}, button, button, Qt::NoModifier);
+     }
+     Q_EMIT inputEvent(event);
+ 
+@@ -159,10 +159,10 @@ bool InputHandler::extendedMouseEvent(uint16_t x, 
uint16_t y, uint16_t flags)
+ 
+     std::shared_ptr<QMouseEvent> event;
+     if (flags & PTR_XFLAGS_DOWN) {
+-        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, 
QPointF{}, QPointF(x, y), button, button, Qt::KeyboardModifiers{});
++        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonPress, 
QPointF(x, y), QPointF{}, button, button, Qt::KeyboardModifiers{});
+ 
+     } else {
+-        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, 
QPointF{}, QPointF(x, y), button, button, Qt::KeyboardModifiers{});
++        event = std::make_shared<QMouseEvent>(QEvent::MouseButtonRelease, 
QPointF(x, y), QPointF{}, button, button, Qt::KeyboardModifiers{});
+     }
+     Q_EMIT inputEvent(event);
+ 
+diff --git a/src/PlasmaScreencastV1Session.cpp 
b/src/PlasmaScreencastV1Session.cpp
+index c6b8f4c..f13934f 100644
+--- a/src/PlasmaScreencastV1Session.cpp
++++ b/src/PlasmaScreencastV1Session.cpp
+@@ -221,7 +221,7 @@ void PlasmaScreencastV1Session::sendEvent(const 
std::shared_ptr<QEvent> &event)
+     }
+     case QEvent::MouseMove: {
+         auto me = std::static_pointer_cast<QMouseEvent>(event);
+-        auto position = me->globalPosition();
++        auto position = me->position();
+         auto logicalPosition = QPointF{(position.x() / size().width()) * 
logicalSize().width(), (position.y() / size().height()) * 
logicalSize().height()};
+         d->remoteInterface->pointer_motion_absolute(logicalPosition.x(), 
logicalPosition.y());
+         break;
+diff --git a/src/PortalSession.cpp b/src/PortalSession.cpp
+index 19501cb..4a329a0 100644
+--- a/src/PortalSession.cpp
++++ b/src/PortalSession.cpp
+@@ -152,7 +152,7 @@ void PortalSession::sendEvent(const 
std::shared_ptr<QEvent> &event)
+     }
+     case QEvent::MouseMove: {
+         auto me = std::static_pointer_cast<QMouseEvent>(event);
+-        auto position = me->globalPosition();
++        auto position = me->position();
+         auto logicalPosition = QPointF{(position.x() / size().width()) * 
logicalSize().width(), (position.y() / size().height()) * 
logicalSize().height()};
+         d->remoteInterface->NotifyPointerMotionAbsolute(d->sessionPath, 
QVariantMap{}, encodedStream->nodeId(), logicalPosition.x(), 
logicalPosition.y());
+         break;
+-- 
+GitLab
+
diff -Nru 
krdp-6.3.4/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
 
krdp-6.3.5/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
--- 
krdp-6.3.4/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
krdp-6.3.5/debian/patches/upstream_2a193038_AbstractSession-Fix-deprecated-setActive-calls.patch
    2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,54 @@
+From 2a19303854603370ab13b8969943995108d93da1 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <[email protected]>
+Date: Thu, 1 May 2025 18:04:26 +0300
+Subject: [PATCH] AbstractSession: Fix deprecated setActive calls
+
+setActive is deprecated and seems to have caused issues with restoring
+sessions. Use start and stop here instead.
+
+Also move the Q_EMIT started() after the start method.
+---
+ src/AbstractSession.cpp | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/src/AbstractSession.cpp b/src/AbstractSession.cpp
+index 2b58025..22aa596 100644
+--- a/src/AbstractSession.cpp
++++ b/src/AbstractSession.cpp
+@@ -38,7 +38,7 @@ AbstractSession::AbstractSession(Server *server)
+ AbstractSession::~AbstractSession()
+ {
+     if (d->encodedStream) {
+-        d->encodedStream->setActive(false);
++        d->encodedStream->stop();
+     }
+ }
+ 
+@@ -89,7 +89,11 @@ void AbstractSession::setStreamingEnabled(bool enable)
+ {
+     d->enabled = enable;
+     if (d->encodedStream) {
+-        d->encodedStream->setActive(enable && d->started);
++        if (enable && d->started) {
++            d->encodedStream->start();
++        } else {
++            d->encodedStream->stop();
++        }
+     }
+ }
+ 
+@@ -136,8 +140,10 @@ void AbstractSession::setStarted(bool s)
+ {
+     d->started = s;
+     if (s) {
++        if (d->enabled) {
++            d->encodedStream->start();
++        }
+         Q_EMIT started();
+-        d->encodedStream->setActive(d->enabled);
+     }
+ }
+ 
+-- 
+GitLab
+
diff -Nru 
krdp-6.3.4/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch
 
krdp-6.3.5/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch
--- 
krdp-6.3.4/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch
        1970-01-01 01:00:00.000000000 +0100
+++ 
krdp-6.3.5/debian/patches/upstream_31faf21d_SessionController-Start-the-initialization-session.patch
        2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,25 @@
+From 31faf21dfada9adddd31231b12fae32dc9d23707 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <[email protected]>
+Date: Thu, 1 May 2025 18:13:06 +0300
+Subject: [PATCH] SessionController: Start the initialization session
+
+The initialization session was never ran here
+---
+ server/SessionController.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/server/SessionController.cpp b/server/SessionController.cpp
+index f0a4b00..91fd1ba 100644
+--- a/server/SessionController.cpp
++++ b/server/SessionController.cpp
+@@ -110,6 +110,7 @@ SessionController::SessionController(KRdp::Server *server, 
SessionType sessionTy
+         // reconnection.
+         connect(m_initializationSession.get(), 
&KRdp::AbstractSession::started, this, cleanup);
+         connect(m_initializationSession.get(), &KRdp::AbstractSession::error, 
this, cleanup);
++        m_initializationSession->start();
+     }
+ }
+ 
+-- 
+GitLab
+
diff -Nru 
krdp-6.3.4/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch
 
krdp-6.3.5/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch
--- 
krdp-6.3.4/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
krdp-6.3.5/debian/patches/upstream_e2b88aaa_Support-horizontal-wheel-event.patch
    2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,83 @@
+From e2b88aaa6f9cb8c69890e7cf61d1e231eb105b41 Mon Sep 17 00:00:00 2001
+From: Jack Xu <[email protected]>
+Date: Sun, 1 Dec 2024 17:46:47 +0800
+Subject: [PATCH] Support horizontal wheel event
+
+---
+ src/InputHandler.cpp              | 15 +++++++++++----
+ src/PlasmaScreencastV1Session.cpp |  8 +++++++-
+ src/PortalSession.cpp             |  8 +++++++-
+ 3 files changed, 25 insertions(+), 6 deletions(-)
+
+diff --git a/src/InputHandler.cpp b/src/InputHandler.cpp
+index 12b8d7e..e387e55 100644
+--- a/src/InputHandler.cpp
++++ b/src/InputHandler.cpp
+@@ -117,15 +117,22 @@ bool InputHandler::mouseEvent(uint16_t x, uint16_t y, 
uint16_t flags)
+         button = Qt::MiddleButton;
+     }
+ 
+-    if (flags & PTR_FLAGS_WHEEL || flags & PTR_FLAGS_WHEEL_NEGATIVE) {
++    if (flags & PTR_FLAGS_WHEEL || flags & PTR_FLAGS_HWHEEL) {
+         auto axis = flags & WheelRotationMask;
+         if (axis & PTR_FLAGS_WHEEL_NEGATIVE) {
+             axis = (~axis & WheelRotationMask) + 1;
+         }
+         axis *= flags & PTR_FLAGS_WHEEL_NEGATIVE ? 1 : -1;
+-        auto event =
+-            std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, 
QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, 
false);
+-        Q_EMIT inputEvent(event);
++        if (flags & PTR_FLAGS_WHEEL) {
++            auto event =
++                std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, 
QPoint{0, axis}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, 
false);
++            Q_EMIT inputEvent(event);
++        }
++        if (flags & PTR_FLAGS_HWHEEL) {
++            auto event =
++                std::make_shared<QWheelEvent>(position, QPointF{}, QPoint{}, 
QPoint{-axis, 0}, Qt::NoButton, Qt::KeyboardModifiers{}, Qt::NoScrollPhase, 
false);
++            Q_EMIT inputEvent(event);
++        }
+         return true;
+     }
+ 
+diff --git a/src/PlasmaScreencastV1Session.cpp 
b/src/PlasmaScreencastV1Session.cpp
+index 835bb87..2267f2b 100644
+--- a/src/PlasmaScreencastV1Session.cpp
++++ b/src/PlasmaScreencastV1Session.cpp
+@@ -228,7 +228,13 @@ void PlasmaScreencastV1Session::sendEvent(const 
std::shared_ptr<QEvent> &event)
+     }
+     case QEvent::Wheel: {
+         auto we = std::static_pointer_cast<QWheelEvent>(event);
+-        d->remoteInterface->axis(0, we->angleDelta().y() / 120);
++        auto delta = we->angleDelta();
++        if (delta.y() != 0) {
++            d->remoteInterface->axis(WL_POINTER_AXIS_VERTICAL_SCROLL, 
delta.y() / 120);
++        }
++        if (delta.x() != 0) {
++            d->remoteInterface->axis(WL_POINTER_AXIS_HORIZONTAL_SCROLL, 
delta.x() / 120);
++        }
+         break;
+     }
+     case QEvent::KeyPress:
+diff --git a/src/PortalSession.cpp b/src/PortalSession.cpp
+index 5218572..cbe4ff0 100644
+--- a/src/PortalSession.cpp
++++ b/src/PortalSession.cpp
+@@ -157,7 +157,13 @@ void PortalSession::sendEvent(const 
std::shared_ptr<QEvent> &event)
+     }
+     case QEvent::Wheel: {
+         auto we = std::static_pointer_cast<QWheelEvent>(event);
+-        d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, 
QVariantMap{}, 0, we->angleDelta().y() / 120);
++        auto delta = we->angleDelta();
++        if (delta.y() != 0) {
++            d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, 
QVariantMap{}, 0 /* Vertical */, delta.y() / 120);
++        }
++        if (delta.x() != 0) {
++            d->remoteInterface->NotifyPointerAxisDiscrete(d->sessionPath, 
QVariantMap{}, 1 /* Horizontal */, delta.x() / 120);
++        }
+         break;
+     }
+     case QEvent::KeyPress:
+-- 
+GitLab
+
diff -Nru 
krdp-6.3.4/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
 
krdp-6.3.5/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
--- 
krdp-6.3.4/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
   1970-01-01 01:00:00.000000000 +0100
+++ 
krdp-6.3.5/debian/patches/upstream_f3b3199f_kcm-Set-new-quality-default-to-75-minimum-quality-to-50.patch
   2025-05-19 23:39:08.000000000 +0200
@@ -0,0 +1,48 @@
+From f3b3199fd49136e742d92654e550740e1eea7556 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <[email protected]>
+Date: Tue, 29 Apr 2025 16:39:14 +0300
+Subject: [PATCH] kcm: Set new quality default to 75, minimum quality to 50
+
+The qualities below 50 are rather poor and any gained responsiviness
+does not really help when you can't see what you're doing.
+
+Instead, set the minimum quality value to 50, where it's still legible.
+Set default quality to 75, which is around middle of the slider, and
+should work well for most cases.
+---
+ src/kcm/krdpserversettings.kcfg | 2 +-
+ src/kcm/ui/main.qml             | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/kcm/krdpserversettings.kcfg b/src/kcm/krdpserversettings.kcfg
+index 8d840ba..1961290 100644
+--- a/src/kcm/krdpserversettings.kcfg
++++ b/src/kcm/krdpserversettings.kcfg
+@@ -26,7 +26,7 @@ SPDX-License-Identifier: BSD-2-Clause
+     </entry>
+     <entry name="Quality" type="Int">
+       <label>The quality of the video stream</label>
+-      <default>50</default>
++      <default>75</default>
+     </entry>
+     <entry name="Users" type="StringList">
+       <label>Users allowed to login, passwords are stored in KWallet</label>
+diff --git a/src/kcm/ui/main.qml b/src/kcm/ui/main.qml
+index 39d82f9..1ee0312 100644
+--- a/src/kcm/ui/main.qml
++++ b/src/kcm/ui/main.qml
+@@ -221,9 +221,9 @@ KCM.ScrollViewKCM {
+             QQC2.Slider {
+                 id: qualitySlider
+                 Layout.fillWidth: true
+-                from: 0
++                from: 50
+                 to: 100
+-                stepSize: 1
++                stepSize: 5
+                 value: settings.quality
+                 onMoved: {
+                     settings.quality = value;
+-- 
+GitLab
+
diff -Nru krdp-6.3.4/po/fi/kcm_krdpserver.po krdp-6.3.5/po/fi/kcm_krdpserver.po
--- krdp-6.3.4/po/fi/kcm_krdpserver.po  2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/po/fi/kcm_krdpserver.po  2025-05-06 19:57:09.000000000 +0200
@@ -1,6 +1,6 @@
 # Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the krdp package.
-# SPDX-FileCopyrightText: 2024 Tommi Nieminen <[email protected]>
+# SPDX-FileCopyrightText: 2024, 2025 Tommi Nieminen <[email protected]>
 #
 msgid ""
 msgstr ""
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.08.2\n"
+"X-Generator: Lokalize 23.08.5\n"
 
 #. i18n: ectx: label, entry (ListenPort), group (General)
 #: krdpserversettings.kcfg:14
diff -Nru krdp-6.3.4/po/ko/kcm_krdpserver.po krdp-6.3.5/po/ko/kcm_krdpserver.po
--- krdp-6.3.4/po/ko/kcm_krdpserver.po  2025-04-02 05:36:18.000000000 +0200
+++ krdp-6.3.5/po/ko/kcm_krdpserver.po  2025-05-06 19:57:09.000000000 +0200
@@ -1,6 +1,6 @@
 # Copyright (C) 2024 This file is copyright:
 # This file is distributed under the same license as the krdp package.
-# SPDX-FileCopyrightText: 2024 Shinjo Park <[email protected]>
+# SPDX-FileCopyrightText: 2024, 2025 Shinjo Park <[email protected]>
 #
 msgid ""
 msgstr ""

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply via email to