Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wayland-utils for openSUSE:Factory 
checked in at 2025-12-17 17:30:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wayland-utils (Old)
 and      /work/SRC/openSUSE:Factory/.wayland-utils.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wayland-utils"

Wed Dec 17 17:30:54 2025 rev:4 rq:1323003 version:1.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/wayland-utils/wayland-utils.changes      
2023-06-09 20:38:14.378833645 +0200
+++ /work/SRC/openSUSE:Factory/.wayland-utils.new.1939/wayland-utils.changes    
2025-12-17 17:34:17.662420517 +0100
@@ -1,0 +2,9 @@
+Mon Dec 15 15:51:30 UTC 2025 - llyyr <[email protected]>
+
+- Update to 1.3.0
+  * add color-management-v1 support
+  * switch to the stable tablet protocol
+  * support tablet bustype and relative dials
+  * add color-representation-v1 support
+
+-------------------------------------------------------------------

Old:
----
  wayland-utils-1.2.0.tar.xz
  wayland-utils-1.2.0.tar.xz.sig

New:
----
  wayland-utils-1.3.0.tar.xz
  wayland-utils-1.3.0.tar.xz.sig

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

Other differences:
------------------
++++++ wayland-utils.spec ++++++
--- /var/tmp/diff_new_pack.Dhbz6Q/_old  2025-12-17 17:34:19.138482506 +0100
+++ /var/tmp/diff_new_pack.Dhbz6Q/_new  2025-12-17 17:34:19.146482842 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package wayland-utils
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           wayland-utils
-Version:        1.2.0
+Version:        1.3.0
 Release:        0
 Summary:        Wayland diagnostic utilities
 License:        MIT

++++++ wayland-utils-1.2.0.tar.xz -> wayland-utils-1.3.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayland-utils-1.2.0/.gitlab-ci.yml 
new/wayland-utils-1.3.0/.gitlab-ci.yml
--- old/wayland-utils-1.2.0/.gitlab-ci.yml      2023-06-08 10:38:01.000000000 
+0200
+++ new/wayland-utils-1.3.0/.gitlab-ci.yml      2025-11-24 13:53:04.000000000 
+0100
@@ -8,9 +8,16 @@
     ref: *templates_sha
     file: '/templates/alpine.yml'
 
+workflow:
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+    - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
+      when: never
+    - if: $CI_COMMIT_BRANCH
+
 variables:
   FDO_UPSTREAM_REPO: 'wayland/wayland-utils'
-  FDO_DISTRIBUTION_TAG: '2022-05-26.0'
+  FDO_DISTRIBUTION_TAG: '2025-08-03.0'
   #FDO_FORCE_REBUILD: 1
 
 stages:
@@ -44,7 +51,7 @@
 
       git clone https://gitlab.freedesktop.org/wayland/wayland-protocols
       cd wayland-protocols
-      git checkout -q 1.24
+      git checkout -q 1.44
       meson build/ -Dtests=false
       ninja -C build/ install
       cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayland-utils-1.2.0/meson.build 
new/wayland-utils-1.3.0/meson.build
--- old/wayland-utils-1.2.0/meson.build 2023-06-08 10:38:01.000000000 +0200
+++ new/wayland-utils-1.3.0/meson.build 2025-11-24 13:53:04.000000000 +0100
@@ -1,12 +1,12 @@
 project('wayland-utils',
        'c',
-       version: '1.2.0',
+       version: '1.3.0',
        default_options: [
                'warning_level=3',
                'c_std=c99',
                'b_lundef=true',
        ],
-       meson_version: '>= 0.47',
+       meson_version: '>= 0.56',
        license: 'MIT/Expat',
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayland-utils-1.2.0/wayland-info/meson.build 
new/wayland-utils-1.3.0/wayland-info/meson.build
--- old/wayland-utils-1.2.0/wayland-info/meson.build    2023-06-08 
10:38:01.000000000 +0200
+++ new/wayland-utils-1.3.0/wayland-info/meson.build    2025-11-24 
13:53:04.000000000 +0100
@@ -1,19 +1,21 @@
 dep_scanner = dependency('wayland-scanner', native: true)
-prog_scanner = 
find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
+prog_scanner = find_program(dep_scanner.get_variable(pkgconfig: 
'wayland_scanner'))
 
-dep_wp = dependency('wayland-protocols', version: '>= 1.24')
-dir_wp_base = dep_wp.get_pkgconfig_variable('pkgdatadir')
+dep_wp = dependency('wayland-protocols', version: '>= 1.44')
+dir_wp_base = dep_wp.get_variable(pkgconfig: 'pkgdatadir')
 
 generated_protocols = {
        # stable
        'presentation-time': dir_wp_base / 
'stable/presentation-time/presentation-time.xml',
 
        # staging
+       'color-management-v1': dir_wp_base / 
'staging/color-management/color-management-v1.xml',
+       'color-representation-v1': dir_wp_base / 
'staging/color-representation/color-representation-v1.xml',
        'drm-lease-v1': dir_wp_base / 'staging/drm-lease/drm-lease-v1.xml',
 
        # unstable
        'linux-dmabuf-unstable-v1': dir_wp_base / 
'unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml',
-       'tablet-unstable-v2': dir_wp_base / 
'unstable/tablet/tablet-unstable-v2.xml',
+       'tablet-v2': dir_wp_base / 'stable/tablet/tablet-v2.xml',
        'xdg-output-unstable-v1': dir_wp_base / 
'unstable/xdg-output/xdg-output-unstable-v1.xml',
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wayland-utils-1.2.0/wayland-info/wayland-info.c 
new/wayland-utils-1.3.0/wayland-info/wayland-info.c
--- old/wayland-utils-1.2.0/wayland-info/wayland-info.c 2023-06-08 
10:38:01.000000000 +0200
+++ new/wayland-utils-1.3.0/wayland-info/wayland-info.c 2025-11-24 
13:53:04.000000000 +0100
@@ -42,10 +42,12 @@
 #include <drm_fourcc.h>
 #endif
 
+#include "color-management-v1-client-protocol.h"
+#include "color-representation-v1-client-protocol.h"
 #include "presentation-time-client-protocol.h"
 #include "drm-lease-v1-client-protocol.h"
 #include "linux-dmabuf-unstable-v1-client-protocol.h"
-#include "tablet-unstable-v2-client-protocol.h"
+#include "tablet-v2-client-protocol.h"
 #include "xdg-output-unstable-v1-client-protocol.h"
 
 #ifndef ARRAY_LENGTH
@@ -59,6 +61,7 @@
 #define xmalloc(s) (fail_on_null(malloc(s), (s), __FILE__, __LINE__))
 #define xzalloc(s) (fail_on_null(zalloc(s), (s), __FILE__, __LINE__))
 #define xstrdup(s) (fail_on_null(strdup(s), 0, __FILE__, __LINE__))
+#define xwl_array_add(a, s) (fail_on_null(wl_array_add(a, s), 0, __FILE__, 
__LINE__))
 
 typedef void (*print_info_t)(void *info);
 typedef void (*destroy_info_t)(void *info);
