Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gstreamer for openSUSE:Factory 
checked in at 2026-08-06 16:19:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer (Old)
 and      /work/SRC/openSUSE:Factory/.gstreamer.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gstreamer"

Thu Aug  6 16:19:11 2026 rev:125 rq:1369817 version:1.28.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/gstreamer/gstreamer.changes      2026-07-12 
16:21:07.543938060 +0200
+++ /work/SRC/openSUSE:Factory/.gstreamer.new.16738/gstreamer.changes   
2026-08-06 16:19:27.390698353 +0200
@@ -1,0 +2,46 @@
+Wed Aug  5 15:41:47 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.28.6:
+  + Highlighted bugfixes in 1.28.6
+    - Various security fixes and playback fixes
+    - playbin3, playbin: fix stalls after re-enabling previously
+      disabled subtitles
+    - Fix regression in core if a pad is re-linked while changed
+      sticky events are being pushed
+    - dtls/webrtc: fix some issues with OpenSSL 4.0.0
+    - RTP retransmission bitrate estimation fixes
+    - Fix RTP depayloading of SMPTE ST291 frames with multiple ANC
+      packets
+    - Add H.266 muxing support to the Rust (f)mp4 muxers
+    - Better handling of input buffers without timestamps in Rust
+      (f)mp4 muxers
+    - webrtcsink H.264 level/profile negotiation fixes and support
+      for nvv4l2h265enc encoder
+    - SMPTE ST2038 ancillary metadata and closed caption combiner
+      improvements
+    - Fix SEI insertion into H.265/HEVC streams with alpha
+    - Windows D3D11 WinRT screen capture element fixes
+    - Improved coded buffer size handling for VA encoders
+    - Textaccumulate: various tweaks how the element outputs text,
+      plus better handling of French punctuation
+    - hlssink3: improved handling of input buffers without
+      timestamps
+    - Fix build against FFmpeg 9.0
+    - cerbero: fix Windows packages binary size increase
+      regression; upgrade libsrt recipe to 1.5.6
+    - Various bug fixes, build fixes, memory leak fixes, and other
+      stability and reliability improvements
+  + gstreamer:
+    - baseparse: Don't reset infer_ts/pts_interpolate subclass
+      configuration in reset() and related fixes
+    - cpuid: fix AArch64 NEON detection to check HWCAP_ASIMD, not
+      HWCAP_NEON
+    - pad: fix livelock when pushing changed sticky events when the
+      pad is re-linked
+    - valve: Don't send a reconfigure even when setting the drop
+      property to the same value
+    - meson: Make the g-ir-scanner init section consistent across
+      modules
+    - meson: use dependency('dl') instead of cc.find_library('dl')
+
+-------------------------------------------------------------------

Old:
----
  gstreamer-1.28.5.obscpio

New:
----
  gstreamer-1.28.6.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gstreamer.spec ++++++
--- /var/tmp/diff_new_pack.JSePt1/_old  2026-08-06 16:19:31.010824651 +0200
+++ /var/tmp/diff_new_pack.JSePt1/_new  2026-08-06 16:19:31.038825627 +0200
@@ -19,7 +19,7 @@
 %define gst_branch 1.0
 
 Name:           gstreamer
-Version:        1.28.5
+Version:        1.28.6
 Release:        0
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.1-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.JSePt1/_old  2026-08-06 16:19:31.350836513 +0200
+++ /var/tmp/diff_new_pack.JSePt1/_new  2026-08-06 16:19:31.378837490 +0200
@@ -5,7 +5,7 @@
     <param 
name="url">https://gitlab.freedesktop.org/gstreamer/gstreamer.git</param>
     <param name="subdir">subprojects/gstreamer</param>
     <param name="filename">gstreamer</param>
-    <param name="revision">1.28.5</param>
+    <param name="revision">1.28.6</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ gstreamer-1.28.5.obscpio -> gstreamer-1.28.6.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/gst/gstcpuid.c 
new/gstreamer-1.28.6/gst/gstcpuid.c
--- old/gstreamer-1.28.5/gst/gstcpuid.c 2026-07-08 23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/gst/gstcpuid.c 2026-08-05 13:59:39.000000000 +0200
@@ -40,10 +40,16 @@
 #if defined(__linux__) && defined(__ARM_ARCH)
 #include <asm/hwcap.h>
 #include <sys/auxv.h>
