Rebase against 766448f8ffe51b83105bd0795a5cbc7b8f7c8894.

This commit is contained in:
Alistair Leslie-Hughes 2023-06-14 10:59:42 +10:00
parent f14d68c258
commit db6b479557
5 changed files with 64 additions and 64 deletions

View File

@ -1,4 +1,4 @@
From 045f711cb526f02ce6a163bf8ab973b5d06a1c86 Mon Sep 17 00:00:00 2001
From e00479d767bf9bbb480be7b5c75dbd55812feb4d Mon Sep 17 00:00:00 2001
From: Andrew Wesie <awesie@gmail.com>
Date: Fri, 24 Apr 2020 14:55:14 -0500
Subject: [PATCH] ntdll: Track if a WRITECOPY page has been modified.
@ -12,7 +12,7 @@ Signed-off-by: Andrew Wesie <awesie@gmail.com>
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 2688383cc9f..b0c888d13a0 100644
index 75d5a3fc966..c91484432c1 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -122,6 +122,7 @@ struct file_view
@ -21,9 +21,9 @@ index 2688383cc9f..b0c888d13a0 100644
#define VPROT_WRITEWATCH 0x40
+#define VPROT_WRITTEN 0x80
/* per-mapping protection flags */
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
#define VPROT_PLACEHOLDER 0x0400
@@ -1130,7 +1131,7 @@ static int get_unix_prot( BYTE vprot )
#define VPROT_ARM64EC 0x0100 /* view may contain ARM64EC code */
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
@@ -1127,7 +1128,7 @@ static int get_unix_prot( BYTE vprot )
#if defined(__i386__)
if (vprot & VPROT_WRITECOPY)
{
@ -32,7 +32,7 @@ index 2688383cc9f..b0c888d13a0 100644
prot = (prot & ~PROT_WRITE) | PROT_READ;
else
prot |= PROT_WRITE | PROT_READ;
@@ -1702,7 +1703,11 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
@@ -1641,7 +1642,11 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
*/
static DWORD get_win32_prot( BYTE vprot, unsigned int map_prot )
{
@ -45,7 +45,7 @@ index 2688383cc9f..b0c888d13a0 100644
if (vprot & VPROT_GUARD) ret |= PAGE_GUARD;
if (map_prot & SEC_NOCACHE) ret |= PAGE_NOCACHE;
return ret;
@@ -1813,12 +1818,21 @@ static BOOL set_vprot( struct file_view *view, void *base, size_t size, BYTE vpr
@@ -1752,12 +1757,21 @@ static BOOL set_vprot( struct file_view *view, void *base, size_t size, BYTE vpr
if (view->protect & VPROT_WRITEWATCH)
{
/* each page may need different protections depending on write watch flag */
@ -69,7 +69,7 @@ index 2688383cc9f..b0c888d13a0 100644
return TRUE;
}
@@ -3691,7 +3705,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack )
@@ -3739,7 +3753,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack )
}
if (vprot & VPROT_WRITECOPY)
{

View File

@ -1,4 +1,4 @@
From 1bcdd8784df9149082a1686bb1a346a0d2f5bd28 Mon Sep 17 00:00:00 2001
From 14edfa85b447be28ec0f47396c6ef03348c89586 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 19 Dec 2019 22:34:44 +0100
Subject: [PATCH] winex11.drv: Keep track of pointer and device button
@ -51,7 +51,7 @@ index 195cc65eddb..83169a9bb4d 100644
}
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 2d4453e320a..abf14ac55b4 100644
index 6e7cdb642ff..9158e75b20d 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -30,6 +30,9 @@
@ -64,7 +64,7 @@ index 2d4453e320a..abf14ac55b4 100644
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
#include <X11/extensions/XInput2.h>
#endif
@@ -144,6 +147,14 @@ MAKE_FUNCPTR(XISelectEvents);
@@ -141,6 +144,14 @@ MAKE_FUNCPTR(XISelectEvents);
#undef MAKE_FUNCPTR
#endif
@ -79,8 +79,8 @@ index 2d4453e320a..abf14ac55b4 100644
/***********************************************************************
* X11DRV_Xcursor_Init
*
@@ -249,6 +260,70 @@ void sync_window_cursor( Window window )
set_window_cursor( window, cursor );
@@ -228,6 +239,70 @@ void set_window_cursor( Window window, HCURSOR handle )
XFlush( gdi_display );
}
+struct mouse_button_mapping
@ -150,7 +150,7 @@ index 2d4453e320a..abf14ac55b4 100644
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
/***********************************************************************
* update_relative_valuators
@@ -1723,6 +1798,8 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev )
@@ -1699,6 +1774,8 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev )
if (event->reason != XISlaveSwitch) return FALSE;
update_relative_valuators( event->classes, event->num_classes );
@ -159,7 +159,7 @@ index 2d4453e320a..abf14ac55b4 100644
return TRUE;
}
@@ -1810,13 +1887,12 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
@@ -1786,13 +1863,12 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
#endif /* HAVE_X11_EXTENSIONS_XINPUT2_H */
@ -174,7 +174,7 @@ index 2d4453e320a..abf14ac55b4 100644
int event, error;
void *libxi_handle = dlopen( SONAME_LIBXI, RTLD_NOW );
@@ -1832,11 +1908,20 @@ void x11drv_xinput_load(void)
@@ -1808,11 +1884,20 @@ void x11drv_xinput_load(void)
return; \
}
@ -196,10 +196,10 @@ index 2d4453e320a..abf14ac55b4 100644
xinput2_available = XQueryExtension( gdi_display, "XInputExtension", &xinput2_opcode, &event, &error );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 225b1534159..29c7259134a 100644
index f84b1c20752..d3f74c63df0 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -695,6 +695,7 @@ extern void sync_window_cursor( Window window ) DECLSPEC_HIDDEN;
@@ -693,6 +693,7 @@ extern void set_window_cursor( Window window, HCURSOR handle ) DECLSPEC_HIDDEN;
extern void retry_grab_clipping_window(void) DECLSPEC_HIDDEN;
extern void move_resize_window( HWND hwnd, int dir ) DECLSPEC_HIDDEN;
extern void X11DRV_InitKeyboard( Display *display ) DECLSPEC_HIDDEN;