@@ -193,6 +196,7 @@
        int *buttons;
        size_t strips;
        size_t rings;
+       size_t dials;
 };
 
 struct tablet_pad_info {
@@ -210,6 +214,7 @@
 
        char *name;
        uint32_t vid, pid;
+       enum zwp_tablet_v2_bustype bustype;
        struct wl_list paths;
 };
 
@@ -281,6 +286,82 @@
        struct wl_list connectors;
 };
 
+struct wp_color_management_primaries {
+       int32_t red_x;
+       int32_t red_y;
+       int32_t green_x;
+       int32_t green_y;
+       int32_t blue_x;
+       int32_t blue_y;
+       int32_t white_x;
+       int32_t white_y;
+};
+
+struct wp_color_management_v1_info;
+struct wp_color_management_output_v1_info {
+       struct wl_list link;
+
+       struct wp_color_management_v1_info* color;
+       struct output_info *output;
+       struct wp_color_management_output_v1 *color_output;
+       struct wp_image_description_v1 *description;
+       struct wp_image_description_info_v1 *info;
+
+       bool description_failed;
+       uint32_t description_identity;
+
+       bool has_icc;
+       int icc_fd;
+       uint32_t icc_size;
+
+       struct wp_color_management_primaries primaries;
+
+       bool has_named_primaries;
+       uint32_t named_primaries;
+
+       bool has_tf_power;
+       uint32_t tf_power;
+       bool has_tf_named;
+       uint32_t tf_named;
+
+       uint32_t luminance_min;
+       uint32_t luminance_max;
+       uint32_t luminance_reference;
+
+       struct wp_color_management_primaries target_primaries;
+       uint32_t target_luminance_min;
+       uint32_t target_luminance_max;
+
+       bool has_target_max_cll;
+       uint32_t target_max_cll;
+
+       bool has_target_max_fall;
+       uint32_t target_max_fall;
+};
+
+struct wp_color_management_v1_info {
+       struct global_info global;
+       struct wp_color_manager_v1 *manager;
+       struct wayland_info *wayland;
+
+       struct wl_array supported_intents;
+       struct wl_array supported_features;
+       struct wl_array supported_named_tfs;
+       struct wl_array supported_named_primaries;
+
+       struct wl_list outputs;
+};
+
+struct wp_color_representation_v1_info {
+       struct global_info global;
+       struct wp_color_representation_manager_v1 *manager;
+       struct wayland_info *wayland;
+
+       struct wl_array supported_alpha_modes;
+       struct wl_array supported_coefficients;
+       struct wl_array supported_ranges;
+};
+
 struct wayland_info {
        struct wl_display *display;
        struct wl_registry *registry;
@@ -289,15 +370,22 @@
        struct wl_list infos;
        bool roundtrip_needed;
 
-       /* required for tablet-unstable-v2 */
+       /* required for tablet-v2 */
        struct wl_list seats;
        struct tablet_v2_info *tablet_info;
 
-       /* required for xdg-output-unstable-v1 */
+       /* required for xdg-output-unstable-v1 or color-management-v1 */
        struct wl_list outputs;
        struct xdg_output_manager_v1_info *xdg_output_manager_v1_info;
+       struct wp_color_management_v1_info *wp_color_management_v1_info;
+       struct wp_color_representation_v1_info *wp_color_representation_v1_info;
 };
 