+#if defined(__aarch64__)
+#ifndef HWCAP_ASIMD
+#define HWCAP_ASIMD (1 << 1)
+#endif
+#else
 #ifndef HWCAP_NEON              // Some Android NDKs lack it.
 #define HWCAP_NEON (1 << 12)
 #endif
 #endif
+#endif
 
 #ifdef _MSC_VER
 // Contains the definition of __cpuidex
@@ -155,7 +161,11 @@
   // If Linux, rely on getauxval; otherwise search Arm macros
   // 
https://developer.arm.com/documentation/dui0774/b/other-compiler-specific-features/predefined-macros
 #if defined(__linux__) && (!defined(__ANDROID_API__) || __ANDROID_API__ >= 18)
+#if defined(__aarch64__)
+  cpuid.neon = (getauxval (AT_HWCAP) & HWCAP_ASIMD) != 0 ? TRUE : FALSE;
+#else
   cpuid.neon = (getauxval (AT_HWCAP) & HWCAP_NEON) != 0 ? TRUE : FALSE;
+#endif
 #elif defined(__ARM_NEON) || defined(__aarch64__)
   cpuid.neon = TRUE;
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/gst/gstpad.c 
new/gstreamer-1.28.6/gst/gstpad.c
--- old/gstreamer-1.28.5/gst/gstpad.c   2026-07-08 23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/gst/gstpad.c   2026-08-05 13:59:39.000000000 +0200
@@ -5643,15 +5643,18 @@
 static void
 push_changed_sticky_events_before (GstPad * pad, GstEvent * event)
 {
-  PushStickyData data = { GST_FLOW_OK, FALSE, event, pad->priv->peer_cookie };
-  GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS);
-
   /* Push all sticky events before our current one
-   * that have changed */
+   * that have changed, looping and trying again if interrupted */
   do {
+    PushStickyData data = { GST_FLOW_OK, FALSE, event, pad->priv->peer_cookie 
};
+    GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS);
+
     events_foreach (pad, sticky_changed, &data);
-  } while (data.ret == GST_FLOW_PROBE_INTERRUPTED
-      && GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PENDING_EVENTS));
+
+    if (data.ret != GST_FLOW_PROBE_INTERRUPTED) {
+      break;
+    }
+  } while (TRUE);
 }
 
 /* should be called with pad LOCK */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/gstreamer.doap 
new/gstreamer-1.28.6/gstreamer.doap
--- old/gstreamer-1.28.5/gstreamer.doap 2026-07-08 23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/gstreamer.doap 2026-08-05 13:59:39.000000000 +0200
@@ -40,6 +40,16 @@
 
  <release>
   <Version>
+   <revision>1.28.6</revision>
+   <branch>1.28</branch>
+   <name></name>
+   <created>2026-08-05</created>
+   <file-release 
rdf:resource="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.28.6.tar.xz";
 />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.28.5</revision>
    <branch>1.28</branch>
    <name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/libs/gst/base/gstbaseparse.c 
new/gstreamer-1.28.6/libs/gst/base/gstbaseparse.c
--- old/gstreamer-1.28.5/libs/gst/base/gstbaseparse.c   2026-07-08 
23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/libs/gst/base/gstbaseparse.c   2026-08-05 
13:59:39.000000000 +0200
@@ -673,6 +673,11 @@
 
   /* init state */
   gst_base_parse_reset (parse);
+
+  /* default parser configuration. subclasses override this in their _init() */
+  parse->priv->pts_interpolate = TRUE;
+  parse->priv->infer_ts = TRUE;
+
   GST_DEBUG_OBJECT (parse, "init ok");
 
   GST_OBJECT_FLAG_SET (parse, GST_ELEMENT_FLAG_INDEXABLE);
@@ -889,8 +894,6 @@
   parse->priv->next_dts = 0;
   parse->priv->syncable = TRUE;
   parse->priv->passthrough = FALSE;