View File

@ -1,4 +1,4 @@
From aed9514fd73f808a0fe1ed00829fe2dc68735423 Mon Sep 17 00:00:00 2001
From 0ecc6d7db43e68d9d8d6a9ce2db7e664af8eecd7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Wed, 24 Mar 2021 23:29:28 +0100
Subject: [PATCH] user32: Set SEND_HWMSG_RAWINPUT flags only when RAWINPUT is
@ -19,10 +19,10 @@ __wine_send_input with INPUT_HARDWARE input type and a rawinput.
8 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 83d2a4e3efb..511d4040d38 100644
index 5d78b35dd60..cbdd4b195d3 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -653,6 +653,7 @@ UINT WINAPI NtUserSendInput( UINT count, INPUT *inputs, int size )
@@ -655,6 +655,7 @@ UINT WINAPI NtUserSendInput( UINT count, INPUT *inputs, int size )
{
UINT i;
NTSTATUS status = STATUS_SUCCESS;
@ -30,7 +30,7 @@ index 83d2a4e3efb..511d4040d38 100644
if (size != sizeof(INPUT))
{
@@ -682,7 +683,7 @@ UINT WINAPI NtUserSendInput( UINT count, INPUT *inputs, int size )
@@ -684,7 +685,7 @@ UINT WINAPI NtUserSendInput( UINT count, INPUT *inputs, int size )
update_mouse_coords( &input );
/* fallthrough */
case INPUT_KEYBOARD:
@ -40,10 +40,10 @@ index 83d2a4e3efb..511d4040d38 100644
case INPUT_HARDWARE:
RtlSetLastWin32Error( ERROR_CALL_NOT_IMPLEMENTED );
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index a8ced6eac52..c860612f2b4 100644
index f47154d701a..00ed06abbdf 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -2627,7 +2627,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
@@ -2632,7 +2632,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
req->input.mouse.flags = input->mi.dwFlags;
req->input.mouse.time = input->mi.time;
req->input.mouse.info = input->mi.dwExtraInfo;
@ -52,7 +52,7 @@ index a8ced6eac52..c860612f2b4 100644
affects_key_state = !!(input->mi.dwFlags & (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP |
MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP |
MOUSEEVENTF_MIDDLEDOWN | MOUSEEVENTF_MIDDLEUP |
@@ -2639,7 +2639,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
@@ -2644,7 +2644,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
req->input.kbd.flags = input->ki.dwFlags;
req->input.kbd.time = input->ki.time;
req->input.kbd.info = input->ki.dwExtraInfo;
@ -83,7 +83,7 @@ index 7c55c481353..9a20daf8809 100644
/***********************************************************************
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
index f01df37a400..eb96300da89 100644
index 3a61a2d44d9..a94183f46bf 100644
--- a/dlls/wineandroid.drv/window.c
+++ b/dlls/wineandroid.drv/window.c
@@ -424,6 +424,7 @@ static int process_events( DWORD mask )
@ -134,7 +134,7 @@ index c1963daa56e..14f0010e37e 100644
diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c
index cb194095d55..74c329488c4 100644
index 5c04c71e1dc..260831c44dc 100644
--- a/dlls/winemac.drv/mouse.c
+++ b/dlls/winemac.drv/mouse.c
@@ -129,6 +129,7 @@ static const CFStringRef cocoa_cursor_names[] =
@ -155,7 +155,7 @@ index cb194095d55..74c329488c4 100644
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index c6a167dc4c6..03fe0ce8d32 100644
index 83169a9bb4d..ecd513ee2a4 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1123,6 +1123,7 @@ static WORD EVENT_event_to_vkey( XIC xic, XKeyEvent *e)
@ -176,27 +176,27 @@ index c6a167dc4c6..03fe0ce8d32 100644
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index e25b3e7728a..bb9807bf850 100644
index 9158e75b20d..f745054ca64 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -749,6 +749,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -647,6 +647,7 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPUT *input )
{
struct x11drv_win_data *data;
Window win = 0;
+ RAWINPUT rawinput;
input->type = INPUT_MOUSE;
@@ -765,7 +766,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
sync_window_cursor( window );
last_cursor_change = input->u.mi.time;
}
@@ -657,7 +658,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
if (!clip_hwnd) return;
if (thread_data->clip_window != window) return;
- __wine_send_input( hwnd, input, NULL );
+ __wine_send_input( hwnd, input, &rawinput );
return;
}
@@ -806,7 +807,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -684,7 +685,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
SERVER_END_REQ;
}
@ -205,7 +205,7 @@ index e25b3e7728a..bb9807bf850 100644
}
#ifdef SONAME_LIBXCURSOR
@@ -1789,6 +1790,7 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1612,6 +1613,7 @@ void move_resize_window( HWND hwnd, int dir )
{
MSG msg;
INPUT input;
@ -213,7 +213,7 @@ index e25b3e7728a..bb9807bf850 100644
int x, y, rootX, rootY;
if (!XQueryPointer( display, root_window, &root, &child, &rootX, &rootY, &x, &y, &xstate )) break;
@@ -1804,7 +1806,7 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1627,7 +1629,7 @@ void move_resize_window( HWND hwnd, int dir )
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.u.mi.time = NtGetTickCount();
input.u.mi.dwExtraInfo = 0;
@ -222,7 +222,7 @@ index e25b3e7728a..bb9807bf850 100644
}
while (NtUserPeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
@@ -2017,6 +2019,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1840,6 +1842,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
{
XIRawEvent *event = xev->data;
@ -230,7 +230,7 @@ index e25b3e7728a..bb9807bf850 100644
INPUT input;
if (broken_rawevents && is_old_motion_event( xev->serial ))
@@ -2034,7 +2037,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
@@ -1857,7 +1860,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dy = 0;
if (!map_raw_event_coords( event, &input )) return FALSE;

View File

@ -1,4 +1,4 @@
From 5cf6861a6cff5f3f3bee4694f07ba8679cba607d Mon Sep 17 00:00:00 2001
From 8a0662e0e65a8e9ebf0cf3e3123bc8cac071251d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Mon, 25 Oct 2021 11:45:47 +0200
Subject: [PATCH] winex11.drv: Listen to RawMotion and RawButton* events in the
@ -15,10 +15,10 @@ instance used in our dinput implementation.
4 files changed, 112 insertions(+), 8 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index ff654ae6647..33a3aca953d 100644
index d56634104e1..6193717e82f 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -320,6 +320,10 @@ static enum event_merge_action merge_raw_motion_events( XIRawEvent *prev, XIRawE
@@ -318,6 +318,10 @@ static enum event_merge_action merge_raw_motion_events( XIRawEvent *prev, XIRawE
*/
static enum event_merge_action merge_events( XEvent *prev, XEvent *next )
{
@ -29,7 +29,7 @@ index ff654ae6647..33a3aca953d 100644
switch (prev->type)
{
case ConfigureNotify:
@@ -351,19 +355,21 @@ static enum event_merge_action merge_events( XEvent *prev, XEvent *next )
@@ -349,19 +353,21 @@ static enum event_merge_action merge_events( XEvent *prev, XEvent *next )
case GenericEvent:
if (next->xcookie.extension != xinput2_opcode) break;
if (next->xcookie.evtype != XI_RawMotion) break;
@ -54,10 +54,10 @@ index ff654ae6647..33a3aca953d 100644
#endif
}
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index bb9807bf850..919cc8c7fb8 100644
index f745054ca64..81c474d6605 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -413,7 +413,18 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask )
@@ -392,7 +392,18 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask )
memset( mask_bits, 0, sizeof(mask_bits) );
XISetMask( mask_bits, XI_DeviceChanged );
XISetMask( mask_bits, XI_RawMotion );
@ -77,16 +77,16 @@ index bb9807bf850..919cc8c7fb8 100644
pXISelectEvents( display, DefaultRootWindow( display ), &mask, 1 );
@@ -766,7 +777,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
sync_window_cursor( window );
last_cursor_change = input->u.mi.time;
}
@@ -658,7 +669,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
if (!clip_hwnd) return;
if (thread_data->clip_window != window) return;
- __wine_send_input( hwnd, input, &rawinput );
+ __wine_send_input( hwnd, input, NULL );
+ __wine_send_input( hwnd, input, NULL );
return;
}
@@ -807,7 +818,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -685,7 +696,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
SERVER_END_REQ;
}
@ -95,7 +95,7 @@ index bb9807bf850..919cc8c7fb8 100644
}
#ifdef SONAME_LIBXCURSOR
@@ -1790,7 +1801,6 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1613,7 +1624,6 @@ void move_resize_window( HWND hwnd, int dir )
{
MSG msg;
INPUT input;
@ -103,7 +103,7 @@ index bb9807bf850..919cc8c7fb8 100644
int x, y, rootX, rootY;
if (!XQueryPointer( display, root_window, &root, &child, &rootX, &rootY, &x, &y, &xstate )) break;
@@ -1806,7 +1816,7 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1629,7 +1639,7 @@ void move_resize_window( HWND hwnd, int dir )
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.u.mi.time = NtGetTickCount();
input.u.mi.dwExtraInfo = 0;
@ -112,7 +112,7 @@ index bb9807bf850..919cc8c7fb8 100644
}
while (NtUserPeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
@@ -2018,6 +2028,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1841,6 +1851,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
*/
static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
{
@ -120,7 +120,7 @@ index bb9807bf850..919cc8c7fb8 100644
XIRawEvent *event = xev->data;
RAWINPUT rawinput;
INPUT input;
@@ -2037,7 +2048,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
@@ -1860,7 +1871,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dy = 0;
if (!map_raw_event_coords( event, &input )) return FALSE;
@ -207,7 +207,7 @@ index bb9807bf850..919cc8c7fb8 100644
return TRUE;
}
@@ -2113,6 +2202,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
@@ -1936,6 +2025,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
case XI_RawMotion:
ret = X11DRV_RawMotion( event );
break;
@ -219,10 +219,10 @@ index bb9807bf850..919cc8c7fb8 100644
default:
TRACE( "Unhandled event %#x\n", event->evtype );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 38cacb4d3d4..fcae7bbc9df 100644
index d3f74c63df0..a072b01fc7e 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -405,6 +405,7 @@ struct x11drv_thread_data
@@ -408,6 +408,7 @@ struct x11drv_thread_data
XIValuatorClassInfo x_valuator;
XIValuatorClassInfo y_valuator;
int xi2_core_pointer; /* XInput2 core pointer id */
@ -231,10 +231,10 @@ index 38cacb4d3d4..fcae7bbc9df 100644
};
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index e449530749e..42de6c0e7a7 100644
index fbff380c2b0..b434e03c8fd 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -728,6 +728,8 @@ void X11DRV_ThreadDetach(void)
@@ -725,6 +725,8 @@ void X11DRV_ThreadDetach(void)
if (data)
{
vulkan_thread_detach();
@ -243,7 +243,7 @@ index e449530749e..42de6c0e7a7 100644
if (data->xim) XCloseIM( data->xim );
if (data->font_set) XFreeFontSet( data->display, data->font_set );
XCloseDisplay( data->display );
@@ -796,6 +798,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
@@ -793,6 +795,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
if (use_xim) xim_thread_attach( data );
x11drv_xinput_init();
@ -253,5 +253,5 @@ index e449530749e..42de6c0e7a7 100644
return data;
}
--
2.40.0
2.40.1

View File

@ -1 +1 @@
c7431990d815e664cf22267142b76cc59f21d192
766448f8ffe51b83105bd0795a5cbc7b8f7c8894