+
+static void
+add_color_management_output_v1_info(struct wp_color_management_v1_info *color,
+       struct output_info *wl_output);
+
 static void *
 fail_on_null(void *p, size_t size, char *file, int32_t line)
 {
@@ -850,6 +938,7 @@
        printf("\t\t\t\tmodes: %u\n", info->modes);
        printf("\t\t\t\tstrips: %zu\n", info->strips);
        printf("\t\t\t\trings: %zu\n", info->rings);
+       printf("\t\t\t\tdials: %zu\n", info->dials);
        printf("\t\t\t\tbuttons:");
 
        for (i = 0; i < info->button_count; ++i) {
@@ -921,6 +1010,27 @@
        printf("\t\ttablet: %s\n", info->name);
        printf("\t\t\tvendor: %u\n", info->vid);
        printf("\t\t\tproduct: %u\n", info->pid);
+       if (info->bustype) {
+               const char *bustype = "unknown";
+               switch (info->bustype) {
+               case ZWP_TABLET_V2_BUSTYPE_USB:
+                       bustype = "usb";
+                       break;
+               case ZWP_TABLET_V2_BUSTYPE_BLUETOOTH:
+                       bustype = "bluetooth";
+                       break;
+               case ZWP_TABLET_V2_BUSTYPE_VIRTUAL:
+                       bustype = "virtual";
+                       break;
+               case ZWP_TABLET_V2_BUSTYPE_SERIAL:
+                       bustype = "serial";
+                       break;
+               case ZWP_TABLET_V2_BUSTYPE_I2C:
+                       bustype = "i2c";
+                       break;
+               }
+               printf("\t\t\tbustype: %s (%u)\n", bustype, info->bustype);
+       }
 
        wl_list_for_each(path, &info->paths, link) {
                printf("\t\t\tpath: %s\n", path->path);
@@ -1312,6 +1422,17 @@
        zwp_tablet_pad_strip_v2_destroy(strip);
 }
 
+static void
+handle_tablet_v2_tablet_pad_group_dial(void *data,
+                                       struct zwp_tablet_pad_group_v2 *group,
+                                       struct zwp_tablet_pad_dial_v2 *dial)
+{
+       struct tablet_pad_group_info *info = data;
+       ++info->dials;
+
+       zwp_tablet_pad_dial_v2_destroy(dial);
+}
+
 static const struct zwp_tablet_pad_group_v2_listener tablet_pad_group_listener 
= {
        .buttons = handle_tablet_v2_tablet_pad_group_buttons,
        .modes = handle_tablet_v2_tablet_pad_group_modes,
@@ -1319,6 +1440,7 @@
        .strip = handle_tablet_v2_tablet_pad_group_strip,
        .done = handle_tablet_v2_tablet_pad_group_done,
        .mode_switch = handle_tablet_v2_tablet_pad_group_mode_switch,
+       .dial = handle_tablet_v2_tablet_pad_group_dial,
 };
 
 static void
@@ -1463,12 +1585,22 @@
         * allowed to be issued either way. */
 }
 
+static void
+handle_tablet_v2_tablet_bustype(void *data, struct zwp_tablet_v2 
*zwp_tablet_v2,
+                                uint32_t bustype)
+{
+       struct tablet_info *tablet_info = data;
+
+       tablet_info->bustype = bustype;
+}
+
 static const struct zwp_tablet_v2_listener tablet_listener = {
        .name = handle_tablet_v2_tablet_name,
        .id = handle_tablet_v2_tablet_id,
        .path = handle_tablet_v2_tablet_path,
        .done = handle_tablet_v2_tablet_done,
-       .removed = handle_tablet_v2_tablet_removed
+       .removed = handle_tablet_v2_tablet_removed,
+       .bustype = handle_tablet_v2_tablet_bustype,
 };
 
 static void
@@ -2030,6 +2162,11 @@
        if (info->xdg_output_manager_v1_info)
                add_xdg_output_v1_info(info->xdg_output_manager_v1_info,
                                       output);
+
+       if (info->wp_color_management_v1_info) {
+               
add_color_management_output_v1_info(info->wp_color_management_v1_info,
+                       output);
+       }
 }
 
 static void
@@ -2262,6 +2399,707 @@
        info->roundtrip_needed = true;
 }
 