-  parse->priv->pts_interpolate = TRUE;
-  parse->priv->infer_ts = TRUE;
   parse->priv->has_timing_info = FALSE;
   parse->priv->min_bitrate = G_MAXUINT;
   parse->priv->max_bitrate = 0;
@@ -3941,6 +3944,9 @@
  * duration.  Alternatively, if @interval is non-zero (default), then stream
  * duration is determined based on estimated bitrate, and updated every 
@interval
  * frames.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_duration (GstBaseParse * parse,
@@ -3992,6 +3998,9 @@
  * is used to estimate the total duration of the stream and to estimate
  * a seek position, if there's no index and the format is syncable
  * (see gst_base_parse_set_syncable()).
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_average_bitrate (GstBaseParse * parse, guint bitrate)
@@ -4008,6 +4017,9 @@
  *
  * Subclass can use this function to tell the base class that it needs to
  * be given buffers of at least @min_size bytes.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_min_frame_size (GstBaseParse * parse, guint min_size)
@@ -4031,6 +4043,9 @@
  * location, a corresponding decoder might need an initial @lead_in and a
  * following @lead_out number of frames to ensure the desired segment is
  * entirely filled upon decoding.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_frame_rate (GstBaseParse * parse, guint fps_num,
@@ -4083,6 +4098,9 @@
  * Set if frames carry timing information which the subclass can (generally)
  * parse and provide.  In particular, intrinsic (rather than estimated) time
  * can be obtained following a seek.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_has_timing_info (GstBaseParse * parse, gboolean has_timing)
@@ -4099,6 +4117,9 @@
  * Set if frame starts can be identified. This is set by default and
  * determines whether seeking based on bitrate averages
  * is possible for a format/stream.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_syncable (GstBaseParse * parse, gboolean syncable)
@@ -4119,6 +4140,9 @@
  * will be invoked, but #GstBaseParseClass::pre_push_frame will still be
  * invoked, so subclass can perform as much or as little is appropriate for
  * passthrough semantics in #GstBaseParseClass::pre_push_frame.
+ *
+ * This value is reset during PAUSED->READY state changes. Subclasses must
+ * call this function from #GstBaseParseClass::start if they want to set a 
static value.
  */
 void
 gst_base_parse_set_passthrough (GstBaseParse * parse, gboolean passthrough)
@@ -4136,6 +4160,9 @@
  * interpolation (previous timestamp + duration), which is incorrect for
  * data streams with reordering, where PTS can go backward. Sub-classes
  * implementing such formats should disable PTS interpolation.
+ *
+ * This value is retained over PAUSED->READY state changes. Subclasses
+ * can call this function from their instance init function.
  */
 void
 gst_base_parse_set_pts_interpolation (GstBaseParse * parse,
@@ -4155,6 +4182,9 @@
  * versa.  While this is generally correct for audio data, it may not
  * be otherwise. Sub-classes implementing such formats should disable
  * timestamp inferring.
+ *
+ * This value is retained over PAUSED->READY state changes. Subclasses
+ * can call this function from their instance init function.
  */
 void
 gst_base_parse_set_infer_ts (GstBaseParse * parse, gboolean infer_ts)
@@ -4176,6 +4206,9 @@
  * If the provided values changed from previously provided ones, this will
  * also post a LATENCY message on the bus so the pipeline can reconfigure its
  * global latency.
+ *
+ * This value is retained over PAUSED->READY state changes. Subclasses
+ * can call this function from their instance init function.
  */
 void
 gst_base_parse_set_latency (GstBaseParse * parse, GstClockTime min_latency,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/meson.build 
new/gstreamer-1.28.6/meson.build
--- old/gstreamer-1.28.5/meson.build    2026-07-08 23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/meson.build    2026-08-05 13:59:39.000000000 +0200
@@ -1,5 +1,5 @@
 project('gstreamer', 'c',
-  version : '1.28.5',
+  version : '1.28.6',
   meson_version : '>= 1.4',
   default_options : [ 'warning_level=1',
                       'buildtype=debugoptimized',
@@ -550,7 +550,7 @@
 test_deps = [gmp_dep, gsl_dep, gslcblas_dep]
 
 # Used by gstinfo.c
-dl_dep = cc.find_library('dl', required : false)
+dl_dep = dependency('dl', required : false)
 cdata.set('HAVE_DLADDR', cc.has_function('dladdr', dependencies : dl_dep))
 cdata.set('GST_ENABLE_EXTRA_CHECKS', not get_option('extra-checks').disabled())
 cdata.set('USE_POISONING', get_option('poisoning'))
@@ -611,7 +611,7 @@
 
 gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' 
+ \
     'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \
-    'g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);' + \
+    'g_setenv("GST_REGISTRY_1_0", "@0@", 
TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \
     'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \
     'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \
     'g_setenv("GST_TRACERS", "", TRUE);' + \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/plugins/elements/gstvalve.c 
new/gstreamer-1.28.6/plugins/elements/gstvalve.c
--- old/gstreamer-1.28.5/plugins/elements/gstvalve.c    2026-07-08 
23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/plugins/elements/gstvalve.c    2026-08-05 
13:59:39.000000000 +0200
@@ -178,10 +178,13 @@
   GstValve *valve = GST_VALVE (object);
 
   switch (prop_id) {
-    case PROP_DROP:
-      g_atomic_int_set (&valve->drop, g_value_get_boolean (value));
-      gst_pad_push_event (valve->sinkpad, gst_event_new_reconfigure ());
+    case PROP_DROP:{
+      gboolean drop = g_value_get_boolean (value);
+      if (g_atomic_int_compare_and_exchange (&valve->drop, !drop, drop)) {
+        gst_pad_push_event (valve->sinkpad, gst_event_new_reconfigure ());
+      }
       break;
+    }
     case PROP_DROP_MODE:
       valve->drop_mode = g_value_get_enum (value);
       break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gstreamer-1.28.5/tests/check/gst/gstpad.c 
new/gstreamer-1.28.6/tests/check/gst/gstpad.c
--- old/gstreamer-1.28.5/tests/check/gst/gstpad.c       2026-07-08 
23:42:39.000000000 +0200
+++ new/gstreamer-1.28.6/tests/check/gst/gstpad.c       2026-08-05 
13:59:39.000000000 +0200
@@ -2692,6 +2692,126 @@
 
 GST_END_TEST;
 
+typedef struct
+{
+  GstPad *srcpad;
+  GstPad *sinkpad;
+  gint caps_drops;
+  gboolean relinked;
+  gint push_done;
+} StickyRelinkData;
+
+static GstPadProbeReturn
+sticky_relink_drop_caps_probe (GstPad * pad, GstPadProbeInfo * info,
+    gpointer user_data)
+{
+  StickyRelinkData *data = user_data;
+  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+
+  if (GST_EVENT_TYPE (event) != GST_EVENT_CAPS)
+    return GST_PAD_PROBE_OK;
+
+  /* the first caps push comes from the caps push in the test body, the
+   * second from the trigger push's own sticky check and the third from
+   * inside push_changed_sticky_events_before(). Re-linking there changes
+   * the peer cookie after that loop captured it */
+  if (g_atomic_int_add (&data->caps_drops, 1) + 1 == 3) {
+    gst_pad_unlink (pad, data->sinkpad);
+    fail_unless (gst_pad_link_full (pad, data->sinkpad,
+            GST_PAD_LINK_CHECK_NOTHING) == GST_PAD_LINK_OK);
+    data->relinked = TRUE;
+  }
+
+  return GST_PAD_PROBE_DROP;
+}
+
+static gboolean
+sticky_relink_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static gpointer
+sticky_relink_push_trigger (gpointer user_data)
+{
+  StickyRelinkData *data = user_data;
+
+  gst_pad_push_event (data->srcpad,
+      gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+          gst_structure_new_empty ("test/serialized-trigger")));
+  g_atomic_int_set (&data->push_done, 1);
+
+  return NULL;
+}
+
+/* Test that re-linking a pad while its sticky events are being re-sent
+ * does not livelock the re-push loop in
+ * push_changed_sticky_events_before() */
+GST_START_TEST (test_sticky_events_relink_during_repush)
+{
+  GstCaps *caps;
+  StickyRelinkData data = { NULL, };
+  GThread *thread;
+  gint64 deadline;
+
+  data.srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (data.srcpad != NULL);
+  data.sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (data.sinkpad != NULL);
+  gst_pad_set_event_function (data.sinkpad, sticky_relink_sink_event);
+  gst_pad_set_active (data.srcpad, TRUE);
+  gst_pad_set_active (data.sinkpad, TRUE);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (data.srcpad,
+              data.sinkpad)));
+
+  /* push the initial sticky events, all received downstream */
+  fail_unless (gst_pad_push_event (data.srcpad,
+          gst_event_new_stream_start ("test")));
+  caps = gst_caps_new_simple ("foo/bar", "rate", G_TYPE_INT, 44100, NULL);
+  fail_unless (gst_pad_push_event (data.srcpad, gst_event_new_caps (caps)));
+  gst_caps_unref (caps);
+  fail_unless (gst_pad_push_event (data.srcpad,
+          gst_event_new_segment (&dummy_segment)));
+
+  gst_pad_add_probe (data.srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+      sticky_relink_drop_caps_probe, &data, NULL);
+
+  /* new caps, dropped by the probe. The pad now has a pending sticky
+   * event */
+  caps = gst_caps_new_simple ("foo/bar", "rate", G_TYPE_INT, 48000, NULL);
+  fail_unless (gst_pad_push_event (data.srcpad, gst_event_new_caps (caps)));
+  gst_caps_unref (caps);
+
+  /* pushing any serialized event now re-sends the pending caps and the
+   * probe re-links the pad during the re-send. The push must return */
+  thread =
+      g_thread_new ("sticky-relink-push", sticky_relink_push_trigger, &data);
+
+  deadline = g_get_monotonic_time () + 10 * G_USEC_PER_SEC;
+  while (!g_atomic_int_get (&data.push_done)) {
+    fail_unless (g_get_monotonic_time () < deadline,
+        "sticky event re-push livelocked after a mid-push re-link "
+        "(%d caps drops)", g_atomic_int_get (&data.caps_drops));
+    g_usleep (G_USEC_PER_SEC / 100);
+  }
+
+  g_thread_join (thread);
+
+  /* guard against the scenario silently not being exercised anymore if
+   * the sticky pushing code paths change */
+  fail_unless (data.relinked);
+  fail_unless (g_atomic_int_get (&data.caps_drops) >= 4,
+      "the pending caps was never re-pushed after the re-link");
+
+  gst_pad_set_active (data.srcpad, FALSE);
+  gst_pad_set_active (data.sinkpad, FALSE);
+  gst_object_unref (data.srcpad);
+  gst_object_unref (data.sinkpad);
+}
+
+GST_END_TEST;
+
 static GstFlowReturn next_return;
 
 static GstFlowReturn
@@ -3523,6 +3643,7 @@
   tcase_add_test (tc_chain, test_block_async_full_destroy_dispose);
   tcase_add_test (tc_chain, test_block_async_replace_callback_no_flush);
   tcase_add_test (tc_chain, test_sticky_events);
+  tcase_add_test (tc_chain, test_sticky_events_relink_during_repush);
   tcase_add_test (tc_chain, test_last_flow_return_push);
   tcase_add_test (tc_chain, test_last_flow_return_pull);
   tcase_add_test (tc_chain, test_flush_stop_inactive);

++++++ gstreamer.obsinfo ++++++
--- /var/tmp/diff_new_pack.JSePt1/_old  2026-08-06 16:19:33.698918432 +0200
+++ /var/tmp/diff_new_pack.JSePt1/_new  2026-08-06 16:19:33.706918711 +0200
@@ -1,5 +1,5 @@
 name: gstreamer
-version: 1.28.5
-mtime: 1783546959
-commit: 727ceb91886862d200f423baf36cde2bb7ce5b4d
+version: 1.28.6
+mtime: 1785931179
+commit: 2d3e05cbdad68e47d645f548899b432dc9fb4473
 

Reply via email to