+static const char *
+color_management_named_tf_to_str(uint32_t tf)
+{
+       switch (tf) {
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_BT1886:
+               return "bt1886";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA22:
+               return "gamma22";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_GAMMA28:
+               return "gamma28";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST240:
+               return "st240";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_EXT_LINEAR:
+               return "ext_linear";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_LOG_100:
+               return "log100";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_LOG_316:
+               return "log316";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_XVYCC:
+               return "xvycc";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_SRGB:
+               return "srgb";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_EXT_SRGB:
+               return "ext_srgb";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST2084_PQ:
+               return "st2084_pq";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_ST428:
+               return "st428";
+       case WP_COLOR_MANAGER_V1_TRANSFER_FUNCTION_HLG:
+               return "hlg";
+       default:
+               fprintf(stderr, "unknown color management transfer function 
%u\n", tf);
+               return "unexpected value";
+       }
+}
+static const char *
+color_management_named_primaries_to_str(uint32_t primaries)
+{
+       switch (primaries) {
+       case WP_COLOR_MANAGER_V1_PRIMARIES_SRGB:
+               return "srgb";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_PAL_M:
+               return "pal_m";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_PAL:
+               return "pal";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_NTSC:
+               return "ntsc";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_GENERIC_FILM:
+               return "generic_film";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_BT2020:
+               return "bt2020";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_CIE1931_XYZ:
+               return "cie1931_xyz";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_DCI_P3:
+               return "dci_p3";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_DISPLAY_P3:
+               return "display_p3";
+       case WP_COLOR_MANAGER_V1_PRIMARIES_ADOBE_RGB:
+               return "adobe_rgb";
+       default:
+               fprintf(stderr, "unknown color management primaries %u\n", 
primaries);
+               return "unexpected value";
+       }
+}
+
+static void
+image_description_info_v1_done(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1) {
+       struct wp_color_management_output_v1_info *output = data;
+       wp_image_description_info_v1_destroy(output->info);
+       output->info = NULL;
+}
+
+static void
+image_description_info_v1_icc_file(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               int32_t icc, uint32_t icc_size) {
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_icc = true;
+       if (output->icc_fd != -1)
+               close(output->icc_fd);
+       output->icc_fd = icc;
+       output->icc_size = icc_size;
+}
+
+static void
+image_description_info_v1_primaries(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y,
+               int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->primaries = (struct wp_color_management_primaries) {
+               .red_x = r_x,
+               .red_y = r_y,
+               .blue_x = b_x,
+               .blue_y = b_y,
+               .green_x = g_x,
+               .green_y = g_y,
+               .white_x = w_x,
+               .white_y = w_y,
+       };
+}
+
+static void
+image_description_info_v1_primaries_named(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t primaries)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_named_primaries = true;
+       output->named_primaries = primaries;
+}
+
+static void
+image_description_info_v1_tf_power(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t eexp)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_tf_power = true;
+       output->tf_power = eexp;
+}
+
+static void
+image_description_info_v1_tf_named(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t tf)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_tf_named = true;
+       output->tf_named = tf;
+}
+
+static void
+image_description_info_v1_luminances(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t min_lum, uint32_t max_lum, uint32_t reference_lum)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->luminance_min = min_lum;
+       output->luminance_max = max_lum;
+       output->luminance_reference = reference_lum;
+}
+
+static void
+image_description_info_v1_target_primaries(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               int32_t r_x, int32_t r_y, int32_t g_x, int32_t g_y,
+               int32_t b_x, int32_t b_y, int32_t w_x, int32_t w_y)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->target_primaries = (struct wp_color_management_primaries) {
+               .red_x = r_x,
+               .red_y = r_y,
+               .blue_x = b_x,
+               .blue_y = b_y,
+               .green_x = g_x,
+               .green_y = g_y,
+               .white_x = w_x,
+               .white_y = w_y,
+       };
+}
+
+static void
+image_description_info_v1_target_luminance(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t min_lum, uint32_t max_lum)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->target_luminance_min = min_lum;
+       output->target_luminance_max = max_lum;
+}
+
+static void
+image_description_info_v1_target_max_cll(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t max_cll)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_target_max_cll = true;
+       output->target_max_cll = max_cll;
+}
+
+static void
+image_description_info_v1_target_max_fall(void *data,
+               struct wp_image_description_info_v1 
*wp_image_description_info_v1,
+               uint32_t max_fall)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->has_target_max_fall = true;
+       output->target_max_fall = max_fall;
+}
+
+static const struct wp_image_description_info_v1_listener 
image_description_info_v1_listener = {
+       .done = image_description_info_v1_done,
+       .icc_file = image_description_info_v1_icc_file,
+       .primaries = image_description_info_v1_primaries,
+       .primaries_named = image_description_info_v1_primaries_named,
+       .tf_power = image_description_info_v1_tf_power,
+       .tf_named = image_description_info_v1_tf_named,
+       .luminances = image_description_info_v1_luminances,
+       .target_primaries = image_description_info_v1_target_primaries,
+       .target_luminance = image_description_info_v1_target_luminance,
+       .target_max_cll = image_description_info_v1_target_max_cll,
+       .target_max_fall = image_description_info_v1_target_max_fall,
+};
+
+static void
+image_description_v1_failed(void *data,
+               struct wp_image_description_v1 *wp_image_description_v1,
+               uint32_t cause, const char *msg)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->description_failed = true;
+}
+
+static void
+image_description_v1_ready(void *data,
+               struct wp_image_description_v1 *wp_image_description_v1,
+               uint32_t identity)
+{
+       struct wp_color_management_output_v1_info *output = data;
+       output->description_identity = identity;
+       output->info = 
wp_image_description_v1_get_information(output->description);
+       wp_image_description_info_v1_add_listener(output->info,
+               &image_description_info_v1_listener, output);
+       output->color->wayland->roundtrip_needed = true;
+}
+
+static const struct wp_image_description_v1_listener 
image_description_v1_listener = {
+       .failed = image_description_v1_failed,
+       .ready = image_description_v1_ready,
+};
+
+static void
+print_color_management_output_v1_info(struct 
wp_color_management_output_v1_info *output)
+{
+       printf("\toutput: %u\n", output->output->global.id);
+       if (output->description_failed) {
+               printf("\t\tdescription failed\n");
+               return;
+       }
+       printf("\t\timage description id: %u\n", output->description_identity);
+       if (output->has_icc) {
+               printf("\t\ticc file: size %u\n", output->icc_size);
+       } else {
+               uint32_t m = 1000000;
+               printf("\t\tprimaries (xy):\n");
+               printf("\t\t\t red: %u.%06u %u.%06u green: %u.%06u %u.%06u\n",
+                       output->primaries.red_x / m,
+                       output->primaries.red_x % m,
+                       output->primaries.red_y / m,
+                       output->primaries.red_y % m,
+                       output->primaries.green_x / m,
+                       output->primaries.green_x % m,
+                       output->primaries.green_y / m,
+                       output->primaries.green_y % m
+               );
+               printf("\t\t\tblue: %u.%06u %u.%06u white: %u.%06u %u.%06u\n",
+                  output->primaries.blue_x / m,
+                  output->primaries.blue_x % m,
+                  output->primaries.blue_y / m,
+                  output->primaries.blue_y % m,
+                  output->primaries.white_x / m,
+                  output->primaries.white_x % m,
+                  output->primaries.white_y / m,
+                  output->primaries.white_y % m
+               );
+               if (output->has_named_primaries) {
+                       printf("\t\tprimaries_named: %s\n", 
color_management_named_primaries_to_str(output->named_primaries));
+               }
+               if (output->has_tf_power) {
+                       printf("\t\ttf_power: %u.%04u\n", output->tf_power / 
10000, output->tf_power % 10000);
+               }
+               if (output->has_tf_named) {
+                       printf("\t\ttf_named: %s\n", 
color_management_named_tf_to_str(output->tf_named));
+               }
+               printf("\t\tluminances (cd/m²): min %u.%04u max %u reference 
%u\n",
+                       output->luminance_min / 10000,
+                       output->luminance_min % 10000,
+                       output->luminance_max,
+                       output->luminance_reference
+               );
+               printf("\t\ttarget primaries (xy):\n");
+               printf("\t\t\t red: %u.%06u %u.%06u green: %u.%06u %u.%06u\n",
+                       output->target_primaries.red_x / m,
+                       output->target_primaries.red_x % m,
+                       output->target_primaries.red_y / m,
+                       output->target_primaries.red_y % m,
+                       output->target_primaries.green_x / m,
+                       output->target_primaries.green_x % m,
+                       output->target_primaries.green_y / m,
+                       output->target_primaries.green_y % m
+               );
+               printf("\t\t\tblue: %u.%06u %u.%06u white: %u.%06u %u.%06u\n",
+                       output->target_primaries.blue_x / m,
+                       output->target_primaries.blue_x % m,
+                       output->target_primaries.blue_y / m,
+                       output->target_primaries.blue_y % m,
+                       output->target_primaries.white_x / m,
+                       output->target_primaries.white_x % m,
+                       output->target_primaries.white_y / m,
+                       output->target_primaries.white_y % m
+               );
+               printf("\t\ttarget_luminances (cd/m²): min %u.%04u max %u\n",
+                       output->target_luminance_min / 10000,
+                       output->target_luminance_min % 10000,
+                       output->target_luminance_max
+               );
+               if (output->has_target_max_cll) {
+                       printf("\t\tmax_cll (cd/m²): %u\n", 
output->target_max_cll);
+               }
+               if (output->has_target_max_fall) {
+                       printf("\t\tmax_fall (cd/m²): %u\n", 
output->target_max_fall);
+               }
+       }
+}
+
+static void
+destroy_color_management_output_v1_info(struct 
wp_color_management_output_v1_info *output)
+{
+       wl_list_remove(&output->link);
+       if (output->info)
+               wp_image_description_info_v1_destroy(output->info);
+       wp_image_description_v1_destroy(output->description);
+       wp_color_management_output_v1_destroy(output->color_output);
+       if (output->icc_fd != -1)
+               close(output->icc_fd);
+       free(output);
+}
+
+static void
+add_color_management_output_v1_info(struct wp_color_management_v1_info *color,
+               struct output_info *wl_output)
+{
+       struct wp_color_management_output_v1_info *output =
+               xzalloc(sizeof(struct wp_color_management_output_v1_info));
+
+       wl_list_insert(&color->outputs, &output->link);
+       output->color = color;
+       output->output = wl_output;
+       output->color_output = wp_color_manager_v1_get_output(color->manager,
+               wl_output->output);
+
+       output->icc_fd = -1;
+
+       output->description =
+               
wp_color_management_output_v1_get_image_description(output->color_output);
+       wp_image_description_v1_add_listener(output->description,
+               &image_description_v1_listener, output);
+}
+
+static void
+color_manager_v1_supported_intent(void *data,
+               struct wp_color_manager_v1 *wp_color_manager_v1, uint32_t 
render_intent)
+{
+       struct wp_color_management_v1_info *color = data;
+       uint32_t *e = xwl_array_add(&color->supported_intents, 
sizeof(uint32_t));
+       *e = render_intent;
+}
+
+static void
+color_manager_v1_supported_feature(void *data,
+               struct wp_color_manager_v1 *wp_color_manager_v1, uint32_t 
feature)
+{
+       struct wp_color_management_v1_info *color = data;
+       uint32_t *e = xwl_array_add(&color->supported_features, 
sizeof(uint32_t));
+       *e = feature;
+}
+
+static void
+color_manager_v1_supported_tf_named(void *data,
+               struct wp_color_manager_v1 *wp_color_manager_v1, uint32_t tf)
+{
+       struct wp_color_management_v1_info *color = data;
+       uint32_t *e = xwl_array_add(&color->supported_named_tfs, 
sizeof(uint32_t));
+       *e = tf;
+}
+
+static void
+color_manager_v1_supported_primaries_named(void *data,
+               struct wp_color_manager_v1 *wp_color_manager_v1, uint32_t 
primaries)
+{
+       struct wp_color_management_v1_info *color = data;
+       uint32_t *e = xwl_array_add(&color->supported_named_primaries, 
sizeof(uint32_t));
+       *e = primaries;
+}
+
+static void
+color_manager_v1_done(void *data,
+               struct wp_color_manager_v1 *wp_color_manager_v1)
+{
+       /* no-op */
+}
+
+static const struct wp_color_manager_v1_listener color_manager_v1_listener = {
+       .supported_intent = color_manager_v1_supported_intent,
+       .supported_feature = color_manager_v1_supported_feature,
+       .supported_tf_named = color_manager_v1_supported_tf_named,
+       .supported_primaries_named = color_manager_v1_supported_primaries_named,
+       .done = color_manager_v1_done,
+};
+
+static void
+print_color_management_v1_info(void *info)
+{
+       struct wp_color_management_v1_info *color = info;
+       print_global_info(info);
+
+       uint32_t *e;
+
+       printf("\tsupported rendering intents:\n");
+       wl_array_for_each(e, &color->supported_intents) {
+               const char *intent;
+               switch (*e) {
+               case WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL:
+                       intent = "perceptual";
+                       break;
+               case WP_COLOR_MANAGER_V1_RENDER_INTENT_RELATIVE:
+                       intent = "relative";
+                       break;
+               case WP_COLOR_MANAGER_V1_RENDER_INTENT_SATURATION:
+                       intent = "saturation";
+                       break;
+               case WP_COLOR_MANAGER_V1_RENDER_INTENT_ABSOLUTE:
+                       intent = "absolute";
+                       break;
+               case WP_COLOR_MANAGER_V1_RENDER_INTENT_RELATIVE_BPC:
+                       intent = "relative_bpc";
+                       break;
+               default:
+                       fprintf(stderr, "unknown color management render intent 
%u\n", *e);
+                       intent = "unexpected value";
+               }
+
+               printf("\t\t%s\n", intent);
+       }
+
+       printf("\tsupported features:\n");
+       wl_array_for_each(e, &color->supported_features) {
+               const char *feature;
+               switch (*e) {
+               case WP_COLOR_MANAGER_V1_FEATURE_ICC_V2_V4:
+                       feature = "icc_v2_v4";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_PARAMETRIC:
+                       feature = "parametric";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_SET_PRIMARIES:
+                       feature = "set_primaries";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_SET_TF_POWER:
+                       feature = "set_tf_power";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_SET_LUMINANCES:
+                       feature = "set_luminances";
+                       break;
+               case 
WP_COLOR_MANAGER_V1_FEATURE_SET_MASTERING_DISPLAY_PRIMARIES:
+                       feature = "set_mastering_display_primaries";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_EXTENDED_TARGET_VOLUME:
+                       feature = "extended_target_volume";
+                       break;
+               case WP_COLOR_MANAGER_V1_FEATURE_WINDOWS_SCRGB:
+                       feature = "windows_scrgb";
+                       break;
+               default:
+                       fprintf(stderr, "unknown color management feature 
%u\n", *e);
+                       feature = "unexpected value";
+               }
+
+               printf("\t\t%s\n", feature);
+       }
+
+       printf("\tsupported named transfer functions:\n");
+       wl_array_for_each(e, &color->supported_named_tfs) {
+               printf("\t\t%s\n", color_management_named_tf_to_str(*e));
+       }
+
+       printf("\tsupported named primaries:\n");
+       wl_array_for_each(e, &color->supported_named_primaries) {
+               printf("\t\t%s\n", color_management_named_primaries_to_str(*e));
+       }
+
+       struct wp_color_management_output_v1_info *output;
+       wl_list_for_each(output, &color->outputs, link)
+               print_color_management_output_v1_info(output);
+
+}
+
+static void
+destroy_color_management_v1_info(void *info)
+{
+       struct wp_color_management_v1_info *color = info;
+       struct wp_color_management_output_v1_info *output, *tmp;
+       wl_list_for_each_safe(output, tmp, &color->outputs, link)
+               destroy_color_management_output_v1_info(output);
+
+       wl_array_release(&color->supported_intents);
+       wl_array_release(&color->supported_features);
+       wl_array_release(&color->supported_named_tfs);
+       wl_array_release(&color->supported_named_primaries);
+
+       wp_color_manager_v1_destroy(color->manager);
+}
+
+static void
+add_color_management_v1_info(struct wayland_info *info, uint32_t id,
+               uint32_t version)
+{
+       struct wp_color_management_v1_info *color = xzalloc(sizeof *color);
+
+       init_global_info(info, &color->global, id,
+               wp_color_manager_v1_interface.name, version);
+
+       color->wayland = info;
+       color->manager = wl_registry_bind(info->registry, id,
+               &wp_color_manager_v1_interface, 1);
+       color->global.print = print_color_management_v1_info;
+       color->global.destroy = destroy_color_management_v1_info;
+
+       wl_array_init(&color->supported_intents);
+       wl_array_init(&color->supported_features);
+       wl_array_init(&color->supported_named_tfs);
+       wl_array_init(&color->supported_named_primaries);
+
+       wp_color_manager_v1_add_listener(color->manager,
+               &color_manager_v1_listener, color);
+
+       wl_list_init(&color->outputs);
+       struct output_info *output;
+       wl_list_for_each(output, &info->outputs, global_link)
+               add_color_management_output_v1_info(color, output);
+
+       info->roundtrip_needed = true;
+       info->wp_color_management_v1_info = color;
+}
+
+static void
+color_representation_v1_supported_alpha_mode (void *data,
+               struct wp_color_representation_manager_v1 
*wp_color_representation_manager_v1,
+               uint32_t alpha_mode)
+{
+       struct wp_color_representation_v1_info *color_repr = data;
+       uint32_t *e = xwl_array_add(&color_repr->supported_alpha_modes, 
sizeof(uint32_t));
+       *e = alpha_mode;
+}
+
+
+static void
+color_representation_v1_supported_coefficients_and_ranges (void *data,
+               struct wp_color_representation_manager_v1 
*wp_color_representation_manager_v1,
+               uint32_t coefficients, uint32_t range)
+{
+       struct wp_color_representation_v1_info *color_repr = data;
+       uint32_t *e;
+
+       e = xwl_array_add(&color_repr->supported_coefficients, 
sizeof(uint32_t));
+       *e = coefficients;
+       e = xwl_array_add(&color_repr->supported_ranges, sizeof(uint32_t));
+       *e = range;
+}
+
+static void
+color_representation_v1_done(void *data,
+               struct wp_color_representation_manager_v1 
*wp_color_representation_manager_v1)
+{
+       /* no-op */
+}
+
+static const struct wp_color_representation_manager_v1_listener
+               color_representation_manager_v1_listener = {
+       .supported_alpha_mode = color_representation_v1_supported_alpha_mode,
+       .supported_coefficients_and_ranges =
+               color_representation_v1_supported_coefficients_and_ranges,
+       .done = color_representation_v1_done,
+};
+
+static void
+print_color_representation_v1_info(void *info)
+{
+       struct wp_color_representation_v1_info *color_repr = info;
+       print_global_info(info);
+
+       uint32_t *e;
+
+       printf("\tsupported alpha modes:\n");
+       wl_array_for_each(e, &color_repr->supported_alpha_modes) {
+               const char *alpha_mode;
+               switch (*e) {
+               case 
WP_COLOR_REPRESENTATION_SURFACE_V1_ALPHA_MODE_PREMULTIPLIED_ELECTRICAL:
+                       alpha_mode = "premultiplied alpha in electrical values";
+                       break;
+               case 
WP_COLOR_REPRESENTATION_SURFACE_V1_ALPHA_MODE_PREMULTIPLIED_OPTICAL:
+                       alpha_mode = "premultiplied alpha in optical values";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_ALPHA_MODE_STRAIGHT:
+                       alpha_mode = "straight alpha";
+                       break;
+               default:
+                       fprintf(stderr, "unknown color representation alpha 
mode %u\n", *e);
+                       alpha_mode = "unexpected value";
+               }
+
+               printf("\t\t%s\n", alpha_mode);
+       }
+
+       printf("\tsupported matrix coefficients and ranges:\n");
+       uint32_t *coefficients = color_repr->supported_coefficients.data;
+       uint32_t *ranges = color_repr->supported_ranges.data;
+       size_t len = color_repr->supported_coefficients.size / 
sizeof(*coefficients);
+       for (size_t i = 0; i < len; i++) {
+               const char *coefficient;
+               const char *range;
+               switch (coefficients[i]) {
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_IDENTITY:
+                       coefficient = "identity";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_BT709:
+                       coefficient = "bt709";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_FCC:
+                       coefficient = "fcc";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_BT601:
+                       coefficient = "bt601";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_SMPTE240:
+                       coefficient = "smpte240";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_BT2020:
+                       coefficient = "bt2020";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_BT2020_CL:
+                       coefficient = "bt2020_cl";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_COEFFICIENTS_ICTCP:
+                       coefficient = "ictcp";
+                       break;
+               default:
+                       fprintf(stderr, "unknown color representation 
coefficient %u\n",
+                               coefficients[i]);
+                       coefficient = "unexpected value";
+               }
+               switch (ranges[i]) {
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_RANGE_FULL:
+                       range = "full";
+                       break;
+               case WP_COLOR_REPRESENTATION_SURFACE_V1_RANGE_LIMITED:
+                       range = "limited";
+                       break;
+               default:
+                       fprintf(stderr, "unknown color representation range 
%u\n",
+                               ranges[i]);
+                       range = "unexpected value";
+               }
+
+               printf("\t\t%s, %s range\n", coefficient, range);
+       }
+}
+
+static void
+destroy_color_representation_v1_info(void *info)
+{
+       struct wp_color_representation_v1_info *color_repr = info;
+
+       wl_array_release(&color_repr->supported_alpha_modes);
+       wl_array_release(&color_repr->supported_coefficients);
+       wl_array_release(&color_repr->supported_ranges);
+
+       wp_color_representation_manager_v1_destroy(color_repr->manager);
+}
+
+static void
+add_color_representation_management_v1_info(struct wayland_info *info,
+                                           uint32_t id, uint32_t version)
+{
+       struct wp_color_representation_v1_info *color_repr =
+               xzalloc(sizeof *color_repr);
+
+       init_global_info(info, &color_repr->global, id,
+               wp_color_representation_manager_v1_interface.name, version);
+
+       color_repr->wayland = info;
+       color_repr->manager = wl_registry_bind(info->registry, id,
+               &wp_color_representation_manager_v1_interface, 1);
+       color_repr->global.print = print_color_representation_v1_info;
+       color_repr->global.destroy = destroy_color_representation_v1_info;
+
+       wl_array_init(&color_repr->supported_alpha_modes);
+       wl_array_init(&color_repr->supported_coefficients);
+       wl_array_init(&color_repr->supported_ranges);
+
+       wp_color_representation_manager_v1_add_listener(color_repr->manager,
+               &color_representation_manager_v1_listener, color_repr);
+
+       info->roundtrip_needed = true;
+       info->wp_color_representation_v1_info = color_repr;
+}
+
 static void
 destroy_global_info(void *info)
 {
@@ -2300,6 +3138,10 @@
                add_xdg_output_manager_v1_info(info, id, version);
        else if (!strcmp(interface, wp_drm_lease_device_v1_interface.name))
                add_drm_lease_device_v1_info(info, id, version);
+       else if (!strcmp(interface, wp_color_manager_v1_interface.name))
+               add_color_management_v1_info(info, id, version);
+       else if (!strcmp(interface, 
wp_color_representation_manager_v1_interface.name))
+               add_color_representation_management_v1_info(info, id, version);
        else
                add_global_info(info, id, interface, version);
 }
@@ -2402,6 +3244,8 @@
 
        info.tablet_info = NULL;
        info.xdg_output_manager_v1_info = NULL;
+       info.wp_color_management_v1_info = NULL;
+       info.wp_color_representation_v1_info = NULL;
        wl_list_init(&info.infos);
        wl_list_init(&info.seats);
        wl_list_init(&info.outputs);

++++++ wayland-utils.keyring ++++++
--- /var/tmp/diff_new_pack.Dhbz6Q/_old  2025-12-17 17:34:19.670504850 +0100
+++ /var/tmp/diff_new_pack.Dhbz6Q/_new  2025-12-17 17:34:19.702506194 +0100
@@ -1,44 +1,66 @@
 -----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: SKS 1.1.6
-Comment: Hostname: sks.pod02.fleetstreetops.com
 
-mQGiBERd0h4RBACflXMwRMuZ/gICB7oM/SwnYMoDeRVaZHYT2RtI6iaNQpovoMasfbLX31ic
-weQm9sMLQJR/bNABpp28Fs1S4yNt9SwAProigexyWl3fFE3uqoVRmglZuQdyXl7nnPC7A3hx
-HPX88tsZS4UlLFRssTjNnrzzhSR3xyyIlOJnmG5pJwCg/yaHDECRtdWm9gIJZwfM6S+ANYUD
-/0s6FPCIdbDqCzNcMH7YZID+JjBOU3VlRdXfzGmxIy2aPBpC9pkb0EUEL94QZ5Ysa1EGNnNU
-Pq8dQWOr/NllCt2/l0HDLGoziBCpBTvGZNnFaJoErG0kmCH2u0w9VmKKSBq6C0sI8rFW1Jth
-Kc/bu6ucBKKbpi4sFYAMyZHnsNbzA/9VYevyns5TmZeR7t+x8YRj6xZxWVNGm20gnBBhHVnq
-/EGIn4a/YN1NLFNc4EuarFnzl0w6L1IQHanM+ajBJgzL4oSYCufhTSXgA2utrpIRtKkRW9JH
-6zt3J5hkW8oIcEsY3YRKQ3iVKS3Kz8PgSwezNewFT6o3Juu//95O5qSm8rQiT2xpdmllciBG
-b3VyZGFuIDxmb3VyZGFuQHhmY2Uub3JnPohGBBARAgAGBQJEZvBlAAoJEC12Gwt+xKisTi0A
-njRPgOuvEI+Qwdr5omwFea5+KTIcAJ44FEv5dNwpH6u4wsdY3Nw8UofVEIhGBBARAgAGBQJF
-DCr5AAoJEEUf/9P9Xg8POY4An17Mo6anrccMKMnOi1QHbwIZY4RfAJwICjjKfCxugw64UaJq
-eJI79Eh3oIhjBBMRAgAjBQJEXdIeBQkJZgGABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ
-FHBtvh5LRUDz7ACgmLpkFGTjcUGnzXnjIw071JQi0HQAnisMFnp0kBQIqdv2lufZ9YxXZhD3
-iGkEExECACkCGyMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUJGlQd0gUCRqPLdAIZAQAKCRAU
-cG2+HktFQDSHAJ9/WHAJ4S5wdaSEUA7gSIiIYRTEnACg2WBzAdViGpJ6ymUjp48CgR8Npzm0
-I09saXZpZXIgRm91cmRhbiA8Zm91cmRhbkBnbWFpbC5jb20+iGYEExECACYCGyMGCwkIBwMC
-BBUCCAMEFgIDAQIeAQIXgAUCRqPLWAUJGlQd0gAKCRAUcG2+HktFQISoAJ9ybOFFTByEyt24
-KXBAlesX7qBIlACgmWtgSW3ZzoGwJXG0knERqSPDDDyIZgQTEQIAJgUCRqPICgIbIwUJCWYB
-gAYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEBRwbb4eS0VAcnQAn22tPG5VeZLwHTf5kig9
-TYAB7IiHAKD26QlltyFImf9U/b/GE7g27S1pC7QlT2xpdmllciBGb3VyZGFuIDxvZm91cmRh
-bkByZWRoYXQuY29tPohmBBMRAgAmAhsjBgsJCAcDAgQVAggDBBYCAwECHgECF4AFAkajy1gF
-CRpUHdIACgkQFHBtvh5LRUCnMwCg3qt90PZGBCjwC+RXRQH1+RznWzEAoKydVzIVeRC2vkGI
-RUx+k5jX333oiGYEExECACYFAkajyDkCGyMFCQlmAYAGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
-gAAKCRAUcG2+HktFQAsZAKCa9lmgwpkLzUpX4caWZi/L8KSK8ACePisjM/gv90AVd+0Br0G9
-8yhLD9K5Ag0ERF3SSRAIAI0clctVOjdLUtE1ZRYS7Reu/oXSPns8duS4CLHmknF3kgn8uN6L
-6fptwFzh3yizCMGvTd4YA4/NimzsQxXmar9fDRg/VHEPsaHrWanE3VPMxBoRyPtnNeQtQXrR
-b8XCZlloGvmYQ/CZ8N9IaUq/Q8bbpqyr+dJy/gy+gc0aCxPdZhghxvOKrcJZg7zks52cQegz
-Tne6rjU0o/eTeySkWgboL4RaLQndUVX7LJ1UgL3mxr30fgv6JxmN8YkD6lSbb8+ivXhHX8LN
-uY8wmX+tCIrlm+20hpWtLEyB3HSnqgyC7Y1v0ZPYmQaRm1AQcafikFml9CieH9DaV6avfPQL
-kgsAAwUH/2BX9xYtFY85fSKP7Kz0ClcCHpuweIkmTbPWDT91HQmf2dRbzI88CV3ZzawJMJHH
-L1Nua7CGNX1Z+cFJz4QTkyAOXXNlbHaVRXF2EpnwFfjF5UM/D5j3YiUhXoam1LKz8/VRw3ZD
-Ddc349jKPJEWNEmqs9NeGhSC2YsL2TsOBaBzWPvRXS1otPCaKOTuDa9h2T8om2SEvqvJjd0j
-dC0o4khJ8zsYtE3vZBXbyfdfcn5ktWedyEt6lcRMI04bvu2+j6B68GwtVDNr/RHaDPd+UkbZ
-SHwiRoxGkRUQttYvLh/NrtLo8a6NQFWAePMM8nU2P7n6AcRf357nqbwnQWJ/TyuITAQYEQIA
-DAUCRF3SSQUJCWYBgAAKCRAUcG2+HktFQLoEAKDpSdjTzPJkakQgNmSlz6s+0xpuuACgky3G
-EQ5ql+GmXICuMkQW3vBl4QyITAQYEQIADAUCRqPLYwUJGlQdpwAKCRAUcG2+HktFQOXtAKDv
-5xSuJOH7AILCzLNNpJN6ZYn6AACeIivOT9j2sJyZZ7qb/NEPG+8NlFU=
-=yfu8
+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
+TQinj120O7IqOWGb5uD4
+=I8pC
 -----END PGP PUBLIC KEY BLOCK-----
 

Reply via email to