Wine-Devel
Threads by month
- ----- 2026 -----
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2018
- 71 participants
- 407 discussions
[PATCH] comctl32/listview: Fix NM_CLICK notification when clicking on checkboxes.
by Nikolay Sivov Dec. 5, 2018
by Nikolay Sivov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/listview.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index c5978b37a5..1230c55d5c 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -10238,7 +10238,9 @@ static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, IN
{
if ((infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES) && (lvHitTestInfo.flags & LVHT_ONITEMSTATEICON))
{
+ notify_click(infoPtr, NM_CLICK, &lvHitTestInfo);
toggle_checkbox_state(infoPtr, nItem);
+ infoPtr->bLButtonDown = FALSE;
return 0;
}
--
2.19.2
1
0
Signed-off-by: Alexandre Badalo <alexandre9099(a)gmail.com>
---
dlls/winsta/main.c | 17 +++++++++++++++++
dlls/winsta/winsta.h | 1 +
dlls/winsta/winsta.spec | 4 ++--
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/winsta/main.c b/dlls/winsta/main.c
index 7568310aea..87ce8a12c6 100644
--- a/dlls/winsta/main.c
+++ b/dlls/winsta/main.c
@@ -105,3 +105,20 @@ BOOLEAN WINAPI WinStationEnumerateW( HANDLE server,
PSESSIONIDW *sessionids, ULO
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
return FALSE;
}
+
+BOOLEAN WINAPI WinStationTerminateProcess(HANDLE handle,
+ ULONG processId,
+ DWORD exit_code)
+{
+ NTSTATUS status;
+
+ if (!handle)
+ {
+ SetLastError( ERROR_INVALID_HANDLE );
+ return FALSE;
+ }
+
+ status = NtTerminateProcess( handle, exit_code );
+ if (status) SetLastError( RtlNtStatusToDosError(status) );
+ return !status;
+}
diff --git a/dlls/winsta/winsta.h b/dlls/winsta/winsta.h
index d908aa855c..494af2875f 100644
--- a/dlls/winsta/winsta.h
+++ b/dlls/winsta/winsta.h
@@ -95,5 +95,6 @@ BOOLEAN WINAPI
WinStationGetProcessSid(HANDLE,ULONG,FILETIME *,PVOID,PULONG);
BOOLEAN WINAPI
WinStationQueryInformationW(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
BOOLEAN WINAPI WinStationRegisterConsoleNotification(HANDLE,HWND,ULONG);
BOOLEAN WINAPI WinStationUnRegisterConsoleNotification(HANDLE,HWND);
+BOOLEAN WINAPI WinStationTerminateProcess(HANDLE,ULONG,ULONG);
#endif /* _WINSTA_H */
diff --git a/dlls/winsta/winsta.spec b/dlls/winsta/winsta.spec
index 1f38a238f0..1bfb46f4b9 100644
--- a/dlls/winsta/winsta.spec
+++ b/dlls/winsta/winsta.spec
@@ -68,7 +68,7 @@
@ stub WinStationShadow
@ stub WinStationShadowStop
@ stub WinStationShutdownSystem
-@ stub WinStationTerminateProcess
+@ stdcall WinStationTerminateProcess(ptr long long)
@ stdcall WinStationUnRegisterConsoleNotification(ptr ptr)
@ stdcall WinStationVirtualOpen(ptr ptr ptr)
@ stub WinStationWaitSystemEvent
@@ -92,4 +92,4 @@
@ stub _WinStationUpdateClientCachedCredentials
@ stub _WinStationUpdateSettings
@ stub _WinStationUpdateUserConfig
-@ stub _WinStationWaitForConnect
+@ stub _WinStationWaitForConnect
\ No newline at end of file
--
2.19.1
3
2
Signed-off-by: Alexandre Badalo <alexandre9099(a)gmail.com>
---
dlls/ntdll/nt.c | 8 ++++++++
dlls/ntdll/ntdll.spec | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 5c711ef25b..3d92e343c1 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -3155,3 +3155,11 @@ NTSTATUS WINAPI NtSetLdtEntries(ULONG selector1,
ULONG entry1_low, ULONG entry1_
return STATUS_NOT_IMPLEMENTED;
}
+NTSTATUS WINAPI NtSetDebugFilterState(ULONG ComponentId,
+ ULONG Level,
+ BOOLEAN State)
+{
+ FIXME("(%u, %u, %u): stub\n", ComponentId, Level, State);
+
+ return STATUS_SUCCESS;
+}
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 1b0bd7f53f..0ba056bca2 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -332,7 +332,7 @@
# @ stub NtSetBootEntryOrder
# @ stub NtSetBootOptions
@ stdcall NtSetContextThread(long ptr)
-@ stub NtSetDebugFilterState
+@ stdcall NtSetDebugFilterState(long long long)
@ stub NtSetDefaultHardErrorPort
@ stdcall NtSetDefaultLocale(long long)
@ stdcall NtSetDefaultUILanguage(long)
--
2.19.1
2
1
[PATCH 9/9] windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the PNG encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/pngformat.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
index c0e5a59cf9..786d8360e0 100644
--- a/dlls/windowscodecs/pngformat.c
+++ b/dlls/windowscodecs/pngformat.c
@@ -1979,11 +1979,22 @@ static HRESULT WINAPI PngEncoder_GetContainerFormat(IWICBitmapEncoder *iface, GU
return S_OK;
}
-static HRESULT WINAPI PngEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
- IWICBitmapEncoderInfo **ppIEncoderInfo)
+static HRESULT WINAPI PngEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info)
{
- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo);
- return E_NOTIMPL;
+ IWICComponentInfo *comp_info;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", iface, info);
+
+ if (!info) return E_INVALIDARG;
+
+ hr = CreateComponentInfo(&CLSID_WICPngEncoder, &comp_info);
+ if (hr == S_OK)
+ {
+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info);
+ IWICComponentInfo_Release(comp_info);
+ }
+ return hr;
}
static HRESULT WINAPI PngEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.17.1
1
0
[PATCH 8/9] windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the JPEG encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/jpegformat.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index a060d569f8..192c6c691b 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -412,10 +412,14 @@ static HRESULT WINAPI JpegDecoder_CopyPalette(IWICBitmapDecoder *iface,
}
static HRESULT WINAPI JpegDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,
- IWICMetadataQueryReader **ppIMetadataQueryReader)
+ IWICMetadataQueryReader **reader)
{
- FIXME("(%p,%p): stub\n", iface, ppIMetadataQueryReader);
- return E_NOTIMPL;
+ FIXME("(%p,%p): stub\n", iface, reader);
+
+ if (!reader) return E_INVALIDARG;
+
+ *reader = NULL;
+ return WINCODEC_ERR_UNSUPPORTEDOPERATION;
}
static HRESULT WINAPI JpegDecoder_GetPreview(IWICBitmapDecoder *iface,
--
2.17.1
1
0
[PATCH 7/9] windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in TIFF encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/tiffformat.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
index 62476a9bb9..b7e4a45bfe 100644
--- a/dlls/windowscodecs/tiffformat.c
+++ b/dlls/windowscodecs/tiffformat.c
@@ -1919,11 +1919,22 @@ static HRESULT WINAPI TiffEncoder_GetContainerFormat(IWICBitmapEncoder *iface,
return S_OK;
}
-static HRESULT WINAPI TiffEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
- IWICBitmapEncoderInfo **ppIEncoderInfo)
+static HRESULT WINAPI TiffEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info)
{
- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo);
- return E_NOTIMPL;
+ IWICComponentInfo *comp_info;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", iface, info);
+
+ if (!info) return E_INVALIDARG;
+
+ hr = CreateComponentInfo(&CLSID_WICTiffEncoder, &comp_info);
+ if (hr == S_OK)
+ {
+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info);
+ IWICComponentInfo_Release(comp_info);
+ }
+ return hr;
}
static HRESULT WINAPI TiffEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.17.1
1
0
[PATCH 6/9] windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in JPEG encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/jpegformat.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index 451d725eb8..a060d569f8 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -1392,11 +1392,22 @@ static HRESULT WINAPI JpegEncoder_GetContainerFormat(IWICBitmapEncoder *iface, G
return S_OK;
}
-static HRESULT WINAPI JpegEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
- IWICBitmapEncoderInfo **ppIEncoderInfo)
+static HRESULT WINAPI JpegEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info)
{
- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo);
- return E_NOTIMPL;
+ IWICComponentInfo *comp_info;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", iface, info);
+
+ if (!info) return E_INVALIDARG;
+
+ hr = CreateComponentInfo(&CLSID_WICJpegEncoder, &comp_info);
+ if (hr == S_OK)
+ {
+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info);
+ IWICComponentInfo_Release(comp_info);
+ }
+ return hr;
}
static HRESULT WINAPI JpegEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.17.1
1
0
[PATCH 4/9] windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in BMP encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/bmpencode.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c
index 35130e7d5a..186a7ac1d7 100644
--- a/dlls/windowscodecs/bmpencode.c
+++ b/dlls/windowscodecs/bmpencode.c
@@ -507,11 +507,22 @@ static HRESULT WINAPI BmpEncoder_GetContainerFormat(IWICBitmapEncoder *iface,
return S_OK;
}
-static HRESULT WINAPI BmpEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
- IWICBitmapEncoderInfo **ppIEncoderInfo)
+static HRESULT WINAPI BmpEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info)
{
- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo);
- return E_NOTIMPL;
+ IWICComponentInfo *comp_info;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", iface, info);
+
+ if (!info) return E_INVALIDARG;
+
+ hr = CreateComponentInfo(&CLSID_WICBmpEncoder, &comp_info);
+ if (hr == S_OK)
+ {
+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info);
+ IWICComponentInfo_Release(comp_info);
+ }
+ return hr;
}
static HRESULT WINAPI BmpEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.17.1
1
0
[PATCH 5/9] windowscodecs: Implement IWICBitmapEncoderInfo::GetFileExtensions.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/info.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/windowscodecs/info.c b/dlls/windowscodecs/info.c
index 86707e1253..d0c2c690ca 100644
--- a/dlls/windowscodecs/info.c
+++ b/dlls/windowscodecs/info.c
@@ -898,8 +898,12 @@ static HRESULT WINAPI BitmapEncoderInfo_GetMimeTypes(IWICBitmapEncoderInfo *ifac
static HRESULT WINAPI BitmapEncoderInfo_GetFileExtensions(IWICBitmapEncoderInfo *iface,
UINT cchFileExtensions, WCHAR *wzFileExtensions, UINT *pcchActual)
{
- FIXME("(%p,%u,%p,%p): stub\n", iface, cchFileExtensions, wzFileExtensions, pcchActual);
- return E_NOTIMPL;
+ BitmapEncoderInfo *This = impl_from_IWICBitmapEncoderInfo(iface);
+
+ TRACE("(%p,%u,%p,%p)\n", iface, cchFileExtensions, wzFileExtensions, pcchActual);
+
+ return ComponentInfo_GetStringValue(This->classkey, fileextensions_valuename,
+ cchFileExtensions, wzFileExtensions, pcchActual);
}
static HRESULT WINAPI BitmapEncoderInfo_DoesSupportAnimation(IWICBitmapEncoderInfo *iface,
--
2.17.1
1
0
[PATCH 3/9] windowscodecs: Add support for palette image formats to BMP encoder.
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/bmpencode.c | 44 ++++++++++++++++++++++------
dlls/windowscodecs/info.c | 8 ++++-
dlls/windowscodecs/regsvr.c | 5 ++++
dlls/windowscodecs/tests/converter.c | 13 ++++++--
4 files changed, 57 insertions(+), 13 deletions(-)
diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c
index b8783a499e..35130e7d5a 100644
--- a/dlls/windowscodecs/bmpencode.c
+++ b/dlls/windowscodecs/bmpencode.c
@@ -1,5 +1,6 @@
/*
* Copyright 2009 Vincent Povirk for CodeWeavers
+ * Copyright 2016 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -37,6 +38,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wincodecs);
struct bmp_pixelformat {
const WICPixelFormatGUID *guid;
UINT bpp;
+ UINT colors; /* palette size */
DWORD compression;
DWORD redmask;
DWORD greenmask;
@@ -45,13 +47,18 @@ struct bmp_pixelformat {
};
static const struct bmp_pixelformat formats[] = {
- {&GUID_WICPixelFormat24bppBGR, 24, BI_RGB},
- {&GUID_WICPixelFormat16bppBGR555, 16, BI_RGB},
- {&GUID_WICPixelFormat16bppBGR565, 16, BI_BITFIELDS, 0xf800, 0x7e0, 0x1f, 0},
- {&GUID_WICPixelFormat32bppBGR, 32, BI_RGB},
+ {&GUID_WICPixelFormat24bppBGR, 24, 0, BI_RGB},
+ {&GUID_WICPixelFormatBlackWhite, 1, 2, BI_RGB},
+ {&GUID_WICPixelFormat1bppIndexed, 1, 2, BI_RGB},
+ {&GUID_WICPixelFormat2bppIndexed, 2, 4, BI_RGB},
+ {&GUID_WICPixelFormat4bppIndexed, 4, 16, BI_RGB},
+ {&GUID_WICPixelFormat8bppIndexed, 8, 256, BI_RGB},
+ {&GUID_WICPixelFormat16bppBGR555, 16, 0, BI_RGB},
+ {&GUID_WICPixelFormat16bppBGR565, 16, 0, BI_BITFIELDS, 0xf800, 0x7e0, 0x1f, 0},
+ {&GUID_WICPixelFormat32bppBGR, 32, 0, BI_RGB},
#if 0
/* Windows doesn't seem to support this one. */
- {&GUID_WICPixelFormat32bppBGRA, 32, BI_BITFIELDS, 0xff0000, 0xff00, 0xff, 0xff000000},
+ {&GUID_WICPixelFormat32bppBGRA, 32, 0, BI_BITFIELDS, 0xff0000, 0xff00, 0xff, 0xff000000},
#endif
{NULL}
};
@@ -184,11 +191,13 @@ static HRESULT WINAPI BmpFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface
for (i=0; formats[i].guid; i++)
{
- if (memcmp(formats[i].guid, pPixelFormat, sizeof(GUID)) == 0)
+ if (IsEqualGUID(formats[i].guid, pPixelFormat))
break;
}
if (!formats[i].guid) i = 0;
+ else if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormatBlackWhite))
+ i = 2; /* GUID_WICPixelFormat1bppIndexed */
This->format = &formats[i];
memcpy(pPixelFormat, This->format->guid, sizeof(GUID));
@@ -207,6 +216,7 @@ static HRESULT WINAPI BmpFrameEncode_SetPalette(IWICBitmapFrameEncode *iface,
IWICPalette *palette)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
+ HRESULT hr;
TRACE("(%p,%p)\n", iface, palette);
@@ -215,7 +225,14 @@ static HRESULT WINAPI BmpFrameEncode_SetPalette(IWICBitmapFrameEncode *iface,
if (!This->initialized)
return WINCODEC_ERR_NOTINITIALIZED;
- return IWICPalette_GetColors(palette, 256, This->palette, &This->colors);
+ hr = IWICPalette_GetColors(palette, 256, This->palette, &This->colors);
+ if (hr == S_OK)
+ {
+ UINT i;
+ for (i = 0; i < This->colors; i++)
+ This->palette[i] |= 0xff000000; /* BMP palette has no alpha */
+ }
+ return hr;
}
static HRESULT WINAPI BmpFrameEncode_SetThumbnail(IWICBitmapFrameEncode *iface,
@@ -330,8 +347,8 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface)
bih.bV5SizeImage = This->stride*This->height;
bih.bV5XPelsPerMeter = (This->xres+0.0127) / 0.0254;
bih.bV5YPelsPerMeter = (This->yres+0.0127) / 0.0254;
- bih.bV5ClrUsed = 0;
- bih.bV5ClrImportant = 0;
+ bih.bV5ClrUsed = (This->format->bpp <= 8) ? This->colors : 0;
+ bih.bV5ClrImportant = bih.bV5ClrUsed;
if (This->format->compression == BI_BITFIELDS)
{
@@ -348,6 +365,7 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface)
bfh.bfSize = sizeof(BITMAPFILEHEADER) + info_size + bih.bV5SizeImage;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + info_size;
+ bfh.bfOffBits += bih.bV5ClrUsed * sizeof(WICColor);
pos.QuadPart = 0;
hr = IStream_Seek(This->stream, pos, STREAM_SEEK_SET, NULL);
@@ -361,6 +379,14 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface)
if (FAILED(hr)) return hr;
if (byteswritten != info_size) return E_FAIL;
+ /* write the palette */
+ if (This->format->colors)
+ {
+ hr = IStream_Write(This->stream, This->palette, This->colors * sizeof(WICColor), &byteswritten);
+ if (FAILED(hr)) return hr;
+ if (byteswritten != This->colors * sizeof(WICColor)) return E_FAIL;
+ }
+
hr = IStream_Write(This->stream, This->bits, bih.bV5SizeImage, &byteswritten);
if (FAILED(hr)) return hr;
if (byteswritten != bih.bV5SizeImage) return E_FAIL;
diff --git a/dlls/windowscodecs/info.c b/dlls/windowscodecs/info.c
index e131107e99..86707e1253 100644
--- a/dlls/windowscodecs/info.c
+++ b/dlls/windowscodecs/info.c
@@ -2461,6 +2461,12 @@ HRESULT CreateComponentEnumerator(DWORD componentTypes, DWORD options, IEnumUnkn
return hr;
}
+static BOOL is_1bpp_format(const WICPixelFormatGUID *format)
+{
+ return IsEqualGUID(format, &GUID_WICPixelFormatBlackWhite) ||
+ IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed);
+}
+
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst)
{
HRESULT res;
@@ -2476,7 +2482,7 @@ HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitma
res = IWICBitmapSource_GetPixelFormat(pISrc, &srcFormat);
if (FAILED(res)) return res;
- if (IsEqualGUID(&srcFormat, dstFormat))
+ if (IsEqualGUID(&srcFormat, dstFormat) || (is_1bpp_format(&srcFormat) && is_1bpp_format(dstFormat)))
{
IWICBitmapSource_AddRef(pISrc);
*ppIDst = pISrc;
diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c
index 05c8f03a3d..7600de3099 100644
--- a/dlls/windowscodecs/regsvr.c
+++ b/dlls/windowscodecs/regsvr.c
@@ -1347,6 +1347,11 @@ static GUID const * const bmp_encode_formats[] = {
&GUID_WICPixelFormat16bppBGR565,
&GUID_WICPixelFormat24bppBGR,
&GUID_WICPixelFormat32bppBGR,
+ &GUID_WICPixelFormatBlackWhite,
+ &GUID_WICPixelFormat1bppIndexed,
+ &GUID_WICPixelFormat2bppIndexed,
+ &GUID_WICPixelFormat4bppIndexed,
+ &GUID_WICPixelFormat8bppIndexed,
NULL
};
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 13c50d7dff..0d37b72397 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -814,6 +814,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed))
{
+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits);
+
ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width);
ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
@@ -824,6 +826,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
}
else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
{
+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits);
+
ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width);
ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
@@ -834,6 +838,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
}
else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
{
+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits);
+
ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width);
ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
@@ -844,6 +850,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
}
else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
{
+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits);
+
ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
@@ -854,6 +862,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
}
else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR))
{
+ ok(bfh.bfOffBits == 0x0036, "wrong bfOffBits %02x\n", bfh.bfOffBits);
+
ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
@@ -1521,8 +1531,6 @@ START_TEST(converter)
test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder,
&testdata_24bppBGR, &CLSID_WICPngDecoder, "PNG encoder 24bppBGR");
-if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in Wine */
-{
test_encoder(&testdata_BlackWhite, &CLSID_WICBmpEncoder,
&testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite");
test_encoder(&testdata_1bppIndexed, &CLSID_WICBmpEncoder,
@@ -1533,7 +1541,6 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in
&testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 4bppIndexed");
test_encoder(&testdata_8bppIndexed, &CLSID_WICBmpEncoder,
&testdata_8bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 8bppIndexed");
-}
test_encoder(&testdata_32bppBGR, &CLSID_WICBmpEncoder,
&testdata_32bppBGR, &CLSID_WICBmpDecoder, "BMP encoder 32bppBGR");
--
2.17.1
1
0
[PATCH 1/9] windowscodecs/tests: Add tests for encoding 2bpp/4bpp images with a palette. (v2)
by Dmitry Timoshkov Dec. 5, 2018
by Dmitry Timoshkov Dec. 5, 2018
Dec. 5, 2018
v2: Fix test failures under Windows.
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/windowscodecs/tests/converter.c | 343 ++++++++++++++++++++++-----
1 file changed, 287 insertions(+), 56 deletions(-)
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 1e557a7fb8..8072064b48 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -316,6 +316,20 @@ static const struct bitmap_data testdata_BlackWhite = {
static const struct bitmap_data testdata_1bppIndexed = {
&GUID_WICPixelFormat1bppIndexed, 1, bits_1bpp, 32, 2, 96.0, 96.0};
+/* some encoders (like BMP) require data to be 4-bytes aligned */
+static const BYTE bits_2bpp[] = {
+ 0x55,0x55,0x55,0x55,
+ 0xaa,0xaa,0xaa,0xaa};
+static const struct bitmap_data testdata_2bppIndexed = {
+ &GUID_WICPixelFormat2bppIndexed, 2, bits_2bpp, 16, 2, 96.0, 96.0};
+
+/* some encoders (like BMP) require data to be 4-bytes aligned */
+static const BYTE bits_4bpp[] = {
+ 0x55,0x55,0x55,0x55,
+ 0xaa,0xaa,0xaa,0xaa};
+static const struct bitmap_data testdata_4bppIndexed = {
+ &GUID_WICPixelFormat4bppIndexed, 4, bits_4bpp, 8, 2, 96.0, 96.0};
+
static const BYTE bits_8bpp[] = {
0,1,2,3,
4,5,6,7};
@@ -632,64 +646,224 @@ static void test_encoder_properties(const CLSID* clsid_encoder, IPropertyBag2 *o
}
}
-static void check_bmp_format(IStream *stream, const struct bitmap_data *data)
+static void load_stream(IUnknown *reader, IStream *stream)
+{
+ HRESULT hr;
+ IWICPersistStream *persist;
+#ifdef WORDS_BIGENDIAN
+ DWORD persist_options = WICPersistOptionBigEndian;
+#else
+ DWORD persist_options = WICPersistOptionLittleEndian;
+#endif
+
+ hr = IUnknown_QueryInterface(reader, &IID_IWICPersistStream, (void **)&persist);
+ ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr);
+
+ hr = IWICPersistStream_LoadEx(persist, stream, NULL, persist_options);
+ ok(hr == S_OK, "LoadEx failed, hr=%x\n", hr);
+
+ IWICPersistStream_Release(persist);
+}
+
+static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format)
{
- BITMAPFILEHEADER bfh;
- BITMAPINFOHEADER bih;
HRESULT hr;
- ULONG len;
+ IWICMetadataReader *reader;
+ PROPVARIANT id, value;
+ struct
+ {
+ USHORT byte_order;
+ USHORT version;
+ ULONG dir_offset;
+ } tiff;
+ LARGE_INTEGER pos;
+ UINT count, i;
+ int width, height, bps, photo, samples, colormap;
+ struct
+ {
+ int id, *value;
+ } tag[] =
+ {
+ { 0x100, &width }, { 0x101, &height }, { 0x102, &bps },
+ { 0x106, &photo }, { 0x115, &samples }, { 0x140, &colormap }
+ };
+
+ memset(&tiff, 0, sizeof(tiff));
+ hr = IStream_Read(stream, &tiff, sizeof(tiff), NULL);
+ ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+ ok(tiff.byte_order == MAKEWORD('I','I') || tiff.byte_order == MAKEWORD('M','M'),
+ "wrong TIFF byte order mark %02x\n", tiff.byte_order);
+ ok(tiff.version == 42, "wrong TIFF version %u\n", tiff.version);
+
+ pos.QuadPart = tiff.dir_offset;
+ hr = IStream_Seek(stream, pos, SEEK_SET, NULL);
+ ok(hr == S_OK, "IStream_Seek error %#x\n", hr);
+
+ hr = CoCreateInstance(&CLSID_WICIfdMetadataReader, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICMetadataReader, (void **)&reader);
+ ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
+
+ load_stream((IUnknown *)reader, stream);
- hr = IStream_Read(stream, &bfh, sizeof(bfh), &len);
- ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr);
+ hr = IWICMetadataReader_GetCount(reader, &count);
+ ok(hr == S_OK, "GetCount error %#x\n", hr);
+ ok(count != 0, "wrong count %u\n", count);
- hr = IStream_Read(stream, &bih, sizeof(bih), &len);
- ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr);
+ for (i = 0; i < sizeof(tag)/sizeof(tag[0]); i++)
+ {
+ PropVariantInit(&id);
+ PropVariantInit(&value);
+
+ id.vt = VT_UI2;
+ U(id).uiVal = tag[i].id;
+ hr = IWICMetadataReader_GetValue(reader, NULL, &id, &value);
+ ok(hr == S_OK || (tag[i].id == 0x140 && hr == WINCODEC_ERR_PROPERTYNOTFOUND),
+ "GetValue(%04x) error %#x\n", tag[i].id, hr);
+ if (hr == S_OK)
+ {
+ ok(value.vt == VT_UI2 || value.vt == VT_UI4 || value.vt == (VT_UI2 | VT_VECTOR), "wrong vt: %d\n", value.vt);
+ tag[i].value[0] = U(value).uiVal;
+ }
+ else
+ tag[i].value[0] = -1;
+ }
- ok(bfh.bfType == 0x4d42, "Unexpected header type, %#x.\n", bfh.bfType);
- ok(bfh.bfSize != 0, "Unexpected bitmap size %d.\n", bfh.bfSize);
- ok(bfh.bfReserved1 == 0, "Unexpected bfReserved1 field.\n");
- ok(bfh.bfReserved2 == 0, "Unexpected bfReserved2 field.\n");
+ IWICMetadataReader_Release(reader);
- if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed)
- || IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed))
+ if (IsEqualGUID(format, &GUID_WICPixelFormatBlackWhite))
{
- /* TODO: test with actual palette size */
- ok(bfh.bfOffBits > sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n",
- bfh.bfOffBits, wine_dbgstr_guid(data->format));
+ ok(width == 32, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
+
+ ok(bps == 1, "wrong bps %d\n", bps);
+ ok(photo == 1, "wrong photometric %d\n", photo);
+ ok(samples == 1, "wrong samples %d\n", samples);
+ ok(colormap == -1, "wrong colormap %d\n", colormap);
}
- else
- ok(bfh.bfOffBits == sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n",
- bfh.bfOffBits, wine_dbgstr_guid(data->format));
-
- ok(bih.biSize == sizeof(bih), "Unexpected header size %d.\n", bih.biSize);
- ok(bih.biWidth == data->width, "Unexpected bitmap width %d.\n", bih.biWidth);
- ok(bih.biHeight == data->height, "Unexpected bitmap height %d.\n", bih.biHeight);
- ok(bih.biPlanes == 1, "Unexpected planes count %d.\n", bih.biPlanes);
-
- if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed))
- ok(bih.biBitCount == 1, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
- wine_dbgstr_guid(data->format));
- else if (IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed))
- ok(bih.biBitCount == 8, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
- wine_dbgstr_guid(data->format));
- else if (IsEqualGUID(data->format, &GUID_WICPixelFormat32bppBGR))
- ok(bih.biBitCount == 32, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
- wine_dbgstr_guid(data->format));
-
- ok(bih.biCompression == BI_RGB, "Unexpected compression mode %u.\n", bih.biCompression);
-todo_wine
- ok(bih.biSizeImage == 0, "Unexpected image size %d.\n", bih.biSizeImage);
- ok(bih.biXPelsPerMeter == 3780 || broken(bih.biXPelsPerMeter == 0) /* XP */, "Unexpected horz resolution %d.\n",
- bih.biXPelsPerMeter);
- ok(bih.biYPelsPerMeter == 3780 || broken(bih.biYPelsPerMeter == 0) /* XP */, "Unexpected vert resolution %d.\n",
- bih.biYPelsPerMeter);
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed))
+ {
+ ok(width == 32, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
+
+ ok(bps == 1, "wrong bps %d\n", bps);
+ ok(photo == 3, "wrong photometric %d\n", photo);
+ ok(samples == 1, "wrong samples %d\n", samples);
+ ok(colormap == 6, "wrong colormap %d\n", colormap);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+ {
+ ok(width == 32, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
+
+ ok(bps == 1, "wrong bps %d\n", bps);
+ ok(photo == 3, "wrong photometric %d\n", photo);
+ ok(samples == 1, "wrong samples %d\n", samples);
+ ok(colormap == 6, "wrong colormap %d\n", colormap);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+ {
+ ok(width == 8, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
- /* FIXME: test actual data */
+ ok(bps == 4, "wrong bps %d\n", bps);
+ ok(photo == 3, "wrong photometric %d\n", photo);
+ ok(samples == 1, "wrong samples %d\n", samples);
+ ok(colormap == 48, "wrong colormap %d\n", colormap);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
+ {
+ ok(width == 4, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
+
+ ok(bps == 8, "wrong bps %d\n", bps);
+ ok(photo == 3, "wrong photometric %d\n", photo);
+ ok(samples == 1, "wrong samples %d\n", samples);
+ ok(colormap == 768, "wrong colormap %d\n", colormap);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat24bppBGR))
+ {
+ ok(width == 4, "wrong width %u\n", width);
+ ok(height == 2, "wrong height %u\n", height);
+
+ ok(bps == 3, "wrong bps %d\n", bps);
+ ok(photo == 2, "wrong photometric %d\n", photo);
+ ok(samples == 3, "wrong samples %d\n", samples);
+ ok(colormap == -1, "wrong colormap %d\n", colormap);
+ }
+ else
+ ok(0, "unknown TIFF pixel format %s\n", wine_dbgstr_guid(format));
}
-static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format)
+static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
{
- /* FIXME */
+ HRESULT hr;
+ BITMAPFILEHEADER bfh;
+ BITMAPV5HEADER bih;
+
+ memset(&bfh, 0, sizeof(bfh));
+ hr = IStream_Read(stream, &bfh, sizeof(bfh), NULL);
+ ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+
+ ok(bfh.bfType == 0x4d42, "wrong BMP signature %02x\n", bfh.bfType);
+ ok(bfh.bfReserved1 == 0, "wrong bfReserved1 %02x\n", bfh.bfReserved1);
+ ok(bfh.bfReserved2 == 0, "wrong bfReserved2 %02x\n", bfh.bfReserved2);
+
+ memset(&bih, 0, sizeof(bih));
+ hr = IStream_Read(stream, &bih, sizeof(bih), NULL);
+ ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+
+ if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed))
+ {
+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width);
+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+ ok(bih.bV5BitCount == 1, "wrong BitCount %d\n", bih.bV5BitCount);
+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+ {
+ ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width);
+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+ ok(bih.bV5BitCount == 2, "wrong BitCount %d\n", bih.bV5BitCount);
+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+ {
+ ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width);
+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+ ok(bih.bV5BitCount == 4, "wrong BitCount %d\n", bih.bV5BitCount);
+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
+ {
+ ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+ ok(bih.bV5BitCount == 8, "wrong BitCount %d\n", bih.bV5BitCount);
+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR))
+ {
+ ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+ ok(bih.bV5BitCount == 32, "wrong BitCount %d\n", bih.bV5BitCount);
+ ok(bih.bV5ClrUsed == 0, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+ ok(bih.bV5ClrImportant == 0, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+ }
+ else
+ ok(0, "unknown BMP pixel format %s\n", wine_dbgstr_guid(format));
}
static unsigned be_uint(unsigned val)
@@ -746,6 +920,28 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format)
ok(png.filter == 0, "wrong filter %d\n", png.filter);
ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
}
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+ {
+ ok(be_uint(png.width) == 16, "wrong width %u\n", be_uint(png.width));
+ ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height));
+
+ ok(png.bit_depth == 2, "wrong bit_depth %d\n", png.bit_depth);
+ ok(png.color_type == 3, "wrong color_type %d\n", png.color_type);
+ ok(png.compression == 0, "wrong compression %d\n", png.compression);
+ ok(png.filter == 0, "wrong filter %d\n", png.filter);
+ ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
+ }
+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+ {
+ ok(be_uint(png.width) == 8, "wrong width %u\n", be_uint(png.width));
+ ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height));
+
+ ok(png.bit_depth == 4, "wrong bit_depth %d\n", png.bit_depth);
+ ok(png.color_type == 3, "wrong color_type %d\n", png.color_type);
+ ok(png.compression == 0, "wrong compression %d\n", png.compression);
+ ok(png.filter == 0, "wrong filter %d\n", png.filter);
+ ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
+ }
else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
{
ok(be_uint(png.width) == 4, "wrong width %u\n", be_uint(png.width));
@@ -772,7 +968,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format)
ok(0, "unknown PNG pixel format %s\n", wine_dbgstr_guid(format));
}
-static void check_bitmap_format(IStream *stream, const CLSID *encoder, const struct bitmap_data *dst)
+static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WICPixelFormatGUID *format)
{
HRESULT hr;
LARGE_INTEGER pos;
@@ -782,11 +978,11 @@ static void check_bitmap_format(IStream *stream, const CLSID *encoder, const str
ok(hr == S_OK, "IStream_Seek error %#x\n", hr);
if (IsEqualGUID(encoder, &CLSID_WICPngEncoder))
- check_png_format(stream, dst->format);
+ check_png_format(stream, format);
else if (IsEqualGUID(encoder, &CLSID_WICBmpEncoder))
- check_bmp_format(stream, dst);
+ check_bmp_format(stream, format);
else if (IsEqualGUID(encoder, &CLSID_WICTiffEncoder))
- check_tiff_format(stream, dst->format);
+ check_tiff_format(stream, format);
else
ok(0, "unknown encoder %s\n", wine_dbgstr_guid(encoder));
@@ -979,8 +1175,10 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
memcpy(&pixelformat, srcs[i]->format, sizeof(GUID));
hr = IWICBitmapFrameEncode_SetPixelFormat(frameencode, &pixelformat);
ok(SUCCEEDED(hr), "SetPixelFormat failed, hr=%x\n", hr);
- ok(IsEqualGUID(&pixelformat, dsts[i]->format), "SetPixelFormat changed the format to %s (%s)\n",
- wine_dbgstr_guid(&pixelformat), name);
+ ok(IsEqualGUID(&pixelformat, dsts[i]->format) ||
+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)) ||
+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)),
+ "SetPixelFormat changed the format to %s (%s)\n", wine_dbgstr_guid(&pixelformat), name);
hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height);
ok(SUCCEEDED(hr), "SetSize failed, hr=%x\n", hr);
@@ -1015,6 +1213,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
ok(SUCCEEDED(hr), "WriteSource(%dx%d) failed, hr=%x (%s)\n", rc->Width, rc->Height, hr, name);
else
ok(hr == S_OK ||
+ broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) ||
+ broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) ||
broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && IsEqualGUID(srcs[i]->format, &GUID_WICPixelFormatBlackWhite)) /* XP */,
"WriteSource(NULL) failed, hr=%x (%s)\n", hr, name);
}
@@ -1046,7 +1246,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
hr = IWICBitmapEncoder_Commit(encoder);
ok(SUCCEEDED(hr), "Commit failed, hr=%x\n", hr);
- check_bitmap_format(stream, clsid_encoder, dsts[0]);
+ check_bitmap_format(stream, clsid_encoder, dsts[0]->format);
}
if (SUCCEEDED(hr))
@@ -1106,7 +1306,12 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
ok(ret == count, "expected %u, got %u\n", count, ret);
if (IsEqualGUID(clsid_decoder, &CLSID_WICPngDecoder))
{
- ok(count == 256 || count == 2 /* newer libpng versions */, "expected 256, got %u (%s)\n", count, name);
+ /* Newer libpng versions don't accept larger palettes than the declared
+ * bit depth, so we need to generate the palette of the correct length.
+ */
+ ok(count == 256 || (dsts[i]->bpp == 1 && count == 2) ||
+ (dsts[i]->bpp == 2 && count == 4) || (dsts[i]->bpp == 4 && count == 16),
+ "expected 256, got %u (%s)\n", count, name);
ok(colors[0] == 0x11111111, "got %08x (%s)\n", colors[0], name);
ok(colors[1] == 0x22222222, "got %08x (%s)\n", colors[1], name);
@@ -1114,8 +1319,11 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
{
ok(colors[2] == 0x33333333, "got %08x (%s)\n", colors[2], name);
ok(colors[3] == 0x44444444, "got %08x (%s)\n", colors[3], name);
- ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name);
- ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name);
+ if (count > 4)
+ {
+ ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name);
+ ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name);
+ }
}
}
else if (IsEqualGUID(clsid_decoder, &CLSID_WICBmpDecoder) ||
@@ -1133,6 +1341,17 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name);
ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name);
}
+ else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat4bppIndexed))
+ {
+ ok(count == 16, "expected 16, got %u (%s)\n", count, name);
+
+ ok(colors[0] == 0xff111111, "got %08x (%s)\n", colors[0], name);
+ ok(colors[1] == 0xff222222, "got %08x (%s)\n", colors[1], name);
+ ok(colors[2] == 0xff333333, "got %08x (%s)\n", colors[2], name);
+ ok(colors[3] == 0xff444444, "got %08x (%s)\n", colors[3], name);
+ ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name);
+ ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name);
+ }
else
{
ok(count == 2, "expected 2, got %u (%s)\n", count, name);
@@ -1284,6 +1503,10 @@ START_TEST(converter)
&testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite");
test_encoder(&testdata_1bppIndexed, &CLSID_WICPngEncoder,
&testdata_1bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 1bppIndexed");
+ test_encoder(&testdata_2bppIndexed, &CLSID_WICPngEncoder,
+ &testdata_2bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 2bppIndexed");
+ test_encoder(&testdata_4bppIndexed, &CLSID_WICPngEncoder,
+ &testdata_4bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 4bppIndexed");
test_encoder(&testdata_8bppIndexed, &CLSID_WICPngEncoder,
&testdata_8bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 8bppIndexed");
test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder,
@@ -1295,6 +1518,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in
&testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite");
test_encoder(&testdata_1bppIndexed, &CLSID_WICBmpEncoder,
&testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 1bppIndexed");
+ test_encoder(&testdata_2bppIndexed, &CLSID_WICBmpEncoder,
+ &testdata_2bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 2bppIndexed");
+ test_encoder(&testdata_4bppIndexed, &CLSID_WICBmpEncoder,
+ &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 4bppIndexed");
test_encoder(&testdata_8bppIndexed, &CLSID_WICBmpEncoder,
&testdata_8bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 8bppIndexed");
}
@@ -1307,6 +1534,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in
{
test_encoder(&testdata_1bppIndexed, &CLSID_WICTiffEncoder,
&testdata_1bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 1bppIndexed");
+ test_encoder(&testdata_2bppIndexed, &CLSID_WICTiffEncoder,
+ &testdata_2bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 2bppIndexed");
+ test_encoder(&testdata_4bppIndexed, &CLSID_WICTiffEncoder,
+ &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 4bppIndexed");
test_encoder(&testdata_8bppIndexed, &CLSID_WICTiffEncoder,
&testdata_8bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 8bppIndexed");
}
--
2.17.1
1
0
[PATCH v2] comctl32: Dont set caret position if we dont have focus
by Alistair Leslie-Hughes Dec. 5, 2018
by Alistair Leslie-Hughes Dec. 5, 2018
Dec. 5, 2018
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/comctl32/edit.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/edit.c b/dlls/comctl32/edit.c
index 06e1f498dc9..b54aac1f57e 100644
--- a/dlls/comctl32/edit.c
+++ b/dlls/comctl32/edit.c
@@ -1707,9 +1707,12 @@ static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action)
static void EDIT_SetCaretPos(EDITSTATE *es, INT pos,
BOOL after_wrap)
{
- LRESULT res = EDIT_EM_PosFromChar(es, pos, after_wrap);
- TRACE("%d - %dx%d\n", pos, (short)LOWORD(res), (short)HIWORD(res));
- SetCaretPos((short)LOWORD(res), (short)HIWORD(res));
+ if(es->flags & EF_FOCUSED)
+ {
+ LRESULT res = EDIT_EM_PosFromChar(es, pos, after_wrap);
+ TRACE("%d - %dx%d\n", pos, (short)LOWORD(res), (short)HIWORD(res));
+ SetCaretPos((short)LOWORD(res), (short)HIWORD(res));
+ }
}
@@ -1778,7 +1781,6 @@ static void EDIT_EM_ScrollCaret(EDITSTATE *es)
}
}
- if(es->flags & EF_FOCUSED)
EDIT_SetCaretPos(es, es->selection_end, es->flags & EF_AFTER_WRAP);
}
--
2.19.2
2
1
[v3 PATCH] comctl32/edit: Don't set caret position when we don't have focus.
by Nikolay Sivov Dec. 5, 2018
by Nikolay Sivov Dec. 5, 2018
Dec. 5, 2018
From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/edit.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/edit.c b/dlls/comctl32/edit.c
index 06e1f498dc..1f17276b75 100644
--- a/dlls/comctl32/edit.c
+++ b/dlls/comctl32/edit.c
@@ -1707,9 +1707,14 @@ static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action)
static void EDIT_SetCaretPos(EDITSTATE *es, INT pos,
BOOL after_wrap)
{
- LRESULT res = EDIT_EM_PosFromChar(es, pos, after_wrap);
- TRACE("%d - %dx%d\n", pos, (short)LOWORD(res), (short)HIWORD(res));
- SetCaretPos((short)LOWORD(res), (short)HIWORD(res));
+ LRESULT res;
+
+ if (es->flags & EF_FOCUSED)
+ {
+ res = EDIT_EM_PosFromChar(es, pos, after_wrap);
+ TRACE("%d - %dx%d\n", pos, (short)LOWORD(res), (short)HIWORD(res));
+ SetCaretPos((short)LOWORD(res), (short)HIWORD(res));
+ }
}
@@ -1778,7 +1783,6 @@ static void EDIT_EM_ScrollCaret(EDITSTATE *es)
}
}
- if(es->flags & EF_FOCUSED)
EDIT_SetCaretPos(es, es->selection_end, es->flags & EF_AFTER_WRAP);
}
--
2.19.2
1
0
Dec. 5, 2018
Application should be expected to handle spurious wakeups, which the
following implementation will give in WakeByAddressSingle(). Avoid testing
that WakeByAddressSingle() only wakes one thread.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/kernelbase/tests/sync.c | 36 +++++++++++++++++++-----------------
1 file changed, 19 insertions(+), 17 deletions(-)
diff --git a/dlls/kernelbase/tests/sync.c b/dlls/kernelbase/tests/sync.c
index 99cbbc43bc..7a335d1af8 100644
--- a/dlls/kernelbase/tests/sync.c
+++ b/dlls/kernelbase/tests/sync.c
@@ -31,19 +31,23 @@ static void (WINAPI *pWakeByAddressAll)(void *);
static void (WINAPI *pWakeByAddressSingle)(void *);
static LONG64 address;
-static LONG64 compare;
static DWORD WINAPI test_WaitOnAddress_func(void *arg)
{
BOOL ret = FALSE;
- DWORD gle;
- while (address == compare)
+ LONG64 compare;
+
+ do
{
- SetLastError(0xdeadbeef);
- ret = pWaitOnAddress(&address, &compare, sizeof(compare), INFINITE);
- gle = GetLastError();
- ok(gle == 0xdeadbeef || broken(gle == ERROR_SUCCESS) /* Win 8 */, "got %d\n", gle);
- }
- ok(ret, "got %d\n", ret);
+ while (!(compare = address))
+ {
+ SetLastError(0xdeadbeef);
+ ret = pWaitOnAddress(&address, &compare, sizeof(compare), INFINITE);
+ ok(ret, "wait failed\n");
+ ok(GetLastError() == 0xdeadbeef || broken(GetLastError() == ERROR_SUCCESS) /* Win 8 */,
+ "got error %d\n", GetLastError());
+ }
+ } while (InterlockedCompareExchange64(&address, compare - 1, compare) != compare);
+
return 0;
}
@@ -51,6 +55,7 @@ static void test_WaitOnAddress(void)
{
DWORD gle, val, nthreads;
HANDLE threads[8];
+ LONG64 compare;
BOOL ret;
int i;
@@ -135,31 +140,28 @@ static void test_WaitOnAddress(void)
/* WakeByAddressAll */
address = 0;
- compare = 0;
for (i = 0; i < ARRAY_SIZE(threads); i++)
threads[i] = CreateThread(NULL, 0, test_WaitOnAddress_func, NULL, 0, NULL);
Sleep(100);
- address = ~0;
+ address = ARRAY_SIZE(threads);
pWakeByAddressAll(&address);
val = WaitForMultipleObjects(ARRAY_SIZE(threads), threads, TRUE, 5000);
ok(val == WAIT_OBJECT_0, "got %d\n", val);
for (i = 0; i < ARRAY_SIZE(threads); i++)
CloseHandle(threads[i]);
+ ok(!address, "got unexpected value %s\n", wine_dbgstr_longlong(address));
/* WakeByAddressSingle */
address = 0;
for (i = 0; i < ARRAY_SIZE(threads); i++)
- threads[i] = CreateThread(NULL, 0, test_WaitOnAddress_func, NULL, 0, NULL);
+ threads[i] = CreateThread(NULL, 0, test_WaitOnAddress_func, NULL, 0, NULL);
Sleep(100);
- address = 1;
nthreads = ARRAY_SIZE(threads);
+ address = ARRAY_SIZE(threads);
while (nthreads)
{
- val = WaitForMultipleObjects(nthreads, threads, FALSE, 0);
- ok(val == STATUS_TIMEOUT, "got %u\n", val);
-
pWakeByAddressSingle(&address);
val = WaitForMultipleObjects(nthreads, threads, FALSE, 2000);
ok(val < WAIT_OBJECT_0 + nthreads, "got %u\n", val);
@@ -167,7 +169,7 @@ static void test_WaitOnAddress(void)
memmove(&threads[val], &threads[val+1], (nthreads - val - 1) * sizeof(threads[0]));
nthreads--;
}
-
+ ok(!address, "got unexpected value %s\n", wine_dbgstr_longlong(address));
}
START_TEST(sync)
--
2.14.1
2
3
Dec. 5, 2018
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/shlwapi/shlwapi.spec | 2 +-
dlls/shlwapi/string.c | 15 ---------------
2 files changed, 1 insertion(+), 16 deletions(-)
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 4c31724b48..c96fcf0be4 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -343,7 +343,7 @@
343 stdcall -noname SHRegGetCLSIDKeyA(ptr str long long ptr)
344 stdcall -noname SHRegGetCLSIDKeyW(ptr wstr long long ptr)
345 stdcall -ordinal SHAnsiToAnsi(str ptr long)
-346 stdcall -ordinal SHUnicodeToUnicode(wstr ptr long)
+346 stdcall -ordinal SHUnicodeToUnicode(wstr ptr long) shcore.SHUnicodeToUnicode
347 stdcall -noname RegDeleteValueWrapW(long wstr) advapi32.RegDeleteValueW
348 stub -noname SHGetFileDescriptionW
349 stub -noname SHGetFileDescriptionA
diff --git a/dlls/shlwapi/string.c b/dlls/shlwapi/string.c
index b190ffc9e4..baa9c29a0f 100644
--- a/dlls/shlwapi/string.c
+++ b/dlls/shlwapi/string.c
@@ -2773,21 +2773,6 @@ DWORD WINAPI SHAnsiToAnsi(LPCSTR lpszSrc, LPSTR lpszDst, int iLen)
return lpszRet - lpszDst + 1;
}
-/*************************************************************************
- * @ [SHLWAPI.346]
- *
- * Unicode version of SSHAnsiToAnsi.
- */
-DWORD WINAPI SHUnicodeToUnicode(LPCWSTR lpszSrc, LPWSTR lpszDst, int iLen)
-{
- LPWSTR lpszRet;
-
- TRACE("(%s,%p,0x%08x)\n", debugstr_w(lpszSrc), lpszDst, iLen);
-
- lpszRet = StrCpyNXW(lpszDst, lpszSrc, iLen);
- return lpszRet - lpszDst + 1;
-}
-
/*************************************************************************
* @ [SHLWAPI.364]
*
--
2.19.2
1
3
[PATCH] comctl32: Dont set caret position if we dont have focus
by Alistair Leslie-Hughes Dec. 5, 2018
by Alistair Leslie-Hughes Dec. 5, 2018
Dec. 5, 2018
When SetFont is called on an Edit Control which doesn't have
focus, it causes the current control to draw the caret in
the incorrect location until a key is pressed.
EDIT_SetCaretPos (es=0x204439c0, pos=0, after_wrap=0)
0x7eace3be in EDIT_AdjustFormatRect (es=0x204439c0)
0x7eace465 in EDIT_SetRectNP (es=0x204439c0, rc=<optimized out>)
0x7ead180c in EDIT_WM_SetFont (es=0x204439c0, font=<optimized out>, redraw=1)
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/comctl32/edit.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/comctl32/edit.c b/dlls/comctl32/edit.c
index 06e1f498dc9..3ffc2e5c16a 100644
--- a/dlls/comctl32/edit.c
+++ b/dlls/comctl32/edit.c
@@ -2238,7 +2238,8 @@ static void EDIT_AdjustFormatRect(EDITSTATE *es)
if ((es->style & ES_MULTILINE) && !(es->style & ES_AUTOHSCROLL))
EDIT_BuildLineDefs_ML(es, 0, get_text_length(es), 0, NULL);
- EDIT_SetCaretPos(es, es->selection_end, es->flags & EF_AFTER_WRAP);
+ if (es->flags & EF_FOCUSED)
+ EDIT_SetCaretPos(es, es->selection_end, es->flags & EF_AFTER_WRAP);
}
--
2.19.2
2
2
The variables preloader_start and preloader_end are only defined in the Linux-
specific code.
Signed-off-by: Ken Thomases <ken(a)codeweavers.com>
---
loader/preloader.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/loader/preloader.c b/loader/preloader.c
index 3b1f5ad..db6bbdc 100644
--- a/loader/preloader.c
+++ b/loader/preloader.c
@@ -1317,6 +1317,7 @@ void preload_reserve( const char *str, struct wine_preload_info *preload_info, s
/* sanity checks */
if (end <= start) start = end = NULL;
+#ifdef __linux__
else if ((char *)end > preloader_start &&
(char *)start <= preloader_end)
{
@@ -1324,6 +1325,7 @@ void preload_reserve( const char *str, struct wine_preload_info *preload_info, s
start, end, preloader_start, preloader_end );
start = end = NULL;
}
+#endif
/* check for overlap with low memory areas */
for (i = 0; preload_info[i].size; i++)
--
2.10.2
1
0
[PATCH] d3dcompiler: Add an assert checking for writemask sanity in debug_writemask().
by Matteo Bruni Dec. 4, 2018
by Matteo Bruni Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com>
---
dlls/d3dcompiler_43/utils.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/d3dcompiler_43/utils.c b/dlls/d3dcompiler_43/utils.c
index 5499b8ccdb1..b872e34d935 100644
--- a/dlls/d3dcompiler_43/utils.c
+++ b/dlls/d3dcompiler_43/utils.c
@@ -2142,6 +2142,8 @@ static const char *debug_writemask(DWORD writemask)
char string[5];
unsigned int i = 0, pos = 0;
+ assert(!(writemask & ~BWRITERSP_WRITEMASK_ALL));
+
while (writemask)
{
if (writemask & 1)
--
2.18.1
2
1
[PATCH v2 1/3] tools/make_unicode: Implement full Unicode character decomposition.
by Brendan McGrath Dec. 4, 2018
by Brendan McGrath Dec. 4, 2018
Dec. 4, 2018
From: Sergio Gómez Del Real <sdelreal(a)codeweavers.com>
Signed-off-by: Sergio Gómez Del Real <sdelreal(a)codeweavers.com>
---
Changes since v1:
- add output from make_unicode to each patch (was previously added in patch 4)
I've resubmitted this patchset so each individual patch will compile.
I also thought it might help to add the history of this patchset. It looks like it
was original submitted by Sergio back in April. A link to the wine-devel mailing list
archive is below:
https://www.winehq.org/pipermail/wine-devel/2018-April/125579.html
It then appears to have been added to wine-staging for version 3.19 - possibly at the prompting
of the following bug report:
https://bugs.winehq.org/show_bug.cgi?id=42734
I'm just wondering what's required to see this patchset promoted from wine-staging to wine-devel?
It would be great to see it in wine v4.0.
libs/port/decompose.c | 3249 +++++++++++++++++++++++++++++++++++------
libs/port/mbtowc.c | 14 +-
tools/make_unicode | 333 ++++-
3 files changed, 3060 insertions(+), 536 deletions(-)
diff --git a/libs/port/decompose.c b/libs/port/decompose.c
index 5e6b2214ec80..311b706901e7 100644
--- a/libs/port/decompose.c
+++ b/libs/port/decompose.c
@@ -1,761 +1,3074 @@
-/* Unicode char composition */
+/* Unicode char decomposition */
/* generated from http://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "wine/unicode.h"
-static const WCHAR table[4704] =
+static const UINT last_decomposable = 0xffee;
+
+static const WCHAR data_decomp[8655] =
+{
+ 0x0000, 0x0020, 0x0000, 0x0020, 0x0308, 0x0000, 0x0061, 0x0000,
+ 0x0020, 0x0304, 0x0000, 0x0032, 0x0000, 0x0033, 0x0000, 0x0020,
+ 0x0301, 0x0000, 0x03bc, 0x0000, 0x0020, 0x0327, 0x0000, 0x0031,
+ 0x0000, 0x006f, 0x0000, 0x0031, 0x2044, 0x0034, 0x0000, 0x0031,
+ 0x2044, 0x0032, 0x0000, 0x0033, 0x2044, 0x0034, 0x0000, 0x0041,
+ 0x0300, 0x0000, 0x0041, 0x0301, 0x0000, 0x0041, 0x0302, 0x0000,
+ 0x0041, 0x0303, 0x0000, 0x0041, 0x0308, 0x0000, 0x0041, 0x030a,
+ 0x0000, 0x0043, 0x0327, 0x0000, 0x0045, 0x0300, 0x0000, 0x0045,
+ 0x0301, 0x0000, 0x0045, 0x0302, 0x0000, 0x0045, 0x0308, 0x0000,
+ 0x0049, 0x0300, 0x0000, 0x0049, 0x0301, 0x0000, 0x0049, 0x0302,
+ 0x0000, 0x0049, 0x0308, 0x0000, 0x004e, 0x0303, 0x0000, 0x004f,
+ 0x0300, 0x0000, 0x004f, 0x0301, 0x0000, 0x004f, 0x0302, 0x0000,
+ 0x004f, 0x0303, 0x0000, 0x004f, 0x0308, 0x0000, 0x0055, 0x0300,
+ 0x0000, 0x0055, 0x0301, 0x0000, 0x0055, 0x0302, 0x0000, 0x0055,
+ 0x0308, 0x0000, 0x0059, 0x0301, 0x0000, 0x0061, 0x0300, 0x0000,
+ 0x0061, 0x0301, 0x0000, 0x0061, 0x0302, 0x0000, 0x0061, 0x0303,
+ 0x0000, 0x0061, 0x0308, 0x0000, 0x0061, 0x030a, 0x0000, 0x0063,
+ 0x0327, 0x0000, 0x0065, 0x0300, 0x0000, 0x0065, 0x0301, 0x0000,
+ 0x0065, 0x0302, 0x0000, 0x0065, 0x0308, 0x0000, 0x0069, 0x0300,
+ 0x0000, 0x0069, 0x0301, 0x0000, 0x0069, 0x0302, 0x0000, 0x0069,
+ 0x0308, 0x0000, 0x006e, 0x0303, 0x0000, 0x006f, 0x0300, 0x0000,
+ 0x006f, 0x0301, 0x0000, 0x006f, 0x0302, 0x0000, 0x006f, 0x0303,
+ 0x0000, 0x006f, 0x0308, 0x0000, 0x0075, 0x0300, 0x0000, 0x0075,
+ 0x0301, 0x0000, 0x0075, 0x0302, 0x0000, 0x0075, 0x0308, 0x0000,
+ 0x0079, 0x0301, 0x0000, 0x0079, 0x0308, 0x0000, 0x0041, 0x0304,
+ 0x0000, 0x0061, 0x0304, 0x0000, 0x0041, 0x0306, 0x0000, 0x0061,
+ 0x0306, 0x0000, 0x0041, 0x0328, 0x0000, 0x0061, 0x0328, 0x0000,
+ 0x0043, 0x0301, 0x0000, 0x0063, 0x0301, 0x0000, 0x0043, 0x0302,
+ 0x0000, 0x0063, 0x0302, 0x0000, 0x0043, 0x0307, 0x0000, 0x0063,
+ 0x0307, 0x0000, 0x0043, 0x030c, 0x0000, 0x0063, 0x030c, 0x0000,
+ 0x0044, 0x030c, 0x0000, 0x0064, 0x030c, 0x0000, 0x0045, 0x0304,
+ 0x0000, 0x0065, 0x0304, 0x0000, 0x0045, 0x0306, 0x0000, 0x0065,
+ 0x0306, 0x0000, 0x0045, 0x0307, 0x0000, 0x0065, 0x0307, 0x0000,
+ 0x0045, 0x0328, 0x0000, 0x0065, 0x0328, 0x0000, 0x0045, 0x030c,
+ 0x0000, 0x0065, 0x030c, 0x0000, 0x0047, 0x0302, 0x0000, 0x0067,
+ 0x0302, 0x0000, 0x0047, 0x0306, 0x0000, 0x0067, 0x0306, 0x0000,
+ 0x0047, 0x0307, 0x0000, 0x0067, 0x0307, 0x0000, 0x0047, 0x0327,
+ 0x0000, 0x0067, 0x0327, 0x0000, 0x0048, 0x0302, 0x0000, 0x0068,
+ 0x0302, 0x0000, 0x0049, 0x0303, 0x0000, 0x0069, 0x0303, 0x0000,
+ 0x0049, 0x0304, 0x0000, 0x0069, 0x0304, 0x0000, 0x0049, 0x0306,
+ 0x0000, 0x0069, 0x0306, 0x0000, 0x0049, 0x0328, 0x0000, 0x0069,
+ 0x0328, 0x0000, 0x0049, 0x0307, 0x0000, 0x0049, 0x004a, 0x0000,
+ 0x0069, 0x006a, 0x0000, 0x004a, 0x0302, 0x0000, 0x006a, 0x0302,
+ 0x0000, 0x004b, 0x0327, 0x0000, 0x006b, 0x0327, 0x0000, 0x004c,
+ 0x0301, 0x0000, 0x006c, 0x0301, 0x0000, 0x004c, 0x0327, 0x0000,
+ 0x006c, 0x0327, 0x0000, 0x004c, 0x030c, 0x0000, 0x006c, 0x030c,
+ 0x0000, 0x004c, 0x00b7, 0x0000, 0x006c, 0x00b7, 0x0000, 0x004e,
+ 0x0301, 0x0000, 0x006e, 0x0301, 0x0000, 0x004e, 0x0327, 0x0000,
+ 0x006e, 0x0327, 0x0000, 0x004e, 0x030c, 0x0000, 0x006e, 0x030c,
+ 0x0000, 0x02bc, 0x006e, 0x0000, 0x004f, 0x0304, 0x0000, 0x006f,
+ 0x0304, 0x0000, 0x004f, 0x0306, 0x0000, 0x006f, 0x0306, 0x0000,
+ 0x004f, 0x030b, 0x0000, 0x006f, 0x030b, 0x0000, 0x0052, 0x0301,
+ 0x0000, 0x0072, 0x0301, 0x0000, 0x0052, 0x0327, 0x0000, 0x0072,
+ 0x0327, 0x0000, 0x0052, 0x030c, 0x0000, 0x0072, 0x030c, 0x0000,
+ 0x0053, 0x0301, 0x0000, 0x0073, 0x0301, 0x0000, 0x0053, 0x0302,
+ 0x0000, 0x0073, 0x0302, 0x0000, 0x0053, 0x0327, 0x0000, 0x0073,
+ 0x0327, 0x0000, 0x0053, 0x030c, 0x0000, 0x0073, 0x030c, 0x0000,
+ 0x0054, 0x0327, 0x0000, 0x0074, 0x0327, 0x0000, 0x0054, 0x030c,
+ 0x0000, 0x0074, 0x030c, 0x0000, 0x0055, 0x0303, 0x0000, 0x0075,
+ 0x0303, 0x0000, 0x0055, 0x0304, 0x0000, 0x0075, 0x0304, 0x0000,
+ 0x0055, 0x0306, 0x0000, 0x0075, 0x0306, 0x0000, 0x0055, 0x030a,
+ 0x0000, 0x0075, 0x030a, 0x0000, 0x0055, 0x030b, 0x0000, 0x0075,
+ 0x030b, 0x0000, 0x0055, 0x0328, 0x0000, 0x0075, 0x0328, 0x0000,
+ 0x0057, 0x0302, 0x0000, 0x0077, 0x0302, 0x0000, 0x0059, 0x0302,
+ 0x0000, 0x0079, 0x0302, 0x0000, 0x0059, 0x0308, 0x0000, 0x005a,
+ 0x0301, 0x0000, 0x007a, 0x0301, 0x0000, 0x005a, 0x0307, 0x0000,
+ 0x007a, 0x0307, 0x0000, 0x005a, 0x030c, 0x0000, 0x007a, 0x030c,
+ 0x0000, 0x0073, 0x0000, 0x004f, 0x031b, 0x0000, 0x006f, 0x031b,
+ 0x0000, 0x0055, 0x031b, 0x0000, 0x0075, 0x031b, 0x0000, 0x0044,
+ 0x017d, 0x0000, 0x0044, 0x017e, 0x0000, 0x0064, 0x017e, 0x0000,
+ 0x004c, 0x004a, 0x0000, 0x004c, 0x006a, 0x0000, 0x006c, 0x006a,
+ 0x0000, 0x004e, 0x004a, 0x0000, 0x004e, 0x006a, 0x0000, 0x006e,
+ 0x006a, 0x0000, 0x0041, 0x030c, 0x0000, 0x0061, 0x030c, 0x0000,
+ 0x0049, 0x030c, 0x0000, 0x0069, 0x030c, 0x0000, 0x004f, 0x030c,
+ 0x0000, 0x006f, 0x030c, 0x0000, 0x0055, 0x030c, 0x0000, 0x0075,
+ 0x030c, 0x0000, 0x00dc, 0x0304, 0x0000, 0x00fc, 0x0304, 0x0000,
+ 0x00dc, 0x0301, 0x0000, 0x00fc, 0x0301, 0x0000, 0x00dc, 0x030c,
+ 0x0000, 0x00fc, 0x030c, 0x0000, 0x00dc, 0x0300, 0x0000, 0x00fc,
+ 0x0300, 0x0000, 0x00c4, 0x0304, 0x0000, 0x00e4, 0x0304, 0x0000,
+ 0x0226, 0x0304, 0x0000, 0x0227, 0x0304, 0x0000, 0x00c6, 0x0304,
+ 0x0000, 0x00e6, 0x0304, 0x0000, 0x0047, 0x030c, 0x0000, 0x0067,
+ 0x030c, 0x0000, 0x004b, 0x030c, 0x0000, 0x006b, 0x030c, 0x0000,
+ 0x004f, 0x0328, 0x0000, 0x006f, 0x0328, 0x0000, 0x01ea, 0x0304,
+ 0x0000, 0x01eb, 0x0304, 0x0000, 0x01b7, 0x030c, 0x0000, 0x0292,
+ 0x030c, 0x0000, 0x006a, 0x030c, 0x0000, 0x0044, 0x005a, 0x0000,
+ 0x0044, 0x007a, 0x0000, 0x0064, 0x007a, 0x0000, 0x0047, 0x0301,
+ 0x0000, 0x0067, 0x0301, 0x0000, 0x004e, 0x0300, 0x0000, 0x006e,
+ 0x0300, 0x0000, 0x00c5, 0x0301, 0x0000, 0x00e5, 0x0301, 0x0000,
+ 0x00c6, 0x0301, 0x0000, 0x00e6, 0x0301, 0x0000, 0x00d8, 0x0301,
+ 0x0000, 0x00f8, 0x0301, 0x0000, 0x0041, 0x030f, 0x0000, 0x0061,
+ 0x030f, 0x0000, 0x0041, 0x0311, 0x0000, 0x0061, 0x0311, 0x0000,
+ 0x0045, 0x030f, 0x0000, 0x0065, 0x030f, 0x0000, 0x0045, 0x0311,
+ 0x0000, 0x0065, 0x0311, 0x0000, 0x0049, 0x030f, 0x0000, 0x0069,
+ 0x030f, 0x0000, 0x0049, 0x0311, 0x0000, 0x0069, 0x0311, 0x0000,
+ 0x004f, 0x030f, 0x0000, 0x006f, 0x030f, 0x0000, 0x004f, 0x0311,
+ 0x0000, 0x006f, 0x0311, 0x0000, 0x0052, 0x030f, 0x0000, 0x0072,
+ 0x030f, 0x0000, 0x0052, 0x0311, 0x0000, 0x0072, 0x0311, 0x0000,
+ 0x0055, 0x030f, 0x0000, 0x0075, 0x030f, 0x0000, 0x0055, 0x0311,
+ 0x0000, 0x0075, 0x0311, 0x0000, 0x0053, 0x0326, 0x0000, 0x0073,
+ 0x0326, 0x0000, 0x0054, 0x0326, 0x0000, 0x0074, 0x0326, 0x0000,
+ 0x0048, 0x030c, 0x0000, 0x0068, 0x030c, 0x0000, 0x0041, 0x0307,
+ 0x0000, 0x0061, 0x0307, 0x0000, 0x0045, 0x0327, 0x0000, 0x0065,
+ 0x0327, 0x0000, 0x00d6, 0x0304, 0x0000, 0x00f6, 0x0304, 0x0000,
+ 0x00d5, 0x0304, 0x0000, 0x00f5, 0x0304, 0x0000, 0x004f, 0x0307,
+ 0x0000, 0x006f, 0x0307, 0x0000, 0x022e, 0x0304, 0x0000, 0x022f,
+ 0x0304, 0x0000, 0x0059, 0x0304, 0x0000, 0x0079, 0x0304, 0x0000,
+ 0x0068, 0x0000, 0x0266, 0x0000, 0x006a, 0x0000, 0x0072, 0x0000,
+ 0x0279, 0x0000, 0x027b, 0x0000, 0x0281, 0x0000, 0x0077, 0x0000,
+ 0x0079, 0x0000, 0x0020, 0x0306, 0x0000, 0x0020, 0x0307, 0x0000,
+ 0x0020, 0x030a, 0x0000, 0x0020, 0x0328, 0x0000, 0x0020, 0x0303,
+ 0x0000, 0x0020, 0x030b, 0x0000, 0x0263, 0x0000, 0x006c, 0x0000,
+ 0x0078, 0x0000, 0x0295, 0x0000, 0x0300, 0x0000, 0x0301, 0x0000,
+ 0x0313, 0x0000, 0x0308, 0x0301, 0x0000, 0x02b9, 0x0000, 0x0020,
+ 0x0345, 0x0000, 0x003b, 0x0000, 0x00a8, 0x0301, 0x0000, 0x0391,
+ 0x0301, 0x0000, 0x00b7, 0x0000, 0x0395, 0x0301, 0x0000, 0x0397,
+ 0x0301, 0x0000, 0x0399, 0x0301, 0x0000, 0x039f, 0x0301, 0x0000,
+ 0x03a5, 0x0301, 0x0000, 0x03a9, 0x0301, 0x0000, 0x03ca, 0x0301,
+ 0x0000, 0x0399, 0x0308, 0x0000, 0x03a5, 0x0308, 0x0000, 0x03b1,
+ 0x0301, 0x0000, 0x03b5, 0x0301, 0x0000, 0x03b7, 0x0301, 0x0000,
+ 0x03b9, 0x0301, 0x0000, 0x03cb, 0x0301, 0x0000, 0x03b9, 0x0308,
+ 0x0000, 0x03c5, 0x0308, 0x0000, 0x03bf, 0x0301, 0x0000, 0x03c5,
+ 0x0301, 0x0000, 0x03c9, 0x0301, 0x0000, 0x03b2, 0x0000, 0x03b8,
+ 0x0000, 0x03a5, 0x0000, 0x03d2, 0x0301, 0x0000, 0x03d2, 0x0308,
+ 0x0000, 0x03c6, 0x0000, 0x03c0, 0x0000, 0x03ba, 0x0000, 0x03c1,
+ 0x0000, 0x03c2, 0x0000, 0x0398, 0x0000, 0x03b5, 0x0000, 0x03a3,
+ 0x0000, 0x0415, 0x0300, 0x0000, 0x0415, 0x0308, 0x0000, 0x0413,
+ 0x0301, 0x0000, 0x0406, 0x0308, 0x0000, 0x041a, 0x0301, 0x0000,
+ 0x0418, 0x0300, 0x0000, 0x0423, 0x0306, 0x0000, 0x0418, 0x0306,
+ 0x0000, 0x0438, 0x0306, 0x0000, 0x0435, 0x0300, 0x0000, 0x0435,
+ 0x0308, 0x0000, 0x0433, 0x0301, 0x0000, 0x0456, 0x0308, 0x0000,
+ 0x043a, 0x0301, 0x0000, 0x0438, 0x0300, 0x0000, 0x0443, 0x0306,
+ 0x0000, 0x0474, 0x030f, 0x0000, 0x0475, 0x030f, 0x0000, 0x0416,
+ 0x0306, 0x0000, 0x0436, 0x0306, 0x0000, 0x0410, 0x0306, 0x0000,
+ 0x0430, 0x0306, 0x0000, 0x0410, 0x0308, 0x0000, 0x0430, 0x0308,
+ 0x0000, 0x0415, 0x0306, 0x0000, 0x0435, 0x0306, 0x0000, 0x04d8,
+ 0x0308, 0x0000, 0x04d9, 0x0308, 0x0000, 0x0416, 0x0308, 0x0000,
+ 0x0436, 0x0308, 0x0000, 0x0417, 0x0308, 0x0000, 0x0437, 0x0308,
+ 0x0000, 0x0418, 0x0304, 0x0000, 0x0438, 0x0304, 0x0000, 0x0418,
+ 0x0308, 0x0000, 0x0438, 0x0308, 0x0000, 0x041e, 0x0308, 0x0000,
+ 0x043e, 0x0308, 0x0000, 0x04e8, 0x0308, 0x0000, 0x04e9, 0x0308,
+ 0x0000, 0x042d, 0x0308, 0x0000, 0x044d, 0x0308, 0x0000, 0x0423,
+ 0x0304, 0x0000, 0x0443, 0x0304, 0x0000, 0x0423, 0x0308, 0x0000,
+ 0x0443, 0x0308, 0x0000, 0x0423, 0x030b, 0x0000, 0x0443, 0x030b,
+ 0x0000, 0x0427, 0x0308, 0x0000, 0x0447, 0x0308, 0x0000, 0x042b,
+ 0x0308, 0x0000, 0x044b, 0x0308, 0x0000, 0x0565, 0x0582, 0x0000,
+ 0x0627, 0x0653, 0x0000, 0x0627, 0x0654, 0x0000, 0x0648, 0x0654,
+ 0x0000, 0x0627, 0x0655, 0x0000, 0x064a, 0x0654, 0x0000, 0x0627,
+ 0x0674, 0x0000, 0x0648, 0x0674, 0x0000, 0x06c7, 0x0674, 0x0000,
+ 0x064a, 0x0674, 0x0000, 0x06d5, 0x0654, 0x0000, 0x06c1, 0x0654,
+ 0x0000, 0x06d2, 0x0654, 0x0000, 0x0928, 0x093c, 0x0000, 0x0930,
+ 0x093c, 0x0000, 0x0933, 0x093c, 0x0000, 0x0915, 0x093c, 0x0000,
+ 0x0916, 0x093c, 0x0000, 0x0917, 0x093c, 0x0000, 0x091c, 0x093c,
+ 0x0000, 0x0921, 0x093c, 0x0000, 0x0922, 0x093c, 0x0000, 0x092b,
+ 0x093c, 0x0000, 0x092f, 0x093c, 0x0000, 0x09c7, 0x09be, 0x0000,
+ 0x09c7, 0x09d7, 0x0000, 0x09a1, 0x09bc, 0x0000, 0x09a2, 0x09bc,
+ 0x0000, 0x09af, 0x09bc, 0x0000, 0x0a32, 0x0a3c, 0x0000, 0x0a38,
+ 0x0a3c, 0x0000, 0x0a16, 0x0a3c, 0x0000, 0x0a17, 0x0a3c, 0x0000,
+ 0x0a1c, 0x0a3c, 0x0000, 0x0a2b, 0x0a3c, 0x0000, 0x0b47, 0x0b56,
+ 0x0000, 0x0b47, 0x0b3e, 0x0000, 0x0b47, 0x0b57, 0x0000, 0x0b21,
+ 0x0b3c, 0x0000, 0x0b22, 0x0b3c, 0x0000, 0x0b92, 0x0bd7, 0x0000,
+ 0x0bc6, 0x0bbe, 0x0000, 0x0bc7, 0x0bbe, 0x0000, 0x0bc6, 0x0bd7,
+ 0x0000, 0x0c46, 0x0c56, 0x0000, 0x0cbf, 0x0cd5, 0x0000, 0x0cc6,
+ 0x0cd5, 0x0000, 0x0cc6, 0x0cd6, 0x0000, 0x0cc6, 0x0cc2, 0x0000,
+ 0x0cca, 0x0cd5, 0x0000, 0x0d46, 0x0d3e, 0x0000, 0x0d47, 0x0d3e,
+ 0x0000, 0x0d46, 0x0d57, 0x0000, 0x0dd9, 0x0dca, 0x0000, 0x0dd9,
+ 0x0dcf, 0x0000, 0x0ddc, 0x0dca, 0x0000, 0x0dd9, 0x0ddf, 0x0000,
+ 0x0e4d, 0x0e32, 0x0000, 0x0ecd, 0x0eb2, 0x0000, 0x0eab, 0x0e99,
+ 0x0000, 0x0eab, 0x0ea1, 0x0000, 0x0f0b, 0x0000, 0x0f42, 0x0fb7,
+ 0x0000, 0x0f4c, 0x0fb7, 0x0000, 0x0f51, 0x0fb7, 0x0000, 0x0f56,
+ 0x0fb7, 0x0000, 0x0f5b, 0x0fb7, 0x0000, 0x0f40, 0x0fb5, 0x0000,
+ 0x0f71, 0x0f72, 0x0000, 0x0f71, 0x0f74, 0x0000, 0x0fb2, 0x0f80,
+ 0x0000, 0x0fb2, 0x0f81, 0x0000, 0x0fb3, 0x0f80, 0x0000, 0x0fb3,
+ 0x0f81, 0x0000, 0x0f71, 0x0f80, 0x0000, 0x0f92, 0x0fb7, 0x0000,
+ 0x0f9c, 0x0fb7, 0x0000, 0x0fa1, 0x0fb7, 0x0000, 0x0fa6, 0x0fb7,
+ 0x0000, 0x0fab, 0x0fb7, 0x0000, 0x0f90, 0x0fb5, 0x0000, 0x1025,
+ 0x102e, 0x0000, 0x10dc, 0x0000, 0x1b05, 0x1b35, 0x0000, 0x1b07,
+ 0x1b35, 0x0000, 0x1b09, 0x1b35, 0x0000, 0x1b0b, 0x1b35, 0x0000,
+ 0x1b0d, 0x1b35, 0x0000, 0x1b11, 0x1b35, 0x0000, 0x1b3a, 0x1b35,
+ 0x0000, 0x1b3c, 0x1b35, 0x0000, 0x1b3e, 0x1b35, 0x0000, 0x1b3f,
+ 0x1b35, 0x0000, 0x1b42, 0x1b35, 0x0000, 0x0041, 0x0000, 0x00c6,
+ 0x0000, 0x0042, 0x0000, 0x0044, 0x0000, 0x0045, 0x0000, 0x018e,
+ 0x0000, 0x0047, 0x0000, 0x0048, 0x0000, 0x0049, 0x0000, 0x004a,
+ 0x0000, 0x004b, 0x0000, 0x004c, 0x0000, 0x004d, 0x0000, 0x004e,
+ 0x0000, 0x004f, 0x0000, 0x0222, 0x0000, 0x0050, 0x0000, 0x0052,
+ 0x0000, 0x0054, 0x0000, 0x0055, 0x0000, 0x0057, 0x0000, 0x0250,
+ 0x0000, 0x0251, 0x0000, 0x1d02, 0x0000, 0x0062, 0x0000, 0x0064,
+ 0x0000, 0x0065, 0x0000, 0x0259, 0x0000, 0x025b, 0x0000, 0x025c,
+ 0x0000, 0x0067, 0x0000, 0x006b, 0x0000, 0x006d, 0x0000, 0x014b,
+ 0x0000, 0x0254, 0x0000, 0x1d16, 0x0000, 0x1d17, 0x0000, 0x0070,
+ 0x0000, 0x0074, 0x0000, 0x0075, 0x0000, 0x1d1d, 0x0000, 0x026f,
+ 0x0000, 0x0076, 0x0000, 0x1d25, 0x0000, 0x03b3, 0x0000, 0x03b4,
+ 0x0000, 0x03c7, 0x0000, 0x0069, 0x0000, 0x043d, 0x0000, 0x0252,
+ 0x0000, 0x0063, 0x0000, 0x0255, 0x0000, 0x00f0, 0x0000, 0x0066,
+ 0x0000, 0x025f, 0x0000, 0x0261, 0x0000, 0x0265, 0x0000, 0x0268,
+ 0x0000, 0x0269, 0x0000, 0x026a, 0x0000, 0x1d7b, 0x0000, 0x029d,
+ 0x0000, 0x026d, 0x0000, 0x1d85, 0x0000, 0x029f, 0x0000, 0x0271,
+ 0x0000, 0x0270, 0x0000, 0x0272, 0x0000, 0x0273, 0x0000, 0x0274,
+ 0x0000, 0x0275, 0x0000, 0x0278, 0x0000, 0x0282, 0x0000, 0x0283,
+ 0x0000, 0x01ab, 0x0000, 0x0289, 0x0000, 0x028a, 0x0000, 0x1d1c,
+ 0x0000, 0x028b, 0x0000, 0x028c, 0x0000, 0x007a, 0x0000, 0x0290,
+ 0x0000, 0x0291, 0x0000, 0x0292, 0x0000, 0x0041, 0x0325, 0x0000,
+ 0x0061, 0x0325, 0x0000, 0x0042, 0x0307, 0x0000, 0x0062, 0x0307,
+ 0x0000, 0x0042, 0x0323, 0x0000, 0x0062, 0x0323, 0x0000, 0x0042,
+ 0x0331, 0x0000, 0x0062, 0x0331, 0x0000, 0x00c7, 0x0301, 0x0000,
+ 0x00e7, 0x0301, 0x0000, 0x0044, 0x0307, 0x0000, 0x0064, 0x0307,
+ 0x0000, 0x0044, 0x0323, 0x0000, 0x0064, 0x0323, 0x0000, 0x0044,
+ 0x0331, 0x0000, 0x0064, 0x0331, 0x0000, 0x0044, 0x0327, 0x0000,
+ 0x0064, 0x0327, 0x0000, 0x0044, 0x032d, 0x0000, 0x0064, 0x032d,
+ 0x0000, 0x0112, 0x0300, 0x0000, 0x0113, 0x0300, 0x0000, 0x0112,
+ 0x0301, 0x0000, 0x0113, 0x0301, 0x0000, 0x0045, 0x032d, 0x0000,
+ 0x0065, 0x032d, 0x0000, 0x0045, 0x0330, 0x0000, 0x0065, 0x0330,
+ 0x0000, 0x0228, 0x0306, 0x0000, 0x0229, 0x0306, 0x0000, 0x0046,
+ 0x0307, 0x0000, 0x0066, 0x0307, 0x0000, 0x0047, 0x0304, 0x0000,
+ 0x0067, 0x0304, 0x0000, 0x0048, 0x0307, 0x0000, 0x0068, 0x0307,
+ 0x0000, 0x0048, 0x0323, 0x0000, 0x0068, 0x0323, 0x0000, 0x0048,
+ 0x0308, 0x0000, 0x0068, 0x0308, 0x0000, 0x0048, 0x0327, 0x0000,
+ 0x0068, 0x0327, 0x0000, 0x0048, 0x032e, 0x0000, 0x0068, 0x032e,
+ 0x0000, 0x0049, 0x0330, 0x0000, 0x0069, 0x0330, 0x0000, 0x00cf,
+ 0x0301, 0x0000, 0x00ef, 0x0301, 0x0000, 0x004b, 0x0301, 0x0000,
+ 0x006b, 0x0301, 0x0000, 0x004b, 0x0323, 0x0000, 0x006b, 0x0323,
+ 0x0000, 0x004b, 0x0331, 0x0000, 0x006b, 0x0331, 0x0000, 0x004c,
+ 0x0323, 0x0000, 0x006c, 0x0323, 0x0000, 0x1e36, 0x0304, 0x0000,
+ 0x1e37, 0x0304, 0x0000, 0x004c, 0x0331, 0x0000, 0x006c, 0x0331,
+ 0x0000, 0x004c, 0x032d, 0x0000, 0x006c, 0x032d, 0x0000, 0x004d,
+ 0x0301, 0x0000, 0x006d, 0x0301, 0x0000, 0x004d, 0x0307, 0x0000,
+ 0x006d, 0x0307, 0x0000, 0x004d, 0x0323, 0x0000, 0x006d, 0x0323,
+ 0x0000, 0x004e, 0x0307, 0x0000, 0x006e, 0x0307, 0x0000, 0x004e,
+ 0x0323, 0x0000, 0x006e, 0x0323, 0x0000, 0x004e, 0x0331, 0x0000,
+ 0x006e, 0x0331, 0x0000, 0x004e, 0x032d, 0x0000, 0x006e, 0x032d,
+ 0x0000, 0x00d5, 0x0301, 0x0000, 0x00f5, 0x0301, 0x0000, 0x00d5,
+ 0x0308, 0x0000, 0x00f5, 0x0308, 0x0000, 0x014c, 0x0300, 0x0000,
+ 0x014d, 0x0300, 0x0000, 0x014c, 0x0301, 0x0000, 0x014d, 0x0301,
+ 0x0000, 0x0050, 0x0301, 0x0000, 0x0070, 0x0301, 0x0000, 0x0050,
+ 0x0307, 0x0000, 0x0070, 0x0307, 0x0000, 0x0052, 0x0307, 0x0000,
+ 0x0072, 0x0307, 0x0000, 0x0052, 0x0323, 0x0000, 0x0072, 0x0323,
+ 0x0000, 0x1e5a, 0x0304, 0x0000, 0x1e5b, 0x0304, 0x0000, 0x0052,
+ 0x0331, 0x0000, 0x0072, 0x0331, 0x0000, 0x0053, 0x0307, 0x0000,
+ 0x0073, 0x0307, 0x0000, 0x0053, 0x0323, 0x0000, 0x0073, 0x0323,
+ 0x0000, 0x015a, 0x0307, 0x0000, 0x015b, 0x0307, 0x0000, 0x0160,
+ 0x0307, 0x0000, 0x0161, 0x0307, 0x0000, 0x1e62, 0x0307, 0x0000,
+ 0x1e63, 0x0307, 0x0000, 0x0054, 0x0307, 0x0000, 0x0074, 0x0307,
+ 0x0000, 0x0054, 0x0323, 0x0000, 0x0074, 0x0323, 0x0000, 0x0054,
+ 0x0331, 0x0000, 0x0074, 0x0331, 0x0000, 0x0054, 0x032d, 0x0000,
+ 0x0074, 0x032d, 0x0000, 0x0055, 0x0324, 0x0000, 0x0075, 0x0324,
+ 0x0000, 0x0055, 0x0330, 0x0000, 0x0075, 0x0330, 0x0000, 0x0055,
+ 0x032d, 0x0000, 0x0075, 0x032d, 0x0000, 0x0168, 0x0301, 0x0000,
+ 0x0169, 0x0301, 0x0000, 0x016a, 0x0308, 0x0000, 0x016b, 0x0308,
+ 0x0000, 0x0056, 0x0303, 0x0000, 0x0076, 0x0303, 0x0000, 0x0056,
+ 0x0323, 0x0000, 0x0076, 0x0323, 0x0000, 0x0057, 0x0300, 0x0000,
+ 0x0077, 0x0300, 0x0000, 0x0057, 0x0301, 0x0000, 0x0077, 0x0301,
+ 0x0000, 0x0057, 0x0308, 0x0000, 0x0077, 0x0308, 0x0000, 0x0057,
+ 0x0307, 0x0000, 0x0077, 0x0307, 0x0000, 0x0057, 0x0323, 0x0000,
+ 0x0077, 0x0323, 0x0000, 0x0058, 0x0307, 0x0000, 0x0078, 0x0307,
+ 0x0000, 0x0058, 0x0308, 0x0000, 0x0078, 0x0308, 0x0000, 0x0059,
+ 0x0307, 0x0000, 0x0079, 0x0307, 0x0000, 0x005a, 0x0302, 0x0000,
+ 0x007a, 0x0302, 0x0000, 0x005a, 0x0323, 0x0000, 0x007a, 0x0323,
+ 0x0000, 0x005a, 0x0331, 0x0000, 0x007a, 0x0331, 0x0000, 0x0068,
+ 0x0331, 0x0000, 0x0074, 0x0308, 0x0000, 0x0077, 0x030a, 0x0000,
+ 0x0079, 0x030a, 0x0000, 0x0061, 0x02be, 0x0000, 0x017f, 0x0307,
+ 0x0000, 0x0041, 0x0323, 0x0000, 0x0061, 0x0323, 0x0000, 0x0041,
+ 0x0309, 0x0000, 0x0061, 0x0309, 0x0000, 0x00c2, 0x0301, 0x0000,
+ 0x00e2, 0x0301, 0x0000, 0x00c2, 0x0300, 0x0000, 0x00e2, 0x0300,
+ 0x0000, 0x00c2, 0x0309, 0x0000, 0x00e2, 0x0309, 0x0000, 0x00c2,
+ 0x0303, 0x0000, 0x00e2, 0x0303, 0x0000, 0x1ea0, 0x0302, 0x0000,
+ 0x1ea1, 0x0302, 0x0000, 0x0102, 0x0301, 0x0000, 0x0103, 0x0301,
+ 0x0000, 0x0102, 0x0300, 0x0000, 0x0103, 0x0300, 0x0000, 0x0102,
+ 0x0309, 0x0000, 0x0103, 0x0309, 0x0000, 0x0102, 0x0303, 0x0000,
+ 0x0103, 0x0303, 0x0000, 0x1ea0, 0x0306, 0x0000, 0x1ea1, 0x0306,
+ 0x0000, 0x0045, 0x0323, 0x0000, 0x0065, 0x0323, 0x0000, 0x0045,
+ 0x0309, 0x0000, 0x0065, 0x0309, 0x0000, 0x0045, 0x0303, 0x0000,
+ 0x0065, 0x0303, 0x0000, 0x00ca, 0x0301, 0x0000, 0x00ea, 0x0301,
+ 0x0000, 0x00ca, 0x0300, 0x0000, 0x00ea, 0x0300, 0x0000, 0x00ca,
+ 0x0309, 0x0000, 0x00ea, 0x0309, 0x0000, 0x00ca, 0x0303, 0x0000,
+ 0x00ea, 0x0303, 0x0000, 0x1eb8, 0x0302, 0x0000, 0x1eb9, 0x0302,
+ 0x0000, 0x0049, 0x0309, 0x0000, 0x0069, 0x0309, 0x0000, 0x0049,
+ 0x0323, 0x0000, 0x0069, 0x0323, 0x0000, 0x004f, 0x0323, 0x0000,
+ 0x006f, 0x0323, 0x0000, 0x004f, 0x0309, 0x0000, 0x006f, 0x0309,
+ 0x0000, 0x00d4, 0x0301, 0x0000, 0x00f4, 0x0301, 0x0000, 0x00d4,
+ 0x0300, 0x0000, 0x00f4, 0x0300, 0x0000, 0x00d4, 0x0309, 0x0000,
+ 0x00f4, 0x0309, 0x0000, 0x00d4, 0x0303, 0x0000, 0x00f4, 0x0303,
+ 0x0000, 0x1ecc, 0x0302, 0x0000, 0x1ecd, 0x0302, 0x0000, 0x01a0,
+ 0x0301, 0x0000, 0x01a1, 0x0301, 0x0000, 0x01a0, 0x0300, 0x0000,
+ 0x01a1, 0x0300, 0x0000, 0x01a0, 0x0309, 0x0000, 0x01a1, 0x0309,
+ 0x0000, 0x01a0, 0x0303, 0x0000, 0x01a1, 0x0303, 0x0000, 0x01a0,
+ 0x0323, 0x0000, 0x01a1, 0x0323, 0x0000, 0x0055, 0x0323, 0x0000,
+ 0x0075, 0x0323, 0x0000, 0x0055, 0x0309, 0x0000, 0x0075, 0x0309,
+ 0x0000, 0x01af, 0x0301, 0x0000, 0x01b0, 0x0301, 0x0000, 0x01af,
+ 0x0300, 0x0000, 0x01b0, 0x0300, 0x0000, 0x01af, 0x0309, 0x0000,
+ 0x01b0, 0x0309, 0x0000, 0x01af, 0x0303, 0x0000, 0x01b0, 0x0303,
+ 0x0000, 0x01af, 0x0323, 0x0000, 0x01b0, 0x0323, 0x0000, 0x0059,
+ 0x0300, 0x0000, 0x0079, 0x0300, 0x0000, 0x0059, 0x0323, 0x0000,
+ 0x0079, 0x0323, 0x0000, 0x0059, 0x0309, 0x0000, 0x0079, 0x0309,
+ 0x0000, 0x0059, 0x0303, 0x0000, 0x0079, 0x0303, 0x0000, 0x03b1,
+ 0x0313, 0x0000, 0x03b1, 0x0314, 0x0000, 0x1f00, 0x0300, 0x0000,
+ 0x1f01, 0x0300, 0x0000, 0x1f00, 0x0301, 0x0000, 0x1f01, 0x0301,
+ 0x0000, 0x1f00, 0x0342, 0x0000, 0x1f01, 0x0342, 0x0000, 0x0391,
+ 0x0313, 0x0000, 0x0391, 0x0314, 0x0000, 0x1f08, 0x0300, 0x0000,
+ 0x1f09, 0x0300, 0x0000, 0x1f08, 0x0301, 0x0000, 0x1f09, 0x0301,
+ 0x0000, 0x1f08, 0x0342, 0x0000, 0x1f09, 0x0342, 0x0000, 0x03b5,
+ 0x0313, 0x0000, 0x03b5, 0x0314, 0x0000, 0x1f10, 0x0300, 0x0000,
+ 0x1f11, 0x0300, 0x0000, 0x1f10, 0x0301, 0x0000, 0x1f11, 0x0301,
+ 0x0000, 0x0395, 0x0313, 0x0000, 0x0395, 0x0314, 0x0000, 0x1f18,
+ 0x0300, 0x0000, 0x1f19, 0x0300, 0x0000, 0x1f18, 0x0301, 0x0000,
+ 0x1f19, 0x0301, 0x0000, 0x03b7, 0x0313, 0x0000, 0x03b7, 0x0314,
+ 0x0000, 0x1f20, 0x0300, 0x0000, 0x1f21, 0x0300, 0x0000, 0x1f20,
+ 0x0301, 0x0000, 0x1f21, 0x0301, 0x0000, 0x1f20, 0x0342, 0x0000,
+ 0x1f21, 0x0342, 0x0000, 0x0397, 0x0313, 0x0000, 0x0397, 0x0314,
+ 0x0000, 0x1f28, 0x0300, 0x0000, 0x1f29, 0x0300, 0x0000, 0x1f28,
+ 0x0301, 0x0000, 0x1f29, 0x0301, 0x0000, 0x1f28, 0x0342, 0x0000,
+ 0x1f29, 0x0342, 0x0000, 0x03b9, 0x0313, 0x0000, 0x03b9, 0x0314,
+ 0x0000, 0x1f30, 0x0300, 0x0000, 0x1f31, 0x0300, 0x0000, 0x1f30,
+ 0x0301, 0x0000, 0x1f31, 0x0301, 0x0000, 0x1f30, 0x0342, 0x0000,
+ 0x1f31, 0x0342, 0x0000, 0x0399, 0x0313, 0x0000, 0x0399, 0x0314,
+ 0x0000, 0x1f38, 0x0300, 0x0000, 0x1f39, 0x0300, 0x0000, 0x1f38,
+ 0x0301, 0x0000, 0x1f39, 0x0301, 0x0000, 0x1f38, 0x0342, 0x0000,
+ 0x1f39, 0x0342, 0x0000, 0x03bf, 0x0313, 0x0000, 0x03bf, 0x0314,
+ 0x0000, 0x1f40, 0x0300, 0x0000, 0x1f41, 0x0300, 0x0000, 0x1f40,
+ 0x0301, 0x0000, 0x1f41, 0x0301, 0x0000, 0x039f, 0x0313, 0x0000,
+ 0x039f, 0x0314, 0x0000, 0x1f48, 0x0300, 0x0000, 0x1f49, 0x0300,
+ 0x0000, 0x1f48, 0x0301, 0x0000, 0x1f49, 0x0301, 0x0000, 0x03c5,
+ 0x0313, 0x0000, 0x03c5, 0x0314, 0x0000, 0x1f50, 0x0300, 0x0000,
+ 0x1f51, 0x0300, 0x0000, 0x1f50, 0x0301, 0x0000, 0x1f51, 0x0301,
+ 0x0000, 0x1f50, 0x0342, 0x0000, 0x1f51, 0x0342, 0x0000, 0x03a5,
+ 0x0314, 0x0000, 0x1f59, 0x0300, 0x0000, 0x1f59, 0x0301, 0x0000,
+ 0x1f59, 0x0342, 0x0000, 0x03c9, 0x0313, 0x0000, 0x03c9, 0x0314,
+ 0x0000, 0x1f60, 0x0300, 0x0000, 0x1f61, 0x0300, 0x0000, 0x1f60,
+ 0x0301, 0x0000, 0x1f61, 0x0301, 0x0000, 0x1f60, 0x0342, 0x0000,
+ 0x1f61, 0x0342, 0x0000, 0x03a9, 0x0313, 0x0000, 0x03a9, 0x0314,
+ 0x0000, 0x1f68, 0x0300, 0x0000, 0x1f69, 0x0300, 0x0000, 0x1f68,
+ 0x0301, 0x0000, 0x1f69, 0x0301, 0x0000, 0x1f68, 0x0342, 0x0000,
+ 0x1f69, 0x0342, 0x0000, 0x03b1, 0x0300, 0x0000, 0x03ac, 0x0000,
+ 0x03b5, 0x0300, 0x0000, 0x03ad, 0x0000, 0x03b7, 0x0300, 0x0000,
+ 0x03ae, 0x0000, 0x03b9, 0x0300, 0x0000, 0x03af, 0x0000, 0x03bf,
+ 0x0300, 0x0000, 0x03cc, 0x0000, 0x03c5, 0x0300, 0x0000, 0x03cd,
+ 0x0000, 0x03c9, 0x0300, 0x0000, 0x03ce, 0x0000, 0x1f00, 0x0345,
+ 0x0000, 0x1f01, 0x0345, 0x0000, 0x1f02, 0x0345, 0x0000, 0x1f03,
+ 0x0345, 0x0000, 0x1f04, 0x0345, 0x0000, 0x1f05, 0x0345, 0x0000,
+ 0x1f06, 0x0345, 0x0000, 0x1f07, 0x0345, 0x0000, 0x1f08, 0x0345,
+ 0x0000, 0x1f09, 0x0345, 0x0000, 0x1f0a, 0x0345, 0x0000, 0x1f0b,
+ 0x0345, 0x0000, 0x1f0c, 0x0345, 0x0000, 0x1f0d, 0x0345, 0x0000,
+ 0x1f0e, 0x0345, 0x0000, 0x1f0f, 0x0345, 0x0000, 0x1f20, 0x0345,
+ 0x0000, 0x1f21, 0x0345, 0x0000, 0x1f22, 0x0345, 0x0000, 0x1f23,
+ 0x0345, 0x0000, 0x1f24, 0x0345, 0x0000, 0x1f25, 0x0345, 0x0000,
+ 0x1f26, 0x0345, 0x0000, 0x1f27, 0x0345, 0x0000, 0x1f28, 0x0345,
+ 0x0000, 0x1f29, 0x0345, 0x0000, 0x1f2a, 0x0345, 0x0000, 0x1f2b,
+ 0x0345, 0x0000, 0x1f2c, 0x0345, 0x0000, 0x1f2d, 0x0345, 0x0000,
+ 0x1f2e, 0x0345, 0x0000, 0x1f2f, 0x0345, 0x0000, 0x1f60, 0x0345,
+ 0x0000, 0x1f61, 0x0345, 0x0000, 0x1f62, 0x0345, 0x0000, 0x1f63,
+ 0x0345, 0x0000, 0x1f64, 0x0345, 0x0000, 0x1f65, 0x0345, 0x0000,
+ 0x1f66, 0x0345, 0x0000, 0x1f67, 0x0345, 0x0000, 0x1f68, 0x0345,
+ 0x0000, 0x1f69, 0x0345, 0x0000, 0x1f6a, 0x0345, 0x0000, 0x1f6b,
+ 0x0345, 0x0000, 0x1f6c, 0x0345, 0x0000, 0x1f6d, 0x0345, 0x0000,
+ 0x1f6e, 0x0345, 0x0000, 0x1f6f, 0x0345, 0x0000, 0x03b1, 0x0306,
+ 0x0000, 0x03b1, 0x0304, 0x0000, 0x1f70, 0x0345, 0x0000, 0x03b1,
+ 0x0345, 0x0000, 0x03ac, 0x0345, 0x0000, 0x03b1, 0x0342, 0x0000,
+ 0x1fb6, 0x0345, 0x0000, 0x0391, 0x0306, 0x0000, 0x0391, 0x0304,
+ 0x0000, 0x0391, 0x0300, 0x0000, 0x0386, 0x0000, 0x0391, 0x0345,
+ 0x0000, 0x0020, 0x0313, 0x0000, 0x03b9, 0x0000, 0x0020, 0x0342,
+ 0x0000, 0x00a8, 0x0342, 0x0000, 0x1f74, 0x0345, 0x0000, 0x03b7,
+ 0x0345, 0x0000, 0x03ae, 0x0345, 0x0000, 0x03b7, 0x0342, 0x0000,
+ 0x1fc6, 0x0345, 0x0000, 0x0395, 0x0300, 0x0000, 0x0388, 0x0000,
+ 0x0397, 0x0300, 0x0000, 0x0389, 0x0000, 0x0397, 0x0345, 0x0000,
+ 0x1fbf, 0x0300, 0x0000, 0x1fbf, 0x0301, 0x0000, 0x1fbf, 0x0342,
+ 0x0000, 0x03b9, 0x0306, 0x0000, 0x03b9, 0x0304, 0x0000, 0x03ca,
+ 0x0300, 0x0000, 0x0390, 0x0000, 0x03b9, 0x0342, 0x0000, 0x03ca,
+ 0x0342, 0x0000, 0x0399, 0x0306, 0x0000, 0x0399, 0x0304, 0x0000,
+ 0x0399, 0x0300, 0x0000, 0x038a, 0x0000, 0x1ffe, 0x0300, 0x0000,
+ 0x1ffe, 0x0301, 0x0000, 0x1ffe, 0x0342, 0x0000, 0x03c5, 0x0306,
+ 0x0000, 0x03c5, 0x0304, 0x0000, 0x03cb, 0x0300, 0x0000, 0x03b0,
+ 0x0000, 0x03c1, 0x0313, 0x0000, 0x03c1, 0x0314, 0x0000, 0x03c5,
+ 0x0342, 0x0000, 0x03cb, 0x0342, 0x0000, 0x03a5, 0x0306, 0x0000,
+ 0x03a5, 0x0304, 0x0000, 0x03a5, 0x0300, 0x0000, 0x038e, 0x0000,
+ 0x03a1, 0x0314, 0x0000, 0x00a8, 0x0300, 0x0000, 0x0385, 0x0000,
+ 0x0060, 0x0000, 0x1f7c, 0x0345, 0x0000, 0x03c9, 0x0345, 0x0000,
+ 0x03ce, 0x0345, 0x0000, 0x03c9, 0x0342, 0x0000, 0x1ff6, 0x0345,
+ 0x0000, 0x039f, 0x0300, 0x0000, 0x038c, 0x0000, 0x03a9, 0x0300,
+ 0x0000, 0x038f, 0x0000, 0x03a9, 0x0345, 0x0000, 0x00b4, 0x0000,
+ 0x0020, 0x0314, 0x0000, 0x2002, 0x0000, 0x2003, 0x0000, 0x2010,
+ 0x0000, 0x0020, 0x0333, 0x0000, 0x002e, 0x0000, 0x002e, 0x002e,
+ 0x0000, 0x002e, 0x002e, 0x002e, 0x0000, 0x2032, 0x2032, 0x0000,
+ 0x2032, 0x2032, 0x2032, 0x0000, 0x2035, 0x2035, 0x0000, 0x2035,
+ 0x2035, 0x2035, 0x0000, 0x0021, 0x0021, 0x0000, 0x0020, 0x0305,
+ 0x0000, 0x003f, 0x003f, 0x0000, 0x003f, 0x0021, 0x0000, 0x0021,
+ 0x003f, 0x0000, 0x2032, 0x2032, 0x2032, 0x2032, 0x0000, 0x0030,
+ 0x0000, 0x0034, 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037,
+ 0x0000, 0x0038, 0x0000, 0x0039, 0x0000, 0x002b, 0x0000, 0x2212,
+ 0x0000, 0x003d, 0x0000, 0x0028, 0x0000, 0x0029, 0x0000, 0x006e,
+ 0x0000, 0x0052, 0x0073, 0x0000, 0x0061, 0x002f, 0x0063, 0x0000,
+ 0x0061, 0x002f, 0x0073, 0x0000, 0x0043, 0x0000, 0x00b0, 0x0043,
+ 0x0000, 0x0063, 0x002f, 0x006f, 0x0000, 0x0063, 0x002f, 0x0075,
+ 0x0000, 0x0190, 0x0000, 0x00b0, 0x0046, 0x0000, 0x0127, 0x0000,
+ 0x004e, 0x006f, 0x0000, 0x0051, 0x0000, 0x0053, 0x004d, 0x0000,
+ 0x0054, 0x0045, 0x004c, 0x0000, 0x0054, 0x004d, 0x0000, 0x005a,
+ 0x0000, 0x03a9, 0x0000, 0x00c5, 0x0000, 0x0046, 0x0000, 0x05d0,
+ 0x0000, 0x05d1, 0x0000, 0x05d2, 0x0000, 0x05d3, 0x0000, 0x0046,
+ 0x0041, 0x0058, 0x0000, 0x0393, 0x0000, 0x03a0, 0x0000, 0x2211,
+ 0x0000, 0x0031, 0x2044, 0x0037, 0x0000, 0x0031, 0x2044, 0x0039,
+ 0x0000, 0x0031, 0x2044, 0x0031, 0x0030, 0x0000, 0x0031, 0x2044,
+ 0x0033, 0x0000, 0x0032, 0x2044, 0x0033, 0x0000, 0x0031, 0x2044,
+ 0x0035, 0x0000, 0x0032, 0x2044, 0x0035, 0x0000, 0x0033, 0x2044,
+ 0x0035, 0x0000, 0x0034, 0x2044, 0x0035, 0x0000, 0x0031, 0x2044,
+ 0x0036, 0x0000, 0x0035, 0x2044, 0x0036, 0x0000, 0x0031, 0x2044,
+ 0x0038, 0x0000, 0x0033, 0x2044, 0x0038, 0x0000, 0x0035, 0x2044,
+ 0x0038, 0x0000, 0x0037, 0x2044, 0x0038, 0x0000, 0x0031, 0x2044,
+ 0x0000, 0x0049, 0x0049, 0x0000, 0x0049, 0x0049, 0x0049, 0x0000,
+ 0x0049, 0x0056, 0x0000, 0x0056, 0x0000, 0x0056, 0x0049, 0x0000,
+ 0x0056, 0x0049, 0x0049, 0x0000, 0x0056, 0x0049, 0x0049, 0x0049,
+ 0x0000, 0x0049, 0x0058, 0x0000, 0x0058, 0x0000, 0x0058, 0x0049,
+ 0x0000, 0x0058, 0x0049, 0x0049, 0x0000, 0x0069, 0x0069, 0x0000,
+ 0x0069, 0x0069, 0x0069, 0x0000, 0x0069, 0x0076, 0x0000, 0x0076,
+ 0x0069, 0x0000, 0x0076, 0x0069, 0x0069, 0x0000, 0x0076, 0x0069,
+ 0x0069, 0x0069, 0x0000, 0x0069, 0x0078, 0x0000, 0x0078, 0x0069,
+ 0x0000, 0x0078, 0x0069, 0x0069, 0x0000, 0x0030, 0x2044, 0x0033,
+ 0x0000, 0x2190, 0x0338, 0x0000, 0x2192, 0x0338, 0x0000, 0x2194,
+ 0x0338, 0x0000, 0x21d0, 0x0338, 0x0000, 0x21d4, 0x0338, 0x0000,
+ 0x21d2, 0x0338, 0x0000, 0x2203, 0x0338, 0x0000, 0x2208, 0x0338,
+ 0x0000, 0x220b, 0x0338, 0x0000, 0x2223, 0x0338, 0x0000, 0x2225,
+ 0x0338, 0x0000, 0x222b, 0x222b, 0x0000, 0x222b, 0x222b, 0x222b,
+ 0x0000, 0x222e, 0x222e, 0x0000, 0x222e, 0x222e, 0x222e, 0x0000,
+ 0x223c, 0x0338, 0x0000, 0x2243, 0x0338, 0x0000, 0x2245, 0x0338,
+ 0x0000, 0x2248, 0x0338, 0x0000, 0x003d, 0x0338, 0x0000, 0x2261,
+ 0x0338, 0x0000, 0x224d, 0x0338, 0x0000, 0x003c, 0x0338, 0x0000,
+ 0x003e, 0x0338, 0x0000, 0x2264, 0x0338, 0x0000, 0x2265, 0x0338,
+ 0x0000, 0x2272, 0x0338, 0x0000, 0x2273, 0x0338, 0x0000, 0x2276,
+ 0x0338, 0x0000, 0x2277, 0x0338, 0x0000, 0x227a, 0x0338, 0x0000,
+ 0x227b, 0x0338, 0x0000, 0x2282, 0x0338, 0x0000, 0x2283, 0x0338,
+ 0x0000, 0x2286, 0x0338, 0x0000, 0x2287, 0x0338, 0x0000, 0x22a2,
+ 0x0338, 0x0000, 0x22a8, 0x0338, 0x0000, 0x22a9, 0x0338, 0x0000,
+ 0x22ab, 0x0338, 0x0000, 0x227c, 0x0338, 0x0000, 0x227d, 0x0338,
+ 0x0000, 0x2291, 0x0338, 0x0000, 0x2292, 0x0338, 0x0000, 0x22b2,
+ 0x0338, 0x0000, 0x22b3, 0x0338, 0x0000, 0x22b4, 0x0338, 0x0000,
+ 0x22b5, 0x0338, 0x0000, 0x3008, 0x0000, 0x3009, 0x0000, 0x0031,
+ 0x0030, 0x0000, 0x0031, 0x0031, 0x0000, 0x0031, 0x0032, 0x0000,
+ 0x0031, 0x0033, 0x0000, 0x0031, 0x0034, 0x0000, 0x0031, 0x0035,
+ 0x0000, 0x0031, 0x0036, 0x0000, 0x0031, 0x0037, 0x0000, 0x0031,
+ 0x0038, 0x0000, 0x0031, 0x0039, 0x0000, 0x0032, 0x0030, 0x0000,
+ 0x0028, 0x0031, 0x0029, 0x0000, 0x0028, 0x0032, 0x0029, 0x0000,
+ 0x0028, 0x0033, 0x0029, 0x0000, 0x0028, 0x0034, 0x0029, 0x0000,
+ 0x0028, 0x0035, 0x0029, 0x0000, 0x0028, 0x0036, 0x0029, 0x0000,
+ 0x0028, 0x0037, 0x0029, 0x0000, 0x0028, 0x0038, 0x0029, 0x0000,
+ 0x0028, 0x0039, 0x0029, 0x0000, 0x0028, 0x0031, 0x0030, 0x0029,
+ 0x0000, 0x0028, 0x0031, 0x0031, 0x0029, 0x0000, 0x0028, 0x0031,
+ 0x0032, 0x0029, 0x0000, 0x0028, 0x0031, 0x0033, 0x0029, 0x0000,
+ 0x0028, 0x0031, 0x0034, 0x0029, 0x0000, 0x0028, 0x0031, 0x0035,
+ 0x0029, 0x0000, 0x0028, 0x0031, 0x0036, 0x0029, 0x0000, 0x0028,
+ 0x0031, 0x0037, 0x0029, 0x0000, 0x0028, 0x0031, 0x0038, 0x0029,
+ 0x0000, 0x0028, 0x0031, 0x0039, 0x0029, 0x0000, 0x0028, 0x0032,
+ 0x0030, 0x0029, 0x0000, 0x0031, 0x002e, 0x0000, 0x0032, 0x002e,
+ 0x0000, 0x0033, 0x002e, 0x0000, 0x0034, 0x002e, 0x0000, 0x0035,
+ 0x002e, 0x0000, 0x0036, 0x002e, 0x0000, 0x0037, 0x002e, 0x0000,
+ 0x0038, 0x002e, 0x0000, 0x0039, 0x002e, 0x0000, 0x0031, 0x0030,
+ 0x002e, 0x0000, 0x0031, 0x0031, 0x002e, 0x0000, 0x0031, 0x0032,
+ 0x002e, 0x0000, 0x0031, 0x0033, 0x002e, 0x0000, 0x0031, 0x0034,
+ 0x002e, 0x0000, 0x0031, 0x0035, 0x002e, 0x0000, 0x0031, 0x0036,
+ 0x002e, 0x0000, 0x0031, 0x0037, 0x002e, 0x0000, 0x0031, 0x0038,
+ 0x002e, 0x0000, 0x0031, 0x0039, 0x002e, 0x0000, 0x0032, 0x0030,
+ 0x002e, 0x0000, 0x0028, 0x0061, 0x0029, 0x0000, 0x0028, 0x0062,
+ 0x0029, 0x0000, 0x0028, 0x0063, 0x0029, 0x0000, 0x0028, 0x0064,
+ 0x0029, 0x0000, 0x0028, 0x0065, 0x0029, 0x0000, 0x0028, 0x0066,
+ 0x0029, 0x0000, 0x0028, 0x0067, 0x0029, 0x0000, 0x0028, 0x0068,
+ 0x0029, 0x0000, 0x0028, 0x0069, 0x0029, 0x0000, 0x0028, 0x006a,
+ 0x0029, 0x0000, 0x0028, 0x006b, 0x0029, 0x0000, 0x0028, 0x006c,
+ 0x0029, 0x0000, 0x0028, 0x006d, 0x0029, 0x0000, 0x0028, 0x006e,
+ 0x0029, 0x0000, 0x0028, 0x006f, 0x0029, 0x0000, 0x0028, 0x0070,
+ 0x0029, 0x0000, 0x0028, 0x0071, 0x0029, 0x0000, 0x0028, 0x0072,
+ 0x0029, 0x0000, 0x0028, 0x0073, 0x0029, 0x0000, 0x0028, 0x0074,
+ 0x0029, 0x0000, 0x0028, 0x0075, 0x0029, 0x0000, 0x0028, 0x0076,
+ 0x0029, 0x0000, 0x0028, 0x0077, 0x0029, 0x0000, 0x0028, 0x0078,
+ 0x0029, 0x0000, 0x0028, 0x0079, 0x0029, 0x0000, 0x0028, 0x007a,
+ 0x0029, 0x0000, 0x0053, 0x0000, 0x0059, 0x0000, 0x0071, 0x0000,
+ 0x222b, 0x222b, 0x222b, 0x222b, 0x0000, 0x003a, 0x003a, 0x003d,
+ 0x0000, 0x003d, 0x003d, 0x0000, 0x003d, 0x003d, 0x003d, 0x0000,
+ 0x2add, 0x0338, 0x0000, 0x2d61, 0x0000, 0x6bcd, 0x0000, 0x9f9f,
+ 0x0000, 0x4e00, 0x0000, 0x4e28, 0x0000, 0x4e36, 0x0000, 0x4e3f,
+ 0x0000, 0x4e59, 0x0000, 0x4e85, 0x0000, 0x4e8c, 0x0000, 0x4ea0,
+ 0x0000, 0x4eba, 0x0000, 0x513f, 0x0000, 0x5165, 0x0000, 0x516b,
+ 0x0000, 0x5182, 0x0000, 0x5196, 0x0000, 0x51ab, 0x0000, 0x51e0,
+ 0x0000, 0x51f5, 0x0000, 0x5200, 0x0000, 0x529b, 0x0000, 0x52f9,
+ 0x0000, 0x5315, 0x0000, 0x531a, 0x0000, 0x5338, 0x0000, 0x5341,
+ 0x0000, 0x535c, 0x0000, 0x5369, 0x0000, 0x5382, 0x0000, 0x53b6,
+ 0x0000, 0x53c8, 0x0000, 0x53e3, 0x0000, 0x56d7, 0x0000, 0x571f,
+ 0x0000, 0x58eb, 0x0000, 0x5902, 0x0000, 0x590a, 0x0000, 0x5915,
+ 0x0000, 0x5927, 0x0000, 0x5973, 0x0000, 0x5b50, 0x0000, 0x5b80,
+ 0x0000, 0x5bf8, 0x0000, 0x5c0f, 0x0000, 0x5c22, 0x0000, 0x5c38,
+ 0x0000, 0x5c6e, 0x0000, 0x5c71, 0x0000, 0x5ddb, 0x0000, 0x5de5,
+ 0x0000, 0x5df1, 0x0000, 0x5dfe, 0x0000, 0x5e72, 0x0000, 0x5e7a,
+ 0x0000, 0x5e7f, 0x0000, 0x5ef4, 0x0000, 0x5efe, 0x0000, 0x5f0b,
+ 0x0000, 0x5f13, 0x0000, 0x5f50, 0x0000, 0x5f61, 0x0000, 0x5f73,
+ 0x0000, 0x5fc3, 0x0000, 0x6208, 0x0000, 0x6236, 0x0000, 0x624b,
+ 0x0000, 0x652f, 0x0000, 0x6534, 0x0000, 0x6587, 0x0000, 0x6597,
+ 0x0000, 0x65a4, 0x0000, 0x65b9, 0x0000, 0x65e0, 0x0000, 0x65e5,
+ 0x0000, 0x66f0, 0x0000, 0x6708, 0x0000, 0x6728, 0x0000, 0x6b20,
+ 0x0000, 0x6b62, 0x0000, 0x6b79, 0x0000, 0x6bb3, 0x0000, 0x6bcb,
+ 0x0000, 0x6bd4, 0x0000, 0x6bdb, 0x0000, 0x6c0f, 0x0000, 0x6c14,
+ 0x0000, 0x6c34, 0x0000, 0x706b, 0x0000, 0x722a, 0x0000, 0x7236,
+ 0x0000, 0x723b, 0x0000, 0x723f, 0x0000, 0x7247, 0x0000, 0x7259,
+ 0x0000, 0x725b, 0x0000, 0x72ac, 0x0000, 0x7384, 0x0000, 0x7389,
+ 0x0000, 0x74dc, 0x0000, 0x74e6, 0x0000, 0x7518, 0x0000, 0x751f,
+ 0x0000, 0x7528, 0x0000, 0x7530, 0x0000, 0x758b, 0x0000, 0x7592,
+ 0x0000, 0x7676, 0x0000, 0x767d, 0x0000, 0x76ae, 0x0000, 0x76bf,
+ 0x0000, 0x76ee, 0x0000, 0x77db, 0x0000, 0x77e2, 0x0000, 0x77f3,
+ 0x0000, 0x793a, 0x0000, 0x79b8, 0x0000, 0x79be, 0x0000, 0x7a74,
+ 0x0000, 0x7acb, 0x0000, 0x7af9, 0x0000, 0x7c73, 0x0000, 0x7cf8,
+ 0x0000, 0x7f36, 0x0000, 0x7f51, 0x0000, 0x7f8a, 0x0000, 0x7fbd,
+ 0x0000, 0x8001, 0x0000, 0x800c, 0x0000, 0x8012, 0x0000, 0x8033,
+ 0x0000, 0x807f, 0x0000, 0x8089, 0x0000, 0x81e3, 0x0000, 0x81ea,
+ 0x0000, 0x81f3, 0x0000, 0x81fc, 0x0000, 0x820c, 0x0000, 0x821b,
+ 0x0000, 0x821f, 0x0000, 0x826e, 0x0000, 0x8272, 0x0000, 0x8278,
+ 0x0000, 0x864d, 0x0000, 0x866b, 0x0000, 0x8840, 0x0000, 0x884c,
+ 0x0000, 0x8863, 0x0000, 0x897e, 0x0000, 0x898b, 0x0000, 0x89d2,
+ 0x0000, 0x8a00, 0x0000, 0x8c37, 0x0000, 0x8c46, 0x0000, 0x8c55,
+ 0x0000, 0x8c78, 0x0000, 0x8c9d, 0x0000, 0x8d64, 0x0000, 0x8d70,
+ 0x0000, 0x8db3, 0x0000, 0x8eab, 0x0000, 0x8eca, 0x0000, 0x8f9b,
+ 0x0000, 0x8fb0, 0x0000, 0x8fb5, 0x0000, 0x9091, 0x0000, 0x9149,
+ 0x0000, 0x91c6, 0x0000, 0x91cc, 0x0000, 0x91d1, 0x0000, 0x9577,
+ 0x0000, 0x9580, 0x0000, 0x961c, 0x0000, 0x96b6, 0x0000, 0x96b9,
+ 0x0000, 0x96e8, 0x0000, 0x9751, 0x0000, 0x975e, 0x0000, 0x9762,
+ 0x0000, 0x9769, 0x0000, 0x97cb, 0x0000, 0x97ed, 0x0000, 0x97f3,
+ 0x0000, 0x9801, 0x0000, 0x98a8, 0x0000, 0x98db, 0x0000, 0x98df,
+ 0x0000, 0x9996, 0x0000, 0x9999, 0x0000, 0x99ac, 0x0000, 0x9aa8,
+ 0x0000, 0x9ad8, 0x0000, 0x9adf, 0x0000, 0x9b25, 0x0000, 0x9b2f,
+ 0x0000, 0x9b32, 0x0000, 0x9b3c, 0x0000, 0x9b5a, 0x0000, 0x9ce5,
+ 0x0000, 0x9e75, 0x0000, 0x9e7f, 0x0000, 0x9ea5, 0x0000, 0x9ebb,
+ 0x0000, 0x9ec3, 0x0000, 0x9ecd, 0x0000, 0x9ed1, 0x0000, 0x9ef9,
+ 0x0000, 0x9efd, 0x0000, 0x9f0e, 0x0000, 0x9f13, 0x0000, 0x9f20,
+ 0x0000, 0x9f3b, 0x0000, 0x9f4a, 0x0000, 0x9f52, 0x0000, 0x9f8d,
+ 0x0000, 0x9f9c, 0x0000, 0x9fa0, 0x0000, 0x3012, 0x0000, 0x5344,
+ 0x0000, 0x5345, 0x0000, 0x304b, 0x3099, 0x0000, 0x304d, 0x3099,
+ 0x0000, 0x304f, 0x3099, 0x0000, 0x3051, 0x3099, 0x0000, 0x3053,
+ 0x3099, 0x0000, 0x3055, 0x3099, 0x0000, 0x3057, 0x3099, 0x0000,
+ 0x3059, 0x3099, 0x0000, 0x305b, 0x3099, 0x0000, 0x305d, 0x3099,
+ 0x0000, 0x305f, 0x3099, 0x0000, 0x3061, 0x3099, 0x0000, 0x3064,
+ 0x3099, 0x0000, 0x3066, 0x3099, 0x0000, 0x3068, 0x3099, 0x0000,
+ 0x306f, 0x3099, 0x0000, 0x306f, 0x309a, 0x0000, 0x3072, 0x3099,
+ 0x0000, 0x3072, 0x309a, 0x0000, 0x3075, 0x3099, 0x0000, 0x3075,
+ 0x309a, 0x0000, 0x3078, 0x3099, 0x0000, 0x3078, 0x309a, 0x0000,
+ 0x307b, 0x3099, 0x0000, 0x307b, 0x309a, 0x0000, 0x3046, 0x3099,
+ 0x0000, 0x0020, 0x3099, 0x0000, 0x0020, 0x309a, 0x0000, 0x309d,
+ 0x3099, 0x0000, 0x3088, 0x308a, 0x0000, 0x30ab, 0x3099, 0x0000,
+ 0x30ad, 0x3099, 0x0000, 0x30af, 0x3099, 0x0000, 0x30b1, 0x3099,
+ 0x0000, 0x30b3, 0x3099, 0x0000, 0x30b5, 0x3099, 0x0000, 0x30b7,
+ 0x3099, 0x0000, 0x30b9, 0x3099, 0x0000, 0x30bb, 0x3099, 0x0000,
+ 0x30bd, 0x3099, 0x0000, 0x30bf, 0x3099, 0x0000, 0x30c1, 0x3099,
+ 0x0000, 0x30c4, 0x3099, 0x0000, 0x30c6, 0x3099, 0x0000, 0x30c8,
+ 0x3099, 0x0000, 0x30cf, 0x3099, 0x0000, 0x30cf, 0x309a, 0x0000,
+ 0x30d2, 0x3099, 0x0000, 0x30d2, 0x309a, 0x0000, 0x30d5, 0x3099,
+ 0x0000, 0x30d5, 0x309a, 0x0000, 0x30d8, 0x3099, 0x0000, 0x30d8,
+ 0x309a, 0x0000, 0x30db, 0x3099, 0x0000, 0x30db, 0x309a, 0x0000,
+ 0x30a6, 0x3099, 0x0000, 0x30ef, 0x3099, 0x0000, 0x30f0, 0x3099,
+ 0x0000, 0x30f1, 0x3099, 0x0000, 0x30f2, 0x3099, 0x0000, 0x30fd,
+ 0x3099, 0x0000, 0x30b3, 0x30c8, 0x0000, 0x1100, 0x0000, 0x1101,
+ 0x0000, 0x11aa, 0x0000, 0x1102, 0x0000, 0x11ac, 0x0000, 0x11ad,
+ 0x0000, 0x1103, 0x0000, 0x1104, 0x0000, 0x1105, 0x0000, 0x11b0,
+ 0x0000, 0x11b1, 0x0000, 0x11b2, 0x0000, 0x11b3, 0x0000, 0x11b4,
+ 0x0000, 0x11b5, 0x0000, 0x111a, 0x0000, 0x1106, 0x0000, 0x1107,
+ 0x0000, 0x1108, 0x0000, 0x1121, 0x0000, 0x1109, 0x0000, 0x110a,
+ 0x0000, 0x110b, 0x0000, 0x110c, 0x0000, 0x110d, 0x0000, 0x110e,
+ 0x0000, 0x110f, 0x0000, 0x1110, 0x0000, 0x1111, 0x0000, 0x1112,
+ 0x0000, 0x1161, 0x0000, 0x1162, 0x0000, 0x1163, 0x0000, 0x1164,
+ 0x0000, 0x1165, 0x0000, 0x1166, 0x0000, 0x1167, 0x0000, 0x1168,
+ 0x0000, 0x1169, 0x0000, 0x116a, 0x0000, 0x116b, 0x0000, 0x116c,
+ 0x0000, 0x116d, 0x0000, 0x116e, 0x0000, 0x116f, 0x0000, 0x1170,
+ 0x0000, 0x1171, 0x0000, 0x1172, 0x0000, 0x1173, 0x0000, 0x1174,
+ 0x0000, 0x1175, 0x0000, 0x1160, 0x0000, 0x1114, 0x0000, 0x1115,
+ 0x0000, 0x11c7, 0x0000, 0x11c8, 0x0000, 0x11cc, 0x0000, 0x11ce,
+ 0x0000, 0x11d3, 0x0000, 0x11d7, 0x0000, 0x11d9, 0x0000, 0x111c,
+ 0x0000, 0x11dd, 0x0000, 0x11df, 0x0000, 0x111d, 0x0000, 0x111e,
+ 0x0000, 0x1120, 0x0000, 0x1122, 0x0000, 0x1123, 0x0000, 0x1127,
+ 0x0000, 0x1129, 0x0000, 0x112b, 0x0000, 0x112c, 0x0000, 0x112d,
+ 0x0000, 0x112e, 0x0000, 0x112f, 0x0000, 0x1132, 0x0000, 0x1136,
+ 0x0000, 0x1140, 0x0000, 0x1147, 0x0000, 0x114c, 0x0000, 0x11f1,
+ 0x0000, 0x11f2, 0x0000, 0x1157, 0x0000, 0x1158, 0x0000, 0x1159,
+ 0x0000, 0x1184, 0x0000, 0x1185, 0x0000, 0x1188, 0x0000, 0x1191,
+ 0x0000, 0x1192, 0x0000, 0x1194, 0x0000, 0x119e, 0x0000, 0x11a1,
+ 0x0000, 0x4e09, 0x0000, 0x56db, 0x0000, 0x4e0a, 0x0000, 0x4e2d,
+ 0x0000, 0x4e0b, 0x0000, 0x7532, 0x0000, 0x4e19, 0x0000, 0x4e01,
+ 0x0000, 0x5929, 0x0000, 0x5730, 0x0000, 0x0028, 0x1100, 0x0029,
+ 0x0000, 0x0028, 0x1102, 0x0029, 0x0000, 0x0028, 0x1103, 0x0029,
+ 0x0000, 0x0028, 0x1105, 0x0029, 0x0000, 0x0028, 0x1106, 0x0029,
+ 0x0000, 0x0028, 0x1107, 0x0029, 0x0000, 0x0028, 0x1109, 0x0029,
+ 0x0000, 0x0028, 0x110b, 0x0029, 0x0000, 0x0028, 0x110c, 0x0029,
+ 0x0000, 0x0028, 0x110e, 0x0029, 0x0000, 0x0028, 0x110f, 0x0029,
+ 0x0000, 0x0028, 0x1110, 0x0029, 0x0000, 0x0028, 0x1111, 0x0029,
+ 0x0000, 0x0028, 0x1112, 0x0029, 0x0000, 0x0028, 0x1100, 0x1161,
+ 0x0029, 0x0000, 0x0028, 0x1102, 0x1161, 0x0029, 0x0000, 0x0028,
+ 0x1103, 0x1161, 0x0029, 0x0000, 0x0028, 0x1105, 0x1161, 0x0029,
+ 0x0000, 0x0028, 0x1106, 0x1161, 0x0029, 0x0000, 0x0028, 0x1107,
+ 0x1161, 0x0029, 0x0000, 0x0028, 0x1109, 0x1161, 0x0029, 0x0000,
+ 0x0028, 0x110b, 0x1161, 0x0029, 0x0000, 0x0028, 0x110c, 0x1161,
+ 0x0029, 0x0000, 0x0028, 0x110e, 0x1161, 0x0029, 0x0000, 0x0028,
+ 0x110f, 0x1161, 0x0029, 0x0000, 0x0028, 0x1110, 0x1161, 0x0029,
+ 0x0000, 0x0028, 0x1111, 0x1161, 0x0029, 0x0000, 0x0028, 0x1112,
+ 0x1161, 0x0029, 0x0000, 0x0028, 0x110c, 0x116e, 0x0029, 0x0000,
+ 0x0028, 0x110b, 0x1169, 0x110c, 0x1165, 0x11ab, 0x0029, 0x0000,
+ 0x0028, 0x110b, 0x1169, 0x1112, 0x116e, 0x0029, 0x0000, 0x0028,
+ 0x4e00, 0x0029, 0x0000, 0x0028, 0x4e8c, 0x0029, 0x0000, 0x0028,
+ 0x4e09, 0x0029, 0x0000, 0x0028, 0x56db, 0x0029, 0x0000, 0x0028,
+ 0x4e94, 0x0029, 0x0000, 0x0028, 0x516d, 0x0029, 0x0000, 0x0028,
+ 0x4e03, 0x0029, 0x0000, 0x0028, 0x516b, 0x0029, 0x0000, 0x0028,
+ 0x4e5d, 0x0029, 0x0000, 0x0028, 0x5341, 0x0029, 0x0000, 0x0028,
+ 0x6708, 0x0029, 0x0000, 0x0028, 0x706b, 0x0029, 0x0000, 0x0028,
+ 0x6c34, 0x0029, 0x0000, 0x0028, 0x6728, 0x0029, 0x0000, 0x0028,
+ 0x91d1, 0x0029, 0x0000, 0x0028, 0x571f, 0x0029, 0x0000, 0x0028,
+ 0x65e5, 0x0029, 0x0000, 0x0028, 0x682a, 0x0029, 0x0000, 0x0028,
+ 0x6709, 0x0029, 0x0000, 0x0028, 0x793e, 0x0029, 0x0000, 0x0028,
+ 0x540d, 0x0029, 0x0000, 0x0028, 0x7279, 0x0029, 0x0000, 0x0028,
+ 0x8ca1, 0x0029, 0x0000, 0x0028, 0x795d, 0x0029, 0x0000, 0x0028,
+ 0x52b4, 0x0029, 0x0000, 0x0028, 0x4ee3, 0x0029, 0x0000, 0x0028,
+ 0x547c, 0x0029, 0x0000, 0x0028, 0x5b66, 0x0029, 0x0000, 0x0028,
+ 0x76e3, 0x0029, 0x0000, 0x0028, 0x4f01, 0x0029, 0x0000, 0x0028,
+ 0x8cc7, 0x0029, 0x0000, 0x0028, 0x5354, 0x0029, 0x0000, 0x0028,
+ 0x796d, 0x0029, 0x0000, 0x0028, 0x4f11, 0x0029, 0x0000, 0x0028,
+ 0x81ea, 0x0029, 0x0000, 0x0028, 0x81f3, 0x0029, 0x0000, 0x554f,
+ 0x0000, 0x5e7c, 0x0000, 0x7b8f, 0x0000, 0x0050, 0x0054, 0x0045,
+ 0x0000, 0x0032, 0x0031, 0x0000, 0x0032, 0x0032, 0x0000, 0x0032,
+ 0x0033, 0x0000, 0x0032, 0x0034, 0x0000, 0x0032, 0x0035, 0x0000,
+ 0x0032, 0x0036, 0x0000, 0x0032, 0x0037, 0x0000, 0x0032, 0x0038,
+ 0x0000, 0x0032, 0x0039, 0x0000, 0x0033, 0x0030, 0x0000, 0x0033,
+ 0x0031, 0x0000, 0x0033, 0x0032, 0x0000, 0x0033, 0x0033, 0x0000,
+ 0x0033, 0x0034, 0x0000, 0x0033, 0x0035, 0x0000, 0x1100, 0x1161,
+ 0x0000, 0x1102, 0x1161, 0x0000, 0x1103, 0x1161, 0x0000, 0x1105,
+ 0x1161, 0x0000, 0x1106, 0x1161, 0x0000, 0x1107, 0x1161, 0x0000,
+ 0x1109, 0x1161, 0x0000, 0x110b, 0x1161, 0x0000, 0x110c, 0x1161,
+ 0x0000, 0x110e, 0x1161, 0x0000, 0x110f, 0x1161, 0x0000, 0x1110,
+ 0x1161, 0x0000, 0x1111, 0x1161, 0x0000, 0x1112, 0x1161, 0x0000,
+ 0x110e, 0x1161, 0x11b7, 0x1100, 0x1169, 0x0000, 0x110c, 0x116e,
+ 0x110b, 0x1174, 0x0000, 0x110b, 0x116e, 0x0000, 0x4e94, 0x0000,
+ 0x516d, 0x0000, 0x4e03, 0x0000, 0x4e5d, 0x0000, 0x682a, 0x0000,
+ 0x6709, 0x0000, 0x793e, 0x0000, 0x540d, 0x0000, 0x7279, 0x0000,
+ 0x8ca1, 0x0000, 0x795d, 0x0000, 0x52b4, 0x0000, 0x79d8, 0x0000,
+ 0x7537, 0x0000, 0x9069, 0x0000, 0x512a, 0x0000, 0x5370, 0x0000,
+ 0x6ce8, 0x0000, 0x9805, 0x0000, 0x4f11, 0x0000, 0x5199, 0x0000,
+ 0x6b63, 0x0000, 0x5de6, 0x0000, 0x53f3, 0x0000, 0x533b, 0x0000,
+ 0x5b97, 0x0000, 0x5b66, 0x0000, 0x76e3, 0x0000, 0x4f01, 0x0000,
+ 0x8cc7, 0x0000, 0x5354, 0x0000, 0x591c, 0x0000, 0x0033, 0x0036,
+ 0x0000, 0x0033, 0x0037, 0x0000, 0x0033, 0x0038, 0x0000, 0x0033,
+ 0x0039, 0x0000, 0x0034, 0x0030, 0x0000, 0x0034, 0x0031, 0x0000,
+ 0x0034, 0x0032, 0x0000, 0x0034, 0x0033, 0x0000, 0x0034, 0x0034,
+ 0x0000, 0x0034, 0x0035, 0x0000, 0x0034, 0x0036, 0x0000, 0x0034,
+ 0x0037, 0x0000, 0x0034, 0x0038, 0x0000, 0x0034, 0x0039, 0x0000,
+ 0x0035, 0x0030, 0x0000, 0x0031, 0x6708, 0x0000, 0x0032, 0x6708,
+ 0x0000, 0x0033, 0x6708, 0x0000, 0x0034, 0x6708, 0x0000, 0x0035,
+ 0x6708, 0x0000, 0x0036, 0x6708, 0x0000, 0x0037, 0x6708, 0x0000,
+ 0x0038, 0x6708, 0x0000, 0x0039, 0x6708, 0x0000, 0x0031, 0x0030,
+ 0x6708, 0x0000, 0x0031, 0x0031, 0x6708, 0x0000, 0x0031, 0x0032,
+ 0x6708, 0x0000, 0x0048, 0x0067, 0x0000, 0x0065, 0x0072, 0x0067,
+ 0x0000, 0x0065, 0x0056, 0x0000, 0x004c, 0x0054, 0x0044, 0x0000,
+ 0x30a2, 0x0000, 0x30a4, 0x0000, 0x30a6, 0x0000, 0x30a8, 0x0000,
+ 0x30aa, 0x0000, 0x30ab, 0x0000, 0x30ad, 0x0000, 0x30af, 0x0000,
+ 0x30b1, 0x0000, 0x30b3, 0x0000, 0x30b5, 0x0000, 0x30b7, 0x0000,
+ 0x30b9, 0x0000, 0x30bb, 0x0000, 0x30bd, 0x0000, 0x30bf, 0x0000,
+ 0x30c1, 0x0000, 0x30c4, 0x0000, 0x30c6, 0x0000, 0x30c8, 0x0000,
+ 0x30ca, 0x0000, 0x30cb, 0x0000, 0x30cc, 0x0000, 0x30cd, 0x0000,
+ 0x30ce, 0x0000, 0x30cf, 0x0000, 0x30d2, 0x0000, 0x30d5, 0x0000,
+ 0x30d8, 0x0000, 0x30db, 0x0000, 0x30de, 0x0000, 0x30df, 0x0000,
+ 0x30e0, 0x0000, 0x30e1, 0x0000, 0x30e2, 0x0000, 0x30e4, 0x0000,
+ 0x30e6, 0x0000, 0x30e8, 0x0000, 0x30e9, 0x0000, 0x30ea, 0x0000,
+ 0x30eb, 0x0000, 0x30ec, 0x0000, 0x30ed, 0x0000, 0x30ef, 0x0000,
+ 0x30f0, 0x0000, 0x30f1, 0x0000, 0x30f2, 0x0000, 0x30a2, 0x30d1,
+ 0x30fc, 0x30c8, 0x0000, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x0000,
+ 0x30a2, 0x30f3, 0x30da, 0x30a2, 0x0000, 0x30a2, 0x30fc, 0x30eb,
+ 0x0000, 0x30a4, 0x30cb, 0x30f3, 0x30b0, 0x0000, 0x30a4, 0x30f3,
+ 0x30c1, 0x0000, 0x30a6, 0x30a9, 0x30f3, 0x0000, 0x30a8, 0x30b9,
+ 0x30af, 0x30fc, 0x30c9, 0x0000, 0x30a8, 0x30fc, 0x30ab, 0x30fc,
+ 0x0000, 0x30aa, 0x30f3, 0x30b9, 0x0000, 0x30aa, 0x30fc, 0x30e0,
+ 0x0000, 0x30ab, 0x30a4, 0x30ea, 0x0000, 0x30ab, 0x30e9, 0x30c3,
+ 0x30c8, 0x0000, 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x0000, 0x30ac,
+ 0x30ed, 0x30f3, 0x0000, 0x30ac, 0x30f3, 0x30de, 0x0000, 0x30ae,
+ 0x30ac, 0x0000, 0x30ae, 0x30cb, 0x30fc, 0x0000, 0x30ad, 0x30e5,
+ 0x30ea, 0x30fc, 0x0000, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x0000,
+ 0x30ad, 0x30ed, 0x0000, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0,
+ 0x0000, 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x0000,
+ 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x0000, 0x30b0, 0x30e9,
+ 0x30e0, 0x0000, 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x0000,
+ 0x30af, 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x0000, 0x30af, 0x30ed,
+ 0x30fc, 0x30cd, 0x0000, 0x30b1, 0x30fc, 0x30b9, 0x0000, 0x30b3,
+ 0x30eb, 0x30ca, 0x0000, 0x30b3, 0x30fc, 0x30dd, 0x0000, 0x30b5,
+ 0x30a4, 0x30af, 0x30eb, 0x0000, 0x30b5, 0x30f3, 0x30c1, 0x30fc,
+ 0x30e0, 0x0000, 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x0000, 0x30bb,
+ 0x30f3, 0x30c1, 0x0000, 0x30bb, 0x30f3, 0x30c8, 0x0000, 0x30c0,
+ 0x30fc, 0x30b9, 0x0000, 0x30c7, 0x30b7, 0x0000, 0x30c9, 0x30eb,
+ 0x0000, 0x30c8, 0x30f3, 0x0000, 0x30ca, 0x30ce, 0x0000, 0x30ce,
+ 0x30c3, 0x30c8, 0x0000, 0x30cf, 0x30a4, 0x30c4, 0x0000, 0x30d1,
+ 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x0000, 0x30d1, 0x30fc, 0x30c4,
+ 0x0000, 0x30d0, 0x30fc, 0x30ec, 0x30eb, 0x0000, 0x30d4, 0x30a2,
+ 0x30b9, 0x30c8, 0x30eb, 0x0000, 0x30d4, 0x30af, 0x30eb, 0x0000,
+ 0x30d4, 0x30b3, 0x0000, 0x30d3, 0x30eb, 0x0000, 0x30d5, 0x30a1,
+ 0x30e9, 0x30c3, 0x30c9, 0x0000, 0x30d5, 0x30a3, 0x30fc, 0x30c8,
+ 0x0000, 0x30d6, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x0000, 0x30d5,
+ 0x30e9, 0x30f3, 0x0000, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb,
+ 0x0000, 0x30da, 0x30bd, 0x0000, 0x30da, 0x30cb, 0x30d2, 0x0000,
+ 0x30d8, 0x30eb, 0x30c4, 0x0000, 0x30da, 0x30f3, 0x30b9, 0x0000,
+ 0x30da, 0x30fc, 0x30b8, 0x0000, 0x30d9, 0x30fc, 0x30bf, 0x0000,
+ 0x30dd, 0x30a4, 0x30f3, 0x30c8, 0x0000, 0x30dc, 0x30eb, 0x30c8,
+ 0x0000, 0x30db, 0x30f3, 0x0000, 0x30dd, 0x30f3, 0x30c9, 0x0000,
+ 0x30db, 0x30fc, 0x30eb, 0x0000, 0x30db, 0x30fc, 0x30f3, 0x0000,
+ 0x30de, 0x30a4, 0x30af, 0x30ed, 0x0000, 0x30de, 0x30a4, 0x30eb,
+ 0x0000, 0x30de, 0x30c3, 0x30cf, 0x0000, 0x30de, 0x30eb, 0x30af,
+ 0x0000, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x0000, 0x30df,
+ 0x30af, 0x30ed, 0x30f3, 0x0000, 0x30df, 0x30ea, 0x0000, 0x30df,
+ 0x30ea, 0x30d0, 0x30fc, 0x30eb, 0x0000, 0x30e1, 0x30ac, 0x0000,
+ 0x30e1, 0x30ac, 0x30c8, 0x30f3, 0x0000, 0x30e1, 0x30fc, 0x30c8,
+ 0x30eb, 0x0000, 0x30e4, 0x30fc, 0x30c9, 0x0000, 0x30e4, 0x30fc,
+ 0x30eb, 0x0000, 0x30e6, 0x30a2, 0x30f3, 0x0000, 0x30ea, 0x30c3,
+ 0x30c8, 0x30eb, 0x0000, 0x30ea, 0x30e9, 0x0000, 0x30eb, 0x30d4,
+ 0x30fc, 0x0000, 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x0000, 0x30ec,
+ 0x30e0, 0x0000, 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x0000,
+ 0x30ef, 0x30c3, 0x30c8, 0x0000, 0x0030, 0x70b9, 0x0000, 0x0031,
+ 0x70b9, 0x0000, 0x0032, 0x70b9, 0x0000, 0x0033, 0x70b9, 0x0000,
+ 0x0034, 0x70b9, 0x0000, 0x0035, 0x70b9, 0x0000, 0x0036, 0x70b9,
+ 0x0000, 0x0037, 0x70b9, 0x0000, 0x0038, 0x70b9, 0x0000, 0x0039,
+ 0x70b9, 0x0000, 0x0031, 0x0030, 0x70b9, 0x0000, 0x0031, 0x0031,
+ 0x70b9, 0x0000, 0x0031, 0x0032, 0x70b9, 0x0000, 0x0031, 0x0033,
+ 0x70b9, 0x0000, 0x0031, 0x0034, 0x70b9, 0x0000, 0x0031, 0x0035,
+ 0x70b9, 0x0000, 0x0031, 0x0036, 0x70b9, 0x0000, 0x0031, 0x0037,
+ 0x70b9, 0x0000, 0x0031, 0x0038, 0x70b9, 0x0000, 0x0031, 0x0039,
+ 0x70b9, 0x0000, 0x0032, 0x0030, 0x70b9, 0x0000, 0x0032, 0x0031,
+ 0x70b9, 0x0000, 0x0032, 0x0032, 0x70b9, 0x0000, 0x0032, 0x0033,
+ 0x70b9, 0x0000, 0x0032, 0x0034, 0x70b9, 0x0000, 0x0068, 0x0050,
+ 0x0061, 0x0000, 0x0064, 0x0061, 0x0000, 0x0041, 0x0055, 0x0000,
+ 0x0062, 0x0061, 0x0072, 0x0000, 0x006f, 0x0056, 0x0000, 0x0070,
+ 0x0063, 0x0000, 0x0064, 0x006d, 0x0000, 0x0064, 0x006d, 0x00b2,
+ 0x0000, 0x0064, 0x006d, 0x00b3, 0x0000, 0x0049, 0x0055, 0x0000,
+ 0x5e73, 0x6210, 0x0000, 0x662d, 0x548c, 0x0000, 0x5927, 0x6b63,
+ 0x0000, 0x660e, 0x6cbb, 0x0000, 0x682a, 0x5f0f, 0x4f1a, 0x793e,
+ 0x0000, 0x0070, 0x0041, 0x0000, 0x006e, 0x0041, 0x0000, 0x03bc,
+ 0x0041, 0x0000, 0x006d, 0x0041, 0x0000, 0x006b, 0x0041, 0x0000,
+ 0x004b, 0x0042, 0x0000, 0x004d, 0x0042, 0x0000, 0x0047, 0x0042,
+ 0x0000, 0x0063, 0x0061, 0x006c, 0x0000, 0x006b, 0x0063, 0x0061,
+ 0x006c, 0x0000, 0x0070, 0x0046, 0x0000, 0x006e, 0x0046, 0x0000,
+ 0x03bc, 0x0046, 0x0000, 0x03bc, 0x0067, 0x0000, 0x006d, 0x0067,
+ 0x0000, 0x006b, 0x0067, 0x0000, 0x0048, 0x007a, 0x0000, 0x006b,
+ 0x0048, 0x007a, 0x0000, 0x004d, 0x0048, 0x007a, 0x0000, 0x0047,
+ 0x0048, 0x007a, 0x0000, 0x0054, 0x0048, 0x007a, 0x0000, 0x03bc,
+ 0x2113, 0x0000, 0x006d, 0x2113, 0x0000, 0x0064, 0x2113, 0x0000,
+ 0x006b, 0x2113, 0x0000, 0x0066, 0x006d, 0x0000, 0x006e, 0x006d,
+ 0x0000, 0x03bc, 0x006d, 0x0000, 0x006d, 0x006d, 0x0000, 0x0063,
+ 0x006d, 0x0000, 0x006b, 0x006d, 0x0000, 0x006d, 0x006d, 0x00b2,
+ 0x0000, 0x0063, 0x006d, 0x00b2, 0x0000, 0x006d, 0x00b2, 0x0000,
+ 0x006b, 0x006d, 0x00b2, 0x0000, 0x006d, 0x006d, 0x00b3, 0x0000,
+ 0x0063, 0x006d, 0x00b3, 0x0000, 0x006d, 0x00b3, 0x0000, 0x006b,
+ 0x006d, 0x00b3, 0x0000, 0x006d, 0x2215, 0x0073, 0x0000, 0x006d,
+ 0x2215, 0x0073, 0x00b2, 0x0000, 0x0050, 0x0061, 0x0000, 0x006b,
+ 0x0050, 0x0061, 0x0000, 0x004d, 0x0050, 0x0061, 0x0000, 0x0047,
+ 0x0050, 0x0061, 0x0000, 0x0072, 0x0061, 0x0064, 0x0000, 0x0072,
+ 0x0061, 0x0064, 0x2215, 0x0073, 0x0000, 0x0072, 0x0061, 0x0064,
+ 0x2215, 0x0073, 0x00b2, 0x0000, 0x0070, 0x0073, 0x0000, 0x006e,
+ 0x0073, 0x0000, 0x03bc, 0x0073, 0x0000, 0x006d, 0x0073, 0x0000,
+ 0x0070, 0x0056, 0x0000, 0x006e, 0x0056, 0x0000, 0x03bc, 0x0056,
+ 0x0000, 0x006d, 0x0056, 0x0000, 0x006b, 0x0056, 0x0000, 0x004d,
+ 0x0056, 0x0000, 0x0070, 0x0057, 0x0000, 0x006e, 0x0057, 0x0000,
+ 0x03bc, 0x0057, 0x0000, 0x006d, 0x0057, 0x0000, 0x006b, 0x0057,
+ 0x0000, 0x004d, 0x0057, 0x0000, 0x006b, 0x03a9, 0x0000, 0x004d,
+ 0x03a9, 0x0000, 0x0061, 0x002e, 0x006d, 0x002e, 0x0000, 0x0042,
+ 0x0071, 0x0000, 0x0063, 0x0063, 0x0000, 0x0063, 0x0064, 0x0000,
+ 0x0043, 0x2215, 0x006b, 0x0067, 0x0000, 0x0043, 0x006f, 0x002e,
+ 0x0000, 0x0064, 0x0042, 0x0000, 0x0047, 0x0079, 0x0000, 0x0068,
+ 0x0061, 0x0000, 0x0048, 0x0050, 0x0000, 0x0069, 0x006e, 0x0000,
+ 0x004b, 0x004b, 0x0000, 0x004b, 0x004d, 0x0000, 0x006b, 0x0074,
+ 0x0000, 0x006c, 0x006d, 0x0000, 0x006c, 0x006e, 0x0000, 0x006c,
+ 0x006f, 0x0067, 0x0000, 0x006c, 0x0078, 0x0000, 0x006d, 0x0062,
+ 0x0000, 0x006d, 0x0069, 0x006c, 0x0000, 0x006d, 0x006f, 0x006c,
+ 0x0000, 0x0050, 0x0048, 0x0000, 0x0070, 0x002e, 0x006d, 0x002e,
+ 0x0000, 0x0050, 0x0050, 0x004d, 0x0000, 0x0050, 0x0052, 0x0000,
+ 0x0073, 0x0072, 0x0000, 0x0053, 0x0076, 0x0000, 0x0057, 0x0062,
+ 0x0000, 0x0056, 0x2215, 0x006d, 0x0000, 0x0041, 0x2215, 0x006d,
+ 0x0000, 0x0031, 0x65e5, 0x0000, 0x0032, 0x65e5, 0x0000, 0x0033,
+ 0x65e5, 0x0000, 0x0034, 0x65e5, 0x0000, 0x0035, 0x65e5, 0x0000,
+ 0x0036, 0x65e5, 0x0000, 0x0037, 0x65e5, 0x0000, 0x0038, 0x65e5,
+ 0x0000, 0x0039, 0x65e5, 0x0000, 0x0031, 0x0030, 0x65e5, 0x0000,
+ 0x0031, 0x0031, 0x65e5, 0x0000, 0x0031, 0x0032, 0x65e5, 0x0000,
+ 0x0031, 0x0033, 0x65e5, 0x0000, 0x0031, 0x0034, 0x65e5, 0x0000,
+ 0x0031, 0x0035, 0x65e5, 0x0000, 0x0031, 0x0036, 0x65e5, 0x0000,
+ 0x0031, 0x0037, 0x65e5, 0x0000, 0x0031, 0x0038, 0x65e5, 0x0000,
+ 0x0031, 0x0039, 0x65e5, 0x0000, 0x0032, 0x0030, 0x65e5, 0x0000,
+ 0x0032, 0x0031, 0x65e5, 0x0000, 0x0032, 0x0032, 0x65e5, 0x0000,
+ 0x0032, 0x0033, 0x65e5, 0x0000, 0x0032, 0x0034, 0x65e5, 0x0000,
+ 0x0032, 0x0035, 0x65e5, 0x0000, 0x0032, 0x0036, 0x65e5, 0x0000,
+ 0x0032, 0x0037, 0x65e5, 0x0000, 0x0032, 0x0038, 0x65e5, 0x0000,
+ 0x0032, 0x0039, 0x65e5, 0x0000, 0x0033, 0x0030, 0x65e5, 0x0000,
+ 0x0033, 0x0031, 0x65e5, 0x0000, 0x0067, 0x0061, 0x006c, 0x0000,
+ 0x044a, 0x0000, 0x044c, 0x0000, 0xa76f, 0x0000, 0x0126, 0x0000,
+ 0x0153, 0x0000, 0xa727, 0x0000, 0xab37, 0x0000, 0x026b, 0x0000,
+ 0xab52, 0x0000, 0x8c48, 0x0000, 0x66f4, 0x0000, 0x8cc8, 0x0000,
+ 0x6ed1, 0x0000, 0x4e32, 0x0000, 0x53e5, 0x0000, 0x5951, 0x0000,
+ 0x5587, 0x0000, 0x5948, 0x0000, 0x61f6, 0x0000, 0x7669, 0x0000,
+ 0x7f85, 0x0000, 0x863f, 0x0000, 0x87ba, 0x0000, 0x88f8, 0x0000,
+ 0x908f, 0x0000, 0x6a02, 0x0000, 0x6d1b, 0x0000, 0x70d9, 0x0000,
+ 0x73de, 0x0000, 0x843d, 0x0000, 0x916a, 0x0000, 0x99f1, 0x0000,
+ 0x4e82, 0x0000, 0x5375, 0x0000, 0x6b04, 0x0000, 0x721b, 0x0000,
+ 0x862d, 0x0000, 0x9e1e, 0x0000, 0x5d50, 0x0000, 0x6feb, 0x0000,
+ 0x85cd, 0x0000, 0x8964, 0x0000, 0x62c9, 0x0000, 0x81d8, 0x0000,
+ 0x881f, 0x0000, 0x5eca, 0x0000, 0x6717, 0x0000, 0x6d6a, 0x0000,
+ 0x72fc, 0x0000, 0x90ce, 0x0000, 0x4f86, 0x0000, 0x51b7, 0x0000,
+ 0x52de, 0x0000, 0x64c4, 0x0000, 0x6ad3, 0x0000, 0x7210, 0x0000,
+ 0x76e7, 0x0000, 0x8606, 0x0000, 0x865c, 0x0000, 0x8def, 0x0000,
+ 0x9732, 0x0000, 0x9b6f, 0x0000, 0x9dfa, 0x0000, 0x788c, 0x0000,
+ 0x797f, 0x0000, 0x7da0, 0x0000, 0x83c9, 0x0000, 0x9304, 0x0000,
+ 0x8ad6, 0x0000, 0x58df, 0x0000, 0x5f04, 0x0000, 0x7c60, 0x0000,
+ 0x807e, 0x0000, 0x7262, 0x0000, 0x78ca, 0x0000, 0x8cc2, 0x0000,
+ 0x96f7, 0x0000, 0x58d8, 0x0000, 0x5c62, 0x0000, 0x6a13, 0x0000,
+ 0x6dda, 0x0000, 0x6f0f, 0x0000, 0x7d2f, 0x0000, 0x7e37, 0x0000,
+ 0x964b, 0x0000, 0x52d2, 0x0000, 0x808b, 0x0000, 0x51dc, 0x0000,
+ 0x51cc, 0x0000, 0x7a1c, 0x0000, 0x7dbe, 0x0000, 0x83f1, 0x0000,
+ 0x9675, 0x0000, 0x8b80, 0x0000, 0x62cf, 0x0000, 0x8afe, 0x0000,
+ 0x4e39, 0x0000, 0x5be7, 0x0000, 0x6012, 0x0000, 0x7387, 0x0000,
+ 0x7570, 0x0000, 0x5317, 0x0000, 0x78fb, 0x0000, 0x4fbf, 0x0000,
+ 0x5fa9, 0x0000, 0x4e0d, 0x0000, 0x6ccc, 0x0000, 0x6578, 0x0000,
+ 0x7d22, 0x0000, 0x53c3, 0x0000, 0x585e, 0x0000, 0x7701, 0x0000,
+ 0x8449, 0x0000, 0x8aaa, 0x0000, 0x6bba, 0x0000, 0x6c88, 0x0000,
+ 0x62fe, 0x0000, 0x82e5, 0x0000, 0x63a0, 0x0000, 0x7565, 0x0000,
+ 0x4eae, 0x0000, 0x5169, 0x0000, 0x51c9, 0x0000, 0x6881, 0x0000,
+ 0x7ce7, 0x0000, 0x826f, 0x0000, 0x8ad2, 0x0000, 0x91cf, 0x0000,
+ 0x52f5, 0x0000, 0x5442, 0x0000, 0x5eec, 0x0000, 0x65c5, 0x0000,
+ 0x6ffe, 0x0000, 0x792a, 0x0000, 0x95ad, 0x0000, 0x9a6a, 0x0000,
+ 0x9e97, 0x0000, 0x9ece, 0x0000, 0x66c6, 0x0000, 0x6b77, 0x0000,
+ 0x8f62, 0x0000, 0x5e74, 0x0000, 0x6190, 0x0000, 0x6200, 0x0000,
+ 0x649a, 0x0000, 0x6f23, 0x0000, 0x7149, 0x0000, 0x7489, 0x0000,
+ 0x79ca, 0x0000, 0x7df4, 0x0000, 0x806f, 0x0000, 0x8f26, 0x0000,
+ 0x84ee, 0x0000, 0x9023, 0x0000, 0x934a, 0x0000, 0x5217, 0x0000,
+ 0x52a3, 0x0000, 0x54bd, 0x0000, 0x70c8, 0x0000, 0x88c2, 0x0000,
+ 0x5ec9, 0x0000, 0x5ff5, 0x0000, 0x637b, 0x0000, 0x6bae, 0x0000,
+ 0x7c3e, 0x0000, 0x7375, 0x0000, 0x4ee4, 0x0000, 0x56f9, 0x0000,
+ 0x5dba, 0x0000, 0x601c, 0x0000, 0x73b2, 0x0000, 0x7469, 0x0000,
+ 0x7f9a, 0x0000, 0x8046, 0x0000, 0x9234, 0x0000, 0x96f6, 0x0000,
+ 0x9748, 0x0000, 0x9818, 0x0000, 0x4f8b, 0x0000, 0x79ae, 0x0000,
+ 0x91b4, 0x0000, 0x96b8, 0x0000, 0x60e1, 0x0000, 0x4e86, 0x0000,
+ 0x50da, 0x0000, 0x5bee, 0x0000, 0x5c3f, 0x0000, 0x6599, 0x0000,
+ 0x71ce, 0x0000, 0x7642, 0x0000, 0x84fc, 0x0000, 0x907c, 0x0000,
+ 0x6688, 0x0000, 0x962e, 0x0000, 0x5289, 0x0000, 0x677b, 0x0000,
+ 0x67f3, 0x0000, 0x6d41, 0x0000, 0x6e9c, 0x0000, 0x7409, 0x0000,
+ 0x7559, 0x0000, 0x786b, 0x0000, 0x7d10, 0x0000, 0x985e, 0x0000,
+ 0x622e, 0x0000, 0x9678, 0x0000, 0x502b, 0x0000, 0x5d19, 0x0000,
+ 0x6dea, 0x0000, 0x8f2a, 0x0000, 0x5f8b, 0x0000, 0x6144, 0x0000,
+ 0x6817, 0x0000, 0x9686, 0x0000, 0x5229, 0x0000, 0x540f, 0x0000,
+ 0x5c65, 0x0000, 0x6613, 0x0000, 0x674e, 0x0000, 0x68a8, 0x0000,
+ 0x6ce5, 0x0000, 0x7406, 0x0000, 0x75e2, 0x0000, 0x7f79, 0x0000,
+ 0x88cf, 0x0000, 0x88e1, 0x0000, 0x96e2, 0x0000, 0x533f, 0x0000,
+ 0x6eba, 0x0000, 0x541d, 0x0000, 0x71d0, 0x0000, 0x7498, 0x0000,
+ 0x85fa, 0x0000, 0x96a3, 0x0000, 0x9c57, 0x0000, 0x9e9f, 0x0000,
+ 0x6797, 0x0000, 0x6dcb, 0x0000, 0x81e8, 0x0000, 0x7b20, 0x0000,
+ 0x7c92, 0x0000, 0x72c0, 0x0000, 0x7099, 0x0000, 0x8b58, 0x0000,
+ 0x4ec0, 0x0000, 0x8336, 0x0000, 0x523a, 0x0000, 0x5207, 0x0000,
+ 0x5ea6, 0x0000, 0x62d3, 0x0000, 0x7cd6, 0x0000, 0x5b85, 0x0000,
+ 0x6d1e, 0x0000, 0x66b4, 0x0000, 0x8f3b, 0x0000, 0x964d, 0x0000,
+ 0x5ed3, 0x0000, 0x5140, 0x0000, 0x55c0, 0x0000, 0x585a, 0x0000,
+ 0x6674, 0x0000, 0x51de, 0x0000, 0x732a, 0x0000, 0x76ca, 0x0000,
+ 0x793c, 0x0000, 0x795e, 0x0000, 0x7965, 0x0000, 0x798f, 0x0000,
+ 0x9756, 0x0000, 0x7cbe, 0x0000, 0x8612, 0x0000, 0x8af8, 0x0000,
+ 0x9038, 0x0000, 0x90fd, 0x0000, 0x98ef, 0x0000, 0x98fc, 0x0000,
+ 0x9928, 0x0000, 0x9db4, 0x0000, 0x90de, 0x0000, 0x96b7, 0x0000,
+ 0x4fae, 0x0000, 0x50e7, 0x0000, 0x514d, 0x0000, 0x52c9, 0x0000,
+ 0x52e4, 0x0000, 0x5351, 0x0000, 0x559d, 0x0000, 0x5606, 0x0000,
+ 0x5668, 0x0000, 0x5840, 0x0000, 0x58a8, 0x0000, 0x5c64, 0x0000,
+ 0x6094, 0x0000, 0x6168, 0x0000, 0x618e, 0x0000, 0x61f2, 0x0000,
+ 0x654f, 0x0000, 0x65e2, 0x0000, 0x6691, 0x0000, 0x6885, 0x0000,
+ 0x6d77, 0x0000, 0x6e1a, 0x0000, 0x6f22, 0x0000, 0x716e, 0x0000,
+ 0x722b, 0x0000, 0x7422, 0x0000, 0x7891, 0x0000, 0x7949, 0x0000,
+ 0x7948, 0x0000, 0x7950, 0x0000, 0x7956, 0x0000, 0x798d, 0x0000,
+ 0x798e, 0x0000, 0x7a40, 0x0000, 0x7a81, 0x0000, 0x7bc0, 0x0000,
+ 0x7e09, 0x0000, 0x7e41, 0x0000, 0x7f72, 0x0000, 0x8005, 0x0000,
+ 0x81ed, 0x0000, 0x8279, 0x0000, 0x8457, 0x0000, 0x8910, 0x0000,
+ 0x8996, 0x0000, 0x8b01, 0x0000, 0x8b39, 0x0000, 0x8cd3, 0x0000,
+ 0x8d08, 0x0000, 0x8fb6, 0x0000, 0x96e3, 0x0000, 0x97ff, 0x0000,
+ 0x983b, 0x0000, 0x6075, 0x0000, 0x0000, 0x8218, 0x0000, 0x4e26,
+ 0x0000, 0x51b5, 0x0000, 0x5168, 0x0000, 0x4f80, 0x0000, 0x5145,
+ 0x0000, 0x5180, 0x0000, 0x52c7, 0x0000, 0x52fa, 0x0000, 0x5555,
+ 0x0000, 0x5599, 0x0000, 0x55e2, 0x0000, 0x58b3, 0x0000, 0x5944,
+ 0x0000, 0x5954, 0x0000, 0x5a62, 0x0000, 0x5b28, 0x0000, 0x5ed2,
+ 0x0000, 0x5ed9, 0x0000, 0x5f69, 0x0000, 0x5fad, 0x0000, 0x60d8,
+ 0x0000, 0x614e, 0x0000, 0x6108, 0x0000, 0x6160, 0x0000, 0x6234,
+ 0x0000, 0x63c4, 0x0000, 0x641c, 0x0000, 0x6452, 0x0000, 0x6556,
+ 0x0000, 0x671b, 0x0000, 0x6756, 0x0000, 0x6edb, 0x0000, 0x6ecb,
+ 0x0000, 0x701e, 0x0000, 0x77a7, 0x0000, 0x7235, 0x0000, 0x72af,
+ 0x0000, 0x7471, 0x0000, 0x7506, 0x0000, 0x753b, 0x0000, 0x761d,
+ 0x0000, 0x761f, 0x0000, 0x76db, 0x0000, 0x76f4, 0x0000, 0x774a,
+ 0x0000, 0x7740, 0x0000, 0x78cc, 0x0000, 0x7ab1, 0x0000, 0x7c7b,
+ 0x0000, 0x7d5b, 0x0000, 0x7f3e, 0x0000, 0x8352, 0x0000, 0x83ef,
+ 0x0000, 0x8779, 0x0000, 0x8941, 0x0000, 0x8986, 0x0000, 0x8abf,
+ 0x0000, 0x8acb, 0x0000, 0x8aed, 0x0000, 0x8b8a, 0x0000, 0x8f38,
+ 0x0000, 0x9072, 0x0000, 0x9199, 0x0000, 0x9276, 0x0000, 0x967c,
+ 0x0000, 0x97db, 0x0000, 0x980b, 0x0000, 0x9b12, 0x0000, 0x3b9d,
+ 0x0000, 0x4018, 0x0000, 0x4039, 0x0000, 0x9f43, 0x0000, 0x9f8e,
+ 0x0000, 0x0066, 0x0066, 0x0000, 0x0066, 0x0069, 0x0000, 0x0066,
+ 0x006c, 0x0000, 0x0066, 0x0066, 0x0069, 0x0000, 0x0066, 0x0066,
+ 0x006c, 0x0000, 0x017f, 0x0074, 0x0000, 0x0073, 0x0074, 0x0000,
+ 0x0574, 0x0576, 0x0000, 0x0574, 0x0565, 0x0000, 0x0574, 0x056b,
+ 0x0000, 0x057e, 0x0576, 0x0000, 0x0574, 0x056d, 0x0000, 0x05d9,
+ 0x05b4, 0x0000, 0x05f2, 0x05b7, 0x0000, 0x05e2, 0x0000, 0x05d4,
+ 0x0000, 0x05db, 0x0000, 0x05dc, 0x0000, 0x05dd, 0x0000, 0x05e8,
+ 0x0000, 0x05ea, 0x0000, 0x05e9, 0x05c1, 0x0000, 0x05e9, 0x05c2,
+ 0x0000, 0xfb49, 0x05c1, 0x0000, 0xfb49, 0x05c2, 0x0000, 0x05d0,
+ 0x05b7, 0x0000, 0x05d0, 0x05b8, 0x0000, 0x05d0, 0x05bc, 0x0000,
+ 0x05d1, 0x05bc, 0x0000, 0x05d2, 0x05bc, 0x0000, 0x05d3, 0x05bc,
+ 0x0000, 0x05d4, 0x05bc, 0x0000, 0x05d5, 0x05bc, 0x0000, 0x05d6,
+ 0x05bc, 0x0000, 0x05d8, 0x05bc, 0x0000, 0x05d9, 0x05bc, 0x0000,
+ 0x05da, 0x05bc, 0x0000, 0x05db, 0x05bc, 0x0000, 0x05dc, 0x05bc,
+ 0x0000, 0x05de, 0x05bc, 0x0000, 0x05e0, 0x05bc, 0x0000, 0x05e1,
+ 0x05bc, 0x0000, 0x05e3, 0x05bc, 0x0000, 0x05e4, 0x05bc, 0x0000,
+ 0x05e6, 0x05bc, 0x0000, 0x05e7, 0x05bc, 0x0000, 0x05e8, 0x05bc,
+ 0x0000, 0x05e9, 0x05bc, 0x0000, 0x05ea, 0x05bc, 0x0000, 0x05d5,
+ 0x05b9, 0x0000, 0x05d1, 0x05bf, 0x0000, 0x05db, 0x05bf, 0x0000,
+ 0x05e4, 0x05bf, 0x0000, 0x05d0, 0x05dc, 0x0000, 0x0671, 0x0000,
+ 0x067b, 0x0000, 0x067e, 0x0000, 0x0680, 0x0000, 0x067a, 0x0000,
+ 0x067f, 0x0000, 0x0679, 0x0000, 0x06a4, 0x0000, 0x06a6, 0x0000,
+ 0x0684, 0x0000, 0x0683, 0x0000, 0x0686, 0x0000, 0x0687, 0x0000,
+ 0x068d, 0x0000, 0x068c, 0x0000, 0x068e, 0x0000, 0x0688, 0x0000,
+ 0x0698, 0x0000, 0x0691, 0x0000, 0x06a9, 0x0000, 0x06af, 0x0000,
+ 0x06b3, 0x0000, 0x06b1, 0x0000, 0x06ba, 0x0000, 0x06bb, 0x0000,
+ 0x06c0, 0x0000, 0x06c1, 0x0000, 0x06be, 0x0000, 0x06d2, 0x0000,
+ 0x06d3, 0x0000, 0x06ad, 0x0000, 0x06c7, 0x0000, 0x06c6, 0x0000,
+ 0x06c8, 0x0000, 0x0677, 0x0000, 0x06cb, 0x0000, 0x06c5, 0x0000,
+ 0x06c9, 0x0000, 0x06d0, 0x0000, 0x0649, 0x0000, 0x0626, 0x0627,
+ 0x0000, 0x0626, 0x06d5, 0x0000, 0x0626, 0x0648, 0x0000, 0x0626,
+ 0x06c7, 0x0000, 0x0626, 0x06c6, 0x0000, 0x0626, 0x06c8, 0x0000,
+ 0x0626, 0x06d0, 0x0000, 0x0626, 0x0649, 0x0000, 0x06cc, 0x0000,
+ 0x0626, 0x062c, 0x0000, 0x0626, 0x062d, 0x0000, 0x0626, 0x0645,
+ 0x0000, 0x0626, 0x064a, 0x0000, 0x0628, 0x062c, 0x0000, 0x0628,
+ 0x062d, 0x0000, 0x0628, 0x062e, 0x0000, 0x0628, 0x0645, 0x0000,
+ 0x0628, 0x0649, 0x0000, 0x0628, 0x064a, 0x0000, 0x062a, 0x062c,
+ 0x0000, 0x062a, 0x062d, 0x0000, 0x062a, 0x062e, 0x0000, 0x062a,
+ 0x0645, 0x0000, 0x062a, 0x0649, 0x0000, 0x062a, 0x064a, 0x0000,
+ 0x062b, 0x062c, 0x0000, 0x062b, 0x0645, 0x0000, 0x062b, 0x0649,
+ 0x0000, 0x062b, 0x064a, 0x0000, 0x062c, 0x062d, 0x0000, 0x062c,
+ 0x0645, 0x0000, 0x062d, 0x062c, 0x0000, 0x062d, 0x0645, 0x0000,
+ 0x062e, 0x062c, 0x0000, 0x062e, 0x062d, 0x0000, 0x062e, 0x0645,
+ 0x0000, 0x0633, 0x062c, 0x0000, 0x0633, 0x062d, 0x0000, 0x0633,
+ 0x062e, 0x0000, 0x0633, 0x0645, 0x0000, 0x0635, 0x062d, 0x0000,
+ 0x0635, 0x0645, 0x0000, 0x0636, 0x062c, 0x0000, 0x0636, 0x062d,
+ 0x0000, 0x0636, 0x062e, 0x0000, 0x0636, 0x0645, 0x0000, 0x0637,
+ 0x062d, 0x0000, 0x0637, 0x0645, 0x0000, 0x0638, 0x0645, 0x0000,
+ 0x0639, 0x062c, 0x0000, 0x0639, 0x0645, 0x0000, 0x063a, 0x062c,
+ 0x0000, 0x063a, 0x0645, 0x0000, 0x0641, 0x062c, 0x0000, 0x0641,
+ 0x062d, 0x0000, 0x0641, 0x062e, 0x0000, 0x0641, 0x0645, 0x0000,
+ 0x0641, 0x0649, 0x0000, 0x0641, 0x064a, 0x0000, 0x0642, 0x062d,
+ 0x0000, 0x0642, 0x0645, 0x0000, 0x0642, 0x0649, 0x0000, 0x0642,
+ 0x064a, 0x0000, 0x0643, 0x0627, 0x0000, 0x0643, 0x062c, 0x0000,
+ 0x0643, 0x062d, 0x0000, 0x0643, 0x062e, 0x0000, 0x0643, 0x0644,
+ 0x0000, 0x0643, 0x0645, 0x0000, 0x0643, 0x0649, 0x0000, 0x0643,
+ 0x064a, 0x0000, 0x0644, 0x062c, 0x0000, 0x0644, 0x062d, 0x0000,
+ 0x0644, 0x062e, 0x0000, 0x0644, 0x0645, 0x0000, 0x0644, 0x0649,
+ 0x0000, 0x0644, 0x064a, 0x0000, 0x0645, 0x062c, 0x0000, 0x0645,
+ 0x062d, 0x0000, 0x0645, 0x062e, 0x0000, 0x0645, 0x0645, 0x0000,
+ 0x0645, 0x0649, 0x0000, 0x0645, 0x064a, 0x0000, 0x0646, 0x062c,
+ 0x0000, 0x0646, 0x062d, 0x0000, 0x0646, 0x062e, 0x0000, 0x0646,
+ 0x0645, 0x0000, 0x0646, 0x0649, 0x0000, 0x0646, 0x064a, 0x0000,
+ 0x0647, 0x062c, 0x0000, 0x0647, 0x0645, 0x0000, 0x0647, 0x0649,
+ 0x0000, 0x0647, 0x064a, 0x0000, 0x064a, 0x062c, 0x0000, 0x064a,
+ 0x062d, 0x0000, 0x064a, 0x062e, 0x0000, 0x064a, 0x0645, 0x0000,
+ 0x064a, 0x0649, 0x0000, 0x064a, 0x064a, 0x0000, 0x0630, 0x0670,
+ 0x0000, 0x0631, 0x0670, 0x0000, 0x0649, 0x0670, 0x0000, 0x0020,
+ 0x064c, 0x0651, 0x0000, 0x0020, 0x064d, 0x0651, 0x0000, 0x0020,
+ 0x064e, 0x0651, 0x0000, 0x0020, 0x064f, 0x0651, 0x0000, 0x0020,
+ 0x0650, 0x0651, 0x0000, 0x0020, 0x0651, 0x0670, 0x0000, 0x0626,
+ 0x0631, 0x0000, 0x0626, 0x0632, 0x0000, 0x0626, 0x0646, 0x0000,
+ 0x0628, 0x0631, 0x0000, 0x0628, 0x0632, 0x0000, 0x0628, 0x0646,
+ 0x0000, 0x062a, 0x0631, 0x0000, 0x062a, 0x0632, 0x0000, 0x062a,
+ 0x0646, 0x0000, 0x062b, 0x0631, 0x0000, 0x062b, 0x0632, 0x0000,
+ 0x062b, 0x0646, 0x0000, 0x0645, 0x0627, 0x0000, 0x0646, 0x0631,
+ 0x0000, 0x0646, 0x0632, 0x0000, 0x0646, 0x0646, 0x0000, 0x064a,
+ 0x0631, 0x0000, 0x064a, 0x0632, 0x0000, 0x064a, 0x0646, 0x0000,
+ 0x0626, 0x062e, 0x0000, 0x0626, 0x0647, 0x0000, 0x0628, 0x0647,
+ 0x0000, 0x062a, 0x0647, 0x0000, 0x0635, 0x062e, 0x0000, 0x0644,
+ 0x0647, 0x0000, 0x0646, 0x0647, 0x0000, 0x0647, 0x0670, 0x0000,
+ 0x064a, 0x0647, 0x0000, 0x062b, 0x0647, 0x0000, 0x0633, 0x0647,
+ 0x0000, 0x0634, 0x0645, 0x0000, 0x0634, 0x0647, 0x0000, 0x0640,
+ 0x064e, 0x0651, 0x0000, 0x0640, 0x064f, 0x0651, 0x0000, 0x0640,
+ 0x0650, 0x0651, 0x0000, 0x0637, 0x0649, 0x0000, 0x0637, 0x064a,
+ 0x0000, 0x0639, 0x0649, 0x0000, 0x0639, 0x064a, 0x0000, 0x063a,
+ 0x0649, 0x0000, 0x063a, 0x064a, 0x0000, 0x0633, 0x0649, 0x0000,
+ 0x0633, 0x064a, 0x0000, 0x0634, 0x0649, 0x0000, 0x0634, 0x064a,
+ 0x0000, 0x062d, 0x0649, 0x0000, 0x062d, 0x064a, 0x0000, 0x062c,
+ 0x0649, 0x0000, 0x062c, 0x064a, 0x0000, 0x062e, 0x0649, 0x0000,
+ 0x062e, 0x064a, 0x0000, 0x0635, 0x0649, 0x0000, 0x0635, 0x064a,
+ 0x0000, 0x0636, 0x0649, 0x0000, 0x0636, 0x064a, 0x0000, 0x0634,
+ 0x062c, 0x0000, 0x0634, 0x062d, 0x0000, 0x0634, 0x062e, 0x0000,
+ 0x0634, 0x0631, 0x0000, 0x0633, 0x0631, 0x0000, 0x0635, 0x0631,
+ 0x0000, 0x0636, 0x0631, 0x0000, 0x0627, 0x064b, 0x0000, 0x062a,
+ 0x062c, 0x0645, 0x0000, 0x062a, 0x062d, 0x062c, 0x0000, 0x062a,
+ 0x062d, 0x0645, 0x0000, 0x062a, 0x062e, 0x0645, 0x0000, 0x062a,
+ 0x0645, 0x062c, 0x0000, 0x062a, 0x0645, 0x062d, 0x0000, 0x062a,
+ 0x0645, 0x062e, 0x0000, 0x062c, 0x0645, 0x062d, 0x0000, 0x062d,
+ 0x0645, 0x064a, 0x0000, 0x062d, 0x0645, 0x0649, 0x0000, 0x0633,
+ 0x062d, 0x062c, 0x0000, 0x0633, 0x062c, 0x062d, 0x0000, 0x0633,
+ 0x062c, 0x0649, 0x0000, 0x0633, 0x0645, 0x062d, 0x0000, 0x0633,
+ 0x0645, 0x062c, 0x0000, 0x0633, 0x0645, 0x0645, 0x0000, 0x0635,
+ 0x062d, 0x062d, 0x0000, 0x0635, 0x0645, 0x0645, 0x0000, 0x0634,
+ 0x062d, 0x0645, 0x0000, 0x0634, 0x062c, 0x064a, 0x0000, 0x0634,
+ 0x0645, 0x062e, 0x0000, 0x0634, 0x0645, 0x0645, 0x0000, 0x0636,
+ 0x062d, 0x0649, 0x0000, 0x0636, 0x062e, 0x0645, 0x0000, 0x0637,
+ 0x0645, 0x062d, 0x0000, 0x0637, 0x0645, 0x0645, 0x0000, 0x0637,
+ 0x0645, 0x064a, 0x0000, 0x0639, 0x062c, 0x0645, 0x0000, 0x0639,
+ 0x0645, 0x0645, 0x0000, 0x0639, 0x0645, 0x0649, 0x0000, 0x063a,
+ 0x0645, 0x0645, 0x0000, 0x063a, 0x0645, 0x064a, 0x0000, 0x063a,
+ 0x0645, 0x0649, 0x0000, 0x0641, 0x062e, 0x0645, 0x0000, 0x0642,
+ 0x0645, 0x062d, 0x0000, 0x0642, 0x0645, 0x0645, 0x0000, 0x0644,
+ 0x062d, 0x0645, 0x0000, 0x0644, 0x062d, 0x064a, 0x0000, 0x0644,
+ 0x062d, 0x0649, 0x0000, 0x0644, 0x062c, 0x062c, 0x0000, 0x0644,
+ 0x062e, 0x0645, 0x0000, 0x0644, 0x0645, 0x062d, 0x0000, 0x0645,
+ 0x062d, 0x062c, 0x0000, 0x0645, 0x062d, 0x0645, 0x0000, 0x0645,
+ 0x062d, 0x064a, 0x0000, 0x0645, 0x062c, 0x062d, 0x0000, 0x0645,
+ 0x062c, 0x0645, 0x0000, 0x0645, 0x062e, 0x062c, 0x0000, 0x0645,
+ 0x062e, 0x0645, 0x0000, 0x0645, 0x062c, 0x062e, 0x0000, 0x0647,
+ 0x0645, 0x062c, 0x0000, 0x0647, 0x0645, 0x0645, 0x0000, 0x0646,
+ 0x062d, 0x0645, 0x0000, 0x0646, 0x062d, 0x0649, 0x0000, 0x0646,
+ 0x062c, 0x0645, 0x0000, 0x0646, 0x062c, 0x0649, 0x0000, 0x0646,
+ 0x0645, 0x064a, 0x0000, 0x0646, 0x0645, 0x0649, 0x0000, 0x064a,
+ 0x0645, 0x0645, 0x0000, 0x0628, 0x062e, 0x064a, 0x0000, 0x062a,
+ 0x062c, 0x064a, 0x0000, 0x062a, 0x062c, 0x0649, 0x0000, 0x062a,
+ 0x062e, 0x064a, 0x0000, 0x062a, 0x062e, 0x0649, 0x0000, 0x062a,
+ 0x0645, 0x064a, 0x0000, 0x062a, 0x0645, 0x0649, 0x0000, 0x062c,
+ 0x0645, 0x064a, 0x0000, 0x062c, 0x062d, 0x0649, 0x0000, 0x062c,
+ 0x0645, 0x0649, 0x0000, 0x0633, 0x062e, 0x0649, 0x0000, 0x0635,
+ 0x062d, 0x064a, 0x0000, 0x0634, 0x062d, 0x064a, 0x0000, 0x0636,
+ 0x062d, 0x064a, 0x0000, 0x0644, 0x062c, 0x064a, 0x0000, 0x0644,
+ 0x0645, 0x064a, 0x0000, 0x064a, 0x062d, 0x064a, 0x0000, 0x064a,
+ 0x062c, 0x064a, 0x0000, 0x064a, 0x0645, 0x064a, 0x0000, 0x0645,
+ 0x0645, 0x064a, 0x0000, 0x0642, 0x0645, 0x064a, 0x0000, 0x0646,
+ 0x062d, 0x064a, 0x0000, 0x0639, 0x0645, 0x064a, 0x0000, 0x0643,
+ 0x0645, 0x064a, 0x0000, 0x0646, 0x062c, 0x062d, 0x0000, 0x0645,
+ 0x062e, 0x064a, 0x0000, 0x0644, 0x062c, 0x0645, 0x0000, 0x0643,
+ 0x0645, 0x0645, 0x0000, 0x062c, 0x062d, 0x064a, 0x0000, 0x062d,
+ 0x062c, 0x064a, 0x0000, 0x0645, 0x062c, 0x064a, 0x0000, 0x0641,
+ 0x0645, 0x064a, 0x0000, 0x0628, 0x062d, 0x064a, 0x0000, 0x0633,
+ 0x062e, 0x064a, 0x0000, 0x0646, 0x062c, 0x064a, 0x0000, 0x0635,
+ 0x0644, 0x06d2, 0x0000, 0x0642, 0x0644, 0x06d2, 0x0000, 0x0627,
+ 0x0644, 0x0644, 0x0647, 0x0000, 0x0627, 0x0643, 0x0628, 0x0631,
+ 0x0000, 0x0645, 0x062d, 0x0645, 0x062f, 0x0000, 0x0635, 0x0644,
+ 0x0639, 0x0645, 0x0000, 0x0631, 0x0633, 0x0648, 0x0644, 0x0000,
+ 0x0639, 0x0644, 0x064a, 0x0647, 0x0000, 0x0648, 0x0633, 0x0644,
+ 0x0645, 0x0000, 0x0635, 0x0644, 0x0649, 0x0000, 0x0635, 0x0644,
+ 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639,
+ 0x0644, 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645,
+ 0x0000, 0x062c, 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644,
+ 0x0647, 0x0000, 0x0631, 0x06cc, 0x0627, 0x0644, 0x0000, 0x002c,
+ 0x0000, 0x3001, 0x0000, 0x3002, 0x0000, 0x003a, 0x0000, 0x0021,
+ 0x0000, 0x003f, 0x0000, 0x3016, 0x0000, 0x3017, 0x0000, 0x2026,
+ 0x0000, 0x2025, 0x0000, 0x2014, 0x0000, 0x2013, 0x0000, 0x005f,
+ 0x0000, 0x007b, 0x0000, 0x007d, 0x0000, 0x3014, 0x0000, 0x3015,
+ 0x0000, 0x3010, 0x0000, 0x3011, 0x0000, 0x300a, 0x0000, 0x300b,
+ 0x0000, 0x300c, 0x0000, 0x300d, 0x0000, 0x300e, 0x0000, 0x300f,
+ 0x0000, 0x005b, 0x0000, 0x005d, 0x0000, 0x203e, 0x0000, 0x0023,
+ 0x0000, 0x0026, 0x0000, 0x002a, 0x0000, 0x002d, 0x0000, 0x003c,
+ 0x0000, 0x003e, 0x0000, 0x005c, 0x0000, 0x0024, 0x0000, 0x0025,
+ 0x0000, 0x0040, 0x0000, 0x0020, 0x064b, 0x0000, 0x0640, 0x064b,
+ 0x0000, 0x0020, 0x064c, 0x0000, 0x0020, 0x064d, 0x0000, 0x0020,
+ 0x064e, 0x0000, 0x0640, 0x064e, 0x0000, 0x0020, 0x064f, 0x0000,
+ 0x0640, 0x064f, 0x0000, 0x0020, 0x0650, 0x0000, 0x0640, 0x0650,
+ 0x0000, 0x0020, 0x0651, 0x0000, 0x0640, 0x0651, 0x0000, 0x0020,
+ 0x0652, 0x0000, 0x0640, 0x0652, 0x0000, 0x0621, 0x0000, 0x0622,
+ 0x0000, 0x0623, 0x0000, 0x0624, 0x0000, 0x0625, 0x0000, 0x0626,
+ 0x0000, 0x0627, 0x0000, 0x0628, 0x0000, 0x0629, 0x0000, 0x062a,
+ 0x0000, 0x062b, 0x0000, 0x062c, 0x0000, 0x062d, 0x0000, 0x062e,
+ 0x0000, 0x062f, 0x0000, 0x0630, 0x0000, 0x0631, 0x0000, 0x0632,
+ 0x0000, 0x0633, 0x0000, 0x0634, 0x0000, 0x0635, 0x0000, 0x0636,
+ 0x0000, 0x0637, 0x0000, 0x0638, 0x0000, 0x0639, 0x0000, 0x063a,
+ 0x0000, 0x0641, 0x0000, 0x0642, 0x0000, 0x0643, 0x0000, 0x0644,
+ 0x0000, 0x0645, 0x0000, 0x0646, 0x0000, 0x0647, 0x0000, 0x0648,
+ 0x0000, 0x064a, 0x0000, 0x0644, 0x0622, 0x0000, 0x0644, 0x0623,
+ 0x0000, 0x0644, 0x0625, 0x0000, 0x0644, 0x0627, 0x0000, 0x0022,
+ 0x0000, 0x0027, 0x0000, 0x002f, 0x0000, 0x005e, 0x0000, 0x007c,
+ 0x0000, 0x007e, 0x0000, 0x2985, 0x0000, 0x2986, 0x0000, 0x30fb,
+ 0x0000, 0x30a1, 0x0000, 0x30a3, 0x0000, 0x30a5, 0x0000, 0x30a7,
+ 0x0000, 0x30a9, 0x0000, 0x30e3, 0x0000, 0x30e5, 0x0000, 0x30e7,
+ 0x0000, 0x30c3, 0x0000, 0x30fc, 0x0000, 0x30f3, 0x0000, 0x3099,
+ 0x0000, 0x309a, 0x0000, 0x3164, 0x0000, 0x3131, 0x0000, 0x3132,
+ 0x0000, 0x3133, 0x0000, 0x3134, 0x0000, 0x3135, 0x0000, 0x3136,
+ 0x0000, 0x3137, 0x0000, 0x3138, 0x0000, 0x3139, 0x0000, 0x313a,
+ 0x0000, 0x313b, 0x0000, 0x313c, 0x0000, 0x313d, 0x0000, 0x313e,
+ 0x0000, 0x313f, 0x0000, 0x3140, 0x0000, 0x3141, 0x0000, 0x3142,
+ 0x0000, 0x3143, 0x0000, 0x3144, 0x0000, 0x3145, 0x0000, 0x3146,
+ 0x0000, 0x3147, 0x0000, 0x3148, 0x0000, 0x3149, 0x0000, 0x314a,
+ 0x0000, 0x314b, 0x0000, 0x314c, 0x0000, 0x314d, 0x0000, 0x314e,
+ 0x0000, 0x314f, 0x0000, 0x3150, 0x0000, 0x3151, 0x0000, 0x3152,
+ 0x0000, 0x3153, 0x0000, 0x3154, 0x0000, 0x3155, 0x0000, 0x3156,
+ 0x0000, 0x3157, 0x0000, 0x3158, 0x0000, 0x3159, 0x0000, 0x315a,
+ 0x0000, 0x315b, 0x0000, 0x315c, 0x0000, 0x315d, 0x0000, 0x315e,
+ 0x0000, 0x315f, 0x0000, 0x3160, 0x0000, 0x3161, 0x0000, 0x3162,
+ 0x0000, 0x3163, 0x0000, 0x00a2, 0x0000, 0x00a3, 0x0000, 0x00ac,
+ 0x0000, 0x00af, 0x0000, 0x00a6, 0x0000, 0x00a5, 0x0000, 0x20a9,
+ 0x0000, 0x2502, 0x0000, 0x2190, 0x0000, 0x2191, 0x0000, 0x2192,
+ 0x0000, 0x2193, 0x0000, 0x25a0, 0x0000, 0x25cb, 0x0000
+};
+
+static const BYTE idx1_decomp[256] =
+{
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00,
+ 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x11, 0x12, 0x13,
+ 0x14, 0x15, 0x16, 0x17, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x19, 0x00, 0x1a, 0x1b, 0x1c, 0x1d,
+ 0x1e, 0x1f, 0x20, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x23,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b
+};
+
+static const USHORT idx2_decomp[704] =
{
- /* index */
- 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0100, 0x0160, 0x0100,
- 0x0100, 0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x0100, 0x01c0,
- 0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x01e0, 0x0100, 0x0100, 0x01f0, 0x0200,
- 0x0100, 0x0210, 0x0220, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0230, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0240, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
- 0x0100, 0x0100, 0x0100, 0x0250, 0x0100, 0x0100, 0x0100, 0x0100,
/* null sub-index */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 00 */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0280, 0x02a0, 0x02c0, 0x02e0,
- /* sub-index 01 */
- 0x0300, 0x0320, 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0,
- 0x0260, 0x0260, 0x0400, 0x0420, 0x0440, 0x0460, 0x0480, 0x04a0,
- /* sub-index 02 */
- 0x04c0, 0x04e0, 0x0500, 0x0520, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 03 */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0540, 0x0260, 0x0260, 0x0260,
- 0x0560, 0x0580, 0x05a0, 0x05c0, 0x05e0, 0x0600, 0x0260, 0x0260,
- /* sub-index 04 */
- 0x0620, 0x0640, 0x0260, 0x0660, 0x0260, 0x0680, 0x0260, 0x06a0,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x06c0, 0x06e0, 0x0700, 0x0720,
- /* sub-index 06 */
- 0x0260, 0x0260, 0x0740, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0760, 0x0780, 0x0260, 0x0260,
- /* sub-index 09 */
- 0x0260, 0x0260, 0x07a0, 0x07c0, 0x0260, 0x07e0, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0800, 0x0820, 0x0260, 0x0260,
- /* sub-index 0a */
- 0x0260, 0x0260, 0x0260, 0x0840, 0x0260, 0x0860, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 0b */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0880, 0x08a0, 0x0260, 0x0260,
- 0x0260, 0x08c0, 0x0260, 0x0260, 0x08e0, 0x0260, 0x0260, 0x0260,
- /* sub-index 0c */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0900, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0920, 0x0260, 0x0260, 0x0260,
- /* sub-index 0d */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0940, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0960, 0x0260, 0x0260,
- /* sub-index 0f */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0980, 0x09a0, 0x09c0, 0x09e0,
- 0x0a00, 0x0a20, 0x0a40, 0x0a60, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 10 */
- 0x0260, 0x0260, 0x0a80, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 1b */
- 0x0aa0, 0x0ac0, 0x0260, 0x0ae0, 0x0b00, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* sub-index 1e */
- 0x0b20, 0x0b40, 0x0b60, 0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00,
- 0x0c20, 0x0c40, 0x0c60, 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00,
- /* sub-index 1f */
- 0x0d20, 0x0d40, 0x0d60, 0x0d80, 0x0da0, 0x0dc0, 0x0de0, 0x0e00,
- 0x0e20, 0x0e40, 0x0e60, 0x0e80, 0x0ea0, 0x0ec0, 0x0ee0, 0x0f00,
- /* sub-index 21 */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0f20, 0x0f40, 0x0260, 0x0f60, 0x0260, 0x0260, 0x0260,
- /* sub-index 22 */
- 0x0f80, 0x0260, 0x0fa0, 0x0260, 0x0fc0, 0x0260, 0x0fe0, 0x1000,
- 0x1020, 0x0260, 0x1040, 0x0260, 0x0260, 0x0260, 0x1060, 0x0260,
- /* sub-index 2a */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x1080, 0x0260, 0x0260,
- /* sub-index 30 */
- 0x0260, 0x0260, 0x0260, 0x0260, 0x10a0, 0x10c0, 0x10e0, 0x1100,
- 0x0260, 0x1120, 0x1140, 0x1160, 0x1180, 0x11a0, 0x0260, 0x11c0,
- /* sub-index fb */
- 0x0260, 0x11e0, 0x1200, 0x1220, 0x1240, 0x0260, 0x0260, 0x0260,
- 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260,
- /* null mapping */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x01 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
+ /* sub-index 0x02 */
+ 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e,
+ 0x0000, 0x0000, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014,
+ /* sub-index 0x03 */
+ 0x0015, 0x0016, 0x0017, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0019, 0x0000, 0x001a, 0x001b, 0x0000,
+ /* sub-index 0x04 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x001c, 0x0000, 0x0000, 0x001d,
+ 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0000, 0x0024,
+ /* sub-index 0x05 */
+ 0x0025, 0x0026, 0x0000, 0x0027, 0x0000, 0x0028, 0x0000, 0x0029,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x002a, 0x002b, 0x002c, 0x002d,
+ /* sub-index 0x06 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x002e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x07 */
+ 0x0000, 0x0000, 0x002f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0031, 0x0032, 0x0000, 0x0000,
+ /* sub-index 0x08 */
+ 0x0000, 0x0000, 0x0033, 0x0034, 0x0000, 0x0035, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0036, 0x0037, 0x0000, 0x0000,
+ /* sub-index 0x09 */
+ 0x0000, 0x0000, 0x0000, 0x0038, 0x0000, 0x0039, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x0a */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x003a, 0x003b, 0x0000, 0x0000,
+ 0x0000, 0x003c, 0x0000, 0x0000, 0x003d, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x0b */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x003e, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x0c */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0000, 0x0000,
+ /* sub-index 0x0d */
+ 0x0000, 0x0000, 0x0000, 0x0042, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0043, 0x0000, 0x0044, 0x0000, 0x0000,
+ /* sub-index 0x0e */
+ 0x0045, 0x0000, 0x0000, 0x0000, 0x0046, 0x0047, 0x0048, 0x0049,
+ 0x004a, 0x004b, 0x004c, 0x004d, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x0f */
+ 0x0000, 0x0000, 0x004e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004f,
+ /* sub-index 0x10 */
+ 0x0050, 0x0051, 0x0000, 0x0052, 0x0053, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x11 */
+ 0x0000, 0x0000, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
+ 0x0000, 0x005a, 0x005b, 0x005c, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x12 */
+ 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
+ 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c,
+ /* sub-index 0x13 */
+ 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
+ 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c,
+ /* sub-index 0x14 */
+ 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0000, 0x0083,
+ 0x0084, 0x0085, 0x0086, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x15 */
+ 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e,
+ 0x008f, 0x0090, 0x0091, 0x0000, 0x0092, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x16 */
+ 0x0093, 0x0000, 0x0094, 0x0095, 0x0096, 0x0000, 0x0097, 0x0098,
+ 0x0099, 0x0000, 0x009a, 0x0000, 0x0000, 0x0000, 0x009b, 0x0000,
+ /* sub-index 0x17 */
+ 0x0000, 0x0000, 0x009c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x18 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009d, 0x009e,
+ 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x0000,
+ /* sub-index 0x19 */
+ 0x00a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a8, 0x0000, 0x0000,
+ /* sub-index 0x1a */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x1b */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00aa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x1c */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x00ab, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00ac,
+ /* sub-index 0x1d */
+ 0x00ad, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4,
+ 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x0000, 0x0000,
+ /* sub-index 0x1e */
+ 0x00bb, 0x0000, 0x0000, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0,
+ 0x0000, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x0000, 0x00c6,
+ /* sub-index 0x1f */
+ 0x0000, 0x0000, 0x0000, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb,
+ 0x00cc, 0x00cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x20 */
+ 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5,
+ 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd,
+ /* sub-index 0x21 */
+ 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
+ 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed,
+ /* sub-index 0x22 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x00ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x23 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00ef,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f0,
+ /* sub-index 0x24 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f1, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* sub-index 0x25 */
+ 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9,
+ 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, 0x0100, 0x0101,
+ /* sub-index 0x26 */
+ 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109,
+ 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0000, 0x0000,
+ /* sub-index 0x27 */
+ 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117,
+ 0x0118, 0x0119, 0x011a, 0x011b, 0x0000, 0x011c, 0x011d, 0x011e,
+ /* sub-index 0x28 */
+ 0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126,
+ 0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e,
+ /* sub-index 0x29 */
+ 0x012f, 0x0130, 0x0131, 0x0132, 0x0000, 0x0133, 0x0134, 0x0135,
+ 0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x0000, 0x0000, 0x013b,
+ /* sub-index 0x2a */
+ 0x0000, 0x013c, 0x0000, 0x013d, 0x013e, 0x013f, 0x0140, 0x0141,
+ 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149,
+ /* sub-index 0x2b */
+ 0x014a, 0x014b, 0x014c, 0x014d, 0x014e, 0x014f, 0x0150, 0x0151,
+ 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0000
+};
+
+static const USHORT offsets_decomp[11040] =
+{
+ /* (nfd, nfkd) x 16 */
+ /* no decomposition */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x00a0 .. 0x00af */
+ 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0003, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008,
+ /* 0x00b0 .. 0x00bf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0000, 0x000d,
+ 0x0000, 0x000f, 0x0000, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0014, 0x0000, 0x0017, 0x0000, 0x0019, 0x0000, 0x0000,
+ 0x0000, 0x001b, 0x0000, 0x001f, 0x0000, 0x0023, 0x0000, 0x0000,
/* 0x00c0 .. 0x00cf */
- 0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303,
- 0x0041, 0x0308, 0x0041, 0x030a, 0x0000, 0x0000, 0x0043, 0x0327,
- 0x0045, 0x0300, 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308,
- 0x0049, 0x0300, 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308,
+ 0x0027, 0x0027, 0x002a, 0x002a, 0x002d, 0x002d, 0x0030, 0x0030,
+ 0x0033, 0x0033, 0x0036, 0x0036, 0x0000, 0x0000, 0x0039, 0x0039,
+ 0x003c, 0x003c, 0x003f, 0x003f, 0x0042, 0x0042, 0x0045, 0x0045,
+ 0x0048, 0x0048, 0x004b, 0x004b, 0x004e, 0x004e, 0x0051, 0x0051,
/* 0x00d0 .. 0x00df */
- 0x0000, 0x0000, 0x004e, 0x0303, 0x004f, 0x0300, 0x004f, 0x0301,
- 0x004f, 0x0302, 0x004f, 0x0303, 0x004f, 0x0308, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302,
- 0x0055, 0x0308, 0x0059, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0054, 0x0054, 0x0057, 0x0057, 0x005a, 0x005a,
+ 0x005d, 0x005d, 0x0060, 0x0060, 0x0063, 0x0063, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0066, 0x0066, 0x0069, 0x0069, 0x006c, 0x006c,
+ 0x006f, 0x006f, 0x0072, 0x0072, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x00e0 .. 0x00ef */
- 0x0061, 0x0300, 0x0061, 0x0301, 0x0061, 0x0302, 0x0061, 0x0303,
- 0x0061, 0x0308, 0x0061, 0x030a, 0x0000, 0x0000, 0x0063, 0x0327,
- 0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302, 0x0065, 0x0308,
- 0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, 0x0069, 0x0308,
+ 0x0075, 0x0075, 0x0078, 0x0078, 0x007b, 0x007b, 0x007e, 0x007e,
+ 0x0081, 0x0081, 0x0084, 0x0084, 0x0000, 0x0000, 0x0087, 0x0087,
+ 0x008a, 0x008a, 0x008d, 0x008d, 0x0090, 0x0090, 0x0093, 0x0093,
+ 0x0096, 0x0096, 0x0099, 0x0099, 0x009c, 0x009c, 0x009f, 0x009f,
/* 0x00f0 .. 0x00ff */
- 0x0000, 0x0000, 0x006e, 0x0303, 0x006f, 0x0300, 0x006f, 0x0301,
- 0x006f, 0x0302, 0x006f, 0x0303, 0x006f, 0x0308, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0075, 0x0300, 0x0075, 0x0301, 0x0075, 0x0302,
- 0x0075, 0x0308, 0x0079, 0x0301, 0x0000, 0x0000, 0x0079, 0x0308,
+ 0x0000, 0x0000, 0x00a2, 0x00a2, 0x00a5, 0x00a5, 0x00a8, 0x00a8,
+ 0x00ab, 0x00ab, 0x00ae, 0x00ae, 0x00b1, 0x00b1, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x00b4, 0x00b4, 0x00b7, 0x00b7, 0x00ba, 0x00ba,
+ 0x00bd, 0x00bd, 0x00c0, 0x00c0, 0x0000, 0x0000, 0x00c3, 0x00c3,
/* 0x0100 .. 0x010f */
- 0x0041, 0x0304, 0x0061, 0x0304, 0x0041, 0x0306, 0x0061, 0x0306,
- 0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301, 0x0063, 0x0301,
- 0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, 0x0063, 0x0307,
- 0x0043, 0x030c, 0x0063, 0x030c, 0x0044, 0x030c, 0x0064, 0x030c,
+ 0x00c6, 0x00c6, 0x00c9, 0x00c9, 0x00cc, 0x00cc, 0x00cf, 0x00cf,
+ 0x00d2, 0x00d2, 0x00d5, 0x00d5, 0x00d8, 0x00d8, 0x00db, 0x00db,
+ 0x00de, 0x00de, 0x00e1, 0x00e1, 0x00e4, 0x00e4, 0x00e7, 0x00e7,
+ 0x00ea, 0x00ea, 0x00ed, 0x00ed, 0x00f0, 0x00f0, 0x00f3, 0x00f3,
/* 0x0110 .. 0x011f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0045, 0x0304, 0x0065, 0x0304,
- 0x0045, 0x0306, 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307,
- 0x0045, 0x0328, 0x0065, 0x0328, 0x0045, 0x030c, 0x0065, 0x030c,
- 0x0047, 0x0302, 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x00f6, 0x00f6, 0x00f9, 0x00f9,
+ 0x00fc, 0x00fc, 0x00ff, 0x00ff, 0x0102, 0x0102, 0x0105, 0x0105,
+ 0x0108, 0x0108, 0x010b, 0x010b, 0x010e, 0x010e, 0x0111, 0x0111,
+ 0x0114, 0x0114, 0x0117, 0x0117, 0x011a, 0x011a, 0x011d, 0x011d,
/* 0x0120 .. 0x012f */
- 0x0047, 0x0307, 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327,
- 0x0048, 0x0302, 0x0068, 0x0302, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0049, 0x0303, 0x0069, 0x0303, 0x0049, 0x0304, 0x0069, 0x0304,
- 0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328, 0x0069, 0x0328,
+ 0x0120, 0x0120, 0x0123, 0x0123, 0x0126, 0x0126, 0x0129, 0x0129,
+ 0x012c, 0x012c, 0x012f, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0132, 0x0132, 0x0135, 0x0135, 0x0138, 0x0138, 0x013b, 0x013b,
+ 0x013e, 0x013e, 0x0141, 0x0141, 0x0144, 0x0144, 0x0147, 0x0147,
/* 0x0130 .. 0x013f */
- 0x0049, 0x0307, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x004a, 0x0302, 0x006a, 0x0302, 0x004b, 0x0327, 0x006b, 0x0327,
- 0x0000, 0x0000, 0x004c, 0x0301, 0x006c, 0x0301, 0x004c, 0x0327,
- 0x006c, 0x0327, 0x004c, 0x030c, 0x006c, 0x030c, 0x0000, 0x0000,
+ 0x014a, 0x014a, 0x0000, 0x0000, 0x0000, 0x014d, 0x0000, 0x0150,
+ 0x0153, 0x0153, 0x0156, 0x0156, 0x0159, 0x0159, 0x015c, 0x015c,
+ 0x0000, 0x0000, 0x015f, 0x015f, 0x0162, 0x0162, 0x0165, 0x0165,
+ 0x0168, 0x0168, 0x016b, 0x016b, 0x016e, 0x016e, 0x0000, 0x0171,
/* 0x0140 .. 0x014f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, 0x0301,
- 0x006e, 0x0301, 0x004e, 0x0327, 0x006e, 0x0327, 0x004e, 0x030c,
- 0x006e, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x004f, 0x0304, 0x006f, 0x0304, 0x004f, 0x0306, 0x006f, 0x0306,
+ 0x0000, 0x0174, 0x0000, 0x0000, 0x0000, 0x0000, 0x0177, 0x0177,
+ 0x017a, 0x017a, 0x017d, 0x017d, 0x0180, 0x0180, 0x0183, 0x0183,
+ 0x0186, 0x0186, 0x0000, 0x0189, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x018c, 0x018c, 0x018f, 0x018f, 0x0192, 0x0192, 0x0195, 0x0195,
/* 0x0150 .. 0x015f */
- 0x004f, 0x030b, 0x006f, 0x030b, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, 0x0072, 0x0327,
- 0x0052, 0x030c, 0x0072, 0x030c, 0x0053, 0x0301, 0x0073, 0x0301,
- 0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, 0x0073, 0x0327,
+ 0x0198, 0x0198, 0x019b, 0x019b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x019e, 0x019e, 0x01a1, 0x01a1, 0x01a4, 0x01a4, 0x01a7, 0x01a7,
+ 0x01aa, 0x01aa, 0x01ad, 0x01ad, 0x01b0, 0x01b0, 0x01b3, 0x01b3,
+ 0x01b6, 0x01b6, 0x01b9, 0x01b9, 0x01bc, 0x01bc, 0x01bf, 0x01bf,
/* 0x0160 .. 0x016f */
- 0x0053, 0x030c, 0x0073, 0x030c, 0x0054, 0x0327, 0x0074, 0x0327,
- 0x0054, 0x030c, 0x0074, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0055, 0x0303, 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304,
- 0x0055, 0x0306, 0x0075, 0x0306, 0x0055, 0x030a, 0x0075, 0x030a,
+ 0x01c2, 0x01c2, 0x01c5, 0x01c5, 0x01c8, 0x01c8, 0x01cb, 0x01cb,
+ 0x01ce, 0x01ce, 0x01d1, 0x01d1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x01d4, 0x01d4, 0x01d7, 0x01d7, 0x01da, 0x01da, 0x01dd, 0x01dd,
+ 0x01e0, 0x01e0, 0x01e3, 0x01e3, 0x01e6, 0x01e6, 0x01e9, 0x01e9,
/* 0x0170 .. 0x017f */
- 0x0055, 0x030b, 0x0075, 0x030b, 0x0055, 0x0328, 0x0075, 0x0328,
- 0x0057, 0x0302, 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302,
- 0x0059, 0x0308, 0x005a, 0x0301, 0x007a, 0x0301, 0x005a, 0x0307,
- 0x007a, 0x0307, 0x005a, 0x030c, 0x007a, 0x030c, 0x0000, 0x0000,
+ 0x01ec, 0x01ec, 0x01ef, 0x01ef, 0x01f2, 0x01f2, 0x01f5, 0x01f5,
+ 0x01f8, 0x01f8, 0x01fb, 0x01fb, 0x01fe, 0x01fe, 0x0201, 0x0201,
+ 0x0204, 0x0204, 0x0207, 0x0207, 0x020a, 0x020a, 0x020d, 0x020d,
+ 0x0210, 0x0210, 0x0213, 0x0213, 0x0216, 0x0216, 0x0000, 0x0219,
/* 0x01a0 .. 0x01af */
- 0x004f, 0x031b, 0x006f, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x021b, 0x021b, 0x021e, 0x021e, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x031b,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0221, 0x0221,
/* 0x01b0 .. 0x01bf */
- 0x0075, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0224, 0x0224, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x01c0 .. 0x01cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0041, 0x030c, 0x0061, 0x030c, 0x0049, 0x030c,
+ 0x0000, 0x0227, 0x0000, 0x022a, 0x0000, 0x022d, 0x0000, 0x0230,
+ 0x0000, 0x0233, 0x0000, 0x0236, 0x0000, 0x0239, 0x0000, 0x023c,
+ 0x0000, 0x023f, 0x0242, 0x0242, 0x0245, 0x0245, 0x0248, 0x0248,
/* 0x01d0 .. 0x01df */
- 0x0069, 0x030c, 0x004f, 0x030c, 0x006f, 0x030c, 0x0055, 0x030c,
- 0x0075, 0x030c, 0x00dc, 0x0304, 0x00fc, 0x0304, 0x00dc, 0x0301,
- 0x00fc, 0x0301, 0x00dc, 0x030c, 0x00fc, 0x030c, 0x00dc, 0x0300,
- 0x00fc, 0x0300, 0x0000, 0x0000, 0x00c4, 0x0304, 0x00e4, 0x0304,
+ 0x024b, 0x024b, 0x024e, 0x024e, 0x0251, 0x0251, 0x0254, 0x0254,
+ 0x0257, 0x0257, 0x025a, 0x025a, 0x025d, 0x025d, 0x0260, 0x0260,
+ 0x0263, 0x0263, 0x0266, 0x0266, 0x0269, 0x0269, 0x026c, 0x026c,
+ 0x026f, 0x026f, 0x0000, 0x0000, 0x0272, 0x0272, 0x0275, 0x0275,
/* 0x01e0 .. 0x01ef */
- 0x0226, 0x0304, 0x0227, 0x0304, 0x00c6, 0x0304, 0x00e6, 0x0304,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0047, 0x030c, 0x0067, 0x030c,
- 0x004b, 0x030c, 0x006b, 0x030c, 0x004f, 0x0328, 0x006f, 0x0328,
- 0x01ea, 0x0304, 0x01eb, 0x0304, 0x01b7, 0x030c, 0x0292, 0x030c,
+ 0x0278, 0x0278, 0x027b, 0x027b, 0x027e, 0x027e, 0x0281, 0x0281,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0284, 0x0284, 0x0287, 0x0287,
+ 0x028a, 0x028a, 0x028d, 0x028d, 0x0290, 0x0290, 0x0293, 0x0293,
+ 0x0296, 0x0296, 0x0299, 0x0299, 0x029c, 0x029c, 0x029f, 0x029f,
/* 0x01f0 .. 0x01ff */
- 0x006a, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0047, 0x0301, 0x0067, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x004e, 0x0300, 0x006e, 0x0300, 0x00c5, 0x0301, 0x00e5, 0x0301,
- 0x00c6, 0x0301, 0x00e6, 0x0301, 0x00d8, 0x0301, 0x00f8, 0x0301,
+ 0x02a2, 0x02a2, 0x0000, 0x02a5, 0x0000, 0x02a8, 0x0000, 0x02ab,
+ 0x02ae, 0x02ae, 0x02b1, 0x02b1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x02b4, 0x02b4, 0x02b7, 0x02b7, 0x02ba, 0x02ba, 0x02bd, 0x02bd,
+ 0x02c0, 0x02c0, 0x02c3, 0x02c3, 0x02c6, 0x02c6, 0x02c9, 0x02c9,
/* 0x0200 .. 0x020f */
- 0x0041, 0x030f, 0x0061, 0x030f, 0x0041, 0x0311, 0x0061, 0x0311,
- 0x0045, 0x030f, 0x0065, 0x030f, 0x0045, 0x0311, 0x0065, 0x0311,
- 0x0049, 0x030f, 0x0069, 0x030f, 0x0049, 0x0311, 0x0069, 0x0311,
- 0x004f, 0x030f, 0x006f, 0x030f, 0x004f, 0x0311, 0x006f, 0x0311,
+ 0x02cc, 0x02cc, 0x02cf, 0x02cf, 0x02d2, 0x02d2, 0x02d5, 0x02d5,
+ 0x02d8, 0x02d8, 0x02db, 0x02db, 0x02de, 0x02de, 0x02e1, 0x02e1,
+ 0x02e4, 0x02e4, 0x02e7, 0x02e7, 0x02ea, 0x02ea, 0x02ed, 0x02ed,
+ 0x02f0, 0x02f0, 0x02f3, 0x02f3, 0x02f6, 0x02f6, 0x02f9, 0x02f9,
/* 0x0210 .. 0x021f */
- 0x0052, 0x030f, 0x0072, 0x030f, 0x0052, 0x0311, 0x0072, 0x0311,
- 0x0055, 0x030f, 0x0075, 0x030f, 0x0055, 0x0311, 0x0075, 0x0311,
- 0x0053, 0x0326, 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0048, 0x030c, 0x0068, 0x030c,
+ 0x02fc, 0x02fc, 0x02ff, 0x02ff, 0x0302, 0x0302, 0x0305, 0x0305,
+ 0x0308, 0x0308, 0x030b, 0x030b, 0x030e, 0x030e, 0x0311, 0x0311,
+ 0x0314, 0x0314, 0x0317, 0x0317, 0x031a, 0x031a, 0x031d, 0x031d,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0320, 0x0320, 0x0323, 0x0323,
/* 0x0220 .. 0x022f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0307, 0x0061, 0x0307,
- 0x0045, 0x0327, 0x0065, 0x0327, 0x00d6, 0x0304, 0x00f6, 0x0304,
- 0x00d5, 0x0304, 0x00f5, 0x0304, 0x004f, 0x0307, 0x006f, 0x0307,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0326, 0x0326, 0x0329, 0x0329,
+ 0x032c, 0x032c, 0x032f, 0x032f, 0x0332, 0x0332, 0x0335, 0x0335,
+ 0x0338, 0x0338, 0x033b, 0x033b, 0x033e, 0x033e, 0x0341, 0x0341,
/* 0x0230 .. 0x023f */
- 0x022e, 0x0304, 0x022f, 0x0304, 0x0059, 0x0304, 0x0079, 0x0304,
+ 0x0344, 0x0344, 0x0347, 0x0347, 0x034a, 0x034a, 0x034d, 0x034d,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x02b0 .. 0x02bf */
+ 0x0000, 0x0350, 0x0000, 0x0352, 0x0000, 0x0354, 0x0000, 0x0356,
+ 0x0000, 0x0358, 0x0000, 0x035a, 0x0000, 0x035c, 0x0000, 0x035e,
+ 0x0000, 0x0360, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x02d0 .. 0x02df */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0362, 0x0000, 0x0365, 0x0000, 0x0368, 0x0000, 0x036b,
+ 0x0000, 0x036e, 0x0000, 0x0371, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x02e0 .. 0x02ef */
+ 0x0000, 0x0374, 0x0000, 0x0376, 0x0000, 0x0219, 0x0000, 0x0378,
+ 0x0000, 0x037a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0340 .. 0x034f */
+ 0x037c, 0x037c, 0x037e, 0x037e, 0x0000, 0x0000, 0x0380, 0x0380,
+ 0x0382, 0x0382, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0308, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0370 .. 0x037f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0385, 0x0385, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0387, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x038a, 0x038a, 0x0000, 0x0000,
/* 0x0380 .. 0x038f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x00a8, 0x0301, 0x0391, 0x0301, 0x0000, 0x0000,
- 0x0395, 0x0301, 0x0397, 0x0301, 0x0399, 0x0301, 0x0000, 0x0000,
- 0x039f, 0x0301, 0x0000, 0x0000, 0x03a5, 0x0301, 0x03a9, 0x0301,
+ 0x0000, 0x000f, 0x038c, 0x038c, 0x038f, 0x038f, 0x0392, 0x0392,
+ 0x0394, 0x0394, 0x0397, 0x0397, 0x039a, 0x039a, 0x0000, 0x0000,
+ 0x039d, 0x039d, 0x0000, 0x0000, 0x03a0, 0x03a0, 0x03a3, 0x03a3,
/* 0x0390 .. 0x039f */
- 0x03ca, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x03a6, 0x03a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x03a0 .. 0x03af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0399, 0x0308, 0x03a5, 0x0308,
- 0x03b1, 0x0301, 0x03b5, 0x0301, 0x03b7, 0x0301, 0x03b9, 0x0301,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x03a9, 0x03a9, 0x03ac, 0x03ac,
+ 0x03af, 0x03af, 0x03b2, 0x03b2, 0x03b5, 0x03b5, 0x03b8, 0x03b8,
/* 0x03b0 .. 0x03bf */
- 0x03cb, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x03bb, 0x03bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x03c0 .. 0x03cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0308, 0x03c5, 0x0308,
- 0x03bf, 0x0301, 0x03c5, 0x0301, 0x03c9, 0x0301, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x03be, 0x03be, 0x03c1, 0x03c1,
+ 0x03c4, 0x03c4, 0x03c7, 0x03c7, 0x03ca, 0x03ca, 0x0000, 0x0000,
/* 0x03d0 .. 0x03df */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03d2, 0x0301,
- 0x03d2, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x03cd, 0x0000, 0x03cf, 0x0000, 0x03d1, 0x03d3, 0x03d3,
+ 0x03d6, 0x03d6, 0x0000, 0x03d9, 0x0000, 0x03db, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x03f0 .. 0x03ff */
+ 0x0000, 0x03dd, 0x0000, 0x03df, 0x0000, 0x03e1, 0x0000, 0x0000,
+ 0x0000, 0x03e3, 0x0000, 0x03e5, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x03e7, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0400 .. 0x040f */
- 0x0415, 0x0300, 0x0415, 0x0308, 0x0000, 0x0000, 0x0413, 0x0301,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0406, 0x0308,
+ 0x03e9, 0x03e9, 0x03ec, 0x03ec, 0x0000, 0x0000, 0x03ef, 0x03ef,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f2, 0x03f2,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x041a, 0x0301, 0x0418, 0x0300, 0x0423, 0x0306, 0x0000, 0x0000,
+ 0x03f5, 0x03f5, 0x03f8, 0x03f8, 0x03fb, 0x03fb, 0x0000, 0x0000,
/* 0x0410 .. 0x041f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0418, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x03fe, 0x03fe, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0430 .. 0x043f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0438, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0401, 0x0401, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0450 .. 0x045f */
- 0x0435, 0x0300, 0x0435, 0x0308, 0x0000, 0x0000, 0x0433, 0x0301,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0456, 0x0308,
+ 0x0404, 0x0404, 0x0407, 0x0407, 0x0000, 0x0000, 0x040a, 0x040a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x040d, 0x040d,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x043a, 0x0301, 0x0438, 0x0300, 0x0443, 0x0306, 0x0000, 0x0000,
+ 0x0410, 0x0410, 0x0413, 0x0413, 0x0416, 0x0416, 0x0000, 0x0000,
/* 0x0470 .. 0x047f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0474, 0x030f, 0x0475, 0x030f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0419, 0x0419, 0x041c, 0x041c,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x04c0 .. 0x04cf */
- 0x0000, 0x0000, 0x0416, 0x0306, 0x0436, 0x0306, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x041f, 0x041f, 0x0422, 0x0422, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x04d0 .. 0x04df */
- 0x0410, 0x0306, 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0415, 0x0306, 0x0435, 0x0306,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x04d8, 0x0308, 0x04d9, 0x0308,
- 0x0416, 0x0308, 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308,
+ 0x0425, 0x0425, 0x0428, 0x0428, 0x042b, 0x042b, 0x042e, 0x042e,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0431, 0x0431, 0x0434, 0x0434,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0437, 0x0437, 0x043a, 0x043a,
+ 0x043d, 0x043d, 0x0440, 0x0440, 0x0443, 0x0443, 0x0446, 0x0446,
/* 0x04e0 .. 0x04ef */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x0304, 0x0438, 0x0304,
- 0x0418, 0x0308, 0x0438, 0x0308, 0x041e, 0x0308, 0x043e, 0x0308,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x04e8, 0x0308, 0x04e9, 0x0308,
- 0x042d, 0x0308, 0x044d, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0449, 0x0449, 0x044c, 0x044c,
+ 0x044f, 0x044f, 0x0452, 0x0452, 0x0455, 0x0455, 0x0458, 0x0458,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x045b, 0x045b, 0x045e, 0x045e,
+ 0x0461, 0x0461, 0x0464, 0x0464, 0x0467, 0x0467, 0x046a, 0x046a,
/* 0x04f0 .. 0x04ff */
- 0x0423, 0x0308, 0x0443, 0x0308, 0x0423, 0x030b, 0x0443, 0x030b,
- 0x0427, 0x0308, 0x0447, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x042b, 0x0308, 0x044b, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x046d, 0x046d, 0x0470, 0x0470, 0x0473, 0x0473, 0x0476, 0x0476,
+ 0x0479, 0x0479, 0x047c, 0x047c, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x047f, 0x047f, 0x0482, 0x0482, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0580 .. 0x058f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0485,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0620 .. 0x062f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0627, 0x0653, 0x0627, 0x0654,
- 0x0648, 0x0654, 0x0627, 0x0655, 0x064a, 0x0654, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0488, 0x0488, 0x048b, 0x048b,
+ 0x048e, 0x048e, 0x0491, 0x0491, 0x0494, 0x0494, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0670 .. 0x067f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0497, 0x0000, 0x049a, 0x0000, 0x049d,
+ 0x0000, 0x04a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x06c0 .. 0x06cf */
- 0x06d5, 0x0654, 0x0000, 0x0000, 0x06c1, 0x0654, 0x0000, 0x0000,
+ 0x04a3, 0x04a3, 0x0000, 0x0000, 0x04a6, 0x04a6, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x06d0 .. 0x06df */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06d2, 0x0654,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a9, 0x04a9,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0920 .. 0x092f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0928, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x04ac, 0x04ac, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0930 .. 0x093f */
- 0x0000, 0x0000, 0x0930, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0933, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x04af, 0x04af, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x04b2, 0x04b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0950 .. 0x095f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0915, 0x093c, 0x0916, 0x093c, 0x0917, 0x093c, 0x091c, 0x093c,
- 0x0921, 0x093c, 0x0922, 0x093c, 0x092b, 0x093c, 0x092f, 0x093c,
+ 0x04b5, 0x04b5, 0x04b8, 0x04b8, 0x04bb, 0x04bb, 0x04be, 0x04be,
+ 0x04c1, 0x04c1, 0x04c4, 0x04c4, 0x04c7, 0x04c7, 0x04ca, 0x04ca,
/* 0x09c0 .. 0x09cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09c7, 0x09be,
- 0x09c7, 0x09d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04cd, 0x04cd,
+ 0x04d0, 0x04d0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x09d0 .. 0x09df */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x09a1, 0x09bc, 0x09a2, 0x09bc, 0x0000, 0x0000, 0x09af, 0x09bc,
+ 0x04d3, 0x04d3, 0x04d6, 0x04d6, 0x0000, 0x0000, 0x04d9, 0x04d9,
/* 0x0a30 .. 0x0a3f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a32, 0x0a3c,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0a38, 0x0a3c, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04dc, 0x04dc,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x04df, 0x04df, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0a50 .. 0x0a5f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0a16, 0x0a3c, 0x0a17, 0x0a3c, 0x0a1c, 0x0a3c,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2b, 0x0a3c, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x04e2, 0x04e2, 0x04e5, 0x04e5, 0x04e8, 0x04e8,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x04eb, 0x04eb, 0x0000, 0x0000,
/* 0x0b40 .. 0x0b4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0b47, 0x0b56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b47, 0x0b3e,
- 0x0b47, 0x0b57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x04ee, 0x04ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x04f1, 0x04f1,
+ 0x04f4, 0x04f4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0b50 .. 0x0b5f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0b21, 0x0b3c, 0x0b22, 0x0b3c, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x04f7, 0x04f7, 0x04fa, 0x04fa, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0b90 .. 0x0b9f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0b92, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x04fd, 0x04fd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0bc0 .. 0x0bcf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0bc6, 0x0bbe, 0x0bc7, 0x0bbe,
- 0x0bc6, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0500, 0x0500, 0x0503, 0x0503,
+ 0x0506, 0x0506, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0c40 .. 0x0c4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0c46, 0x0c56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0509, 0x0509, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0cc0 .. 0x0ccf */
- 0x0cbf, 0x0cd5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cc6, 0x0cd5,
- 0x0cc6, 0x0cd6, 0x0000, 0x0000, 0x0cc6, 0x0cc2, 0x0cca, 0x0cd5,
+ 0x050c, 0x050c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x050f, 0x050f,
+ 0x0512, 0x0512, 0x0000, 0x0000, 0x0515, 0x0515, 0x0518, 0x0518,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0d40 .. 0x0d4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0d46, 0x0d3e, 0x0d47, 0x0d3e,
- 0x0d46, 0x0d57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x051b, 0x051b, 0x051e, 0x051e,
+ 0x0521, 0x0521, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0dd0 .. 0x0ddf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0dd9, 0x0dca, 0x0000, 0x0000,
- 0x0dd9, 0x0dcf, 0x0ddc, 0x0dca, 0x0dd9, 0x0ddf, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0524, 0x0524, 0x0000, 0x0000,
+ 0x0527, 0x0527, 0x052a, 0x052a, 0x052d, 0x052d, 0x0000, 0x0000,
+ /* 0x0e30 .. 0x0e3f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0530,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0eb0 .. 0x0ebf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0533,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0ed0 .. 0x0edf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0536, 0x0000, 0x0539, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x0f00 .. 0x0f0f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x053c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f40 .. 0x0f4f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f42, 0x0fb7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x053e, 0x053e,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0f4c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0541, 0x0541, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f50 .. 0x0f5f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0f51, 0x0fb7, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f56, 0x0fb7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0544, 0x0544, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0547, 0x0547,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0f5b, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x054a, 0x054a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f60 .. 0x0f6f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0f40, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x054d, 0x054d, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f70 .. 0x0f7f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f71, 0x0f72,
- 0x0000, 0x0000, 0x0f71, 0x0f74, 0x0fb2, 0x0f80, 0x0000, 0x0000,
- 0x0fb3, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0550, 0x0550,
+ 0x0000, 0x0000, 0x0553, 0x0553, 0x0556, 0x0556, 0x0000, 0x0559,
+ 0x055c, 0x055c, 0x0000, 0x055f, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f80 .. 0x0f8f */
- 0x0000, 0x0000, 0x0f71, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0562, 0x0562, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f90 .. 0x0f9f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f92, 0x0fb7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0565, 0x0565,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0f9c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0568, 0x0568, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0fa0 .. 0x0faf */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa1, 0x0fb7, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa6, 0x0fb7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x056b, 0x056b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x056e, 0x056e,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0fab, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0571, 0x0571, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0fb0 .. 0x0fbf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0f90, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0574, 0x0574, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1020 .. 0x102f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x102e, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0577, 0x0577, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x10f0 .. 0x10ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x057a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b00 .. 0x1b0f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x1b05, 0x1b35, 0x0000, 0x0000,
- 0x1b07, 0x1b35, 0x0000, 0x0000, 0x1b09, 0x1b35, 0x0000, 0x0000,
- 0x1b0b, 0x1b35, 0x0000, 0x0000, 0x1b0d, 0x1b35, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x057c, 0x057c, 0x0000, 0x0000,
+ 0x057f, 0x057f, 0x0000, 0x0000, 0x0582, 0x0582, 0x0000, 0x0000,
+ 0x0585, 0x0585, 0x0000, 0x0000, 0x0588, 0x0588, 0x0000, 0x0000,
/* 0x1b10 .. 0x1b1f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x1b11, 0x1b35, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x058b, 0x058b, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b30 .. 0x1b3f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b3a, 0x1b35,
- 0x0000, 0x0000, 0x1b3c, 0x1b35, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x058e, 0x058e,
+ 0x0000, 0x0000, 0x0591, 0x0591, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b40 .. 0x1b4f */
- 0x1b3e, 0x1b35, 0x1b3f, 0x1b35, 0x0000, 0x0000, 0x1b42, 0x1b35,
+ 0x0594, 0x0594, 0x0597, 0x0597, 0x0000, 0x0000, 0x059a, 0x059a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1d20 .. 0x1d2f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x059d, 0x0000, 0x059f, 0x0000, 0x05a1, 0x0000, 0x0000,
+ /* 0x1d30 .. 0x1d3f */
+ 0x0000, 0x05a3, 0x0000, 0x05a5, 0x0000, 0x05a7, 0x0000, 0x05a9,
+ 0x0000, 0x05ab, 0x0000, 0x05ad, 0x0000, 0x05af, 0x0000, 0x05b1,
+ 0x0000, 0x05b3, 0x0000, 0x05b5, 0x0000, 0x05b7, 0x0000, 0x0000,
+ 0x0000, 0x05b9, 0x0000, 0x05bb, 0x0000, 0x05bd, 0x0000, 0x05bf,
+ /* 0x1d40 .. 0x1d4f */
+ 0x0000, 0x05c1, 0x0000, 0x05c3, 0x0000, 0x05c5, 0x0000, 0x0006,
+ 0x0000, 0x05c7, 0x0000, 0x05c9, 0x0000, 0x05cb, 0x0000, 0x05cd,
+ 0x0000, 0x05cf, 0x0000, 0x05d1, 0x0000, 0x05d3, 0x0000, 0x05d5,
+ 0x0000, 0x05d7, 0x0000, 0x05d9, 0x0000, 0x0000, 0x0000, 0x05db,
+ /* 0x1d50 .. 0x1d5f */
+ 0x0000, 0x05dd, 0x0000, 0x05df, 0x0000, 0x0019, 0x0000, 0x05e1,
+ 0x0000, 0x05e3, 0x0000, 0x05e5, 0x0000, 0x05e7, 0x0000, 0x05e9,
+ 0x0000, 0x05eb, 0x0000, 0x05ed, 0x0000, 0x05ef, 0x0000, 0x05f1,
+ 0x0000, 0x05f3, 0x0000, 0x03cd, 0x0000, 0x05f5, 0x0000, 0x05f7,
+ /* 0x1d60 .. 0x1d6f */
+ 0x0000, 0x03d9, 0x0000, 0x05f9, 0x0000, 0x05fb, 0x0000, 0x0356,
+ 0x0000, 0x05eb, 0x0000, 0x05f1, 0x0000, 0x03cd, 0x0000, 0x05f5,
+ 0x0000, 0x03df, 0x0000, 0x03d9, 0x0000, 0x05f9, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1d70 .. 0x1d7f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x05fd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x1d90 .. 0x1d9f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05ff,
+ 0x0000, 0x0601, 0x0000, 0x0603, 0x0000, 0x0605, 0x0000, 0x05d7,
+ /* 0x1da0 .. 0x1daf */
+ 0x0000, 0x0607, 0x0000, 0x0609, 0x0000, 0x060b, 0x0000, 0x060d,
+ 0x0000, 0x060f, 0x0000, 0x0611, 0x0000, 0x0613, 0x0000, 0x0615,
+ 0x0000, 0x0617, 0x0000, 0x0619, 0x0000, 0x061b, 0x0000, 0x061d,
+ 0x0000, 0x061f, 0x0000, 0x0621, 0x0000, 0x0623, 0x0000, 0x0625,
+ /* 0x1db0 .. 0x1dbf */
+ 0x0000, 0x0627, 0x0000, 0x0629, 0x0000, 0x062b, 0x0000, 0x062d,
+ 0x0000, 0x062f, 0x0000, 0x0631, 0x0000, 0x0633, 0x0000, 0x0635,
+ 0x0000, 0x0637, 0x0000, 0x0639, 0x0000, 0x063b, 0x0000, 0x063d,
+ 0x0000, 0x063f, 0x0000, 0x0641, 0x0000, 0x0643, 0x0000, 0x03cf,
/* 0x1e00 .. 0x1e0f */
- 0x0041, 0x0325, 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307,
- 0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331,
- 0x00c7, 0x0301, 0x00e7, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307,
- 0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331,
+ 0x0645, 0x0645, 0x0648, 0x0648, 0x064b, 0x064b, 0x064e, 0x064e,
+ 0x0651, 0x0651, 0x0654, 0x0654, 0x0657, 0x0657, 0x065a, 0x065a,
+ 0x065d, 0x065d, 0x0660, 0x0660, 0x0663, 0x0663, 0x0666, 0x0666,
+ 0x0669, 0x0669, 0x066c, 0x066c, 0x066f, 0x066f, 0x0672, 0x0672,
/* 0x1e10 .. 0x1e1f */
- 0x0044, 0x0327, 0x0064, 0x0327, 0x0044, 0x032d, 0x0064, 0x032d,
- 0x0112, 0x0300, 0x0113, 0x0300, 0x0112, 0x0301, 0x0113, 0x0301,
- 0x0045, 0x032d, 0x0065, 0x032d, 0x0045, 0x0330, 0x0065, 0x0330,
- 0x0228, 0x0306, 0x0229, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307,
+ 0x0675, 0x0675, 0x0678, 0x0678, 0x067b, 0x067b, 0x067e, 0x067e,
+ 0x0681, 0x0681, 0x0684, 0x0684, 0x0687, 0x0687, 0x068a, 0x068a,
+ 0x068d, 0x068d, 0x0690, 0x0690, 0x0693, 0x0693, 0x0696, 0x0696,
+ 0x0699, 0x0699, 0x069c, 0x069c, 0x069f, 0x069f, 0x06a2, 0x06a2,
/* 0x1e20 .. 0x1e2f */
- 0x0047, 0x0304, 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307,
- 0x0048, 0x0323, 0x0068, 0x0323, 0x0048, 0x0308, 0x0068, 0x0308,
- 0x0048, 0x0327, 0x0068, 0x0327, 0x0048, 0x032e, 0x0068, 0x032e,
- 0x0049, 0x0330, 0x0069, 0x0330, 0x00cf, 0x0301, 0x00ef, 0x0301,
+ 0x06a5, 0x06a5, 0x06a8, 0x06a8, 0x06ab, 0x06ab, 0x06ae, 0x06ae,
+ 0x06b1, 0x06b1, 0x06b4, 0x06b4, 0x06b7, 0x06b7, 0x06ba, 0x06ba,
+ 0x06bd, 0x06bd, 0x06c0, 0x06c0, 0x06c3, 0x06c3, 0x06c6, 0x06c6,
+ 0x06c9, 0x06c9, 0x06cc, 0x06cc, 0x06cf, 0x06cf, 0x06d2, 0x06d2,
/* 0x1e30 .. 0x1e3f */
- 0x004b, 0x0301, 0x006b, 0x0301, 0x004b, 0x0323, 0x006b, 0x0323,
- 0x004b, 0x0331, 0x006b, 0x0331, 0x004c, 0x0323, 0x006c, 0x0323,
- 0x1e36, 0x0304, 0x1e37, 0x0304, 0x004c, 0x0331, 0x006c, 0x0331,
- 0x004c, 0x032d, 0x006c, 0x032d, 0x004d, 0x0301, 0x006d, 0x0301,
+ 0x06d5, 0x06d5, 0x06d8, 0x06d8, 0x06db, 0x06db, 0x06de, 0x06de,
+ 0x06e1, 0x06e1, 0x06e4, 0x06e4, 0x06e7, 0x06e7, 0x06ea, 0x06ea,
+ 0x06ed, 0x06ed, 0x06f0, 0x06f0, 0x06f3, 0x06f3, 0x06f6, 0x06f6,
+ 0x06f9, 0x06f9, 0x06fc, 0x06fc, 0x06ff, 0x06ff, 0x0702, 0x0702,
/* 0x1e40 .. 0x1e4f */
- 0x004d, 0x0307, 0x006d, 0x0307, 0x004d, 0x0323, 0x006d, 0x0323,
- 0x004e, 0x0307, 0x006e, 0x0307, 0x004e, 0x0323, 0x006e, 0x0323,
- 0x004e, 0x0331, 0x006e, 0x0331, 0x004e, 0x032d, 0x006e, 0x032d,
- 0x00d5, 0x0301, 0x00f5, 0x0301, 0x00d5, 0x0308, 0x00f5, 0x0308,
+ 0x0705, 0x0705, 0x0708, 0x0708, 0x070b, 0x070b, 0x070e, 0x070e,
+ 0x0711, 0x0711, 0x0714, 0x0714, 0x0717, 0x0717, 0x071a, 0x071a,
+ 0x071d, 0x071d, 0x0720, 0x0720, 0x0723, 0x0723, 0x0726, 0x0726,
+ 0x0729, 0x0729, 0x072c, 0x072c, 0x072f, 0x072f, 0x0732, 0x0732,
/* 0x1e50 .. 0x1e5f */
- 0x014c, 0x0300, 0x014d, 0x0300, 0x014c, 0x0301, 0x014d, 0x0301,
- 0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307, 0x0070, 0x0307,
- 0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, 0x0072, 0x0323,
- 0x1e5a, 0x0304, 0x1e5b, 0x0304, 0x0052, 0x0331, 0x0072, 0x0331,
+ 0x0735, 0x0735, 0x0738, 0x0738, 0x073b, 0x073b, 0x073e, 0x073e,
+ 0x0741, 0x0741, 0x0744, 0x0744, 0x0747, 0x0747, 0x074a, 0x074a,
+ 0x074d, 0x074d, 0x0750, 0x0750, 0x0753, 0x0753, 0x0756, 0x0756,
+ 0x0759, 0x0759, 0x075c, 0x075c, 0x075f, 0x075f, 0x0762, 0x0762,
/* 0x1e60 .. 0x1e6f */
- 0x0053, 0x0307, 0x0073, 0x0307, 0x0053, 0x0323, 0x0073, 0x0323,
- 0x015a, 0x0307, 0x015b, 0x0307, 0x0160, 0x0307, 0x0161, 0x0307,
- 0x1e62, 0x0307, 0x1e63, 0x0307, 0x0054, 0x0307, 0x0074, 0x0307,
- 0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, 0x0074, 0x0331,
+ 0x0765, 0x0765, 0x0768, 0x0768, 0x076b, 0x076b, 0x076e, 0x076e,
+ 0x0771, 0x0771, 0x0774, 0x0774, 0x0777, 0x0777, 0x077a, 0x077a,
+ 0x077d, 0x077d, 0x0780, 0x0780, 0x0783, 0x0783, 0x0786, 0x0786,
+ 0x0789, 0x0789, 0x078c, 0x078c, 0x078f, 0x078f, 0x0792, 0x0792,
/* 0x1e70 .. 0x1e7f */
- 0x0054, 0x032d, 0x0074, 0x032d, 0x0055, 0x0324, 0x0075, 0x0324,
- 0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032d, 0x0075, 0x032d,
- 0x0168, 0x0301, 0x0169, 0x0301, 0x016a, 0x0308, 0x016b, 0x0308,
- 0x0056, 0x0303, 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323,
+ 0x0795, 0x0795, 0x0798, 0x0798, 0x079b, 0x079b, 0x079e, 0x079e,
+ 0x07a1, 0x07a1, 0x07a4, 0x07a4, 0x07a7, 0x07a7, 0x07aa, 0x07aa,
+ 0x07ad, 0x07ad, 0x07b0, 0x07b0, 0x07b3, 0x07b3, 0x07b6, 0x07b6,
+ 0x07b9, 0x07b9, 0x07bc, 0x07bc, 0x07bf, 0x07bf, 0x07c2, 0x07c2,
/* 0x1e80 .. 0x1e8f */
- 0x0057, 0x0300, 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301,
- 0x0057, 0x0308, 0x0077, 0x0308, 0x0057, 0x0307, 0x0077, 0x0307,
- 0x0057, 0x0323, 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307,
- 0x0058, 0x0308, 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307,
+ 0x07c5, 0x07c5, 0x07c8, 0x07c8, 0x07cb, 0x07cb, 0x07ce, 0x07ce,
+ 0x07d1, 0x07d1, 0x07d4, 0x07d4, 0x07d7, 0x07d7, 0x07da, 0x07da,
+ 0x07dd, 0x07dd, 0x07e0, 0x07e0, 0x07e3, 0x07e3, 0x07e6, 0x07e6,
+ 0x07e9, 0x07e9, 0x07ec, 0x07ec, 0x07ef, 0x07ef, 0x07f2, 0x07f2,
/* 0x1e90 .. 0x1e9f */
- 0x005a, 0x0302, 0x007a, 0x0302, 0x005a, 0x0323, 0x007a, 0x0323,
- 0x005a, 0x0331, 0x007a, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308,
- 0x0077, 0x030a, 0x0079, 0x030a, 0x0000, 0x0000, 0x017f, 0x0307,
+ 0x07f5, 0x07f5, 0x07f8, 0x07f8, 0x07fb, 0x07fb, 0x07fe, 0x07fe,
+ 0x0801, 0x0801, 0x0804, 0x0804, 0x0807, 0x0807, 0x080a, 0x080a,
+ 0x080d, 0x080d, 0x0810, 0x0810, 0x0000, 0x0813, 0x0816, 0x0816,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1ea0 .. 0x1eaf */
- 0x0041, 0x0323, 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309,
- 0x00c2, 0x0301, 0x00e2, 0x0301, 0x00c2, 0x0300, 0x00e2, 0x0300,
- 0x00c2, 0x0309, 0x00e2, 0x0309, 0x00c2, 0x0303, 0x00e2, 0x0303,
- 0x1ea0, 0x0302, 0x1ea1, 0x0302, 0x0102, 0x0301, 0x0103, 0x0301,
+ 0x0819, 0x0819, 0x081c, 0x081c, 0x081f, 0x081f, 0x0822, 0x0822,
+ 0x0825, 0x0825, 0x0828, 0x0828, 0x082b, 0x082b, 0x082e, 0x082e,
+ 0x0831, 0x0831, 0x0834, 0x0834, 0x0837, 0x0837, 0x083a, 0x083a,
+ 0x083d, 0x083d, 0x0840, 0x0840, 0x0843, 0x0843, 0x0846, 0x0846,
/* 0x1eb0 .. 0x1ebf */
- 0x0102, 0x0300, 0x0103, 0x0300, 0x0102, 0x0309, 0x0103, 0x0309,
- 0x0102, 0x0303, 0x0103, 0x0303, 0x1ea0, 0x0306, 0x1ea1, 0x0306,
- 0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, 0x0065, 0x0309,
- 0x0045, 0x0303, 0x0065, 0x0303, 0x00ca, 0x0301, 0x00ea, 0x0301,
+ 0x0849, 0x0849, 0x084c, 0x084c, 0x084f, 0x084f, 0x0852, 0x0852,
+ 0x0855, 0x0855, 0x0858, 0x0858, 0x085b, 0x085b, 0x085e, 0x085e,
+ 0x0861, 0x0861, 0x0864, 0x0864, 0x0867, 0x0867, 0x086a, 0x086a,
+ 0x086d, 0x086d, 0x0870, 0x0870, 0x0873, 0x0873, 0x0876, 0x0876,
/* 0x1ec0 .. 0x1ecf */
- 0x00ca, 0x0300, 0x00ea, 0x0300, 0x00ca, 0x0309, 0x00ea, 0x0309,
- 0x00ca, 0x0303, 0x00ea, 0x0303, 0x1eb8, 0x0302, 0x1eb9, 0x0302,
- 0x0049, 0x0309, 0x0069, 0x0309, 0x0049, 0x0323, 0x0069, 0x0323,
- 0x004f, 0x0323, 0x006f, 0x0323, 0x004f, 0x0309, 0x006f, 0x0309,
+ 0x0879, 0x0879, 0x087c, 0x087c, 0x087f, 0x087f, 0x0882, 0x0882,
+ 0x0885, 0x0885, 0x0888, 0x0888, 0x088b, 0x088b, 0x088e, 0x088e,
+ 0x0891, 0x0891, 0x0894, 0x0894, 0x0897, 0x0897, 0x089a, 0x089a,
+ 0x089d, 0x089d, 0x08a0, 0x08a0, 0x08a3, 0x08a3, 0x08a6, 0x08a6,
/* 0x1ed0 .. 0x1edf */
- 0x00d4, 0x0301, 0x00f4, 0x0301, 0x00d4, 0x0300, 0x00f4, 0x0300,
- 0x00d4, 0x0309, 0x00f4, 0x0309, 0x00d4, 0x0303, 0x00f4, 0x0303,
- 0x1ecc, 0x0302, 0x1ecd, 0x0302, 0x01a0, 0x0301, 0x01a1, 0x0301,
- 0x01a0, 0x0300, 0x01a1, 0x0300, 0x01a0, 0x0309, 0x01a1, 0x0309,
+ 0x08a9, 0x08a9, 0x08ac, 0x08ac, 0x08af, 0x08af, 0x08b2, 0x08b2,
+ 0x08b5, 0x08b5, 0x08b8, 0x08b8, 0x08bb, 0x08bb, 0x08be, 0x08be,
+ 0x08c1, 0x08c1, 0x08c4, 0x08c4, 0x08c7, 0x08c7, 0x08ca, 0x08ca,
+ 0x08cd, 0x08cd, 0x08d0, 0x08d0, 0x08d3, 0x08d3, 0x08d6, 0x08d6,
/* 0x1ee0 .. 0x1eef */
- 0x01a0, 0x0303, 0x01a1, 0x0303, 0x01a0, 0x0323, 0x01a1, 0x0323,
- 0x0055, 0x0323, 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309,
- 0x01af, 0x0301, 0x01b0, 0x0301, 0x01af, 0x0300, 0x01b0, 0x0300,
- 0x01af, 0x0309, 0x01b0, 0x0309, 0x01af, 0x0303, 0x01b0, 0x0303,
+ 0x08d9, 0x08d9, 0x08dc, 0x08dc, 0x08df, 0x08df, 0x08e2, 0x08e2,
+ 0x08e5, 0x08e5, 0x08e8, 0x08e8, 0x08eb, 0x08eb, 0x08ee, 0x08ee,
+ 0x08f1, 0x08f1, 0x08f4, 0x08f4, 0x08f7, 0x08f7, 0x08fa, 0x08fa,
+ 0x08fd, 0x08fd, 0x0900, 0x0900, 0x0903, 0x0903, 0x0906, 0x0906,
/* 0x1ef0 .. 0x1eff */
- 0x01af, 0x0323, 0x01b0, 0x0323, 0x0059, 0x0300, 0x0079, 0x0300,
- 0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, 0x0079, 0x0309,
- 0x0059, 0x0303, 0x0079, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0909, 0x0909, 0x090c, 0x090c, 0x090f, 0x090f, 0x0912, 0x0912,
+ 0x0915, 0x0915, 0x0918, 0x0918, 0x091b, 0x091b, 0x091e, 0x091e,
+ 0x0921, 0x0921, 0x0924, 0x0924, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f00 .. 0x1f0f */
- 0x03b1, 0x0313, 0x03b1, 0x0314, 0x1f00, 0x0300, 0x1f01, 0x0300,
- 0x1f00, 0x0301, 0x1f01, 0x0301, 0x1f00, 0x0342, 0x1f01, 0x0342,
- 0x0391, 0x0313, 0x0391, 0x0314, 0x1f08, 0x0300, 0x1f09, 0x0300,
- 0x1f08, 0x0301, 0x1f09, 0x0301, 0x1f08, 0x0342, 0x1f09, 0x0342,
+ 0x0927, 0x0927, 0x092a, 0x092a, 0x092d, 0x092d, 0x0930, 0x0930,
+ 0x0933, 0x0933, 0x0936, 0x0936, 0x0939, 0x0939, 0x093c, 0x093c,
+ 0x093f, 0x093f, 0x0942, 0x0942, 0x0945, 0x0945, 0x0948, 0x0948,
+ 0x094b, 0x094b, 0x094e, 0x094e, 0x0951, 0x0951, 0x0954, 0x0954,
/* 0x1f10 .. 0x1f1f */
- 0x03b5, 0x0313, 0x03b5, 0x0314, 0x1f10, 0x0300, 0x1f11, 0x0300,
- 0x1f10, 0x0301, 0x1f11, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0395, 0x0313, 0x0395, 0x0314, 0x1f18, 0x0300, 0x1f19, 0x0300,
- 0x1f18, 0x0301, 0x1f19, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0957, 0x0957, 0x095a, 0x095a, 0x095d, 0x095d, 0x0960, 0x0960,
+ 0x0963, 0x0963, 0x0966, 0x0966, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0969, 0x0969, 0x096c, 0x096c, 0x096f, 0x096f, 0x0972, 0x0972,
+ 0x0975, 0x0975, 0x0978, 0x0978, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f20 .. 0x1f2f */
- 0x03b7, 0x0313, 0x03b7, 0x0314, 0x1f20, 0x0300, 0x1f21, 0x0300,
- 0x1f20, 0x0301, 0x1f21, 0x0301, 0x1f20, 0x0342, 0x1f21, 0x0342,
- 0x0397, 0x0313, 0x0397, 0x0314, 0x1f28, 0x0300, 0x1f29, 0x0300,
- 0x1f28, 0x0301, 0x1f29, 0x0301, 0x1f28, 0x0342, 0x1f29, 0x0342,
+ 0x097b, 0x097b, 0x097e, 0x097e, 0x0981, 0x0981, 0x0984, 0x0984,
+ 0x0987, 0x0987, 0x098a, 0x098a, 0x098d, 0x098d, 0x0990, 0x0990,
+ 0x0993, 0x0993, 0x0996, 0x0996, 0x0999, 0x0999, 0x099c, 0x099c,
+ 0x099f, 0x099f, 0x09a2, 0x09a2, 0x09a5, 0x09a5, 0x09a8, 0x09a8,
/* 0x1f30 .. 0x1f3f */
- 0x03b9, 0x0313, 0x03b9, 0x0314, 0x1f30, 0x0300, 0x1f31, 0x0300,
- 0x1f30, 0x0301, 0x1f31, 0x0301, 0x1f30, 0x0342, 0x1f31, 0x0342,
- 0x0399, 0x0313, 0x0399, 0x0314, 0x1f38, 0x0300, 0x1f39, 0x0300,
- 0x1f38, 0x0301, 0x1f39, 0x0301, 0x1f38, 0x0342, 0x1f39, 0x0342,
+ 0x09ab, 0x09ab, 0x09ae, 0x09ae, 0x09b1, 0x09b1, 0x09b4, 0x09b4,
+ 0x09b7, 0x09b7, 0x09ba, 0x09ba, 0x09bd, 0x09bd, 0x09c0, 0x09c0,
+ 0x09c3, 0x09c3, 0x09c6, 0x09c6, 0x09c9, 0x09c9, 0x09cc, 0x09cc,
+ 0x09cf, 0x09cf, 0x09d2, 0x09d2, 0x09d5, 0x09d5, 0x09d8, 0x09d8,
/* 0x1f40 .. 0x1f4f */
- 0x03bf, 0x0313, 0x03bf, 0x0314, 0x1f40, 0x0300, 0x1f41, 0x0300,
- 0x1f40, 0x0301, 0x1f41, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x039f, 0x0313, 0x039f, 0x0314, 0x1f48, 0x0300, 0x1f49, 0x0300,
- 0x1f48, 0x0301, 0x1f49, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x09db, 0x09db, 0x09de, 0x09de, 0x09e1, 0x09e1, 0x09e4, 0x09e4,
+ 0x09e7, 0x09e7, 0x09ea, 0x09ea, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x09ed, 0x09ed, 0x09f0, 0x09f0, 0x09f3, 0x09f3, 0x09f6, 0x09f6,
+ 0x09f9, 0x09f9, 0x09fc, 0x09fc, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f50 .. 0x1f5f */
- 0x03c5, 0x0313, 0x03c5, 0x0314, 0x1f50, 0x0300, 0x1f51, 0x0300,
- 0x1f50, 0x0301, 0x1f51, 0x0301, 0x1f50, 0x0342, 0x1f51, 0x0342,
- 0x0000, 0x0000, 0x03a5, 0x0314, 0x0000, 0x0000, 0x1f59, 0x0300,
- 0x0000, 0x0000, 0x1f59, 0x0301, 0x0000, 0x0000, 0x1f59, 0x0342,
+ 0x09ff, 0x09ff, 0x0a02, 0x0a02, 0x0a05, 0x0a05, 0x0a08, 0x0a08,
+ 0x0a0b, 0x0a0b, 0x0a0e, 0x0a0e, 0x0a11, 0x0a11, 0x0a14, 0x0a14,
+ 0x0000, 0x0000, 0x0a17, 0x0a17, 0x0000, 0x0000, 0x0a1a, 0x0a1a,
+ 0x0000, 0x0000, 0x0a1d, 0x0a1d, 0x0000, 0x0000, 0x0a20, 0x0a20,
/* 0x1f60 .. 0x1f6f */
- 0x03c9, 0x0313, 0x03c9, 0x0314, 0x1f60, 0x0300, 0x1f61, 0x0300,
- 0x1f60, 0x0301, 0x1f61, 0x0301, 0x1f60, 0x0342, 0x1f61, 0x0342,
- 0x03a9, 0x0313, 0x03a9, 0x0314, 0x1f68, 0x0300, 0x1f69, 0x0300,
- 0x1f68, 0x0301, 0x1f69, 0x0301, 0x1f68, 0x0342, 0x1f69, 0x0342,
+ 0x0a23, 0x0a23, 0x0a26, 0x0a26, 0x0a29, 0x0a29, 0x0a2c, 0x0a2c,
+ 0x0a2f, 0x0a2f, 0x0a32, 0x0a32, 0x0a35, 0x0a35, 0x0a38, 0x0a38,
+ 0x0a3b, 0x0a3b, 0x0a3e, 0x0a3e, 0x0a41, 0x0a41, 0x0a44, 0x0a44,
+ 0x0a47, 0x0a47, 0x0a4a, 0x0a4a, 0x0a4d, 0x0a4d, 0x0a50, 0x0a50,
/* 0x1f70 .. 0x1f7f */
- 0x03b1, 0x0300, 0x0000, 0x0000, 0x03b5, 0x0300, 0x0000, 0x0000,
- 0x03b7, 0x0300, 0x0000, 0x0000, 0x03b9, 0x0300, 0x0000, 0x0000,
- 0x03bf, 0x0300, 0x0000, 0x0000, 0x03c5, 0x0300, 0x0000, 0x0000,
- 0x03c9, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0a53, 0x0a53, 0x0a56, 0x0a56, 0x0a58, 0x0a58, 0x0a5b, 0x0a5b,
+ 0x0a5d, 0x0a5d, 0x0a60, 0x0a60, 0x0a62, 0x0a62, 0x0a65, 0x0a65,
+ 0x0a67, 0x0a67, 0x0a6a, 0x0a6a, 0x0a6c, 0x0a6c, 0x0a6f, 0x0a6f,
+ 0x0a71, 0x0a71, 0x0a74, 0x0a74, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f80 .. 0x1f8f */
- 0x1f00, 0x0345, 0x1f01, 0x0345, 0x1f02, 0x0345, 0x1f03, 0x0345,
- 0x1f04, 0x0345, 0x1f05, 0x0345, 0x1f06, 0x0345, 0x1f07, 0x0345,
- 0x1f08, 0x0345, 0x1f09, 0x0345, 0x1f0a, 0x0345, 0x1f0b, 0x0345,
- 0x1f0c, 0x0345, 0x1f0d, 0x0345, 0x1f0e, 0x0345, 0x1f0f, 0x0345,
+ 0x0a76, 0x0a76, 0x0a79, 0x0a79, 0x0a7c, 0x0a7c, 0x0a7f, 0x0a7f,
+ 0x0a82, 0x0a82, 0x0a85, 0x0a85, 0x0a88, 0x0a88, 0x0a8b, 0x0a8b,
+ 0x0a8e, 0x0a8e, 0x0a91, 0x0a91, 0x0a94, 0x0a94, 0x0a97, 0x0a97,
+ 0x0a9a, 0x0a9a, 0x0a9d, 0x0a9d, 0x0aa0, 0x0aa0, 0x0aa3, 0x0aa3,
/* 0x1f90 .. 0x1f9f */
- 0x1f20, 0x0345, 0x1f21, 0x0345, 0x1f22, 0x0345, 0x1f23, 0x0345,
- 0x1f24, 0x0345, 0x1f25, 0x0345, 0x1f26, 0x0345, 0x1f27, 0x0345,
- 0x1f28, 0x0345, 0x1f29, 0x0345, 0x1f2a, 0x0345, 0x1f2b, 0x0345,
- 0x1f2c, 0x0345, 0x1f2d, 0x0345, 0x1f2e, 0x0345, 0x1f2f, 0x0345,
+ 0x0aa6, 0x0aa6, 0x0aa9, 0x0aa9, 0x0aac, 0x0aac, 0x0aaf, 0x0aaf,
+ 0x0ab2, 0x0ab2, 0x0ab5, 0x0ab5, 0x0ab8, 0x0ab8, 0x0abb, 0x0abb,
+ 0x0abe, 0x0abe, 0x0ac1, 0x0ac1, 0x0ac4, 0x0ac4, 0x0ac7, 0x0ac7,
+ 0x0aca, 0x0aca, 0x0acd, 0x0acd, 0x0ad0, 0x0ad0, 0x0ad3, 0x0ad3,
/* 0x1fa0 .. 0x1faf */
- 0x1f60, 0x0345, 0x1f61, 0x0345, 0x1f62, 0x0345, 0x1f63, 0x0345,
- 0x1f64, 0x0345, 0x1f65, 0x0345, 0x1f66, 0x0345, 0x1f67, 0x0345,
- 0x1f68, 0x0345, 0x1f69, 0x0345, 0x1f6a, 0x0345, 0x1f6b, 0x0345,
- 0x1f6c, 0x0345, 0x1f6d, 0x0345, 0x1f6e, 0x0345, 0x1f6f, 0x0345,
+ 0x0ad6, 0x0ad6, 0x0ad9, 0x0ad9, 0x0adc, 0x0adc, 0x0adf, 0x0adf,
+ 0x0ae2, 0x0ae2, 0x0ae5, 0x0ae5, 0x0ae8, 0x0ae8, 0x0aeb, 0x0aeb,
+ 0x0aee, 0x0aee, 0x0af1, 0x0af1, 0x0af4, 0x0af4, 0x0af7, 0x0af7,
+ 0x0afa, 0x0afa, 0x0afd, 0x0afd, 0x0b00, 0x0b00, 0x0b03, 0x0b03,
/* 0x1fb0 .. 0x1fbf */
- 0x03b1, 0x0306, 0x03b1, 0x0304, 0x1f70, 0x0345, 0x03b1, 0x0345,
- 0x03ac, 0x0345, 0x0000, 0x0000, 0x03b1, 0x0342, 0x1fb6, 0x0345,
- 0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0000, 0x0000,
- 0x0391, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0b06, 0x0b06, 0x0b09, 0x0b09, 0x0b0c, 0x0b0c, 0x0b0f, 0x0b0f,
+ 0x0b12, 0x0b12, 0x0000, 0x0000, 0x0b15, 0x0b15, 0x0b18, 0x0b18,
+ 0x0b1b, 0x0b1b, 0x0b1e, 0x0b1e, 0x0b21, 0x0b21, 0x0b24, 0x0b24,
+ 0x0b26, 0x0b26, 0x0000, 0x0b29, 0x0b2c, 0x0b2c, 0x0000, 0x0b29,
/* 0x1fc0 .. 0x1fcf */
- 0x0000, 0x0000, 0x00a8, 0x0342, 0x1f74, 0x0345, 0x03b7, 0x0345,
- 0x03ae, 0x0345, 0x0000, 0x0000, 0x03b7, 0x0342, 0x1fc6, 0x0345,
- 0x0395, 0x0300, 0x0000, 0x0000, 0x0397, 0x0300, 0x0000, 0x0000,
- 0x0397, 0x0345, 0x1fbf, 0x0300, 0x1fbf, 0x0301, 0x1fbf, 0x0342,
+ 0x0000, 0x0b2e, 0x0b31, 0x0b31, 0x0b34, 0x0b34, 0x0b37, 0x0b37,
+ 0x0b3a, 0x0b3a, 0x0000, 0x0000, 0x0b3d, 0x0b3d, 0x0b40, 0x0b40,
+ 0x0b43, 0x0b43, 0x0b46, 0x0b46, 0x0b48, 0x0b48, 0x0b4b, 0x0b4b,
+ 0x0b4d, 0x0b4d, 0x0b50, 0x0b50, 0x0b53, 0x0b53, 0x0b56, 0x0b56,
/* 0x1fd0 .. 0x1fdf */
- 0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0342, 0x03ca, 0x0342,
- 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x1ffe, 0x0300, 0x1ffe, 0x0301, 0x1ffe, 0x0342,
+ 0x0b59, 0x0b59, 0x0b5c, 0x0b5c, 0x0b5f, 0x0b5f, 0x0b62, 0x0b62,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0b64, 0x0b64, 0x0b67, 0x0b67,
+ 0x0b6a, 0x0b6a, 0x0b6d, 0x0b6d, 0x0b70, 0x0b70, 0x0b73, 0x0b73,
+ 0x0000, 0x0000, 0x0b75, 0x0b75, 0x0b78, 0x0b78, 0x0b7b, 0x0b7b,
/* 0x1fe0 .. 0x1fef */
- 0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x0000, 0x0000,
- 0x03c1, 0x0313, 0x03c1, 0x0314, 0x03c5, 0x0342, 0x03cb, 0x0342,
- 0x03a5, 0x0306, 0x03a5, 0x0304, 0x03a5, 0x0300, 0x0000, 0x0000,
- 0x03a1, 0x0314, 0x00a8, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0b7e, 0x0b7e, 0x0b81, 0x0b81, 0x0b84, 0x0b84, 0x0b87, 0x0b87,
+ 0x0b89, 0x0b89, 0x0b8c, 0x0b8c, 0x0b8f, 0x0b8f, 0x0b92, 0x0b92,
+ 0x0b95, 0x0b95, 0x0b98, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9e, 0x0b9e,
+ 0x0ba0, 0x0ba0, 0x0ba3, 0x0ba3, 0x0ba6, 0x0ba6, 0x0ba8, 0x0ba8,
/* 0x1ff0 .. 0x1fff */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x1f7c, 0x0345, 0x03c9, 0x0345,
- 0x03ce, 0x0345, 0x0000, 0x0000, 0x03c9, 0x0342, 0x1ff6, 0x0345,
- 0x039f, 0x0300, 0x0000, 0x0000, 0x03a9, 0x0300, 0x0000, 0x0000,
- 0x03a9, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0baa, 0x0baa, 0x0bad, 0x0bad,
+ 0x0bb0, 0x0bb0, 0x0000, 0x0000, 0x0bb3, 0x0bb3, 0x0bb6, 0x0bb6,
+ 0x0bb9, 0x0bb9, 0x0bbc, 0x0bbc, 0x0bbe, 0x0bbe, 0x0bc1, 0x0bc1,
+ 0x0bc3, 0x0bc3, 0x0bc6, 0x0bc6, 0x0000, 0x0bc8, 0x0000, 0x0000,
+ /* 0x2000 .. 0x200f */
+ 0x0bcb, 0x0bcb, 0x0bcd, 0x0bcd, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,
+ 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2010 .. 0x201f */
+ 0x0000, 0x0000, 0x0000, 0x0bcf, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bd1,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2020 .. 0x202f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0bd4, 0x0000, 0x0bd6, 0x0000, 0x0bd9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
+ /* 0x2030 .. 0x203f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bdd,
+ 0x0000, 0x0be0, 0x0000, 0x0000, 0x0000, 0x0be4, 0x0000, 0x0be7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0beb, 0x0000, 0x0000, 0x0000, 0x0bee, 0x0000, 0x0000,
+ /* 0x2040 .. 0x204f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bf1,
+ 0x0000, 0x0bf4, 0x0000, 0x0bf7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2050 .. 0x205f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bfa,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
+ /* 0x2070 .. 0x207f */
+ 0x0000, 0x0bff, 0x0000, 0x05fb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0c01, 0x0000, 0x0c03, 0x0000, 0x0c05, 0x0000, 0x0c07,
+ 0x0000, 0x0c09, 0x0000, 0x0c0b, 0x0000, 0x0c0d, 0x0000, 0x0c0f,
+ 0x0000, 0x0c11, 0x0000, 0x0c13, 0x0000, 0x0c15, 0x0000, 0x0c17,
+ /* 0x2080 .. 0x208f */
+ 0x0000, 0x0bff, 0x0000, 0x0017, 0x0000, 0x000b, 0x0000, 0x000d,
+ 0x0000, 0x0c01, 0x0000, 0x0c03, 0x0000, 0x0c05, 0x0000, 0x0c07,
+ 0x0000, 0x0c09, 0x0000, 0x0c0b, 0x0000, 0x0c0d, 0x0000, 0x0c0f,
+ 0x0000, 0x0c11, 0x0000, 0x0c13, 0x0000, 0x0c15, 0x0000, 0x0000,
+ /* 0x2090 .. 0x209f */
+ 0x0000, 0x0006, 0x0000, 0x05d1, 0x0000, 0x0019, 0x0000, 0x0378,
+ 0x0000, 0x05d3, 0x0000, 0x0350, 0x0000, 0x05db, 0x0000, 0x0376,
+ 0x0000, 0x05dd, 0x0000, 0x0c17, 0x0000, 0x05e7, 0x0000, 0x0219,
+ 0x0000, 0x05e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x20a0 .. 0x20af */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0c19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2100 .. 0x210f */
+ 0x0000, 0x0c1c, 0x0000, 0x0c20, 0x0000, 0x0c24, 0x0000, 0x0c26,
+ 0x0000, 0x0000, 0x0000, 0x0c29, 0x0000, 0x0c2d, 0x0000, 0x0c31,
+ 0x0000, 0x0000, 0x0000, 0x0c33, 0x0000, 0x05d9, 0x0000, 0x05ab,
+ 0x0000, 0x05ab, 0x0000, 0x05ab, 0x0000, 0x0350, 0x0000, 0x0c36,
+ /* 0x2110 .. 0x211f */
+ 0x0000, 0x05ad, 0x0000, 0x05ad, 0x0000, 0x05b3, 0x0000, 0x0376,
+ 0x0000, 0x0000, 0x0000, 0x05b7, 0x0000, 0x0c38, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x05bd, 0x0000, 0x0c3b, 0x0000, 0x05bf,
+ 0x0000, 0x05bf, 0x0000, 0x05bf, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2120 .. 0x212f */
+ 0x0000, 0x0c3d, 0x0000, 0x0c40, 0x0000, 0x0c44, 0x0000, 0x0000,
+ 0x0000, 0x0c47, 0x0000, 0x0000, 0x0c49, 0x0c49, 0x0000, 0x0000,
+ 0x0000, 0x0c47, 0x0000, 0x0000, 0x05b1, 0x05b1, 0x0c4b, 0x0c4b,
+ 0x0000, 0x05a1, 0x0000, 0x0c24, 0x0000, 0x0000, 0x0000, 0x05d1,
+ /* 0x2130 .. 0x213f */
+ 0x0000, 0x05a5, 0x0000, 0x0c4d, 0x0000, 0x0000, 0x0000, 0x05b5,
+ 0x0000, 0x0019, 0x0000, 0x0c4f, 0x0000, 0x0c51, 0x0000, 0x0c53,
+ 0x0000, 0x0c55, 0x0000, 0x05fb, 0x0000, 0x0000, 0x0000, 0x0c57,
+ 0x0000, 0x03db, 0x0000, 0x05f5, 0x0000, 0x0c5b, 0x0000, 0x0c5d,
+ /* 0x2140 .. 0x214f */
+ 0x0000, 0x0c5f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x05a3, 0x0000, 0x05cf, 0x0000, 0x05d1,
+ 0x0000, 0x05fb, 0x0000, 0x0354, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2150 .. 0x215f */
+ 0x0000, 0x0c61, 0x0000, 0x0c65, 0x0000, 0x0c69, 0x0000, 0x0c6e,
+ 0x0000, 0x0c72, 0x0000, 0x0c76, 0x0000, 0x0c7a, 0x0000, 0x0c7e,
+ 0x0000, 0x0c82, 0x0000, 0x0c86, 0x0000, 0x0c8a, 0x0000, 0x0c8e,
+ 0x0000, 0x0c92, 0x0000, 0x0c96, 0x0000, 0x0c9a, 0x0000, 0x0c9e,
+ /* 0x2160 .. 0x216f */
+ 0x0000, 0x05ad, 0x0000, 0x0ca1, 0x0000, 0x0ca4, 0x0000, 0x0ca8,
+ 0x0000, 0x0cab, 0x0000, 0x0cad, 0x0000, 0x0cb0, 0x0000, 0x0cb4,
+ 0x0000, 0x0cb9, 0x0000, 0x0cbc, 0x0000, 0x0cbe, 0x0000, 0x0cc1,
+ 0x0000, 0x05b3, 0x0000, 0x0c24, 0x0000, 0x05a3, 0x0000, 0x05b5,
+ /* 0x2170 .. 0x217f */
+ 0x0000, 0x05fb, 0x0000, 0x0cc5, 0x0000, 0x0cc8, 0x0000, 0x0ccc,
+ 0x0000, 0x05f1, 0x0000, 0x0ccf, 0x0000, 0x0cd2, 0x0000, 0x0cd6,
+ 0x0000, 0x0cdb, 0x0000, 0x0378, 0x0000, 0x0cde, 0x0000, 0x0ce1,
+ 0x0000, 0x0376, 0x0000, 0x0601, 0x0000, 0x05cf, 0x0000, 0x05dd,
+ /* 0x2180 .. 0x218f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0ce5, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2190 .. 0x219f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2190, 0x0338, 0x2192, 0x0338,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0ce9, 0x0ce9, 0x0cec, 0x0cec,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x21a0 .. 0x21af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2194, 0x0338, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0cef, 0x0cef, 0x0000, 0x0000,
/* 0x21c0 .. 0x21cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x21d0, 0x0338, 0x21d4, 0x0338, 0x21d2, 0x0338,
+ 0x0000, 0x0000, 0x0cf2, 0x0cf2, 0x0cf5, 0x0cf5, 0x0cf8, 0x0cf8,
/* 0x2200 .. 0x220f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2203, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x2208, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x220b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0cfb, 0x0cfb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0cfe, 0x0cfe, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d01, 0x0d01, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2220 .. 0x222f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2223, 0x0338, 0x0000, 0x0000, 0x2225, 0x0338, 0x0000, 0x0000,
+ 0x0d04, 0x0d04, 0x0000, 0x0000, 0x0d07, 0x0d07, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0d0a, 0x0000, 0x0d0d, 0x0000, 0x0000, 0x0000, 0x0d11,
+ /* 0x2230 .. 0x223f */
+ 0x0000, 0x0d14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2240 .. 0x224f */
- 0x0000, 0x0000, 0x223c, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2243, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x2245, 0x0338,
- 0x0000, 0x0000, 0x2248, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0d18, 0x0d18, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d1b, 0x0d1b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d1e, 0x0d1e,
+ 0x0000, 0x0000, 0x0d21, 0x0d21, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2260 .. 0x226f */
- 0x003d, 0x0338, 0x0000, 0x0000, 0x2261, 0x0338, 0x0000, 0x0000,
+ 0x0d24, 0x0d24, 0x0000, 0x0000, 0x0d27, 0x0d27, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x224d, 0x0338, 0x003c, 0x0338, 0x003e, 0x0338,
+ 0x0000, 0x0000, 0x0d2a, 0x0d2a, 0x0d2d, 0x0d2d, 0x0d30, 0x0d30,
/* 0x2270 .. 0x227f */
- 0x2264, 0x0338, 0x2265, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2272, 0x0338, 0x2273, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2276, 0x0338, 0x2277, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d33, 0x0d33, 0x0d36, 0x0d36, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d39, 0x0d39, 0x0d3c, 0x0d3c, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d3f, 0x0d3f, 0x0d42, 0x0d42, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2280 .. 0x228f */
- 0x227a, 0x0338, 0x227b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2282, 0x0338, 0x2283, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2286, 0x0338, 0x2287, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d45, 0x0d45, 0x0d48, 0x0d48, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d4b, 0x0d4b, 0x0d4e, 0x0d4e, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d51, 0x0d51, 0x0d54, 0x0d54, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x22a0 .. 0x22af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x22a2, 0x0338, 0x22a8, 0x0338, 0x22a9, 0x0338, 0x22ab, 0x0338,
+ 0x0d57, 0x0d57, 0x0d5a, 0x0d5a, 0x0d5d, 0x0d5d, 0x0d60, 0x0d60,
/* 0x22e0 .. 0x22ef */
- 0x227c, 0x0338, 0x227d, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338,
+ 0x0d63, 0x0d63, 0x0d66, 0x0d66, 0x0d69, 0x0d69, 0x0d6c, 0x0d6c,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0d6f, 0x0d6f, 0x0d72, 0x0d72,
+ 0x0d75, 0x0d75, 0x0d78, 0x0d78, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2320 .. 0x232f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0d7b, 0x0d7b, 0x0d7d, 0x0d7d, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2460 .. 0x246f */
+ 0x0000, 0x0017, 0x0000, 0x000b, 0x0000, 0x000d, 0x0000, 0x0c01,
+ 0x0000, 0x0c03, 0x0000, 0x0c05, 0x0000, 0x0c07, 0x0000, 0x0c09,
+ 0x0000, 0x0c0b, 0x0000, 0x0d7f, 0x0000, 0x0d82, 0x0000, 0x0d85,
+ 0x0000, 0x0d88, 0x0000, 0x0d8b, 0x0000, 0x0d8e, 0x0000, 0x0d91,
+ /* 0x2470 .. 0x247f */
+ 0x0000, 0x0d94, 0x0000, 0x0d97, 0x0000, 0x0d9a, 0x0000, 0x0d9d,
+ 0x0000, 0x0da0, 0x0000, 0x0da4, 0x0000, 0x0da8, 0x0000, 0x0dac,
+ 0x0000, 0x0db0, 0x0000, 0x0db4, 0x0000, 0x0db8, 0x0000, 0x0dbc,
+ 0x0000, 0x0dc0, 0x0000, 0x0dc4, 0x0000, 0x0dc9, 0x0000, 0x0dce,
+ /* 0x2480 .. 0x248f */
+ 0x0000, 0x0dd3, 0x0000, 0x0dd8, 0x0000, 0x0ddd, 0x0000, 0x0de2,
+ 0x0000, 0x0de7, 0x0000, 0x0dec, 0x0000, 0x0df1, 0x0000, 0x0df6,
+ 0x0000, 0x0dfb, 0x0000, 0x0dfe, 0x0000, 0x0e01, 0x0000, 0x0e04,
+ 0x0000, 0x0e07, 0x0000, 0x0e0a, 0x0000, 0x0e0d, 0x0000, 0x0e10,
+ /* 0x2490 .. 0x249f */
+ 0x0000, 0x0e13, 0x0000, 0x0e16, 0x0000, 0x0e1a, 0x0000, 0x0e1e,
+ 0x0000, 0x0e22, 0x0000, 0x0e26, 0x0000, 0x0e2a, 0x0000, 0x0e2e,
+ 0x0000, 0x0e32, 0x0000, 0x0e36, 0x0000, 0x0e3a, 0x0000, 0x0e3e,
+ 0x0000, 0x0e42, 0x0000, 0x0e46, 0x0000, 0x0e4a, 0x0000, 0x0e4e,
+ /* 0x24a0 .. 0x24af */
+ 0x0000, 0x0e52, 0x0000, 0x0e56, 0x0000, 0x0e5a, 0x0000, 0x0e5e,
+ 0x0000, 0x0e62, 0x0000, 0x0e66, 0x0000, 0x0e6a, 0x0000, 0x0e6e,
+ 0x0000, 0x0e72, 0x0000, 0x0e76, 0x0000, 0x0e7a, 0x0000, 0x0e7e,
+ 0x0000, 0x0e82, 0x0000, 0x0e86, 0x0000, 0x0e8a, 0x0000, 0x0e8e,
+ /* 0x24b0 .. 0x24bf */
+ 0x0000, 0x0e92, 0x0000, 0x0e96, 0x0000, 0x0e9a, 0x0000, 0x0e9e,
+ 0x0000, 0x0ea2, 0x0000, 0x0ea6, 0x0000, 0x059d, 0x0000, 0x05a1,
+ 0x0000, 0x0c24, 0x0000, 0x05a3, 0x0000, 0x05a5, 0x0000, 0x0c4d,
+ 0x0000, 0x05a9, 0x0000, 0x05ab, 0x0000, 0x05ad, 0x0000, 0x05af,
+ /* 0x24c0 .. 0x24cf */
+ 0x0000, 0x05b1, 0x0000, 0x05b3, 0x0000, 0x05b5, 0x0000, 0x05b7,
+ 0x0000, 0x05b9, 0x0000, 0x05bd, 0x0000, 0x0c3b, 0x0000, 0x05bf,
+ 0x0000, 0x0eaa, 0x0000, 0x05c1, 0x0000, 0x05c3, 0x0000, 0x0cab,
+ 0x0000, 0x05c5, 0x0000, 0x0cbc, 0x0000, 0x0eac, 0x0000, 0x0c47,
+ /* 0x24d0 .. 0x24df */
+ 0x0000, 0x0006, 0x0000, 0x05cd, 0x0000, 0x0601, 0x0000, 0x05cf,
+ 0x0000, 0x05d1, 0x0000, 0x0607, 0x0000, 0x05d9, 0x0000, 0x0350,
+ 0x0000, 0x05fb, 0x0000, 0x0354, 0x0000, 0x05db, 0x0000, 0x0376,
+ 0x0000, 0x05dd, 0x0000, 0x0c17, 0x0000, 0x0019, 0x0000, 0x05e7,
+ /* 0x24e0 .. 0x24ef */
+ 0x0000, 0x0eae, 0x0000, 0x0356, 0x0000, 0x0219, 0x0000, 0x05e9,
+ 0x0000, 0x05eb, 0x0000, 0x05f1, 0x0000, 0x035e, 0x0000, 0x0378,
+ 0x0000, 0x0360, 0x0000, 0x063d, 0x0000, 0x0bff, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2a00 .. 0x2a0f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0eb0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2a70 .. 0x2a7f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0eb5, 0x0000, 0x0eb9, 0x0000, 0x0ebc, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x22b2, 0x0338, 0x22b3, 0x0338,
- 0x22b4, 0x0338, 0x22b5, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2ad0 .. 0x2adf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2add, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0ec0, 0x0ec0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2c70 .. 0x2c7f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0354, 0x0000, 0x0cab, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2d60 .. 0x2d6f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ec3,
+ /* 0x2e90 .. 0x2e9f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ec5,
+ /* 0x2ef0 .. 0x2eff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ec7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x2f00 .. 0x2f0f */
+ 0x0000, 0x0ec9, 0x0000, 0x0ecb, 0x0000, 0x0ecd, 0x0000, 0x0ecf,
+ 0x0000, 0x0ed1, 0x0000, 0x0ed3, 0x0000, 0x0ed5, 0x0000, 0x0ed7,
+ 0x0000, 0x0ed9, 0x0000, 0x0edb, 0x0000, 0x0edd, 0x0000, 0x0edf,
+ 0x0000, 0x0ee1, 0x0000, 0x0ee3, 0x0000, 0x0ee5, 0x0000, 0x0ee7,
+ /* 0x2f10 .. 0x2f1f */
+ 0x0000, 0x0ee9, 0x0000, 0x0eeb, 0x0000, 0x0eed, 0x0000, 0x0eef,
+ 0x0000, 0x0ef1, 0x0000, 0x0ef3, 0x0000, 0x0ef5, 0x0000, 0x0ef7,
+ 0x0000, 0x0ef9, 0x0000, 0x0efb, 0x0000, 0x0efd, 0x0000, 0x0eff,
+ 0x0000, 0x0f01, 0x0000, 0x0f03, 0x0000, 0x0f05, 0x0000, 0x0f07,
+ /* 0x2f20 .. 0x2f2f */
+ 0x0000, 0x0f09, 0x0000, 0x0f0b, 0x0000, 0x0f0d, 0x0000, 0x0f0f,
+ 0x0000, 0x0f11, 0x0000, 0x0f13, 0x0000, 0x0f15, 0x0000, 0x0f17,
+ 0x0000, 0x0f19, 0x0000, 0x0f1b, 0x0000, 0x0f1d, 0x0000, 0x0f1f,
+ 0x0000, 0x0f21, 0x0000, 0x0f23, 0x0000, 0x0f25, 0x0000, 0x0f27,
+ /* 0x2f30 .. 0x2f3f */
+ 0x0000, 0x0f29, 0x0000, 0x0f2b, 0x0000, 0x0f2d, 0x0000, 0x0f2f,
+ 0x0000, 0x0f31, 0x0000, 0x0f33, 0x0000, 0x0f35, 0x0000, 0x0f37,
+ 0x0000, 0x0f39, 0x0000, 0x0f3b, 0x0000, 0x0f3d, 0x0000, 0x0f3f,
+ 0x0000, 0x0f41, 0x0000, 0x0f43, 0x0000, 0x0f45, 0x0000, 0x0f47,
+ /* 0x2f40 .. 0x2f4f */
+ 0x0000, 0x0f49, 0x0000, 0x0f4b, 0x0000, 0x0f4d, 0x0000, 0x0f4f,
+ 0x0000, 0x0f51, 0x0000, 0x0f53, 0x0000, 0x0f55, 0x0000, 0x0f57,
+ 0x0000, 0x0f59, 0x0000, 0x0f5b, 0x0000, 0x0f5d, 0x0000, 0x0f5f,
+ 0x0000, 0x0f61, 0x0000, 0x0f63, 0x0000, 0x0f65, 0x0000, 0x0f67,
+ /* 0x2f50 .. 0x2f5f */
+ 0x0000, 0x0f69, 0x0000, 0x0f6b, 0x0000, 0x0f6d, 0x0000, 0x0f6f,
+ 0x0000, 0x0f71, 0x0000, 0x0f73, 0x0000, 0x0f75, 0x0000, 0x0f77,
+ 0x0000, 0x0f79, 0x0000, 0x0f7b, 0x0000, 0x0f7d, 0x0000, 0x0f7f,
+ 0x0000, 0x0f81, 0x0000, 0x0f83, 0x0000, 0x0f85, 0x0000, 0x0f87,
+ /* 0x2f60 .. 0x2f6f */
+ 0x0000, 0x0f89, 0x0000, 0x0f8b, 0x0000, 0x0f8d, 0x0000, 0x0f8f,
+ 0x0000, 0x0f91, 0x0000, 0x0f93, 0x0000, 0x0f95, 0x0000, 0x0f97,
+ 0x0000, 0x0f99, 0x0000, 0x0f9b, 0x0000, 0x0f9d, 0x0000, 0x0f9f,
+ 0x0000, 0x0fa1, 0x0000, 0x0fa3, 0x0000, 0x0fa5, 0x0000, 0x0fa7,
+ /* 0x2f70 .. 0x2f7f */
+ 0x0000, 0x0fa9, 0x0000, 0x0fab, 0x0000, 0x0fad, 0x0000, 0x0faf,
+ 0x0000, 0x0fb1, 0x0000, 0x0fb3, 0x0000, 0x0fb5, 0x0000, 0x0fb7,
+ 0x0000, 0x0fb9, 0x0000, 0x0fbb, 0x0000, 0x0fbd, 0x0000, 0x0fbf,
+ 0x0000, 0x0fc1, 0x0000, 0x0fc3, 0x0000, 0x0fc5, 0x0000, 0x0fc7,
+ /* 0x2f80 .. 0x2f8f */
+ 0x0000, 0x0fc9, 0x0000, 0x0fcb, 0x0000, 0x0fcd, 0x0000, 0x0fcf,
+ 0x0000, 0x0fd1, 0x0000, 0x0fd3, 0x0000, 0x0fd5, 0x0000, 0x0fd7,
+ 0x0000, 0x0fd9, 0x0000, 0x0fdb, 0x0000, 0x0fdd, 0x0000, 0x0fdf,
+ 0x0000, 0x0fe1, 0x0000, 0x0fe3, 0x0000, 0x0fe5, 0x0000, 0x0fe7,
+ /* 0x2f90 .. 0x2f9f */
+ 0x0000, 0x0fe9, 0x0000, 0x0feb, 0x0000, 0x0fed, 0x0000, 0x0fef,
+ 0x0000, 0x0ff1, 0x0000, 0x0ff3, 0x0000, 0x0ff5, 0x0000, 0x0ff7,
+ 0x0000, 0x0ff9, 0x0000, 0x0ffb, 0x0000, 0x0ffd, 0x0000, 0x0fff,
+ 0x0000, 0x1001, 0x0000, 0x1003, 0x0000, 0x1005, 0x0000, 0x1007,
+ /* 0x2fa0 .. 0x2faf */
+ 0x0000, 0x1009, 0x0000, 0x100b, 0x0000, 0x100d, 0x0000, 0x100f,
+ 0x0000, 0x1011, 0x0000, 0x1013, 0x0000, 0x1015, 0x0000, 0x1017,
+ 0x0000, 0x1019, 0x0000, 0x101b, 0x0000, 0x101d, 0x0000, 0x101f,
+ 0x0000, 0x1021, 0x0000, 0x1023, 0x0000, 0x1025, 0x0000, 0x1027,
+ /* 0x2fb0 .. 0x2fbf */
+ 0x0000, 0x1029, 0x0000, 0x102b, 0x0000, 0x102d, 0x0000, 0x102f,
+ 0x0000, 0x1031, 0x0000, 0x1033, 0x0000, 0x1035, 0x0000, 0x1037,
+ 0x0000, 0x1039, 0x0000, 0x103b, 0x0000, 0x103d, 0x0000, 0x103f,
+ 0x0000, 0x1041, 0x0000, 0x1043, 0x0000, 0x1045, 0x0000, 0x1047,
+ /* 0x2fc0 .. 0x2fcf */
+ 0x0000, 0x1049, 0x0000, 0x104b, 0x0000, 0x104d, 0x0000, 0x104f,
+ 0x0000, 0x1051, 0x0000, 0x1053, 0x0000, 0x1055, 0x0000, 0x1057,
+ 0x0000, 0x1059, 0x0000, 0x105b, 0x0000, 0x105d, 0x0000, 0x105f,
+ 0x0000, 0x1061, 0x0000, 0x1063, 0x0000, 0x1065, 0x0000, 0x1067,
+ /* 0x2fd0 .. 0x2fdf */
+ 0x0000, 0x1069, 0x0000, 0x106b, 0x0000, 0x106d, 0x0000, 0x106f,
+ 0x0000, 0x1071, 0x0000, 0x1073, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x3000 .. 0x300f */
+ 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x3030 .. 0x303f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1075, 0x0000, 0x0000,
+ 0x0000, 0x0ef7, 0x0000, 0x1077, 0x0000, 0x1079, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3040 .. 0x304f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x304b, 0x3099, 0x0000, 0x0000, 0x304d, 0x3099, 0x0000, 0x0000,
+ 0x107b, 0x107b, 0x0000, 0x0000, 0x107e, 0x107e, 0x0000, 0x0000,
/* 0x3050 .. 0x305f */
- 0x304f, 0x3099, 0x0000, 0x0000, 0x3051, 0x3099, 0x0000, 0x0000,
- 0x3053, 0x3099, 0x0000, 0x0000, 0x3055, 0x3099, 0x0000, 0x0000,
- 0x3057, 0x3099, 0x0000, 0x0000, 0x3059, 0x3099, 0x0000, 0x0000,
- 0x305b, 0x3099, 0x0000, 0x0000, 0x305d, 0x3099, 0x0000, 0x0000,
+ 0x1081, 0x1081, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000,
+ 0x1087, 0x1087, 0x0000, 0x0000, 0x108a, 0x108a, 0x0000, 0x0000,
+ 0x108d, 0x108d, 0x0000, 0x0000, 0x1090, 0x1090, 0x0000, 0x0000,
+ 0x1093, 0x1093, 0x0000, 0x0000, 0x1096, 0x1096, 0x0000, 0x0000,
/* 0x3060 .. 0x306f */
- 0x305f, 0x3099, 0x0000, 0x0000, 0x3061, 0x3099, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x3064, 0x3099, 0x0000, 0x0000, 0x3066, 0x3099,
- 0x0000, 0x0000, 0x3068, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1099, 0x1099, 0x0000, 0x0000, 0x109c, 0x109c, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x109f, 0x109f, 0x0000, 0x0000, 0x10a2, 0x10a2,
+ 0x0000, 0x0000, 0x10a5, 0x10a5, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3070 .. 0x307f */
- 0x306f, 0x3099, 0x306f, 0x309a, 0x0000, 0x0000, 0x3072, 0x3099,
- 0x3072, 0x309a, 0x0000, 0x0000, 0x3075, 0x3099, 0x3075, 0x309a,
- 0x0000, 0x0000, 0x3078, 0x3099, 0x3078, 0x309a, 0x0000, 0x0000,
- 0x307b, 0x3099, 0x307b, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x10a8, 0x10a8, 0x10ab, 0x10ab, 0x0000, 0x0000, 0x10ae, 0x10ae,
+ 0x10b1, 0x10b1, 0x0000, 0x0000, 0x10b4, 0x10b4, 0x10b7, 0x10b7,
+ 0x0000, 0x0000, 0x10ba, 0x10ba, 0x10bd, 0x10bd, 0x0000, 0x0000,
+ 0x10c0, 0x10c0, 0x10c3, 0x10c3, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3090 .. 0x309f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3046, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x309d, 0x3099, 0x0000, 0x0000,
+ 0x10c6, 0x10c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x10c9,
+ 0x0000, 0x10cc, 0x0000, 0x0000, 0x10cf, 0x10cf, 0x0000, 0x10d2,
/* 0x30a0 .. 0x30af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x30ab, 0x3099, 0x0000, 0x0000, 0x30ad, 0x3099, 0x0000, 0x0000,
+ 0x10d5, 0x10d5, 0x0000, 0x0000, 0x10d8, 0x10d8, 0x0000, 0x0000,
/* 0x30b0 .. 0x30bf */
- 0x30af, 0x3099, 0x0000, 0x0000, 0x30b1, 0x3099, 0x0000, 0x0000,
- 0x30b3, 0x3099, 0x0000, 0x0000, 0x30b5, 0x3099, 0x0000, 0x0000,
- 0x30b7, 0x3099, 0x0000, 0x0000, 0x30b9, 0x3099, 0x0000, 0x0000,
- 0x30bb, 0x3099, 0x0000, 0x0000, 0x30bd, 0x3099, 0x0000, 0x0000,
+ 0x10db, 0x10db, 0x0000, 0x0000, 0x10de, 0x10de, 0x0000, 0x0000,
+ 0x10e1, 0x10e1, 0x0000, 0x0000, 0x10e4, 0x10e4, 0x0000, 0x0000,
+ 0x10e7, 0x10e7, 0x0000, 0x0000, 0x10ea, 0x10ea, 0x0000, 0x0000,
+ 0x10ed, 0x10ed, 0x0000, 0x0000, 0x10f0, 0x10f0, 0x0000, 0x0000,
/* 0x30c0 .. 0x30cf */
- 0x30bf, 0x3099, 0x0000, 0x0000, 0x30c1, 0x3099, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x30c4, 0x3099, 0x0000, 0x0000, 0x30c6, 0x3099,
- 0x0000, 0x0000, 0x30c8, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x10f3, 0x10f3, 0x0000, 0x0000, 0x10f6, 0x10f6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x10f9, 0x10f9, 0x0000, 0x0000, 0x10fc, 0x10fc,
+ 0x0000, 0x0000, 0x10ff, 0x10ff, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x30d0 .. 0x30df */
- 0x30cf, 0x3099, 0x30cf, 0x309a, 0x0000, 0x0000, 0x30d2, 0x3099,
- 0x30d2, 0x309a, 0x0000, 0x0000, 0x30d5, 0x3099, 0x30d5, 0x309a,
- 0x0000, 0x0000, 0x30d8, 0x3099, 0x30d8, 0x309a, 0x0000, 0x0000,
- 0x30db, 0x3099, 0x30db, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1102, 0x1102, 0x1105, 0x1105, 0x0000, 0x0000, 0x1108, 0x1108,
+ 0x110b, 0x110b, 0x0000, 0x0000, 0x110e, 0x110e, 0x1111, 0x1111,
+ 0x0000, 0x0000, 0x1114, 0x1114, 0x1117, 0x1117, 0x0000, 0x0000,
+ 0x111a, 0x111a, 0x111d, 0x111d, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x30f0 .. 0x30ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x30a6, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x30ef, 0x3099,
- 0x30f0, 0x3099, 0x30f1, 0x3099, 0x30f2, 0x3099, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x30fd, 0x3099, 0x0000, 0x0000,
- /* 0xfb10 .. 0xfb1f */
+ 0x1120, 0x1120, 0x0000, 0x0000, 0x0000, 0x0000, 0x1123, 0x1123,
+ 0x1126, 0x1126, 0x1129, 0x1129, 0x112c, 0x112c, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x112f, 0x112f, 0x0000, 0x1132,
+ /* 0x3130 .. 0x313f */
+ 0x0000, 0x0000, 0x0000, 0x1135, 0x0000, 0x1137, 0x0000, 0x1139,
+ 0x0000, 0x113b, 0x0000, 0x113d, 0x0000, 0x113f, 0x0000, 0x1141,
+ 0x0000, 0x1143, 0x0000, 0x1145, 0x0000, 0x1147, 0x0000, 0x1149,
+ 0x0000, 0x114b, 0x0000, 0x114d, 0x0000, 0x114f, 0x0000, 0x1151,
+ /* 0x3140 .. 0x314f */
+ 0x0000, 0x1153, 0x0000, 0x1155, 0x0000, 0x1157, 0x0000, 0x1159,
+ 0x0000, 0x115b, 0x0000, 0x115d, 0x0000, 0x115f, 0x0000, 0x1161,
+ 0x0000, 0x1163, 0x0000, 0x1165, 0x0000, 0x1167, 0x0000, 0x1169,
+ 0x0000, 0x116b, 0x0000, 0x116d, 0x0000, 0x116f, 0x0000, 0x1171,
+ /* 0x3150 .. 0x315f */
+ 0x0000, 0x1173, 0x0000, 0x1175, 0x0000, 0x1177, 0x0000, 0x1179,
+ 0x0000, 0x117b, 0x0000, 0x117d, 0x0000, 0x117f, 0x0000, 0x1181,
+ 0x0000, 0x1183, 0x0000, 0x1185, 0x0000, 0x1187, 0x0000, 0x1189,
+ 0x0000, 0x118b, 0x0000, 0x118d, 0x0000, 0x118f, 0x0000, 0x1191,
+ /* 0x3160 .. 0x316f */
+ 0x0000, 0x1193, 0x0000, 0x1195, 0x0000, 0x1197, 0x0000, 0x1199,
+ 0x0000, 0x119b, 0x0000, 0x119d, 0x0000, 0x119f, 0x0000, 0x11a1,
+ 0x0000, 0x11a3, 0x0000, 0x11a5, 0x0000, 0x11a7, 0x0000, 0x11a9,
+ 0x0000, 0x11ab, 0x0000, 0x11ad, 0x0000, 0x11af, 0x0000, 0x11b1,
+ /* 0x3170 .. 0x317f */
+ 0x0000, 0x11b3, 0x0000, 0x11b5, 0x0000, 0x11b7, 0x0000, 0x11b9,
+ 0x0000, 0x11bb, 0x0000, 0x11bd, 0x0000, 0x11bf, 0x0000, 0x11c1,
+ 0x0000, 0x11c3, 0x0000, 0x11c5, 0x0000, 0x11c7, 0x0000, 0x11c9,
+ 0x0000, 0x11cb, 0x0000, 0x11cd, 0x0000, 0x11cf, 0x0000, 0x11d1,
+ /* 0x3180 .. 0x318f */
+ 0x0000, 0x11d3, 0x0000, 0x11d5, 0x0000, 0x11d7, 0x0000, 0x11d9,
+ 0x0000, 0x11db, 0x0000, 0x11dd, 0x0000, 0x11df, 0x0000, 0x11e1,
+ 0x0000, 0x11e3, 0x0000, 0x11e5, 0x0000, 0x11e7, 0x0000, 0x11e9,
+ 0x0000, 0x11eb, 0x0000, 0x11ed, 0x0000, 0x11ef, 0x0000, 0x0000,
+ /* 0x3190 .. 0x319f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ec9, 0x0000, 0x0ed5,
+ 0x0000, 0x11f1, 0x0000, 0x11f3, 0x0000, 0x11f5, 0x0000, 0x11f7,
+ 0x0000, 0x11f9, 0x0000, 0x11fb, 0x0000, 0x0ed1, 0x0000, 0x11fd,
+ 0x0000, 0x11ff, 0x0000, 0x1201, 0x0000, 0x1203, 0x0000, 0x0ed9,
+ /* 0x3200 .. 0x320f */
+ 0x0000, 0x1205, 0x0000, 0x1209, 0x0000, 0x120d, 0x0000, 0x1211,
+ 0x0000, 0x1215, 0x0000, 0x1219, 0x0000, 0x121d, 0x0000, 0x1221,
+ 0x0000, 0x1225, 0x0000, 0x1229, 0x0000, 0x122d, 0x0000, 0x1231,
+ 0x0000, 0x1235, 0x0000, 0x1239, 0x0000, 0x123d, 0x0000, 0x1242,
+ /* 0x3210 .. 0x321f */
+ 0x0000, 0x1247, 0x0000, 0x124c, 0x0000, 0x1251, 0x0000, 0x1256,
+ 0x0000, 0x125b, 0x0000, 0x1260, 0x0000, 0x1265, 0x0000, 0x126a,
+ 0x0000, 0x126f, 0x0000, 0x1274, 0x0000, 0x1279, 0x0000, 0x127e,
+ 0x0000, 0x1283, 0x0000, 0x1288, 0x0000, 0x1290, 0x0000, 0x0000,
+ /* 0x3220 .. 0x322f */
+ 0x0000, 0x1297, 0x0000, 0x129b, 0x0000, 0x129f, 0x0000, 0x12a3,
+ 0x0000, 0x12a7, 0x0000, 0x12ab, 0x0000, 0x12af, 0x0000, 0x12b3,
+ 0x0000, 0x12b7, 0x0000, 0x12bb, 0x0000, 0x12bf, 0x0000, 0x12c3,
+ 0x0000, 0x12c7, 0x0000, 0x12cb, 0x0000, 0x12cf, 0x0000, 0x12d3,
+ /* 0x3230 .. 0x323f */
+ 0x0000, 0x12d7, 0x0000, 0x12db, 0x0000, 0x12df, 0x0000, 0x12e3,
+ 0x0000, 0x12e7, 0x0000, 0x12eb, 0x0000, 0x12ef, 0x0000, 0x12f3,
+ 0x0000, 0x12f7, 0x0000, 0x12fb, 0x0000, 0x12ff, 0x0000, 0x1303,
+ 0x0000, 0x1307, 0x0000, 0x130b, 0x0000, 0x130f, 0x0000, 0x1313,
+ /* 0x3240 .. 0x324f */
+ 0x0000, 0x1317, 0x0000, 0x131b, 0x0000, 0x131f, 0x0000, 0x1323,
+ 0x0000, 0x1327, 0x0000, 0x1329, 0x0000, 0x0f4d, 0x0000, 0x132b,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0x3250 .. 0x325f */
+ 0x0000, 0x132d, 0x0000, 0x1331, 0x0000, 0x1334, 0x0000, 0x1337,
+ 0x0000, 0x133a, 0x0000, 0x133d, 0x0000, 0x1340, 0x0000, 0x1343,
+ 0x0000, 0x1346, 0x0000, 0x1349, 0x0000, 0x134c, 0x0000, 0x134f,
+ 0x0000, 0x1352, 0x0000, 0x1355, 0x0000, 0x1358, 0x0000, 0x135b,
+ /* 0x3260 .. 0x326f */
+ 0x0000, 0x1135, 0x0000, 0x113b, 0x0000, 0x1141, 0x0000, 0x1145,
+ 0x0000, 0x1155, 0x0000, 0x1157, 0x0000, 0x115d, 0x0000, 0x1161,
+ 0x0000, 0x1163, 0x0000, 0x1167, 0x0000, 0x1169, 0x0000, 0x116b,
+ 0x0000, 0x116d, 0x0000, 0x116f, 0x0000, 0x135e, 0x0000, 0x1361,
+ /* 0x3270 .. 0x327f */
+ 0x0000, 0x1364, 0x0000, 0x1367, 0x0000, 0x136a, 0x0000, 0x136d,
+ 0x0000, 0x1370, 0x0000, 0x1373, 0x0000, 0x1376, 0x0000, 0x1379,
+ 0x0000, 0x137c, 0x0000, 0x137f, 0x0000, 0x1382, 0x0000, 0x1385,
+ 0x0000, 0x1388, 0x0000, 0x138e, 0x0000, 0x1393, 0x0000, 0x0000,
+ /* 0x3280 .. 0x328f */
+ 0x0000, 0x0ec9, 0x0000, 0x0ed5, 0x0000, 0x11f1, 0x0000, 0x11f3,
+ 0x0000, 0x1396, 0x0000, 0x1398, 0x0000, 0x139a, 0x0000, 0x0edf,
+ 0x0000, 0x139c, 0x0000, 0x0ef7, 0x0000, 0x0f5b, 0x0000, 0x0f73,
+ 0x0000, 0x0f71, 0x0000, 0x0f5d, 0x0000, 0x1015, 0x0000, 0x0f07,
+ /* 0x3290 .. 0x329f */
+ 0x0000, 0x0f57, 0x0000, 0x139e, 0x0000, 0x13a0, 0x0000, 0x13a2,
+ 0x0000, 0x13a4, 0x0000, 0x13a6, 0x0000, 0x13a8, 0x0000, 0x13aa,
+ 0x0000, 0x13ac, 0x0000, 0x13ae, 0x0000, 0x13b0, 0x0000, 0x0f13,
+ 0x0000, 0x13b2, 0x0000, 0x13b4, 0x0000, 0x13b6, 0x0000, 0x13b8,
+ /* 0x32a0 .. 0x32af */
+ 0x0000, 0x13ba, 0x0000, 0x13bc, 0x0000, 0x13be, 0x0000, 0x13c0,
+ 0x0000, 0x11f5, 0x0000, 0x11f7, 0x0000, 0x11f9, 0x0000, 0x13c2,
+ 0x0000, 0x13c4, 0x0000, 0x13c6, 0x0000, 0x13c8, 0x0000, 0x13ca,
+ 0x0000, 0x13cc, 0x0000, 0x13ce, 0x0000, 0x13d0, 0x0000, 0x13d2,
+ /* 0x32b0 .. 0x32bf */
+ 0x0000, 0x13d4, 0x0000, 0x13d6, 0x0000, 0x13d9, 0x0000, 0x13dc,
+ 0x0000, 0x13df, 0x0000, 0x13e2, 0x0000, 0x13e5, 0x0000, 0x13e8,
+ 0x0000, 0x13eb, 0x0000, 0x13ee, 0x0000, 0x13f1, 0x0000, 0x13f4,
+ 0x0000, 0x13f7, 0x0000, 0x13fa, 0x0000, 0x13fd, 0x0000, 0x1400,
+ /* 0x32c0 .. 0x32cf */
+ 0x0000, 0x1403, 0x0000, 0x1406, 0x0000, 0x1409, 0x0000, 0x140c,
+ 0x0000, 0x140f, 0x0000, 0x1412, 0x0000, 0x1415, 0x0000, 0x1418,
+ 0x0000, 0x141b, 0x0000, 0x141e, 0x0000, 0x1422, 0x0000, 0x1426,
+ 0x0000, 0x142a, 0x0000, 0x142d, 0x0000, 0x1431, 0x0000, 0x1434,
+ /* 0x32d0 .. 0x32df */
+ 0x0000, 0x1438, 0x0000, 0x143a, 0x0000, 0x143c, 0x0000, 0x143e,
+ 0x0000, 0x1440, 0x0000, 0x1442, 0x0000, 0x1444, 0x0000, 0x1446,
+ 0x0000, 0x1448, 0x0000, 0x144a, 0x0000, 0x144c, 0x0000, 0x144e,
+ 0x0000, 0x1450, 0x0000, 0x1452, 0x0000, 0x1454, 0x0000, 0x1456,
+ /* 0x32e0 .. 0x32ef */
+ 0x0000, 0x1458, 0x0000, 0x145a, 0x0000, 0x145c, 0x0000, 0x145e,
+ 0x0000, 0x1460, 0x0000, 0x1462, 0x0000, 0x1464, 0x0000, 0x1466,
+ 0x0000, 0x1468, 0x0000, 0x146a, 0x0000, 0x146c, 0x0000, 0x146e,
+ 0x0000, 0x1470, 0x0000, 0x1472, 0x0000, 0x1474, 0x0000, 0x1476,
+ /* 0x32f0 .. 0x32ff */
+ 0x0000, 0x1478, 0x0000, 0x147a, 0x0000, 0x147c, 0x0000, 0x147e,
+ 0x0000, 0x1480, 0x0000, 0x1482, 0x0000, 0x1484, 0x0000, 0x1486,
+ 0x0000, 0x1488, 0x0000, 0x148a, 0x0000, 0x148c, 0x0000, 0x148e,
+ 0x0000, 0x1490, 0x0000, 0x1492, 0x0000, 0x1494, 0x0000, 0x0000,
+ /* 0x3300 .. 0x330f */
+ 0x0000, 0x1496, 0x0000, 0x149b, 0x0000, 0x14a0, 0x0000, 0x14a5,
+ 0x0000, 0x14a9, 0x0000, 0x14ae, 0x0000, 0x14b2, 0x0000, 0x14b6,
+ 0x0000, 0x14bc, 0x0000, 0x14c1, 0x0000, 0x14c5, 0x0000, 0x14c9,
+ 0x0000, 0x14cd, 0x0000, 0x14d2, 0x0000, 0x14d7, 0x0000, 0x14db,
+ /* 0x3310 .. 0x331f */
+ 0x0000, 0x14df, 0x0000, 0x14e2, 0x0000, 0x14e6, 0x0000, 0x14eb,
+ 0x0000, 0x14f0, 0x0000, 0x14f3, 0x0000, 0x14f9, 0x0000, 0x1500,
+ 0x0000, 0x1506, 0x0000, 0x150a, 0x0000, 0x1510, 0x0000, 0x1516,
+ 0x0000, 0x151b, 0x0000, 0x151f, 0x0000, 0x1523, 0x0000, 0x1527,
+ /* 0x3320 .. 0x332f */
+ 0x0000, 0x152c, 0x0000, 0x1532, 0x0000, 0x1537, 0x0000, 0x153b,
+ 0x0000, 0x153f, 0x0000, 0x1543, 0x0000, 0x1546, 0x0000, 0x1549,
+ 0x0000, 0x154c, 0x0000, 0x154f, 0x0000, 0x1553, 0x0000, 0x1557,
+ 0x0000, 0x155d, 0x0000, 0x1561, 0x0000, 0x1566, 0x0000, 0x156c,
+ /* 0x3330 .. 0x333f */
+ 0x0000, 0x1570, 0x0000, 0x1573, 0x0000, 0x1576, 0x0000, 0x157c,
+ 0x0000, 0x1581, 0x0000, 0x1587, 0x0000, 0x158b, 0x0000, 0x1591,
+ 0x0000, 0x1594, 0x0000, 0x1598, 0x0000, 0x159c, 0x0000, 0x15a0,
+ 0x0000, 0x15a4, 0x0000, 0x15a8, 0x0000, 0x15ad, 0x0000, 0x15b1,
+ /* 0x3340 .. 0x334f */
+ 0x0000, 0x15b4, 0x0000, 0x15b8, 0x0000, 0x15bc, 0x0000, 0x15c0,
+ 0x0000, 0x15c5, 0x0000, 0x15c9, 0x0000, 0x15cd, 0x0000, 0x15d1,
+ 0x0000, 0x15d7, 0x0000, 0x15dc, 0x0000, 0x15df, 0x0000, 0x15e5,
+ 0x0000, 0x15e8, 0x0000, 0x15ed, 0x0000, 0x15f2, 0x0000, 0x15f6,
+ /* 0x3350 .. 0x335f */
+ 0x0000, 0x15fa, 0x0000, 0x15fe, 0x0000, 0x1603, 0x0000, 0x1606,
+ 0x0000, 0x160a, 0x0000, 0x160f, 0x0000, 0x1612, 0x0000, 0x1618,
+ 0x0000, 0x161c, 0x0000, 0x161f, 0x0000, 0x1622, 0x0000, 0x1625,
+ 0x0000, 0x1628, 0x0000, 0x162b, 0x0000, 0x162e, 0x0000, 0x1631,
+ /* 0x3360 .. 0x336f */
+ 0x0000, 0x1634, 0x0000, 0x1637, 0x0000, 0x163a, 0x0000, 0x163e,
+ 0x0000, 0x1642, 0x0000, 0x1646, 0x0000, 0x164a, 0x0000, 0x164e,
+ 0x0000, 0x1652, 0x0000, 0x1656, 0x0000, 0x165a, 0x0000, 0x165e,
+ 0x0000, 0x1662, 0x0000, 0x1666, 0x0000, 0x166a, 0x0000, 0x166e,
+ /* 0x3370 .. 0x337f */
+ 0x0000, 0x1672, 0x0000, 0x1676, 0x0000, 0x167a, 0x0000, 0x167d,
+ 0x0000, 0x1680, 0x0000, 0x1684, 0x0000, 0x1687, 0x0000, 0x168a,
+ 0x0000, 0x168d, 0x0000, 0x1691, 0x0000, 0x1695, 0x0000, 0x1698,
+ 0x0000, 0x169b, 0x0000, 0x169e, 0x0000, 0x16a1, 0x0000, 0x16a4,
+ /* 0x3380 .. 0x338f */
+ 0x0000, 0x16a9, 0x0000, 0x16ac, 0x0000, 0x16af, 0x0000, 0x16b2,
+ 0x0000, 0x16b5, 0x0000, 0x16b8, 0x0000, 0x16bb, 0x0000, 0x16be,
+ 0x0000, 0x16c1, 0x0000, 0x16c5, 0x0000, 0x16ca, 0x0000, 0x16cd,
+ 0x0000, 0x16d0, 0x0000, 0x16d3, 0x0000, 0x16d6, 0x0000, 0x16d9,
+ /* 0x3390 .. 0x339f */
+ 0x0000, 0x16dc, 0x0000, 0x16df, 0x0000, 0x16e3, 0x0000, 0x16e7,
+ 0x0000, 0x16eb, 0x0000, 0x16ef, 0x0000, 0x16f2, 0x0000, 0x16f5,
+ 0x0000, 0x16f8, 0x0000, 0x16fb, 0x0000, 0x16fe, 0x0000, 0x1701,
+ 0x0000, 0x1704, 0x0000, 0x1707, 0x0000, 0x170a, 0x0000, 0x170d,
+ /* 0x33a0 .. 0x33af */
+ 0x0000, 0x1711, 0x0000, 0x1715, 0x0000, 0x1718, 0x0000, 0x171c,
+ 0x0000, 0x1720, 0x0000, 0x1724, 0x0000, 0x1727, 0x0000, 0x172b,
+ 0x0000, 0x172f, 0x0000, 0x1734, 0x0000, 0x1737, 0x0000, 0x173b,
+ 0x0000, 0x173f, 0x0000, 0x1743, 0x0000, 0x1747, 0x0000, 0x174d,
+ /* 0x33b0 .. 0x33bf */
+ 0x0000, 0x1754, 0x0000, 0x1757, 0x0000, 0x175a, 0x0000, 0x175d,
+ 0x0000, 0x1760, 0x0000, 0x1763, 0x0000, 0x1766, 0x0000, 0x1769,
+ 0x0000, 0x176c, 0x0000, 0x176f, 0x0000, 0x1772, 0x0000, 0x1775,
+ 0x0000, 0x1778, 0x0000, 0x177b, 0x0000, 0x177e, 0x0000, 0x1781,
+ /* 0x33c0 .. 0x33cf */
+ 0x0000, 0x1784, 0x0000, 0x1787, 0x0000, 0x178a, 0x0000, 0x178f,
+ 0x0000, 0x1792, 0x0000, 0x1795, 0x0000, 0x1798, 0x0000, 0x179d,
+ 0x0000, 0x17a1, 0x0000, 0x17a4, 0x0000, 0x17a7, 0x0000, 0x17aa,
+ 0x0000, 0x17ad, 0x0000, 0x17b0, 0x0000, 0x17b3, 0x0000, 0x17b6,
+ /* 0x33d0 .. 0x33df */
+ 0x0000, 0x17b9, 0x0000, 0x17bc, 0x0000, 0x17bf, 0x0000, 0x17c3,
+ 0x0000, 0x17c6, 0x0000, 0x17c9, 0x0000, 0x17cd, 0x0000, 0x17d1,
+ 0x0000, 0x17d4, 0x0000, 0x17d9, 0x0000, 0x17dd, 0x0000, 0x17e0,
+ 0x0000, 0x17e3, 0x0000, 0x17e6, 0x0000, 0x17e9, 0x0000, 0x17ed,
+ /* 0x33e0 .. 0x33ef */
+ 0x0000, 0x17f1, 0x0000, 0x17f4, 0x0000, 0x17f7, 0x0000, 0x17fa,
+ 0x0000, 0x17fd, 0x0000, 0x1800, 0x0000, 0x1803, 0x0000, 0x1806,
+ 0x0000, 0x1809, 0x0000, 0x180c, 0x0000, 0x1810, 0x0000, 0x1814,
+ 0x0000, 0x1818, 0x0000, 0x181c, 0x0000, 0x1820, 0x0000, 0x1824,
+ /* 0x33f0 .. 0x33ff */
+ 0x0000, 0x1828, 0x0000, 0x182c, 0x0000, 0x1830, 0x0000, 0x1834,
+ 0x0000, 0x1838, 0x0000, 0x183c, 0x0000, 0x1840, 0x0000, 0x1844,
+ 0x0000, 0x1848, 0x0000, 0x184c, 0x0000, 0x1850, 0x0000, 0x1854,
+ 0x0000, 0x1858, 0x0000, 0x185c, 0x0000, 0x1860, 0x0000, 0x1864,
+ /* 0xa690 .. 0xa69f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x1868, 0x0000, 0x186a, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xa770 .. 0xa77f */
+ 0x0000, 0x186c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xa7f0 .. 0xa7ff */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x186e, 0x0000, 0x1870, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xab50 .. 0xab5f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x1872, 0x0000, 0x1874, 0x0000, 0x1876, 0x0000, 0x1878,
+ /* 0xf900 .. 0xf90f */
+ 0x187a, 0x187a, 0x187c, 0x187c, 0x1005, 0x1005, 0x187e, 0x187e,
+ 0x1880, 0x1880, 0x1882, 0x1882, 0x1884, 0x1884, 0x1071, 0x1071,
+ 0x1071, 0x1071, 0x1886, 0x1886, 0x1015, 0x1015, 0x1888, 0x1888,
+ 0x188a, 0x188a, 0x188c, 0x188c, 0x188e, 0x188e, 0x1890, 0x1890,
+ /* 0xf910 .. 0xf91f */
+ 0x1892, 0x1892, 0x1894, 0x1894, 0x1896, 0x1896, 0x1898, 0x1898,
+ 0x189a, 0x189a, 0x189c, 0x189c, 0x189e, 0x189e, 0x18a0, 0x18a0,
+ 0x18a2, 0x18a2, 0x18a4, 0x18a4, 0x18a6, 0x18a6, 0x18a8, 0x18a8,
+ 0x18aa, 0x18aa, 0x18ac, 0x18ac, 0x18ae, 0x18ae, 0x18b0, 0x18b0,
+ /* 0xf920 .. 0xf92f */
+ 0x18b2, 0x18b2, 0x18b4, 0x18b4, 0x18b6, 0x18b6, 0x18b8, 0x18b8,
+ 0x18ba, 0x18ba, 0x18bc, 0x18bc, 0x18be, 0x18be, 0x18c0, 0x18c0,
+ 0x18c2, 0x18c2, 0x18c4, 0x18c4, 0x18c6, 0x18c6, 0x18c8, 0x18c8,
+ 0x18ca, 0x18ca, 0x18cc, 0x18cc, 0x18ce, 0x18ce, 0x18d0, 0x18d0,
+ /* 0xf930 .. 0xf93f */
+ 0x18d2, 0x18d2, 0x18d4, 0x18d4, 0x18d6, 0x18d6, 0x18d8, 0x18d8,
+ 0x0fc1, 0x0fc1, 0x18da, 0x18da, 0x18dc, 0x18dc, 0x18de, 0x18de,
+ 0x18e0, 0x18e0, 0x18e2, 0x18e2, 0x18e4, 0x18e4, 0x18e6, 0x18e6,
+ 0x18e8, 0x18e8, 0x18ea, 0x18ea, 0x18ec, 0x18ec, 0x18ee, 0x18ee,
+ /* 0xf940 .. 0xf94f */
+ 0x1053, 0x1053, 0x18f0, 0x18f0, 0x18f2, 0x18f2, 0x18f4, 0x18f4,
+ 0x18f6, 0x18f6, 0x18f8, 0x18f8, 0x18fa, 0x18fa, 0x18fc, 0x18fc,
+ 0x18fe, 0x18fe, 0x1900, 0x1900, 0x1902, 0x1902, 0x1904, 0x1904,
+ 0x1906, 0x1906, 0x1908, 0x1908, 0x190a, 0x190a, 0x190c, 0x190c,
+ /* 0xf950 .. 0xf95f */
+ 0x190e, 0x190e, 0x1910, 0x1910, 0x1912, 0x1912, 0x1914, 0x1914,
+ 0x1916, 0x1916, 0x1918, 0x1918, 0x191a, 0x191a, 0x191c, 0x191c,
+ 0x191e, 0x191e, 0x1920, 0x1920, 0x1922, 0x1922, 0x1924, 0x1924,
+ 0x189a, 0x189a, 0x1926, 0x1926, 0x1928, 0x1928, 0x192a, 0x192a,
+ /* 0xf960 .. 0xf96f */
+ 0x192c, 0x192c, 0x192e, 0x192e, 0x1930, 0x1930, 0x1932, 0x1932,
+ 0x1934, 0x1934, 0x1936, 0x1936, 0x1938, 0x1938, 0x193a, 0x193a,
+ 0x193c, 0x193c, 0x193e, 0x193e, 0x1940, 0x1940, 0x1942, 0x1942,
+ 0x1944, 0x1944, 0x1946, 0x1946, 0x1948, 0x1948, 0x194a, 0x194a,
+ /* 0xf970 .. 0xf97f */
+ 0x194c, 0x194c, 0x1009, 0x1009, 0x194e, 0x194e, 0x1950, 0x1950,
+ 0x1952, 0x1952, 0x1954, 0x1954, 0x1956, 0x1956, 0x1958, 0x1958,
+ 0x195a, 0x195a, 0x195c, 0x195c, 0x195e, 0x195e, 0x1960, 0x1960,
+ 0x1962, 0x1962, 0x1964, 0x1964, 0x1966, 0x1966, 0x1968, 0x1968,
+ /* 0xf980 .. 0xf98f */
+ 0x196a, 0x196a, 0x0f13, 0x0f13, 0x196c, 0x196c, 0x196e, 0x196e,
+ 0x1970, 0x1970, 0x1972, 0x1972, 0x1974, 0x1974, 0x1976, 0x1976,
+ 0x1978, 0x1978, 0x197a, 0x197a, 0x0eed, 0x0eed, 0x197c, 0x197c,
+ 0x197e, 0x197e, 0x1980, 0x1980, 0x1982, 0x1982, 0x1984, 0x1984,
+ /* 0xf990 .. 0xf99f */
+ 0x1986, 0x1986, 0x1988, 0x1988, 0x198a, 0x198a, 0x198c, 0x198c,
+ 0x198e, 0x198e, 0x1990, 0x1990, 0x1992, 0x1992, 0x1994, 0x1994,
+ 0x1996, 0x1996, 0x1998, 0x1998, 0x199a, 0x199a, 0x199c, 0x199c,
+ 0x199e, 0x199e, 0x19a0, 0x19a0, 0x19a2, 0x19a2, 0x19a4, 0x19a4,
+ /* 0xf9a0 .. 0xf9af */
+ 0x19a6, 0x19a6, 0x194a, 0x194a, 0x19a8, 0x19a8, 0x19aa, 0x19aa,
+ 0x19ac, 0x19ac, 0x19ae, 0x19ae, 0x19b0, 0x19b0, 0x19b2, 0x19b2,
+ 0x19b4, 0x19b4, 0x19b6, 0x19b6, 0x192a, 0x192a, 0x19b8, 0x19b8,
+ 0x19ba, 0x19ba, 0x19bc, 0x19bc, 0x19be, 0x19be, 0x19c0, 0x19c0,
+ /* 0xf9b0 .. 0xf9bf */
+ 0x19c2, 0x19c2, 0x19c4, 0x19c4, 0x19c6, 0x19c6, 0x19c8, 0x19c8,
+ 0x19ca, 0x19ca, 0x19cc, 0x19cc, 0x19ce, 0x19ce, 0x19d0, 0x19d0,
+ 0x19d2, 0x19d2, 0x19d4, 0x19d4, 0x19d6, 0x19d6, 0x19d8, 0x19d8,
+ 0x19da, 0x19da, 0x19dc, 0x19dc, 0x19de, 0x19de, 0x189a, 0x189a,
+ /* 0xf9c0 .. 0xf9cf */
+ 0x19e0, 0x19e0, 0x19e2, 0x19e2, 0x19e4, 0x19e4, 0x19e6, 0x19e6,
+ 0x106f, 0x106f, 0x19e8, 0x19e8, 0x19ea, 0x19ea, 0x19ec, 0x19ec,
+ 0x19ee, 0x19ee, 0x19f0, 0x19f0, 0x19f2, 0x19f2, 0x19f4, 0x19f4,
+ 0x19f6, 0x19f6, 0x19f8, 0x19f8, 0x19fa, 0x19fa, 0x19fc, 0x19fc,
+ /* 0xf9d0 .. 0xf9df */
+ 0x19fe, 0x19fe, 0x1398, 0x1398, 0x1a00, 0x1a00, 0x1a02, 0x1a02,
+ 0x1a04, 0x1a04, 0x1a06, 0x1a06, 0x1a08, 0x1a08, 0x1a0a, 0x1a0a,
+ 0x1a0c, 0x1a0c, 0x1a0e, 0x1a0e, 0x1a10, 0x1a10, 0x192e, 0x192e,
+ 0x1a12, 0x1a12, 0x1a14, 0x1a14, 0x1a16, 0x1a16, 0x1a18, 0x1a18,
+ /* 0xf9e0 .. 0xf9ef */
+ 0x1a1a, 0x1a1a, 0x1a1c, 0x1a1c, 0x1a1e, 0x1a1e, 0x1a20, 0x1a20,
+ 0x1a22, 0x1a22, 0x1a24, 0x1a24, 0x1a26, 0x1a26, 0x1a28, 0x1a28,
+ 0x1a2a, 0x1a2a, 0x1013, 0x1013, 0x1a2c, 0x1a2c, 0x1a2e, 0x1a2e,
+ 0x1a30, 0x1a30, 0x1a32, 0x1a32, 0x1a34, 0x1a34, 0x1a36, 0x1a36,
+ /* 0xf9f0 .. 0xf9ff */
+ 0x1a38, 0x1a38, 0x1a3a, 0x1a3a, 0x1a3c, 0x1a3c, 0x1a3e, 0x1a3e,
+ 0x1a40, 0x1a40, 0x1a42, 0x1a42, 0x1a44, 0x1a44, 0x0fb1, 0x0fb1,
+ 0x1a46, 0x1a46, 0x1a48, 0x1a48, 0x1a4a, 0x1a4a, 0x1a4c, 0x1a4c,
+ 0x1a4e, 0x1a4e, 0x1a50, 0x1a50, 0x1a52, 0x1a52, 0x1a54, 0x1a54,
+ /* 0xfa00 .. 0xfa0f */
+ 0x1a56, 0x1a56, 0x1a58, 0x1a58, 0x1a5a, 0x1a5a, 0x1a5c, 0x1a5c,
+ 0x1a5e, 0x1a5e, 0x1a60, 0x1a60, 0x1a62, 0x1a62, 0x1a64, 0x1a64,
+ 0x0fe7, 0x0fe7, 0x1a66, 0x1a66, 0x0fed, 0x0fed, 0x1a68, 0x1a68,
+ 0x1a6a, 0x1a6a, 0x1a6c, 0x1a6c, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfa10 .. 0xfa1f */
+ 0x1a6e, 0x1a6e, 0x0000, 0x0000, 0x1a70, 0x1a70, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x1a72, 0x1a72, 0x1a74, 0x1a74, 0x1a76, 0x1a76,
+ 0x1a78, 0x1a78, 0x1a7a, 0x1a7a, 0x1a7c, 0x1a7c, 0x1a7e, 0x1a7e,
+ 0x1a80, 0x1a80, 0x1a82, 0x1a82, 0x0fbf, 0x0fbf, 0x0000, 0x0000,
+ /* 0xfa20 .. 0xfa2f */
+ 0x1a84, 0x1a84, 0x0000, 0x0000, 0x1a86, 0x1a86, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x1a88, 0x1a88, 0x1a8a, 0x1a8a, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1a8c, 0x1a8c, 0x1a8e, 0x1a8e,
+ 0x1a90, 0x1a90, 0x1a92, 0x1a92, 0x1a94, 0x1a94, 0x1a96, 0x1a96,
+ /* 0xfa30 .. 0xfa3f */
+ 0x1a98, 0x1a98, 0x1a9a, 0x1a9a, 0x1a9c, 0x1a9c, 0x1a9e, 0x1a9e,
+ 0x1aa0, 0x1aa0, 0x1aa2, 0x1aa2, 0x1aa4, 0x1aa4, 0x1aa6, 0x1aa6,
+ 0x1aa8, 0x1aa8, 0x1aaa, 0x1aaa, 0x1aac, 0x1aac, 0x1aae, 0x1aae,
+ 0x0f21, 0x0f21, 0x1ab0, 0x1ab0, 0x1ab2, 0x1ab2, 0x1ab4, 0x1ab4,
+ /* 0xfa40 .. 0xfa4f */
+ 0x1ab6, 0x1ab6, 0x1ab8, 0x1ab8, 0x1aba, 0x1aba, 0x1abc, 0x1abc,
+ 0x1abe, 0x1abe, 0x1ac0, 0x1ac0, 0x1ac2, 0x1ac2, 0x1ac4, 0x1ac4,
+ 0x1ac6, 0x1ac6, 0x1ac8, 0x1ac8, 0x1aca, 0x1aca, 0x1acc, 0x1acc,
+ 0x13a2, 0x13a2, 0x1ace, 0x1ace, 0x1ad0, 0x1ad0, 0x1ad2, 0x1ad2,
+ /* 0xfa50 .. 0xfa5f */
+ 0x1ad4, 0x1ad4, 0x13aa, 0x13aa, 0x1ad6, 0x1ad6, 0x1ad8, 0x1ad8,
+ 0x1ada, 0x1ada, 0x1adc, 0x1adc, 0x1ade, 0x1ade, 0x1992, 0x1992,
+ 0x1ae0, 0x1ae0, 0x1ae2, 0x1ae2, 0x1ae4, 0x1ae4, 0x1ae6, 0x1ae6,
+ 0x1ae8, 0x1ae8, 0x1aea, 0x1aea, 0x1aea, 0x1aea, 0x1aec, 0x1aec,
+ /* 0xfa60 .. 0xfa6f */
+ 0x1aee, 0x1aee, 0x1af0, 0x1af0, 0x1af2, 0x1af2, 0x1af4, 0x1af4,
+ 0x1af6, 0x1af6, 0x1af8, 0x1af8, 0x1afa, 0x1afa, 0x1a88, 0x1a88,
+ 0x1afc, 0x1afc, 0x1afe, 0x1afe, 0x1b00, 0x1b00, 0x1b02, 0x1b02,
+ 0x1b04, 0x1b04, 0x1b05, 0x1b05, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfa70 .. 0xfa7f */
+ 0x1b07, 0x1b07, 0x1b09, 0x1b09, 0x1b0b, 0x1b0b, 0x1b0d, 0x1b0d,
+ 0x1b0f, 0x1b0f, 0x1b11, 0x1b11, 0x1b13, 0x1b13, 0x1b15, 0x1b15,
+ 0x1aa4, 0x1aa4, 0x1b17, 0x1b17, 0x1b19, 0x1b19, 0x1b1b, 0x1b1b,
+ 0x1a6e, 0x1a6e, 0x1b1d, 0x1b1d, 0x1b1f, 0x1b1f, 0x1b21, 0x1b21,
+ /* 0xfa80 .. 0xfa8f */
+ 0x1b23, 0x1b23, 0x1b25, 0x1b25, 0x1b27, 0x1b27, 0x1b29, 0x1b29,
+ 0x1b2b, 0x1b2b, 0x1b2d, 0x1b2d, 0x1b2f, 0x1b2f, 0x1b31, 0x1b31,
+ 0x1b33, 0x1b33, 0x1ab4, 0x1ab4, 0x1b35, 0x1b35, 0x1ab6, 0x1ab6,
+ 0x1b37, 0x1b37, 0x1b39, 0x1b39, 0x1b3b, 0x1b3b, 0x1b3d, 0x1b3d,
+ /* 0xfa90 .. 0xfa9f */
+ 0x1b3f, 0x1b3f, 0x1a70, 0x1a70, 0x18c4, 0x18c4, 0x1b41, 0x1b41,
+ 0x1b43, 0x1b43, 0x0f63, 0x0f63, 0x194c, 0x194c, 0x19f2, 0x19f2,
+ 0x1b45, 0x1b45, 0x1b47, 0x1b47, 0x1ac4, 0x1ac4, 0x1b49, 0x1b49,
+ 0x1ac6, 0x1ac6, 0x1b4b, 0x1b4b, 0x1b4d, 0x1b4d, 0x1b4f, 0x1b4f,
+ /* 0xfaa0 .. 0xfaaf */
+ 0x1a74, 0x1a74, 0x1b51, 0x1b51, 0x1b53, 0x1b53, 0x1b55, 0x1b55,
+ 0x1b57, 0x1b57, 0x1b59, 0x1b59, 0x1a76, 0x1a76, 0x1b5b, 0x1b5b,
+ 0x1b5d, 0x1b5d, 0x1b5f, 0x1b5f, 0x1b61, 0x1b61, 0x1b63, 0x1b63,
+ 0x1b65, 0x1b65, 0x1ade, 0x1ade, 0x1b67, 0x1b67, 0x1b69, 0x1b69,
+ /* 0xfab0 .. 0xfabf */
+ 0x1992, 0x1992, 0x1b6b, 0x1b6b, 0x1ae6, 0x1ae6, 0x1b6d, 0x1b6d,
+ 0x1b6f, 0x1b6f, 0x1b71, 0x1b71, 0x1b73, 0x1b73, 0x1b75, 0x1b75,
+ 0x1af0, 0x1af0, 0x1b77, 0x1b77, 0x1a86, 0x1a86, 0x1b79, 0x1b79,
+ 0x1af2, 0x1af2, 0x1926, 0x1926, 0x1b7b, 0x1b7b, 0x1af4, 0x1af4,
+ /* 0xfac0 .. 0xfacf */
+ 0x1b7d, 0x1b7d, 0x1af8, 0x1af8, 0x1b7f, 0x1b7f, 0x1b81, 0x1b81,
+ 0x1b83, 0x1b83, 0x1b85, 0x1b85, 0x1b87, 0x1b87, 0x1afc, 0x1afc,
+ 0x1a80, 0x1a80, 0x1b89, 0x1b89, 0x1afe, 0x1afe, 0x1b8b, 0x1b8b,
+ 0x1b00, 0x1b00, 0x1b8d, 0x1b8d, 0x1071, 0x1071, 0x1b04, 0x1b04,
+ /* 0xfad0 .. 0xfadf */
+ 0x1b04, 0x1b04, 0x1b04, 0x1b04, 0x1b8f, 0x1b8f, 0x1b91, 0x1b91,
+ 0x1b93, 0x1b93, 0x1b04, 0x1b04, 0x1b04, 0x1b04, 0x1b04, 0x1b04,
+ 0x1b95, 0x1b95, 0x1b97, 0x1b97, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfb00 .. 0xfb0f */
+ 0x0000, 0x1b99, 0x0000, 0x1b9c, 0x0000, 0x1b9f, 0x0000, 0x1ba2,
+ 0x0000, 0x1ba6, 0x0000, 0x1baa, 0x0000, 0x1bad, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfb10 .. 0xfb1f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1bb0,
+ 0x0000, 0x1bb3, 0x0000, 0x1bb6, 0x0000, 0x1bb9, 0x0000, 0x1bbc,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x05d9, 0x05b4, 0x0000, 0x0000, 0x05f2, 0x05b7,
+ 0x0000, 0x0000, 0x1bbf, 0x1bbf, 0x0000, 0x0000, 0x1bc2, 0x1bc2,
/* 0xfb20 .. 0xfb2f */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x05e9, 0x05c1, 0x05e9, 0x05c2,
- 0xfb49, 0x05c1, 0xfb49, 0x05c2, 0x05d0, 0x05b7, 0x05d0, 0x05b8,
+ 0x0000, 0x1bc5, 0x0000, 0x0c4f, 0x0000, 0x0c55, 0x0000, 0x1bc7,
+ 0x0000, 0x1bc9, 0x0000, 0x1bcb, 0x0000, 0x1bcd, 0x0000, 0x1bcf,
+ 0x0000, 0x1bd1, 0x0000, 0x0c0d, 0x1bd3, 0x1bd3, 0x1bd6, 0x1bd6,
+ 0x1bd9, 0x1bd9, 0x1bdc, 0x1bdc, 0x1bdf, 0x1bdf, 0x1be2, 0x1be2,
/* 0xfb30 .. 0xfb3f */
- 0x05d0, 0x05bc, 0x05d1, 0x05bc, 0x05d2, 0x05bc, 0x05d3, 0x05bc,
- 0x05d4, 0x05bc, 0x05d5, 0x05bc, 0x05d6, 0x05bc, 0x0000, 0x0000,
- 0x05d8, 0x05bc, 0x05d9, 0x05bc, 0x05da, 0x05bc, 0x05db, 0x05bc,
- 0x05dc, 0x05bc, 0x0000, 0x0000, 0x05de, 0x05bc, 0x0000, 0x0000,
+ 0x1be5, 0x1be5, 0x1be8, 0x1be8, 0x1beb, 0x1beb, 0x1bee, 0x1bee,
+ 0x1bf1, 0x1bf1, 0x1bf4, 0x1bf4, 0x1bf7, 0x1bf7, 0x0000, 0x0000,
+ 0x1bfa, 0x1bfa, 0x1bfd, 0x1bfd, 0x1c00, 0x1c00, 0x1c03, 0x1c03,
+ 0x1c06, 0x1c06, 0x0000, 0x0000, 0x1c09, 0x1c09, 0x0000, 0x0000,
/* 0xfb40 .. 0xfb4f */
- 0x05e0, 0x05bc, 0x05e1, 0x05bc, 0x0000, 0x0000, 0x05e3, 0x05bc,
- 0x05e4, 0x05bc, 0x0000, 0x0000, 0x05e6, 0x05bc, 0x05e7, 0x05bc,
- 0x05e8, 0x05bc, 0x05e9, 0x05bc, 0x05ea, 0x05bc, 0x05d5, 0x05b9,
- 0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000
+ 0x1c0c, 0x1c0c, 0x1c0f, 0x1c0f, 0x0000, 0x0000, 0x1c12, 0x1c12,
+ 0x1c15, 0x1c15, 0x0000, 0x0000, 0x1c18, 0x1c18, 0x1c1b, 0x1c1b,
+ 0x1c1e, 0x1c1e, 0x1c21, 0x1c21, 0x1c24, 0x1c24, 0x1c27, 0x1c27,
+ 0x1c2a, 0x1c2a, 0x1c2d, 0x1c2d, 0x1c30, 0x1c30, 0x0000, 0x1c33,
+ /* 0xfb50 .. 0xfb5f */
+ 0x0000, 0x1c36, 0x0000, 0x1c36, 0x0000, 0x1c38, 0x0000, 0x1c38,
+ 0x0000, 0x1c38, 0x0000, 0x1c38, 0x0000, 0x1c3a, 0x0000, 0x1c3a,
+ 0x0000, 0x1c3a, 0x0000, 0x1c3a, 0x0000, 0x1c3c, 0x0000, 0x1c3c,
+ 0x0000, 0x1c3c, 0x0000, 0x1c3c, 0x0000, 0x1c3e, 0x0000, 0x1c3e,
+ /* 0xfb60 .. 0xfb6f */
+ 0x0000, 0x1c3e, 0x0000, 0x1c3e, 0x0000, 0x1c40, 0x0000, 0x1c40,
+ 0x0000, 0x1c40, 0x0000, 0x1c40, 0x0000, 0x1c42, 0x0000, 0x1c42,
+ 0x0000, 0x1c42, 0x0000, 0x1c42, 0x0000, 0x1c44, 0x0000, 0x1c44,
+ 0x0000, 0x1c44, 0x0000, 0x1c44, 0x0000, 0x1c46, 0x0000, 0x1c46,
+ /* 0xfb70 .. 0xfb7f */
+ 0x0000, 0x1c46, 0x0000, 0x1c46, 0x0000, 0x1c48, 0x0000, 0x1c48,
+ 0x0000, 0x1c48, 0x0000, 0x1c48, 0x0000, 0x1c4a, 0x0000, 0x1c4a,
+ 0x0000, 0x1c4a, 0x0000, 0x1c4a, 0x0000, 0x1c4c, 0x0000, 0x1c4c,
+ 0x0000, 0x1c4c, 0x0000, 0x1c4c, 0x0000, 0x1c4e, 0x0000, 0x1c4e,
+ /* 0xfb80 .. 0xfb8f */
+ 0x0000, 0x1c4e, 0x0000, 0x1c4e, 0x0000, 0x1c50, 0x0000, 0x1c50,
+ 0x0000, 0x1c52, 0x0000, 0x1c52, 0x0000, 0x1c54, 0x0000, 0x1c54,
+ 0x0000, 0x1c56, 0x0000, 0x1c56, 0x0000, 0x1c58, 0x0000, 0x1c58,
+ 0x0000, 0x1c5a, 0x0000, 0x1c5a, 0x0000, 0x1c5c, 0x0000, 0x1c5c,
+ /* 0xfb90 .. 0xfb9f */
+ 0x0000, 0x1c5c, 0x0000, 0x1c5c, 0x0000, 0x1c5e, 0x0000, 0x1c5e,
+ 0x0000, 0x1c5e, 0x0000, 0x1c5e, 0x0000, 0x1c60, 0x0000, 0x1c60,
+ 0x0000, 0x1c60, 0x0000, 0x1c60, 0x0000, 0x1c62, 0x0000, 0x1c62,
+ 0x0000, 0x1c62, 0x0000, 0x1c62, 0x0000, 0x1c64, 0x0000, 0x1c64,
+ /* 0xfba0 .. 0xfbaf */
+ 0x0000, 0x1c66, 0x0000, 0x1c66, 0x0000, 0x1c66, 0x0000, 0x1c66,
+ 0x0000, 0x1c68, 0x0000, 0x1c68, 0x0000, 0x1c6a, 0x0000, 0x1c6a,
+ 0x0000, 0x1c6a, 0x0000, 0x1c6a, 0x0000, 0x1c6c, 0x0000, 0x1c6c,
+ 0x0000, 0x1c6c, 0x0000, 0x1c6c, 0x0000, 0x1c6e, 0x0000, 0x1c6e,
+ /* 0xfbb0 .. 0xfbbf */
+ 0x0000, 0x1c70, 0x0000, 0x1c70, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfbd0 .. 0xfbdf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1c72,
+ 0x0000, 0x1c72, 0x0000, 0x1c72, 0x0000, 0x1c72, 0x0000, 0x1c74,
+ 0x0000, 0x1c74, 0x0000, 0x1c76, 0x0000, 0x1c76, 0x0000, 0x1c78,
+ 0x0000, 0x1c78, 0x0000, 0x1c7a, 0x0000, 0x1c7c, 0x0000, 0x1c7c,
+ /* 0xfbe0 .. 0xfbef */
+ 0x0000, 0x1c7e, 0x0000, 0x1c7e, 0x0000, 0x1c80, 0x0000, 0x1c80,
+ 0x0000, 0x1c82, 0x0000, 0x1c82, 0x0000, 0x1c82, 0x0000, 0x1c82,
+ 0x0000, 0x1c84, 0x0000, 0x1c84, 0x0000, 0x1c86, 0x0000, 0x1c86,
+ 0x0000, 0x1c89, 0x0000, 0x1c89, 0x0000, 0x1c8c, 0x0000, 0x1c8c,
+ /* 0xfbf0 .. 0xfbff */
+ 0x0000, 0x1c8f, 0x0000, 0x1c8f, 0x0000, 0x1c92, 0x0000, 0x1c92,
+ 0x0000, 0x1c95, 0x0000, 0x1c95, 0x0000, 0x1c98, 0x0000, 0x1c98,
+ 0x0000, 0x1c98, 0x0000, 0x1c9b, 0x0000, 0x1c9b, 0x0000, 0x1c9b,
+ 0x0000, 0x1c9e, 0x0000, 0x1c9e, 0x0000, 0x1c9e, 0x0000, 0x1c9e,
+ /* 0xfc00 .. 0xfc0f */
+ 0x0000, 0x1ca0, 0x0000, 0x1ca3, 0x0000, 0x1ca6, 0x0000, 0x1c9b,
+ 0x0000, 0x1ca9, 0x0000, 0x1cac, 0x0000, 0x1caf, 0x0000, 0x1cb2,
+ 0x0000, 0x1cb5, 0x0000, 0x1cb8, 0x0000, 0x1cbb, 0x0000, 0x1cbe,
+ 0x0000, 0x1cc1, 0x0000, 0x1cc4, 0x0000, 0x1cc7, 0x0000, 0x1cca,
+ /* 0xfc10 .. 0xfc1f */
+ 0x0000, 0x1ccd, 0x0000, 0x1cd0, 0x0000, 0x1cd3, 0x0000, 0x1cd6,
+ 0x0000, 0x1cd9, 0x0000, 0x1cdc, 0x0000, 0x1cdf, 0x0000, 0x1ce2,
+ 0x0000, 0x1ce5, 0x0000, 0x1ce8, 0x0000, 0x1ceb, 0x0000, 0x1cee,
+ 0x0000, 0x1cf1, 0x0000, 0x1cf4, 0x0000, 0x1cf7, 0x0000, 0x1cfa,
+ /* 0xfc20 .. 0xfc2f */
+ 0x0000, 0x1cfd, 0x0000, 0x1d00, 0x0000, 0x1d03, 0x0000, 0x1d06,
+ 0x0000, 0x1d09, 0x0000, 0x1d0c, 0x0000, 0x1d0f, 0x0000, 0x1d12,
+ 0x0000, 0x1d15, 0x0000, 0x1d18, 0x0000, 0x1d1b, 0x0000, 0x1d1e,
+ 0x0000, 0x1d21, 0x0000, 0x1d24, 0x0000, 0x1d27, 0x0000, 0x1d2a,
+ /* 0xfc30 .. 0xfc3f */
+ 0x0000, 0x1d2d, 0x0000, 0x1d30, 0x0000, 0x1d33, 0x0000, 0x1d36,
+ 0x0000, 0x1d39, 0x0000, 0x1d3c, 0x0000, 0x1d3f, 0x0000, 0x1d42,
+ 0x0000, 0x1d45, 0x0000, 0x1d48, 0x0000, 0x1d4b, 0x0000, 0x1d4e,
+ 0x0000, 0x1d51, 0x0000, 0x1d54, 0x0000, 0x1d57, 0x0000, 0x1d5a,
+ /* 0xfc40 .. 0xfc4f */
+ 0x0000, 0x1d5d, 0x0000, 0x1d60, 0x0000, 0x1d63, 0x0000, 0x1d66,
+ 0x0000, 0x1d69, 0x0000, 0x1d6c, 0x0000, 0x1d6f, 0x0000, 0x1d72,
+ 0x0000, 0x1d75, 0x0000, 0x1d78, 0x0000, 0x1d7b, 0x0000, 0x1d7e,
+ 0x0000, 0x1d81, 0x0000, 0x1d84, 0x0000, 0x1d87, 0x0000, 0x1d8a,
+ /* 0xfc50 .. 0xfc5f */
+ 0x0000, 0x1d8d, 0x0000, 0x1d90, 0x0000, 0x1d93, 0x0000, 0x1d96,
+ 0x0000, 0x1d99, 0x0000, 0x1d9c, 0x0000, 0x1d9f, 0x0000, 0x1da2,
+ 0x0000, 0x1da5, 0x0000, 0x1da8, 0x0000, 0x1dab, 0x0000, 0x1dae,
+ 0x0000, 0x1db1, 0x0000, 0x1db4, 0x0000, 0x1db7, 0x0000, 0x1dbb,
+ /* 0xfc60 .. 0xfc6f */
+ 0x0000, 0x1dbf, 0x0000, 0x1dc3, 0x0000, 0x1dc7, 0x0000, 0x1dcb,
+ 0x0000, 0x1dcf, 0x0000, 0x1dd2, 0x0000, 0x1ca6, 0x0000, 0x1dd5,
+ 0x0000, 0x1c9b, 0x0000, 0x1ca9, 0x0000, 0x1dd8, 0x0000, 0x1ddb,
+ 0x0000, 0x1cb5, 0x0000, 0x1dde, 0x0000, 0x1cb8, 0x0000, 0x1cbb,
+ /* 0xfc70 .. 0xfc7f */
+ 0x0000, 0x1de1, 0x0000, 0x1de4, 0x0000, 0x1cc7, 0x0000, 0x1de7,
+ 0x0000, 0x1cca, 0x0000, 0x1ccd, 0x0000, 0x1dea, 0x0000, 0x1ded,
+ 0x0000, 0x1cd3, 0x0000, 0x1df0, 0x0000, 0x1cd6, 0x0000, 0x1cd9,
+ 0x0000, 0x1d30, 0x0000, 0x1d33, 0x0000, 0x1d3c, 0x0000, 0x1d3f,
+ /* 0xfc80 .. 0xfc8f */
+ 0x0000, 0x1d42, 0x0000, 0x1d4e, 0x0000, 0x1d51, 0x0000, 0x1d54,
+ 0x0000, 0x1d57, 0x0000, 0x1d63, 0x0000, 0x1d66, 0x0000, 0x1d69,
+ 0x0000, 0x1df3, 0x0000, 0x1d75, 0x0000, 0x1df6, 0x0000, 0x1df9,
+ 0x0000, 0x1d87, 0x0000, 0x1dfc, 0x0000, 0x1d8a, 0x0000, 0x1d8d,
+ /* 0xfc90 .. 0xfc9f */
+ 0x0000, 0x1db4, 0x0000, 0x1dff, 0x0000, 0x1e02, 0x0000, 0x1da5,
+ 0x0000, 0x1e05, 0x0000, 0x1da8, 0x0000, 0x1dab, 0x0000, 0x1ca0,
+ 0x0000, 0x1ca3, 0x0000, 0x1e08, 0x0000, 0x1ca6, 0x0000, 0x1e0b,
+ 0x0000, 0x1cac, 0x0000, 0x1caf, 0x0000, 0x1cb2, 0x0000, 0x1cb5,
+ /* 0xfca0 .. 0xfcaf */
+ 0x0000, 0x1e0e, 0x0000, 0x1cbe, 0x0000, 0x1cc1, 0x0000, 0x1cc4,
+ 0x0000, 0x1cc7, 0x0000, 0x1e11, 0x0000, 0x1cd3, 0x0000, 0x1cdc,
+ 0x0000, 0x1cdf, 0x0000, 0x1ce2, 0x0000, 0x1ce5, 0x0000, 0x1ce8,
+ 0x0000, 0x1cee, 0x0000, 0x1cf1, 0x0000, 0x1cf4, 0x0000, 0x1cf7,
+ /* 0xfcb0 .. 0xfcbf */
+ 0x0000, 0x1cfa, 0x0000, 0x1cfd, 0x0000, 0x1e14, 0x0000, 0x1d00,
+ 0x0000, 0x1d03, 0x0000, 0x1d06, 0x0000, 0x1d09, 0x0000, 0x1d0c,
+ 0x0000, 0x1d0f, 0x0000, 0x1d15, 0x0000, 0x1d18, 0x0000, 0x1d1b,
+ 0x0000, 0x1d1e, 0x0000, 0x1d21, 0x0000, 0x1d24, 0x0000, 0x1d27,
+ /* 0xfcc0 .. 0xfccf */
+ 0x0000, 0x1d2a, 0x0000, 0x1d2d, 0x0000, 0x1d36, 0x0000, 0x1d39,
+ 0x0000, 0x1d45, 0x0000, 0x1d48, 0x0000, 0x1d4b, 0x0000, 0x1d4e,
+ 0x0000, 0x1d51, 0x0000, 0x1d5a, 0x0000, 0x1d5d, 0x0000, 0x1d60,
+ 0x0000, 0x1d63, 0x0000, 0x1e17, 0x0000, 0x1d6c, 0x0000, 0x1d6f,
+ /* 0xfcd0 .. 0xfcdf */
+ 0x0000, 0x1d72, 0x0000, 0x1d75, 0x0000, 0x1d7e, 0x0000, 0x1d81,
+ 0x0000, 0x1d84, 0x0000, 0x1d87, 0x0000, 0x1e1a, 0x0000, 0x1d90,
+ 0x0000, 0x1d93, 0x0000, 0x1e1d, 0x0000, 0x1d9c, 0x0000, 0x1d9f,
+ 0x0000, 0x1da2, 0x0000, 0x1da5, 0x0000, 0x1e20, 0x0000, 0x1ca6,
+ /* 0xfce0 .. 0xfcef */
+ 0x0000, 0x1e0b, 0x0000, 0x1cb5, 0x0000, 0x1e0e, 0x0000, 0x1cc7,
+ 0x0000, 0x1e11, 0x0000, 0x1cd3, 0x0000, 0x1e23, 0x0000, 0x1cfa,
+ 0x0000, 0x1e26, 0x0000, 0x1e29, 0x0000, 0x1e2c, 0x0000, 0x1d4e,
+ 0x0000, 0x1d51, 0x0000, 0x1d63, 0x0000, 0x1d87, 0x0000, 0x1e1a,
+ /* 0xfcf0 .. 0xfcff */
+ 0x0000, 0x1da5, 0x0000, 0x1e20, 0x0000, 0x1e2f, 0x0000, 0x1e33,
+ 0x0000, 0x1e37, 0x0000, 0x1e3b, 0x0000, 0x1e3e, 0x0000, 0x1e41,
+ 0x0000, 0x1e44, 0x0000, 0x1e47, 0x0000, 0x1e4a, 0x0000, 0x1e4d,
+ 0x0000, 0x1e50, 0x0000, 0x1e53, 0x0000, 0x1e56, 0x0000, 0x1e59,
+ /* 0xfd00 .. 0xfd0f */
+ 0x0000, 0x1e5c, 0x0000, 0x1e5f, 0x0000, 0x1e62, 0x0000, 0x1e65,
+ 0x0000, 0x1e68, 0x0000, 0x1e6b, 0x0000, 0x1e6e, 0x0000, 0x1e71,
+ 0x0000, 0x1e74, 0x0000, 0x1e77, 0x0000, 0x1e7a, 0x0000, 0x1e7d,
+ 0x0000, 0x1e29, 0x0000, 0x1e80, 0x0000, 0x1e83, 0x0000, 0x1e86,
+ /* 0xfd10 .. 0xfd1f */
+ 0x0000, 0x1e89, 0x0000, 0x1e3b, 0x0000, 0x1e3e, 0x0000, 0x1e41,
+ 0x0000, 0x1e44, 0x0000, 0x1e47, 0x0000, 0x1e4a, 0x0000, 0x1e4d,
+ 0x0000, 0x1e50, 0x0000, 0x1e53, 0x0000, 0x1e56, 0x0000, 0x1e59,
+ 0x0000, 0x1e5c, 0x0000, 0x1e5f, 0x0000, 0x1e62, 0x0000, 0x1e65,
+ /* 0xfd20 .. 0xfd2f */
+ 0x0000, 0x1e68, 0x0000, 0x1e6b, 0x0000, 0x1e6e, 0x0000, 0x1e71,
+ 0x0000, 0x1e74, 0x0000, 0x1e77, 0x0000, 0x1e7a, 0x0000, 0x1e7d,
+ 0x0000, 0x1e29, 0x0000, 0x1e80, 0x0000, 0x1e83, 0x0000, 0x1e86,
+ 0x0000, 0x1e89, 0x0000, 0x1e77, 0x0000, 0x1e7a, 0x0000, 0x1e7d,
+ /* 0xfd30 .. 0xfd3f */
+ 0x0000, 0x1e29, 0x0000, 0x1e26, 0x0000, 0x1e2c, 0x0000, 0x1d12,
+ 0x0000, 0x1cf1, 0x0000, 0x1cf4, 0x0000, 0x1cf7, 0x0000, 0x1e77,
+ 0x0000, 0x1e7a, 0x0000, 0x1e7d, 0x0000, 0x1d12, 0x0000, 0x1d15,
+ 0x0000, 0x1e8c, 0x0000, 0x1e8c, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfd50 .. 0xfd5f */
+ 0x0000, 0x1e8f, 0x0000, 0x1e93, 0x0000, 0x1e93, 0x0000, 0x1e97,
+ 0x0000, 0x1e9b, 0x0000, 0x1e9f, 0x0000, 0x1ea3, 0x0000, 0x1ea7,
+ 0x0000, 0x1eab, 0x0000, 0x1eab, 0x0000, 0x1eaf, 0x0000, 0x1eb3,
+ 0x0000, 0x1eb7, 0x0000, 0x1ebb, 0x0000, 0x1ebf, 0x0000, 0x1ec3,
+ /* 0xfd60 .. 0xfd6f */
+ 0x0000, 0x1ec3, 0x0000, 0x1ec7, 0x0000, 0x1ecb, 0x0000, 0x1ecb,
+ 0x0000, 0x1ecf, 0x0000, 0x1ecf, 0x0000, 0x1ed3, 0x0000, 0x1ed7,
+ 0x0000, 0x1ed7, 0x0000, 0x1edb, 0x0000, 0x1edf, 0x0000, 0x1edf,
+ 0x0000, 0x1ee3, 0x0000, 0x1ee3, 0x0000, 0x1ee7, 0x0000, 0x1eeb,
+ /* 0xfd70 .. 0xfd7f */
+ 0x0000, 0x1eeb, 0x0000, 0x1eef, 0x0000, 0x1eef, 0x0000, 0x1ef3,
+ 0x0000, 0x1ef7, 0x0000, 0x1efb, 0x0000, 0x1eff, 0x0000, 0x1eff,
+ 0x0000, 0x1f03, 0x0000, 0x1f07, 0x0000, 0x1f0b, 0x0000, 0x1f0f,
+ 0x0000, 0x1f13, 0x0000, 0x1f13, 0x0000, 0x1f17, 0x0000, 0x1f1b,
+ /* 0xfd80 .. 0xfd8f */
+ 0x0000, 0x1f1f, 0x0000, 0x1f23, 0x0000, 0x1f27, 0x0000, 0x1f2b,
+ 0x0000, 0x1f2b, 0x0000, 0x1f2f, 0x0000, 0x1f2f, 0x0000, 0x1f33,
+ 0x0000, 0x1f33, 0x0000, 0x1f37, 0x0000, 0x1f3b, 0x0000, 0x1f3f,
+ 0x0000, 0x1f43, 0x0000, 0x1f47, 0x0000, 0x1f4b, 0x0000, 0x1f4f,
+ /* 0xfd90 .. 0xfd9f */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1f53, 0x0000, 0x1f57,
+ 0x0000, 0x1f5b, 0x0000, 0x1f5f, 0x0000, 0x1f63, 0x0000, 0x1f67,
+ 0x0000, 0x1f67, 0x0000, 0x1f6b, 0x0000, 0x1f6f, 0x0000, 0x1f73,
+ 0x0000, 0x1f77, 0x0000, 0x1f77, 0x0000, 0x1f7b, 0x0000, 0x1f7f,
+ /* 0xfda0 .. 0xfdaf */
+ 0x0000, 0x1f83, 0x0000, 0x1f87, 0x0000, 0x1f8b, 0x0000, 0x1f8f,
+ 0x0000, 0x1f93, 0x0000, 0x1f97, 0x0000, 0x1f9b, 0x0000, 0x1f9f,
+ 0x0000, 0x1fa3, 0x0000, 0x1fa7, 0x0000, 0x1fab, 0x0000, 0x1faf,
+ 0x0000, 0x1fb3, 0x0000, 0x1fb7, 0x0000, 0x1fbb, 0x0000, 0x1fbf,
+ /* 0xfdb0 .. 0xfdbf */
+ 0x0000, 0x1fc3, 0x0000, 0x1fc7, 0x0000, 0x1fcb, 0x0000, 0x1fcf,
+ 0x0000, 0x1f17, 0x0000, 0x1f1f, 0x0000, 0x1fd3, 0x0000, 0x1fd7,
+ 0x0000, 0x1fdb, 0x0000, 0x1fdf, 0x0000, 0x1fe3, 0x0000, 0x1fe7,
+ 0x0000, 0x1fe3, 0x0000, 0x1fdb, 0x0000, 0x1feb, 0x0000, 0x1fef,
+ /* 0xfdc0 .. 0xfdcf */
+ 0x0000, 0x1ff3, 0x0000, 0x1ff7, 0x0000, 0x1ffb, 0x0000, 0x1fe7,
+ 0x0000, 0x1efb, 0x0000, 0x1ed3, 0x0000, 0x1fff, 0x0000, 0x2003,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfdf0 .. 0xfdff */
+ 0x0000, 0x2007, 0x0000, 0x200b, 0x0000, 0x200f, 0x0000, 0x2014,
+ 0x0000, 0x2019, 0x0000, 0x201e, 0x0000, 0x2023, 0x0000, 0x2028,
+ 0x0000, 0x202d, 0x0000, 0x2032, 0x0000, 0x2036, 0x0000, 0x2049,
+ 0x0000, 0x2052, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfe10 .. 0xfe1f */
+ 0x0000, 0x2057, 0x0000, 0x2059, 0x0000, 0x205b, 0x0000, 0x205d,
+ 0x0000, 0x038a, 0x0000, 0x205f, 0x0000, 0x2061, 0x0000, 0x2063,
+ 0x0000, 0x2065, 0x0000, 0x2067, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfe30 .. 0xfe3f */
+ 0x0000, 0x2069, 0x0000, 0x206b, 0x0000, 0x206d, 0x0000, 0x206f,
+ 0x0000, 0x206f, 0x0000, 0x0c13, 0x0000, 0x0c15, 0x0000, 0x2071,
+ 0x0000, 0x2073, 0x0000, 0x2075, 0x0000, 0x2077, 0x0000, 0x2079,
+ 0x0000, 0x207b, 0x0000, 0x207d, 0x0000, 0x207f, 0x0000, 0x0d7b,
+ /* 0xfe40 .. 0xfe4f */
+ 0x0000, 0x0d7d, 0x0000, 0x2081, 0x0000, 0x2083, 0x0000, 0x2085,
+ 0x0000, 0x2087, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2089,
+ 0x0000, 0x208b, 0x0000, 0x208d, 0x0000, 0x208d, 0x0000, 0x208d,
+ 0x0000, 0x208d, 0x0000, 0x206f, 0x0000, 0x206f, 0x0000, 0x206f,
+ /* 0xfe50 .. 0xfe5f */
+ 0x0000, 0x2057, 0x0000, 0x2059, 0x0000, 0x0bd4, 0x0000, 0x0000,
+ 0x0000, 0x038a, 0x0000, 0x205d, 0x0000, 0x2061, 0x0000, 0x205f,
+ 0x0000, 0x206b, 0x0000, 0x0c13, 0x0000, 0x0c15, 0x0000, 0x2071,
+ 0x0000, 0x2073, 0x0000, 0x2075, 0x0000, 0x2077, 0x0000, 0x208f,
+ /* 0xfe60 .. 0xfe6f */
+ 0x0000, 0x2091, 0x0000, 0x2093, 0x0000, 0x0c0d, 0x0000, 0x2095,
+ 0x0000, 0x2097, 0x0000, 0x2099, 0x0000, 0x0c11, 0x0000, 0x0000,
+ 0x0000, 0x209b, 0x0000, 0x209d, 0x0000, 0x209f, 0x0000, 0x20a1,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xfe70 .. 0xfe7f */
+ 0x0000, 0x20a3, 0x0000, 0x20a6, 0x0000, 0x20a9, 0x0000, 0x0000,
+ 0x0000, 0x20ac, 0x0000, 0x0000, 0x0000, 0x20af, 0x0000, 0x20b2,
+ 0x0000, 0x20b5, 0x0000, 0x20b8, 0x0000, 0x20bb, 0x0000, 0x20be,
+ 0x0000, 0x20c1, 0x0000, 0x20c4, 0x0000, 0x20c7, 0x0000, 0x20ca,
+ /* 0xfe80 .. 0xfe8f */
+ 0x0000, 0x20cd, 0x0000, 0x20cf, 0x0000, 0x20cf, 0x0000, 0x20d1,
+ 0x0000, 0x20d1, 0x0000, 0x20d3, 0x0000, 0x20d3, 0x0000, 0x20d5,
+ 0x0000, 0x20d5, 0x0000, 0x20d7, 0x0000, 0x20d7, 0x0000, 0x20d7,
+ 0x0000, 0x20d7, 0x0000, 0x20d9, 0x0000, 0x20d9, 0x0000, 0x20db,
+ /* 0xfe90 .. 0xfe9f */
+ 0x0000, 0x20db, 0x0000, 0x20db, 0x0000, 0x20db, 0x0000, 0x20dd,
+ 0x0000, 0x20dd, 0x0000, 0x20df, 0x0000, 0x20df, 0x0000, 0x20df,
+ 0x0000, 0x20df, 0x0000, 0x20e1, 0x0000, 0x20e1, 0x0000, 0x20e1,
+ 0x0000, 0x20e1, 0x0000, 0x20e3, 0x0000, 0x20e3, 0x0000, 0x20e3,
+ /* 0xfea0 .. 0xfeaf */
+ 0x0000, 0x20e3, 0x0000, 0x20e5, 0x0000, 0x20e5, 0x0000, 0x20e5,
+ 0x0000, 0x20e5, 0x0000, 0x20e7, 0x0000, 0x20e7, 0x0000, 0x20e7,
+ 0x0000, 0x20e7, 0x0000, 0x20e9, 0x0000, 0x20e9, 0x0000, 0x20eb,
+ 0x0000, 0x20eb, 0x0000, 0x20ed, 0x0000, 0x20ed, 0x0000, 0x20ef,
+ /* 0xfeb0 .. 0xfebf */
+ 0x0000, 0x20ef, 0x0000, 0x20f1, 0x0000, 0x20f1, 0x0000, 0x20f1,
+ 0x0000, 0x20f1, 0x0000, 0x20f3, 0x0000, 0x20f3, 0x0000, 0x20f3,
+ 0x0000, 0x20f3, 0x0000, 0x20f5, 0x0000, 0x20f5, 0x0000, 0x20f5,
+ 0x0000, 0x20f5, 0x0000, 0x20f7, 0x0000, 0x20f7, 0x0000, 0x20f7,
+ /* 0xfec0 .. 0xfecf */
+ 0x0000, 0x20f7, 0x0000, 0x20f9, 0x0000, 0x20f9, 0x0000, 0x20f9,
+ 0x0000, 0x20f9, 0x0000, 0x20fb, 0x0000, 0x20fb, 0x0000, 0x20fb,
+ 0x0000, 0x20fb, 0x0000, 0x20fd, 0x0000, 0x20fd, 0x0000, 0x20fd,
+ 0x0000, 0x20fd, 0x0000, 0x20ff, 0x0000, 0x20ff, 0x0000, 0x20ff,
+ /* 0xfed0 .. 0xfedf */
+ 0x0000, 0x20ff, 0x0000, 0x2101, 0x0000, 0x2101, 0x0000, 0x2101,
+ 0x0000, 0x2101, 0x0000, 0x2103, 0x0000, 0x2103, 0x0000, 0x2103,
+ 0x0000, 0x2103, 0x0000, 0x2105, 0x0000, 0x2105, 0x0000, 0x2105,
+ 0x0000, 0x2105, 0x0000, 0x2107, 0x0000, 0x2107, 0x0000, 0x2107,
+ /* 0xfee0 .. 0xfeef */
+ 0x0000, 0x2107, 0x0000, 0x2109, 0x0000, 0x2109, 0x0000, 0x2109,
+ 0x0000, 0x2109, 0x0000, 0x210b, 0x0000, 0x210b, 0x0000, 0x210b,
+ 0x0000, 0x210b, 0x0000, 0x210d, 0x0000, 0x210d, 0x0000, 0x210d,
+ 0x0000, 0x210d, 0x0000, 0x210f, 0x0000, 0x210f, 0x0000, 0x1c84,
+ /* 0xfef0 .. 0xfeff */
+ 0x0000, 0x1c84, 0x0000, 0x2111, 0x0000, 0x2111, 0x0000, 0x2111,
+ 0x0000, 0x2111, 0x0000, 0x2113, 0x0000, 0x2113, 0x0000, 0x2116,
+ 0x0000, 0x2116, 0x0000, 0x2119, 0x0000, 0x2119, 0x0000, 0x211c,
+ 0x0000, 0x211c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xff00 .. 0xff0f */
+ 0x0000, 0x0000, 0x0000, 0x205f, 0x0000, 0x211f, 0x0000, 0x208f,
+ 0x0000, 0x209d, 0x0000, 0x209f, 0x0000, 0x2091, 0x0000, 0x2121,
+ 0x0000, 0x0c13, 0x0000, 0x0c15, 0x0000, 0x2093, 0x0000, 0x0c0d,
+ 0x0000, 0x2057, 0x0000, 0x2095, 0x0000, 0x0bd4, 0x0000, 0x2123,
+ /* 0xff10 .. 0xff1f */
+ 0x0000, 0x0bff, 0x0000, 0x0017, 0x0000, 0x000b, 0x0000, 0x000d,
+ 0x0000, 0x0c01, 0x0000, 0x0c03, 0x0000, 0x0c05, 0x0000, 0x0c07,
+ 0x0000, 0x0c09, 0x0000, 0x0c0b, 0x0000, 0x205d, 0x0000, 0x038a,
+ 0x0000, 0x2097, 0x0000, 0x0c11, 0x0000, 0x2099, 0x0000, 0x2061,
+ /* 0xff20 .. 0xff2f */
+ 0x0000, 0x20a1, 0x0000, 0x059d, 0x0000, 0x05a1, 0x0000, 0x0c24,
+ 0x0000, 0x05a3, 0x0000, 0x05a5, 0x0000, 0x0c4d, 0x0000, 0x05a9,
+ 0x0000, 0x05ab, 0x0000, 0x05ad, 0x0000, 0x05af, 0x0000, 0x05b1,
+ 0x0000, 0x05b3, 0x0000, 0x05b5, 0x0000, 0x05b7, 0x0000, 0x05b9,
+ /* 0xff30 .. 0xff3f */
+ 0x0000, 0x05bd, 0x0000, 0x0c3b, 0x0000, 0x05bf, 0x0000, 0x0eaa,
+ 0x0000, 0x05c1, 0x0000, 0x05c3, 0x0000, 0x0cab, 0x0000, 0x05c5,
+ 0x0000, 0x0cbc, 0x0000, 0x0eac, 0x0000, 0x0c47, 0x0000, 0x2089,
+ 0x0000, 0x209b, 0x0000, 0x208b, 0x0000, 0x2125, 0x0000, 0x206f,
+ /* 0xff40 .. 0xff4f */
+ 0x0000, 0x0ba8, 0x0000, 0x0006, 0x0000, 0x05cd, 0x0000, 0x0601,
+ 0x0000, 0x05cf, 0x0000, 0x05d1, 0x0000, 0x0607, 0x0000, 0x05d9,
+ 0x0000, 0x0350, 0x0000, 0x05fb, 0x0000, 0x0354, 0x0000, 0x05db,
+ 0x0000, 0x0376, 0x0000, 0x05dd, 0x0000, 0x0c17, 0x0000, 0x0019,
+ /* 0xff50 .. 0xff5f */
+ 0x0000, 0x05e7, 0x0000, 0x0eae, 0x0000, 0x0356, 0x0000, 0x0219,
+ 0x0000, 0x05e9, 0x0000, 0x05eb, 0x0000, 0x05f1, 0x0000, 0x035e,
+ 0x0000, 0x0378, 0x0000, 0x0360, 0x0000, 0x063d, 0x0000, 0x2071,
+ 0x0000, 0x2127, 0x0000, 0x2073, 0x0000, 0x2129, 0x0000, 0x212b,
+ /* 0xff60 .. 0xff6f */
+ 0x0000, 0x212d, 0x0000, 0x205b, 0x0000, 0x2081, 0x0000, 0x2083,
+ 0x0000, 0x2059, 0x0000, 0x212f, 0x0000, 0x1494, 0x0000, 0x2131,
+ 0x0000, 0x2133, 0x0000, 0x2135, 0x0000, 0x2137, 0x0000, 0x2139,
+ 0x0000, 0x213b, 0x0000, 0x213d, 0x0000, 0x213f, 0x0000, 0x2141,
+ /* 0xff70 .. 0xff7f */
+ 0x0000, 0x2143, 0x0000, 0x1438, 0x0000, 0x143a, 0x0000, 0x143c,
+ 0x0000, 0x143e, 0x0000, 0x1440, 0x0000, 0x1442, 0x0000, 0x1444,
+ 0x0000, 0x1446, 0x0000, 0x1448, 0x0000, 0x144a, 0x0000, 0x144c,
+ 0x0000, 0x144e, 0x0000, 0x1450, 0x0000, 0x1452, 0x0000, 0x1454,
+ /* 0xff80 .. 0xff8f */
+ 0x0000, 0x1456, 0x0000, 0x1458, 0x0000, 0x145a, 0x0000, 0x145c,
+ 0x0000, 0x145e, 0x0000, 0x1460, 0x0000, 0x1462, 0x0000, 0x1464,
+ 0x0000, 0x1466, 0x0000, 0x1468, 0x0000, 0x146a, 0x0000, 0x146c,
+ 0x0000, 0x146e, 0x0000, 0x1470, 0x0000, 0x1472, 0x0000, 0x1474,
+ /* 0xff90 .. 0xff9f */
+ 0x0000, 0x1476, 0x0000, 0x1478, 0x0000, 0x147a, 0x0000, 0x147c,
+ 0x0000, 0x147e, 0x0000, 0x1480, 0x0000, 0x1482, 0x0000, 0x1484,
+ 0x0000, 0x1486, 0x0000, 0x1488, 0x0000, 0x148a, 0x0000, 0x148c,
+ 0x0000, 0x148e, 0x0000, 0x2145, 0x0000, 0x2147, 0x0000, 0x2149,
+ /* 0xffa0 .. 0xffaf */
+ 0x0000, 0x214b, 0x0000, 0x214d, 0x0000, 0x214f, 0x0000, 0x2151,
+ 0x0000, 0x2153, 0x0000, 0x2155, 0x0000, 0x2157, 0x0000, 0x2159,
+ 0x0000, 0x215b, 0x0000, 0x215d, 0x0000, 0x215f, 0x0000, 0x2161,
+ 0x0000, 0x2163, 0x0000, 0x2165, 0x0000, 0x2167, 0x0000, 0x2169,
+ /* 0xffb0 .. 0xffbf */
+ 0x0000, 0x216b, 0x0000, 0x216d, 0x0000, 0x216f, 0x0000, 0x2171,
+ 0x0000, 0x2173, 0x0000, 0x2175, 0x0000, 0x2177, 0x0000, 0x2179,
+ 0x0000, 0x217b, 0x0000, 0x217d, 0x0000, 0x217f, 0x0000, 0x2181,
+ 0x0000, 0x2183, 0x0000, 0x2185, 0x0000, 0x2187, 0x0000, 0x0000,
+ /* 0xffc0 .. 0xffcf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2189, 0x0000, 0x218b,
+ 0x0000, 0x218d, 0x0000, 0x218f, 0x0000, 0x2191, 0x0000, 0x2193,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2195, 0x0000, 0x2197,
+ 0x0000, 0x2199, 0x0000, 0x219b, 0x0000, 0x219d, 0x0000, 0x219f,
+ /* 0xffd0 .. 0xffdf */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21a1, 0x0000, 0x21a3,
+ 0x0000, 0x21a5, 0x0000, 0x21a7, 0x0000, 0x21a9, 0x0000, 0x21ab,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21ad, 0x0000, 0x21af,
+ 0x0000, 0x21b1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ /* 0xffe0 .. 0xffef */
+ 0x0000, 0x21b3, 0x0000, 0x21b5, 0x0000, 0x21b7, 0x0000, 0x21b9,
+ 0x0000, 0x21bb, 0x0000, 0x21bd, 0x0000, 0x21bf, 0x0000, 0x0000,
+ 0x0000, 0x21c1, 0x0000, 0x21c3, 0x0000, 0x21c5, 0x0000, 0x21c7,
+ 0x0000, 0x21c9, 0x0000, 0x21cb, 0x0000, 0x21cd, 0x0000, 0x0000
};
-unsigned int DECLSPEC_HIDDEN wine_decompose( WCHAR ch, WCHAR *dst, unsigned int dstlen )
+static const WCHAR *unicode_table_lookup( UINT cp, int compat, const BYTE *idx1, UINT scale_idx1,
+ const USHORT *idx2, UINT scale_idx2, const USHORT *offsets,
+ UINT scale_off, const WCHAR *data, UINT scale_data )
+{
+ USHORT a, b, c, d;
+
+ a = idx1[cp >> scale_idx1];
+ b = idx2[(a << scale_idx2) + ((cp >> scale_idx2) & 0xf)];
+ c = (b << scale_off) + ((cp & 0xf) << scale_data);
+ if (compat) ++c;
+ d = offsets[c];
+
+ return &data[d];
+}
+
+static int decompose_char_recursive( int compat, UINT ch, WCHAR *dst, int dstlen )
{
- const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf);
- unsigned int res;
+ int total_decomp = 0;
+ int size_decomp;
+ const WCHAR *map;
+
+ if (ch < 0xa0) /* fast path */
+ {
+ if (dstlen) *dst = (WCHAR)ch;
+ return 1;
+ }
+ else if (ch > last_decomposable ||
+ !*(map = unicode_table_lookup( ch, compat, idx1_decomp, 8,
+ idx2_decomp, 4, offsets_decomp, 5, data_decomp, 1 )))
+ {
+ if (dstlen) *dst = (WCHAR)ch;
+ return 1;
+ }
+ else {
+ while (*map)
+ {
+ size_decomp = decompose_char_recursive( compat, *map, dst, dstlen );
+ dstlen -= size_decomp;
+ if (dstlen < 0) dstlen = 0;
+ dst += size_decomp;
+ map++;
+ total_decomp += size_decomp;
+ }
+ return total_decomp;
+ }
+}
+
+int wine_unicode_decompose_string( int compat, const WCHAR *src,
+ int srclen, WCHAR *dst, int dstlen )
+{
+ UINT ch;
+ int srcpos = 0, dstpos = 0;
+ int decomp_len;
+
+ if (dstlen < 0) dstlen = 0;
+
+ while (srcpos < srclen)
+ {
+ ch = src[srcpos];
+
+ decomp_len = decompose_char_recursive( compat, ch, dst+dstpos, dstlen );
+ dstpos += decomp_len;
+
+ if (dstlen > 0)
+ {
+ dstlen -= decomp_len;
+ while (dstlen < 0)
+ {
+ dstpos--;
+ dstlen++;
+ }
+ }
+
+ ++srcpos;
+ }
- *dst = ch;
- if (!*ptr) return 1;
- if (dstlen <= 1) return 0;
- /* apply the decomposition recursively to the first char */
- if ((res = wine_decompose( *ptr, dst, dstlen-1 ))) dst[res++] = ptr[1];
- return res;
+ return dstpos;
}
diff --git a/libs/port/mbtowc.c b/libs/port/mbtowc.c
index 4977c82d8b12..6976f89722a7 100644
--- a/libs/port/mbtowc.c
+++ b/libs/port/mbtowc.c
@@ -22,7 +22,7 @@
#include "wine/unicode.h"
-extern unsigned int wine_decompose( WCHAR ch, WCHAR *dst, unsigned int dstlen ) DECLSPEC_HIDDEN;
+extern int wine_unicode_decompose_string( int compat, const WCHAR *src, int srclen, WCHAR *dst, int dstlen );
/* check the code whether it is in Unicode Private Use Area (PUA). */
/* MB_ERR_INVALID_CHARS raises an error converting from 1-byte character to PUA. */
@@ -101,19 +101,19 @@ static int mbstowcs_sbcs_decompose( const struct sbcs_table *table, int flags,
WCHAR *dst, unsigned int dstlen )
{
const WCHAR * const cp2uni = (flags & MB_USEGLYPHCHARS) ? table->cp2uni_glyphs : table->cp2uni;
- unsigned int len;
+ int len;
if (!dstlen) /* compute length */
{
WCHAR dummy[4]; /* no decomposition is larger than 4 chars */
for (len = 0; srclen; srclen--, src++)
- len += wine_decompose( cp2uni[*src], dummy, 4 );
+ len += wine_unicode_decompose_string( 0, &cp2uni[*src], 1, dummy, 4 );
return len;
}
for (len = dstlen; srclen && len; srclen--, src++)
{
- unsigned int res = wine_decompose( cp2uni[*src], dst, len );
+ int res = wine_unicode_decompose_string( 0, &cp2uni[*src], 1, dst, len );
if (!res) break;
len -= res;
dst += res;
@@ -203,7 +203,7 @@ static int mbstowcs_dbcs_decompose( const struct dbcs_table *table,
{
const WCHAR * const cp2uni = table->cp2uni;
const unsigned char * const cp2uni_lb = table->cp2uni_leadbytes;
- unsigned int len, res;
+ int len, res;
WCHAR ch;
if (!dstlen) /* compute length */
@@ -219,7 +219,7 @@ static int mbstowcs_dbcs_decompose( const struct dbcs_table *table,
ch = cp2uni[(off << 8) + *src];
}
else ch = cp2uni[*src];
- len += wine_decompose( ch, dummy, 4 );
+ len += wine_unicode_decompose_string( 0, &ch, 1, dummy, 4 );
}
return len;
}
@@ -234,7 +234,7 @@ static int mbstowcs_dbcs_decompose( const struct dbcs_table *table,
ch = cp2uni[(off << 8) + *src];
}
else ch = cp2uni[*src];
- if (!(res = wine_decompose( ch, dst, len ))) break;
+ if (!(res = wine_unicode_decompose_string( 0, &ch, 1, dst, len ))) break;
dst += res;
len -= res;
}
diff --git a/tools/make_unicode b/tools/make_unicode
index 56d190565677..2aa063bff624 100755
--- a/tools/make_unicode
+++ b/tools/make_unicode
@@ -472,6 +472,28 @@ sub READ_DEFAULTS($)
next if $decomp eq ""; # no decomposition, skip it
+ # store decomposition table
+ if ($decomp =~ /^<([a-zA-Z]+)>(\s+[0-9a-fA-F]+)+$/)
+ {
+ my @seq = ();
+ for my $ch (split /\s+/, (split /\s+/, $decomp, 2)[1])
+ {
+ push @seq, (hex $ch);
+ }
+ $decomp_table[$src] = [1, \@seq];
+ }
+ elsif ($decomp =~ /^([0-9a-fA-F]+)(\s+([0-9a-fA-F]+))*$/)
+ {
+ my @seq = ();
+ for my $ch (split /\s+/, $decomp)
+ {
+ # we don't support surrogates at the moment
+ next if hex $ch > 0xffff;
+ push @seq, (hex $ch);
+ }
+ $decomp_table[$src] = [0, \@seq];
+ }
+
if ($decomp =~ /^<([a-zA-Z]+)>\s+([0-9a-fA-F]+)$/)
{
# decomposition of the form "<foo> 1234" -> use char if type is known
@@ -506,16 +528,13 @@ sub READ_DEFAULTS($)
# decomposition contains only char values without prefix -> use first char
$dst = hex $1;
$category_table[$src] |= $category_table[$dst] if defined $category_table[$dst];
- # store decomposition if it contains two chars
if ($decomp =~ /^([0-9a-fA-F]+)\s+([0-9a-fA-F]+)$/)
{
- $decomp_table[$src] = [ hex $1, hex $2 ];
push @compose_table, [ hex $1, hex $2, $src ];
}
elsif ($decomp =~ /^(<[a-z]+>\s)*([0-9a-fA-F]+)$/ &&
(($src >= 0xf900 && $src < 0xfb00) || ($src >= 0xfe30 && $src < 0xfffd)))
{
- # Single char decomposition in the compatibility range
$compatmap_table[$src] = hex $2;
}
}
@@ -2264,6 +2283,51 @@ EOF
save_file($filename);
}
+sub do_decomp
+{
+ my ($char, $table_ref, $compat) = @_;
+
+ return ($char) unless defined $table_ref->[$char];
+ my $data = $table_ref->[$char];
+ return ($char) if $data->[0] && !$compat;
+ my @mapping = ();
+ for my $ch (@{$data->[1]})
+ {
+ push @mapping, $ch;
+ }
+ return @mapping;
+}
+
+sub expand_pairs
+{
+ my @data = @_;
+ my @result = ();
+
+ for my $ch (@data)
+ {
+ if ($ch <= 0xFFFF)
+ {
+ push @result, $ch;
+ }
+ elsif ($ch >= 2097152) # 2**21
+ {
+ die sprintf "Invalid Unicode character %04x\n", $ch;
+ }
+ else
+ {
+ my $hx = $ch & 0xFFFF;
+ my $hu = ($ch >> 16) & ((1 << 5) - 1);
+ my $hw = ($hu - 1) & 0xFFFF;
+ my $hi = 0xD800 | ($hw << 6) | ($hx >> 10);
+ my $lx = $ch & 0xFFFF;
+ my $lo = (0xDC00 | ($lx & ((1 << 10) - 1))) & 0xFFFF;
+ push @result, $hi;
+ push @result, $lo;
+ }
+ }
+ return @result;
+}
+
################################################################
# dump the char decomposition table
sub dump_decompose_table($)
@@ -2272,98 +2336,245 @@ sub dump_decompose_table($)
open OUTPUT,">$filename.new" or die "Cannot create $filename";
print "Building $filename\n";
- print OUTPUT "/* Unicode char composition */\n";
+ print OUTPUT "/* Unicode char decomposition */\n";
print OUTPUT "/* generated from $UNIDATA/UnicodeData.txt */\n";
print OUTPUT "/* DO NOT EDIT!! */\n\n";
print OUTPUT "#include \"wine/unicode.h\"\n\n";
- # first determine all the 16-char subsets that contain something
+ # limit code points to BMP
+ my $utflim = 65536;
+ my %nfd_lookup = ();
+ my %nfkd_lookup = ();
+ my %decomp_lookup = ();
+ my @decomp_data = (0);
+ my $pos = 1;
+ my $lastchar_decomp;
- my @filled = (0) x 4096;
- my $pos = 16*2; # for the null subset
- for (my $i = 0; $i < 65536; $i++)
+ for (my $i = 0; $i < $utflim; $i++)
{
next unless defined $decomp_table[$i];
- $filled[$i >> 4] = $pos;
- $pos += 16*2;
- $i |= 15;
+
+ if (defined $decomp_table[$i])
+ {
+ $lastchar_decomp = $i;
+ # fully expand input and mappings
+
+ my @char;
+ push @char, $i;
+ push @char, 0;
+ my $char = pack "n*", @char;
+
+ my @nfd = do_decomp( $i, \@decomp_table, 0 );
+ push @nfd, 0;
+ my $nfd = pack "n*", @nfd;
+
+ my @nfkd = do_decomp( $i, \@decomp_table, 1 );
+ push @nfkd, 0;
+ my $nfkd = pack "n*", @nfkd;
+
+ # lookup or add mappings
+
+ if ($nfd eq $char)
+ {
+ $nfd = undef;
+ }
+ elsif (exists $decomp_lookup{$nfd})
+ {
+ $nfd_lookup{$i} = $decomp_lookup{$nfd};
+ }
+ else
+ {
+ push @decomp_data, @nfd;
+ $decomp_lookup{$nfd} = $pos;
+ $nfd_lookup{$i} = $pos;
+ $pos += @nfd;
+ }
+
+ if ($nfkd eq $char)
+ {
+ $nfkd = undef;
+ }
+ elsif (exists $decomp_lookup{$nfkd})
+ {
+ $nfkd_lookup{$i} = $decomp_lookup{$nfkd};
+ }
+ else
+ {
+ push @decomp_data, @nfkd;
+ $decomp_lookup{$nfkd} = $pos;
+ $nfkd_lookup{$i} = $pos;
+ $pos += @nfkd;
+ }
+ }
}
- my $total = $pos;
- # now count the 256-char subsets that contain something
+ printf OUTPUT "static const UINT last_decomposable = 0x%x;\n\n", $lastchar_decomp;
- my @filled_idx = (256) x 256;
- $pos = 256 + 16;
- for (my $i = 0; $i < 4096; $i++)
+ # dump decomposition data
+
+ printf OUTPUT "static const WCHAR data_decomp[%d] =\n", $pos;
+ print OUTPUT "{\n";
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @decomp_data );
+ print OUTPUT "\n};\n\n";
+
+ # find 256-char subsets that contain something
+
+ my $filled_pos = 1;
+ my $filled_lim = ($lastchar_decomp >> 8) + 1;
+ my @filled = (0) x $filled_lim;
+ for (my $i = 0; $i < $utflim; $i++)
+ {
+ last if $i > $lastchar_decomp;
+ next unless exists $nfd_lookup{$i} || exists $nfkd_lookup{$i};
+ $filled[$i >> 8] = $filled_pos++;
+ $i |= 255;
+ }
+
+ # dump index of 256-char subsets
+
+ printf OUTPUT "static const BYTE idx1_decomp[%d] =\n", $filled_lim;
+ print OUTPUT "{\n";
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%02x", 0, @filled );
+ print OUTPUT "\n};\n\n";
+
+ # for 256-char subsets, find non-empty 16-char subsets
+
+ my $sub_filled_pos = 1;
+ my %sub_filled = ();
+ for (my $i = 0; $i < $filled_lim; $i++)
{
next unless $filled[$i];
- $filled_idx[$i >> 4] = $pos;
- $pos += 16;
- $i |= 15;
+ for (my $j = 0; $j < 256; $j++)
+ {
+ my $idx = ($i << 8) | $j;
+ next unless exists $nfd_lookup{$idx} || exists $nfkd_lookup{$idx};
+ $sub_filled{$idx >> 4} = $sub_filled_pos++;
+ $j |= 15;
+ }
}
- my $null_offset = $pos; # null mapping
- $total += $pos;
- # add the index offsets to the subsets positions
+ # dump index of 16-char subsets
- for (my $i = 0; $i < 4096; $i++)
+ printf OUTPUT "static const USHORT idx2_decomp[%d] =\n", $filled_pos * 16;
+ print OUTPUT "{\n";
+ my @null_idx = (0) x 16;
+ print OUTPUT " /* null sub-index */\n";
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_idx );
+ for (my $i = 0; $i < $filled_lim; $i++)
{
next unless $filled[$i];
- $filled[$i] += $null_offset;
+ printf OUTPUT ",\n /* sub-index 0x%02x */\n", $filled[$i];
+
+ my @sub_idx;
+ for (my $j = 0; $j < 16; $j++)
+ {
+ my $idx = ($i << 4) | $j;
+ $sub_idx[$j] = $sub_filled{$idx} || 0;
+ }
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_idx );
}
+ print OUTPUT "\n};\n\n";
- # dump the main index
+ # dump the 16-char subsets
- printf OUTPUT "static const WCHAR table[%d] =\n", $total;
- printf OUTPUT "{\n /* index */\n";
- printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @filled_idx );
- printf OUTPUT ",\n /* null sub-index */\n%s", DUMP_ARRAY( "0x%04x", 0, ($null_offset) x 16 );
+ printf OUTPUT "static const USHORT offsets_decomp[%d] =\n", 32 * $sub_filled_pos;
+ print OUTPUT "{\n";
+ print OUTPUT " /* (nfd, nfkd) x 16 */\n";
+ my @null_table = (0) x 32;
+ print OUTPUT " /* no decomposition */\n";
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_table );
+ for my $key (sort {$a <=> $b} keys %sub_filled)
+ {
+ printf OUTPUT ",\n /* 0x%03x0 .. 0x%03xf */\n", $key, $key;
+ my @sub_table;
+ for (my $j = 0; $j < 16; $j++)
+ {
+ my $idx = ($key << 4) | $j;
+ $sub_table[2 * $j] = $nfd_lookup{$idx} || 0;
+ $sub_table[2 * $j + 1] = $nfkd_lookup{$idx} || 0;
+ }
+ printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_table );
+ }
+ print OUTPUT "\n};\n\n";
- # dump the second-level indexes
+ print OUTPUT <<"EOF";
+static const WCHAR *unicode_table_lookup( UINT cp, int compat, const BYTE *idx1, UINT scale_idx1,
+ const USHORT *idx2, UINT scale_idx2, const USHORT *offsets,
+ UINT scale_off, const WCHAR *data, UINT scale_data )
+{
+ USHORT a, b, c, d;
- for (my $i = 0; $i < 256; $i++)
+ a = idx1[cp >> scale_idx1];
+ b = idx2[(a << scale_idx2) + ((cp >> scale_idx2) & 0xf)];
+ c = (b << scale_off) + ((cp & 0xf) << scale_data);
+ if (compat) ++c;
+ d = offsets[c];
+
+ return &data[d];
+}
+
+static int decompose_char_recursive( int compat, UINT ch, WCHAR *dst, int dstlen )
+{
+ int total_decomp = 0;
+ int size_decomp;
+ const WCHAR *map;
+
+ if (ch < 0xa0) /* fast path */
{
- next unless ($filled_idx[$i] > 256);
- my @table = @filled[($i<<4)..($i<<4)+15];
- for (my $j = 0; $j < 16; $j++) { $table[$j] ||= $null_offset; }
- printf OUTPUT ",\n /* sub-index %02x */\n", $i;
- printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table );
+ if (dstlen) *dst = (WCHAR)ch;
+ return 1;
+ }
+ else if (ch > last_decomposable ||
+ !*(map = unicode_table_lookup( ch, compat, idx1_decomp, 8,
+ idx2_decomp, 4, offsets_decomp, 5, data_decomp, 1 )))
+ {
+ if (dstlen) *dst = (WCHAR)ch;
+ return 1;
}
+ else {
+ while (*map)
+ {
+ size_decomp = decompose_char_recursive( compat, *map, dst, dstlen );
+ dstlen -= size_decomp;
+ if (dstlen < 0) dstlen = 0;
+ dst += size_decomp;
+ map++;
+ total_decomp += size_decomp;
+ }
+ return total_decomp;
+ }
+}
- # dump the 16-char subsets
+int wine_unicode_decompose_string( int compat, const WCHAR *src,
+ int srclen, WCHAR *dst, int dstlen )
+{
+ UINT ch;
+ int srcpos = 0, dstpos = 0;
+ int decomp_len;
- printf OUTPUT ",\n /* null mapping */\n";
- printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, (0) x 32 );
+ if (dstlen < 0) dstlen = 0;
- for (my $i = 0; $i < 4096; $i++)
+ while (srcpos < srclen)
{
- next unless $filled[$i];
- my @table = (0) x 32;
- for (my $j = 0; $j < 16; $j++)
+ ch = src[srcpos];
+
+ decomp_len = decompose_char_recursive( compat, ch, dst+dstpos, dstlen );
+ dstpos += decomp_len;
+
+ if (dstlen > 0)
{
- if (defined $decomp_table[($i<<4) + $j])
+ dstlen -= decomp_len;
+ while (dstlen < 0)
{
- $table[2 * $j] = ${$decomp_table[($i << 4) + $j]}[0];
- $table[2 * $j + 1] = ${$decomp_table[($i << 4) + $j]}[1];
+ dstpos--;
+ dstlen++;
}
}
- printf OUTPUT ",\n /* 0x%03x0 .. 0x%03xf */\n", $i, $i;
- printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table );
+
+ ++srcpos;
}
- printf OUTPUT "\n};\n\n";
- print OUTPUT <<"EOF";
-unsigned int DECLSPEC_HIDDEN wine_decompose( WCHAR ch, WCHAR *dst, unsigned int dstlen )
-{
- const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf);
- unsigned int res;
-
- *dst = ch;
- if (!*ptr) return 1;
- if (dstlen <= 1) return 0;
- /* apply the decomposition recursively to the first char */
- if ((res = wine_decompose( *ptr, dst, dstlen-1 ))) dst[res++] = ptr[1];
- return res;
+ return dstpos;
}
EOF
close OUTPUT;
--
2.17.1
2
3
Dec. 4, 2018
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/comctl32/tests/button.c | 5 +----
dlls/comctl32/tests/monthcal.c | 6 +++---
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c
index 81461dee44..09ec4a1c0a 100644
--- a/dlls/comctl32/tests/button.c
+++ b/dlls/comctl32/tests/button.c
@@ -1366,10 +1366,7 @@ static void test_get_set_textmargin(void)
BOOL ret;
DWORD type;
- margin_in.top = 1;
- margin_in.left = 2;
- margin_in.right = 3;
- margin_in.bottom = 4;
+ SetRect(&margin_in, 2, 1, 3, 4);
for (type = BS_PUSHBUTTON; type <= BS_DEFCOMMANDLINK; type++)
{
hwnd = create_button(type, NULL);
diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c
index 7c78540333..11a637fb82 100644
--- a/dlls/comctl32/tests/monthcal.c
+++ b/dlls/comctl32/tests/monthcal.c
@@ -1798,7 +1798,7 @@ static void test_hittest_v6(void)
mchit.iOffset = -1;
mchit.iCol = mchit.iRow = -1;
mchit.uHit = 0;
- mchit.rc.left = mchit.rc.right = mchit.rc.top = mchit.rc.bottom = -1;
+ SetRect(&mchit.rc, -1, -1, -1, -1);
ret = SendMessageA(hwnd, MCM_HITTEST, 0, (LPARAM)&mchit);
expect_hex(MCHT_CALENDARDATE, ret);
expect_hex(MCHT_CALENDARDATE, mchit.uHit);
@@ -1815,7 +1815,7 @@ static void test_hittest_v6(void)
mchit.iOffset = -1;
mchit.iCol = mchit.iRow = -1;
mchit.uHit = 0;
- mchit.rc.left = mchit.rc.right = mchit.rc.top = mchit.rc.bottom = -1;
+ SetRect(&mchit.rc, -1, -1, -1, -1);
ret = SendMessageA(hwnd, MCM_HITTEST, 0, (LPARAM)&mchit);
expect_hex(MCHT_TITLE, ret);
expect_hex(MCHT_TITLE, mchit.uHit);
@@ -1834,7 +1834,7 @@ static void test_hittest_v6(void)
mchit.iOffset = -2;
mchit.iCol = mchit.iRow = -2;
mchit.uHit = ~0;
- mchit.rc.left = mchit.rc.right = mchit.rc.top = mchit.rc.bottom = -1;
+ SetRect(&mchit.rc, -1, -1, -1, -1);
ret = SendMessageA(hwnd, MCM_HITTEST, 0, (LPARAM)&mchit);
todo_wine expect_hex(MCHT_NOWHERE, ret);
todo_wine expect_hex(MCHT_NOWHERE, mchit.uHit);
--
2.14.5
1
0
[PATCH 1/2] dxgi/tests: Add test for enumerating display adapters using SetupAPI.
by Józef Kucia Dec. 4, 2018
by Józef Kucia Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
Shows that display adapter LUIDs are stored in SetupAPI device
properties. It might be useful information to fix LUIDs in Wine.
We could register display adapters and assign LUIDs to them.
DXGI, winevulkan and wined3d could retrieve LUIDs using SetupAPI.
---
dlls/dxgi/tests/Makefile.in | 2 +-
dlls/dxgi/tests/dxgi.c | 115 ++++++++++++++++++++++++++++++++++++
2 files changed, 116 insertions(+), 1 deletion(-)
diff --git a/dlls/dxgi/tests/Makefile.in b/dlls/dxgi/tests/Makefile.in
index 1c99d70957d5..76f78cc5fd4d 100644
--- a/dlls/dxgi/tests/Makefile.in
+++ b/dlls/dxgi/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = dxgi.dll
-IMPORTS = d3d10_1 dxgi user32
+IMPORTS = d3d10_1 dxgi setupapi user32
C_SRCS = \
dxgi.c
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index 02cf744be358..bf57ea2fb1bc 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -22,6 +22,9 @@
#include "dxgi1_6.h"
#include "d3d11.h"
#include "d3d12.h"
+#include "devguid.h"
+#include "devpkey.h"
+#include "setupapi.h"
#include "wine/heap.h"
#include "wine/test.h"
@@ -820,6 +823,117 @@ static void test_adapter_luid(void)
ok(!refcount, "Factory has %u references left.\n", refcount);
}
+DEFINE_DEVPROPKEY(DEVPROPKEY_DISPLAY_ADAPTER_LUID,
+ 0x60b193cb, 0x5276, 0x4d0f, 0x96, 0xfc, 0xf1, 0x73, 0xab, 0xad, 0x3e, 0xc6, 2);
+
+static void test_display_adapters(void)
+{
+ DXGI_ADAPTER_DESC adapter_desc;
+ BOOL found_display_adapter;
+ unsigned int adapter_index;
+ unsigned int device_index;
+ DEVPROPTYPE property_type;
+ IDXGIFactory *factory;
+ IDXGIAdapter *adapter;
+ SP_DEVINFO_DATA data;
+ HDEVINFO dev_info;
+ DWORD last_error;
+ ULONG refcount;
+ void *buffer;
+ WCHAR *name;
+ DWORD size;
+ HRESULT hr;
+ LUID luid;
+ BOOL ret;
+
+ hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory);
+ ok(hr == S_OK, "Failed to create DXGI factory, hr %#x.\n", hr);
+
+ for (adapter_index = 0; (hr = IDXGIFactory_EnumAdapters(factory, adapter_index, &adapter)) == S_OK; ++adapter_index)
+ {
+ hr = IDXGIAdapter_GetDesc(adapter, &adapter_desc);
+ ok(hr == S_OK, "Failed to get adapter desc, hr %#x.\n", hr);
+ refcount = IDXGIAdapter_Release(adapter);
+ ok(!refcount, "Adapter has %u references left.\n", refcount);
+
+ /* Skip WARP. */
+ if ((!adapter_desc.SubSysId && !adapter_desc.Revision && !adapter_desc.VendorId && !adapter_desc.DeviceId)
+ || (adapter_desc.VendorId == 0x1414 && adapter_desc.DeviceId == 0x008c))
+ continue;
+
+ found_display_adapter = FALSE;
+
+ dev_info = SetupDiGetClassDevsW(&GUID_DEVCLASS_DISPLAY, NULL, NULL, DIGCF_PRESENT);
+ ok(dev_info != INVALID_HANDLE_VALUE, "Failed to get device information set.\n");
+
+ data.cbSize = sizeof(data);
+ for (device_index = 0; SetupDiEnumDeviceInfo(dev_info, device_index, &data); ++device_index)
+ {
+ /* LUID */
+ size = 0;
+ property_type = DEVPROP_TYPE_EMPTY;
+ ret = SetupDiGetDevicePropertyW(dev_info, &data, &DEVPROPKEY_DISPLAY_ADAPTER_LUID,
+ &property_type, NULL, 0, &size, 0);
+ last_error = GetLastError();
+ todo_wine
+ ok(!ret && last_error == ERROR_INSUFFICIENT_BUFFER,
+ "Failed to get device property size, ret %#x, last_error %#x.\n", ret, last_error);
+ if (!ret && last_error == ERROR_NOT_FOUND)
+ break;
+ ok(property_type == DEVPROP_TYPE_UINT64, "Got unexpected property type %#x.\n", property_type);
+ ok(size == sizeof(LUID), "Got unexpected size %u.\n", size);
+
+ buffer = heap_alloc(size);
+ ok(!!buffer, "Failed to allocate memory.\n");
+ ret = SetupDiGetDevicePropertyW(dev_info, &data, &DEVPROPKEY_DISPLAY_ADAPTER_LUID,
+ &property_type, buffer, size, &size, 0);
+ ok(ret, "Failed to get device property, ret %#x, last_error %#x.\n", ret, GetLastError());
+ luid = *(LUID *)buffer;
+ heap_free(buffer);
+
+ if (equal_luid(luid, adapter_desc.AdapterLuid))
+ {
+ found_display_adapter = TRUE;
+
+ /* name */
+ size = 0;
+ property_type = DEVPROP_TYPE_STRING;
+ ret = SetupDiGetDevicePropertyW(dev_info, &data, &DEVPKEY_NAME,
+ &property_type, NULL, 0, &size, 0);
+ last_error = GetLastError();
+ ok(!ret && last_error == ERROR_INSUFFICIENT_BUFFER,
+ "Failed to get device property size, ret %#x, last_error %#x.\n", ret, last_error);
+ ok(property_type == DEVPROP_TYPE_STRING, "Got unexpected property type %#x.\n", property_type);
+
+ name = heap_alloc(size);
+ ok(!!name, "Failed to allocate memory.\n");
+ ret = SetupDiGetDevicePropertyW(dev_info, &data, &DEVPKEY_NAME,
+ &property_type, (void *)name, size, &size, 0);
+ ok(ret, "Failed to get device property, ret %#x, last_error %#x.\n", ret, GetLastError());
+
+ ok(!lstrcmpW(adapter_desc.Description, name),
+ "Adapter names do not match: %s, %s.\n",
+ wine_dbgstr_w(adapter_desc.Description), wine_dbgstr_w(name));
+
+ heap_free(name);
+ break;
+ }
+ }
+
+ ret = SetupDiDestroyDeviceInfoList(dev_info);
+ ok(ret, "Failed to destroy device info list.\n");
+
+ todo_wine
+ ok(found_display_adapter, "Failed to find display adapter for IDXGIAdapter %u (%s %04x:%04x).\n",
+ adapter_index, wine_dbgstr_w(adapter_desc.Description),
+ adapter_desc.VendorId, adapter_desc.DeviceId);
+ }
+ ok(hr == DXGI_ERROR_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
+
+ refcount = IDXGIFactory_Release(factory);
+ ok(!refcount, "Factory has %u references left.\n", refcount);
+}
+
static void test_query_video_memory_info(void)
{
DXGI_QUERY_VIDEO_MEMORY_INFO memory_info;
@@ -5018,6 +5132,7 @@ START_TEST(dxgi)
queue_test(test_adapter_desc);
queue_test(test_adapter_luid);
+ queue_test(test_display_adapters);
queue_test(test_query_video_memory_info);
queue_test(test_check_interface_support);
queue_test(test_create_surface);
--
2.18.1
5
6
Dec. 4, 2018
2
1
Dec. 4, 2018
On NetBSD, time.h includes sys/time.h that includes sys/select.h. It must
be included before winsock2.h that redefines fd_set.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46230
Signed-off-by: Frédéric Fauberteau <triaxx(a)NetBSD.org>
---
dlls/wininet/http.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 4122067e41..131d3ac612 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -35,12 +35,13 @@
# include <zlib.h>
#endif
+#include <time.h>
+
#include "winsock2.h"
#include "ws2ipdef.h"
#include <stdarg.h>
#include <stdio.h>
-#include <time.h>
#include <assert.h>
#include "windef.h"
--
2.19.2
2
2
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
We should move the implementation to a C file.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 40 ----------------------------------
tests/d3d12_test_utils.h | 46 +++++++++++++++++++++++++++++++++++++---
2 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 8f9e2c6ce061..e48750b9cba6 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -173,18 +173,6 @@ static void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resourc
ID3D12GraphicsCommandList_ResourceBarrier(list, 1, &barrier);
}
-#define reset_command_list(a, b) reset_command_list_(__LINE__, a, b)
-static void reset_command_list_(unsigned int line,
- ID3D12GraphicsCommandList *list, ID3D12CommandAllocator *allocator)
-{
- HRESULT hr;
-
- hr = ID3D12CommandAllocator_Reset(allocator);
- ok_(line)(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
- hr = ID3D12GraphicsCommandList_Reset(list, allocator, NULL);
- ok_(line)(SUCCEEDED(hr), "Failed to reset command list, hr %#x.\n", hr);
-}
-
#ifdef _WIN32
static HANDLE create_event(void)
{
@@ -354,21 +342,6 @@ static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12Comm
ID3D12Fence_Release(fence);
}
-#define update_buffer_data(a, b, c, d) update_buffer_data_(__LINE__, a, b, c, d)
-static void update_buffer_data_(unsigned int line, ID3D12Resource *buffer,
- size_t offset, size_t size, const void *data)
-{
- D3D12_RANGE range;
- HRESULT hr;
- void *ptr;
-
- range.Begin = range.End = 0;
- hr = ID3D12Resource_Map(buffer, 0, &range, &ptr);
- ok_(line)(SUCCEEDED(hr), "Failed to map buffer, hr %#x.\n", hr);
- memcpy((BYTE *)ptr + offset, data, size);
- ID3D12Resource_Unmap(buffer, 0, NULL);
-}
-
#define create_default_buffer(a, b, c, d) create_default_buffer_(__LINE__, a, b, c, d)
static ID3D12Resource *create_default_buffer_(unsigned int line, ID3D12Device *device,
size_t size, D3D12_RESOURCE_FLAGS resource_flags, D3D12_RESOURCE_STATES initial_resource_state)
@@ -377,19 +350,6 @@ static ID3D12Resource *create_default_buffer_(unsigned int line, ID3D12Device *d
resource_flags, initial_resource_state);
}
-#define create_upload_buffer(a, b, c) create_upload_buffer_(__LINE__, a, b, c)
-static ID3D12Resource *create_upload_buffer_(unsigned int line, ID3D12Device *device,
- size_t size, const void *data)
-{
- ID3D12Resource *buffer;
-
- buffer = create_buffer_(line, device, D3D12_HEAP_TYPE_UPLOAD, size,
- D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_GENERIC_READ);
- if (data)
- update_buffer_data_(line, buffer, 0, size, data);
- return buffer;
-}
-
static void copy_sub_resource_data(const D3D12_MEMCPY_DEST *dst, const D3D12_SUBRESOURCE_DATA *src,
unsigned int row_count, unsigned int slice_count, size_t row_size)
{
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h
index 02c5a74e1ac9..d4265fc893c8 100644
--- a/tests/d3d12_test_utils.h
+++ b/tests/d3d12_test_utils.h
@@ -81,6 +81,18 @@ static void exec_command_list(ID3D12CommandQueue *queue, ID3D12GraphicsCommandLi
ID3D12CommandQueue_ExecuteCommandLists(queue, 1, lists);
}
+#define reset_command_list(a, b) reset_command_list_(__LINE__, a, b)
+static inline void reset_command_list_(unsigned int line,
+ ID3D12GraphicsCommandList *list, ID3D12CommandAllocator *allocator)
+{
+ HRESULT hr;
+
+ hr = ID3D12CommandAllocator_Reset(allocator);
+ ok_(line)(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
+ hr = ID3D12GraphicsCommandList_Reset(list, allocator, NULL);
+ ok_(line)(SUCCEEDED(hr), "Failed to reset command list, hr %#x.\n", hr);
+}
+
#define create_buffer(a, b, c, d, e) create_buffer_(__LINE__, a, b, c, d, e)
static ID3D12Resource *create_buffer_(unsigned int line, ID3D12Device *device,
D3D12_HEAP_TYPE heap_type, size_t size, D3D12_RESOURCE_FLAGS resource_flags,
@@ -121,6 +133,34 @@ static ID3D12Resource *create_readback_buffer_(unsigned int line, ID3D12Device *
D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE, D3D12_RESOURCE_STATE_COPY_DEST);
}
+#define update_buffer_data(a, b, c, d) update_buffer_data_(__LINE__, a, b, c, d)
+static inline void update_buffer_data_(unsigned int line, ID3D12Resource *buffer,
+ size_t offset, size_t size, const void *data)
+{
+ D3D12_RANGE range;
+ HRESULT hr;
+ void *ptr;
+
+ range.Begin = range.End = 0;
+ hr = ID3D12Resource_Map(buffer, 0, &range, &ptr);
+ ok_(line)(hr == S_OK, "Failed to map buffer, hr %#x.\n", hr);
+ memcpy((BYTE *)ptr + offset, data, size);
+ ID3D12Resource_Unmap(buffer, 0, NULL);
+}
+
+#define create_upload_buffer(a, b, c) create_upload_buffer_(__LINE__, a, b, c)
+static inline ID3D12Resource *create_upload_buffer_(unsigned int line, ID3D12Device *device,
+ size_t size, const void *data)
+{
+ ID3D12Resource *buffer;
+
+ buffer = create_buffer_(line, device, D3D12_HEAP_TYPE_UPLOAD, size,
+ D3D12_RESOURCE_FLAG_NONE, D3D12_RESOURCE_STATE_GENERIC_READ);
+ if (data)
+ update_buffer_data_(line, buffer, 0, size, data);
+ return buffer;
+}
+
#define create_cpu_descriptor_heap(a, b, c) create_cpu_descriptor_heap_(__LINE__, a, b, c)
static inline ID3D12DescriptorHeap *create_cpu_descriptor_heap_(unsigned int line, ID3D12Device *device,
D3D12_DESCRIPTOR_HEAP_TYPE heap_type, unsigned int descriptor_count)
@@ -377,7 +417,7 @@ static void check_readback_data_uint_(unsigned int line, struct resource_readbac
}
#define check_sub_resource_uint(a, b, c, d, e, f) check_sub_resource_uint_(__LINE__, a, b, c, d, e, f)
-static void check_sub_resource_uint_(unsigned int line, ID3D12Resource *texture,
+static inline void check_sub_resource_uint_(unsigned int line, ID3D12Resource *texture,
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
unsigned int expected, unsigned int max_diff)
{
@@ -617,7 +657,7 @@ static void create_render_target_(unsigned int line, struct test_context *contex
}
#define init_test_context(context, desc) init_test_context_(__LINE__, context, desc)
-static bool init_test_context_(unsigned int line, struct test_context *context,
+static inline bool init_test_context_(unsigned int line, struct test_context *context,
const struct test_context_desc *desc)
{
D3D12_COMMAND_QUEUE_DESC command_queue_desc;
@@ -687,7 +727,7 @@ static bool init_test_context_(unsigned int line, struct test_context *context,
}
#define destroy_test_context(context) destroy_test_context_(__LINE__, context)
-static void destroy_test_context_(unsigned int line, struct test_context *context)
+static inline void destroy_test_context_(unsigned int line, struct test_context *context)
{
ULONG refcount;
--
2.19.2
2
1
[PATCH vkd3d 05/10] tests: Introduce common header for d3d12 crosstests.
by Józef Kucia Dec. 4, 2018
by Józef Kucia Dec. 4, 2018
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 41 +-------------------------
tests/d3d12_crosstest.h | 63 ++++++++++++++++++++++++++++++++++++++++
tests/d3d12_test_utils.h | 6 ++--
3 files changed, 67 insertions(+), 43 deletions(-)
create mode 100644 tests/d3d12_crosstest.h
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 6f45ac99fd5d..8f9e2c6ce061 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -16,46 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-/* Hack for MinGW-w64 headers.
- *
- * We want to use WIDL C inline wrappers because some methods
- * in D3D12 interfaces return aggregate objects. Unfortunately,
- * WIDL C inline wrappers are broken when used with MinGW-w64
- * headers because FORCEINLINE expands to extern inline
- * which leads to the "multiple storage classes in declaration
- * specifiers" compiler error.
- */
-#ifdef __MINGW32__
-# include <_mingw.h>
-# ifdef __MINGW64_VERSION_MAJOR
-# undef __forceinline
-# define __forceinline __inline__ __attribute__((__always_inline__,__gnu_inline__))
-# endif
-
-# define _HRESULT_DEFINED
-typedef int HRESULT;
-#endif
-
-#define COBJMACROS
-#define INITGUID
-#include "vkd3d_test.h"
-#include "vkd3d_windows.h"
-#define WIDL_C_INLINE_WRAPPERS
-#include "vkd3d_d3d12.h"
-
-#include <inttypes.h>
-#include <limits.h>
-#include <math.h>
-#include <time.h>
-
-#ifdef _WIN32
-# include "vkd3d_dxgi1_4.h"
-#else
-# include <pthread.h>
-# include "vkd3d_utils.h"
-#endif
-
-#include "d3d12_test_utils.h"
+#include "d3d12_crosstest.h"
struct vec2
{
diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h
new file mode 100644
index 000000000000..daf156b15b4a
--- /dev/null
+++ b/tests/d3d12_crosstest.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016-2018 Józef Kucia for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __VKD3D_D3D12_CROSSTEST_H
+#define __VKD3D_D3D12_CROSSTEST_H
+
+/* Hack for MinGW-w64 headers.
+ *
+ * We want to use WIDL C inline wrappers because some methods
+ * in D3D12 interfaces return aggregate objects. Unfortunately,
+ * WIDL C inline wrappers are broken when used with MinGW-w64
+ * headers because FORCEINLINE expands to extern inline
+ * which leads to the "multiple storage classes in declaration
+ * specifiers" compiler error.
+ */
+#ifdef __MINGW32__
+# include <_mingw.h>
+# ifdef __MINGW64_VERSION_MAJOR
+# undef __forceinline
+# define __forceinline __inline__ __attribute__((__always_inline__,__gnu_inline__))
+# endif
+
+# define _HRESULT_DEFINED
+typedef int HRESULT;
+#endif
+
+#define COBJMACROS
+#define INITGUID
+#include "vkd3d_test.h"
+#include "vkd3d_windows.h"
+#define WIDL_C_INLINE_WRAPPERS
+#include "vkd3d_d3d12.h"
+
+#include <inttypes.h>
+#include <limits.h>
+#include <math.h>
+#include <time.h>
+
+#ifdef _WIN32
+# include "vkd3d_dxgi1_4.h"
+#else
+# include <pthread.h>
+# include "vkd3d_utils.h"
+#endif
+
+#include "d3d12_test_utils.h"
+
+#endif /* __VKD3D_D3D12_CROSSTEST_H */
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h
index c2e7a3d50458..02c5a74e1ac9 100644
--- a/tests/d3d12_test_utils.h
+++ b/tests/d3d12_test_utils.h
@@ -16,8 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#ifndef __VKD3D_D3D12_TEST_H
-#define __VKD3D_D3D12_TEST_H
+#ifndef __VKD3D_D3D12_TEST_UTILS_H
+#define __VKD3D_D3D12_TEST_UTILS_H
#define wait_queue_idle(a, b) wait_queue_idle_(__LINE__, a, b)
static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue);
@@ -769,4 +769,4 @@ static inline D3D12_GPU_DESCRIPTOR_HANDLE get_gpu_sampler_handle(struct test_con
return get_gpu_handle(context->device, heap, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, offset);
}
-#endif /* __VKD3D_D3D12_TEST_H */
+#endif /* __VKD3D_D3D12_TEST_UTILS_H */
--
2.19.2
2
1
[PATCH vkd3d 10/10] tests: Introduce enable_d3d12_debug_layer() helper function.
by Józef Kucia Dec. 4, 2018
by Józef Kucia Dec. 4, 2018
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 1 +
tests/d3d12_crosstest.h | 17 +++++++++++++----
tests/d3d12_invalid_usage.c | 1 +
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index aee2ccca4295..1598910718f4 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -21810,6 +21810,7 @@ static void test_primitive_restart(void)
START_TEST(d3d12)
{
parse_args(argc, argv);
+ enable_d3d12_debug_layer(argc, argv);
print_adapter_info();
run_test(test_create_device);
diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h
index 8f522e880b16..ececd7810329 100644
--- a/tests/d3d12_crosstest.h
+++ b/tests/d3d12_crosstest.h
@@ -317,6 +317,19 @@ static ID3D12Device *create_device(void)
}
static void parse_args(int argc, char **argv)
+{
+ unsigned int i;
+
+ for (i = 1; i < argc; ++i)
+ {
+ if (!strcmp(argv[i], "--warp"))
+ use_warp_device = true;
+ else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
+ use_adapter_idx = atoi(argv[++i]);
+ }
+}
+
+static void enable_d3d12_debug_layer(int argc, char **argv)
{
bool enable_debug_layer = false;
ID3D12Debug *debug;
@@ -326,10 +339,6 @@ static void parse_args(int argc, char **argv)
{
if (!strcmp(argv[i], "--validate"))
enable_debug_layer = true;
- else if (!strcmp(argv[i], "--warp"))
- use_warp_device = true;
- else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
- use_adapter_idx = atoi(argv[++i]);
}
if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
diff --git a/tests/d3d12_invalid_usage.c b/tests/d3d12_invalid_usage.c
index 40935428f5ad..5f764eb95fe0 100644
--- a/tests/d3d12_invalid_usage.c
+++ b/tests/d3d12_invalid_usage.c
@@ -153,6 +153,7 @@ static void test_invalid_texture_resource_barriers(void)
START_TEST(d3d12_invalid_usage)
{
parse_args(argc, argv);
+ enable_d3d12_debug_layer(argc, argv);
print_adapter_info();
run_test(test_invalid_texture_resource_barriers);
--
2.19.2
3
2
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 21 +--------------------
tests/d3d12_crosstest.h | 23 +++++++++++++++++++++++
tests/d3d12_invalid_usage.c | 21 +--------------------
3 files changed, 25 insertions(+), 40 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 3123018aca6f..aee2ccca4295 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -21809,26 +21809,7 @@ static void test_primitive_restart(void)
START_TEST(d3d12)
{
- bool enable_debug_layer = false;
- ID3D12Debug *debug;
- unsigned int i;
-
- for (i = 1; i < argc; ++i)
- {
- if (!strcmp(argv[i], "--validate"))
- enable_debug_layer = true;
- else if (!strcmp(argv[i], "--warp"))
- use_warp_device = true;
- else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
- use_adapter_idx = atoi(argv[++i]);
- }
-
- if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
- {
- ID3D12Debug_EnableDebugLayer(debug);
- ID3D12Debug_Release(debug);
- }
-
+ parse_args(argc, argv);
print_adapter_info();
run_test(test_create_device);
diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h
index ddba9feaa589..8f522e880b16 100644
--- a/tests/d3d12_crosstest.h
+++ b/tests/d3d12_crosstest.h
@@ -316,4 +316,27 @@ static ID3D12Device *create_device(void)
return SUCCEEDED(hr) ? device : NULL;
}
+static void parse_args(int argc, char **argv)
+{
+ bool enable_debug_layer = false;
+ ID3D12Debug *debug;
+ unsigned int i;
+
+ for (i = 1; i < argc; ++i)
+ {
+ if (!strcmp(argv[i], "--validate"))
+ enable_debug_layer = true;
+ else if (!strcmp(argv[i], "--warp"))
+ use_warp_device = true;
+ else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
+ use_adapter_idx = atoi(argv[++i]);
+ }
+
+ if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
+ {
+ ID3D12Debug_EnableDebugLayer(debug);
+ ID3D12Debug_Release(debug);
+ }
+}
+
#endif /* __VKD3D_D3D12_CROSSTEST_H */
diff --git a/tests/d3d12_invalid_usage.c b/tests/d3d12_invalid_usage.c
index ce354b8a8709..40935428f5ad 100644
--- a/tests/d3d12_invalid_usage.c
+++ b/tests/d3d12_invalid_usage.c
@@ -152,26 +152,7 @@ static void test_invalid_texture_resource_barriers(void)
START_TEST(d3d12_invalid_usage)
{
- bool enable_debug_layer = false;
- ID3D12Debug *debug;
- unsigned int i;
-
- for (i = 1; i < argc; ++i)
- {
- if (!strcmp(argv[i], "--validate"))
- enable_debug_layer = true;
- else if (!strcmp(argv[i], "--warp"))
- use_warp_device = true;
- else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
- use_adapter_idx = atoi(argv[++i]);
- }
-
- if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
- {
- ID3D12Debug_EnableDebugLayer(debug);
- ID3D12Debug_Release(debug);
- }
-
+ parse_args(argc, argv);
print_adapter_info();
run_test(test_invalid_texture_resource_barriers);
--
2.19.2
3
2
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Ideally, tests should not produce Vulkan validation errors. Move tests
which explicitly test invalid usage of D3D12 and are expected to produce
validation errors to a separate file.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
Makefile.am | 3 +-
tests/d3d12.c | 133 ---------------------------
tests/d3d12_invalid_usage.c | 178 ++++++++++++++++++++++++++++++++++++
3 files changed, 180 insertions(+), 134 deletions(-)
create mode 100644 tests/d3d12_invalid_usage.c
diff --git a/Makefile.am b/Makefile.am
index c2a20c6149c3..86c0184c97a6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,7 +37,8 @@ vkd3d_tests = \
tests/vkd3d_api
vkd3d_cross_tests = \
- tests/d3d12
+ tests/d3d12 \
+ tests/d3d12_invalid_usage
vkd3d_test_headers = \
tests/vkd3d_d3d12_test.h
diff --git a/tests/d3d12.c b/tests/d3d12.c
index d886f960ddf0..3123018aca6f 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -5080,138 +5080,6 @@ static void test_texture_resource_barriers(void)
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
}
-static void test_invalid_texture_resource_barriers(void)
-{
- ID3D12Resource *texture, *readback_buffer, *upload_buffer;
- D3D12_COMMAND_QUEUE_DESC command_queue_desc;
- ID3D12CommandAllocator *command_allocator;
- ID3D12GraphicsCommandList *command_list;
- ID3D12CommandQueue *queue;
- ID3D12Device *device;
- ULONG refcount;
- HRESULT hr;
-
- if (!(device = create_device()))
- {
- skip("Failed to create device.\n");
- return;
- }
-
- command_queue_desc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
- command_queue_desc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL;
- command_queue_desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
- command_queue_desc.NodeMask = 0;
- hr = ID3D12Device_CreateCommandQueue(device, &command_queue_desc,
- &IID_ID3D12CommandQueue, (void **)&queue);
- ok(SUCCEEDED(hr), "Failed to create command queue, hr %#x.\n", hr);
-
- hr = ID3D12Device_CreateCommandAllocator(device, D3D12_COMMAND_LIST_TYPE_DIRECT,
- &IID_ID3D12CommandAllocator, (void **)&command_allocator);
- ok(SUCCEEDED(hr), "Failed to create command allocator, hr %#x.\n", hr);
-
- hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
- command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
- ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
-
- texture = create_default_texture(device, 32, 32, DXGI_FORMAT_R8G8B8A8_UNORM,
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
- upload_buffer = create_upload_buffer(device, 32, NULL);
- readback_buffer = create_readback_buffer(device, 32);
-
- /* The following invalid barrier is not detected by the runtime. */
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- ok(SUCCEEDED(hr), "Failed to close command list, hr %#x.\n", hr);
-
- reset_command_list(command_list, command_allocator);
-
- /* The before state does not match with the previous state. */
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_COPY_SOURCE);
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- /* The returned error code has changed after a Windows update. */
- ok(hr == S_OK || hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
- if (hr == S_OK)
- {
- exec_command_list(queue, command_list);
- wait_queue_idle(device, queue);
- }
-
- ID3D12GraphicsCommandList_Release(command_list);
- hr = ID3D12CommandAllocator_Reset(command_allocator);
- ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
- hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
- command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
- ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
-
- /* The before state does not match with the previous state. */
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- /* The returned error code has changed after a Windows update. */
- ok(hr == S_OK || hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
- if (hr == S_OK)
- {
- exec_command_list(queue, command_list);
- wait_queue_idle(device, queue);
- }
-
- hr = ID3D12CommandAllocator_Reset(command_allocator);
- ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
- ID3D12GraphicsCommandList_Release(command_list);
- hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
- command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
- ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
-
- /* Exactly one write state or a combination of read-only states are allowed. */
- transition_resource_state(command_list, texture,
- D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
- D3D12_RESOURCE_STATE_UNORDERED_ACCESS | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
-
- hr = ID3D12CommandAllocator_Reset(command_allocator);
- ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
- ID3D12GraphicsCommandList_Release(command_list);
- hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
- command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
- ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
-
- /* Readback resources cannot transition from D3D12_RESOURCE_STATE_COPY_DEST. */
- transition_resource_state(command_list, readback_buffer,
- D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COMMON);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- todo ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
-
- hr = ID3D12CommandAllocator_Reset(command_allocator);
- ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
- ID3D12GraphicsCommandList_Release(command_list);
- hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
- command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
- ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
-
- /* Upload resources cannot transition from D3D12_RESOURCE_STATE_GENERIC_READ. */
- transition_resource_state(command_list, upload_buffer,
- D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_RESOURCE_STATE_COMMON);
- hr = ID3D12GraphicsCommandList_Close(command_list);
- todo ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
-
- ID3D12CommandAllocator_Release(command_allocator);
- ID3D12CommandQueue_Release(queue);
- ID3D12GraphicsCommandList_Release(command_list);
- ID3D12Resource_Release(readback_buffer);
- ID3D12Resource_Release(texture);
- ID3D12Resource_Release(upload_buffer);
- refcount = ID3D12Device_Release(device);
- ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
-}
-
static void test_device_removed_reason(void)
{
D3D12_COMMAND_QUEUE_DESC command_queue_desc;
@@ -22002,7 +21870,6 @@ START_TEST(d3d12)
run_test(test_draw_depth_only);
run_test(test_draw_uav_only);
run_test(test_texture_resource_barriers);
- run_test(test_invalid_texture_resource_barriers);
run_test(test_device_removed_reason);
run_test(test_map_resource);
run_test(test_map_placed_resources);
diff --git a/tests/d3d12_invalid_usage.c b/tests/d3d12_invalid_usage.c
new file mode 100644
index 000000000000..ce354b8a8709
--- /dev/null
+++ b/tests/d3d12_invalid_usage.c
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2016-2018 Józef Kucia for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "d3d12_crosstest.h"
+
+static void test_invalid_texture_resource_barriers(void)
+{
+ ID3D12Resource *texture, *readback_buffer, *upload_buffer;
+ D3D12_COMMAND_QUEUE_DESC command_queue_desc;
+ ID3D12CommandAllocator *command_allocator;
+ ID3D12GraphicsCommandList *command_list;
+ ID3D12CommandQueue *queue;
+ ID3D12Device *device;
+ ULONG refcount;
+ HRESULT hr;
+
+ if (!(device = create_device()))
+ {
+ skip("Failed to create device.\n");
+ return;
+ }
+
+ command_queue_desc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
+ command_queue_desc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL;
+ command_queue_desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
+ command_queue_desc.NodeMask = 0;
+ hr = ID3D12Device_CreateCommandQueue(device, &command_queue_desc,
+ &IID_ID3D12CommandQueue, (void **)&queue);
+ ok(SUCCEEDED(hr), "Failed to create command queue, hr %#x.\n", hr);
+
+ hr = ID3D12Device_CreateCommandAllocator(device, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ &IID_ID3D12CommandAllocator, (void **)&command_allocator);
+ ok(SUCCEEDED(hr), "Failed to create command allocator, hr %#x.\n", hr);
+
+ hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
+ ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
+
+ texture = create_default_texture(device, 32, 32, DXGI_FORMAT_R8G8B8A8_UNORM,
+ D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
+ upload_buffer = create_upload_buffer(device, 32, NULL);
+ readback_buffer = create_readback_buffer(device, 32);
+
+ /* The following invalid barrier is not detected by the runtime. */
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ ok(SUCCEEDED(hr), "Failed to close command list, hr %#x.\n", hr);
+
+ reset_command_list(command_list, command_allocator);
+
+ /* The before state does not match with the previous state. */
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_COPY_SOURCE);
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ /* The returned error code has changed after a Windows update. */
+ ok(hr == S_OK || hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ if (hr == S_OK)
+ {
+ exec_command_list(queue, command_list);
+ wait_queue_idle(device, queue);
+ }
+
+ ID3D12GraphicsCommandList_Release(command_list);
+ hr = ID3D12CommandAllocator_Reset(command_allocator);
+ ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
+ hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
+ ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
+
+ /* The before state does not match with the previous state. */
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ /* The returned error code has changed after a Windows update. */
+ ok(hr == S_OK || hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+ if (hr == S_OK)
+ {
+ exec_command_list(queue, command_list);
+ wait_queue_idle(device, queue);
+ }
+
+ hr = ID3D12CommandAllocator_Reset(command_allocator);
+ ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
+ ID3D12GraphicsCommandList_Release(command_list);
+ hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
+ ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
+
+ /* Exactly one write state or a combination of read-only states are allowed. */
+ transition_resource_state(command_list, texture,
+ D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
+ D3D12_RESOURCE_STATE_UNORDERED_ACCESS | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D12CommandAllocator_Reset(command_allocator);
+ ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
+ ID3D12GraphicsCommandList_Release(command_list);
+ hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
+ ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
+
+ /* Readback resources cannot transition from D3D12_RESOURCE_STATE_COPY_DEST. */
+ transition_resource_state(command_list, readback_buffer,
+ D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COMMON);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ todo ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ hr = ID3D12CommandAllocator_Reset(command_allocator);
+ ok(SUCCEEDED(hr), "Failed to reset command allocator, hr %#x.\n", hr);
+ ID3D12GraphicsCommandList_Release(command_list);
+ hr = ID3D12Device_CreateCommandList(device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT,
+ command_allocator, NULL, &IID_ID3D12GraphicsCommandList, (void **)&command_list);
+ ok(SUCCEEDED(hr), "Failed to create command list, hr %#x.\n", hr);
+
+ /* Upload resources cannot transition from D3D12_RESOURCE_STATE_GENERIC_READ. */
+ transition_resource_state(command_list, upload_buffer,
+ D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_RESOURCE_STATE_COMMON);
+ hr = ID3D12GraphicsCommandList_Close(command_list);
+ todo ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ ID3D12CommandAllocator_Release(command_allocator);
+ ID3D12CommandQueue_Release(queue);
+ ID3D12GraphicsCommandList_Release(command_list);
+ ID3D12Resource_Release(readback_buffer);
+ ID3D12Resource_Release(texture);
+ ID3D12Resource_Release(upload_buffer);
+ refcount = ID3D12Device_Release(device);
+ ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
+}
+
+START_TEST(d3d12_invalid_usage)
+{
+ bool enable_debug_layer = false;
+ ID3D12Debug *debug;
+ unsigned int i;
+
+ for (i = 1; i < argc; ++i)
+ {
+ if (!strcmp(argv[i], "--validate"))
+ enable_debug_layer = true;
+ else if (!strcmp(argv[i], "--warp"))
+ use_warp_device = true;
+ else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
+ use_adapter_idx = atoi(argv[++i]);
+ }
+
+ if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
+ {
+ ID3D12Debug_EnableDebugLayer(debug);
+ ID3D12Debug_Release(debug);
+ }
+
+ print_adapter_info();
+
+ run_test(test_invalid_texture_resource_barriers);
+}
--
2.19.2
2
1
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 256 ----------------------------------------
tests/d3d12_crosstest.h | 256 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 256 insertions(+), 256 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index e48750b9cba6..d886f960ddf0 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -173,175 +173,6 @@ static void uav_barrier(ID3D12GraphicsCommandList *list, ID3D12Resource *resourc
ID3D12GraphicsCommandList_ResourceBarrier(list, 1, &barrier);
}
-#ifdef _WIN32
-static HANDLE create_event(void)
-{
- return CreateEventA(NULL, FALSE, FALSE, NULL);
-}
-
-static void signal_event(HANDLE event)
-{
- SetEvent(event);
-}
-
-static unsigned int wait_event(HANDLE event, unsigned int milliseconds)
-{
- return WaitForSingleObject(event, milliseconds);
-}
-
-static void destroy_event(HANDLE event)
-{
- CloseHandle(event);
-}
-#else
-#define INFINITE VKD3D_INFINITE
-#define WAIT_OBJECT_0 VKD3D_WAIT_OBJECT_0
-#define WAIT_TIMEOUT VKD3D_WAIT_TIMEOUT
-
-static HANDLE create_event(void)
-{
- return vkd3d_create_event();
-}
-
-static void signal_event(HANDLE event)
-{
- vkd3d_signal_event(event);
-}
-
-static unsigned int wait_event(HANDLE event, unsigned int milliseconds)
-{
- return vkd3d_wait_event(event, milliseconds);
-}
-
-static void destroy_event(HANDLE event)
-{
- vkd3d_destroy_event(event);
-}
-#endif
-
-typedef void (*thread_main_pfn)(void *data);
-
-struct test_thread_data
-{
- thread_main_pfn main_pfn;
- void *user_data;
-};
-
-#ifdef _WIN32
-static DWORD WINAPI test_thread_main(void *untyped_data)
-{
- struct test_thread_data *data = untyped_data;
- data->main_pfn(data->user_data);
- free(untyped_data);
- return 0;
-}
-
-static HANDLE create_thread(thread_main_pfn main_pfn, void *user_data)
-{
- struct test_thread_data *data;
-
- if (!(data = malloc(sizeof(*data))))
- return NULL;
- data->main_pfn = main_pfn;
- data->user_data = user_data;
-
- return CreateThread(NULL, 0, test_thread_main, data, 0, NULL);
-}
-
-static bool join_thread(HANDLE thread)
-{
- unsigned int ret;
-
- ret = WaitForSingleObject(thread, INFINITE);
- CloseHandle(thread);
- return ret == WAIT_OBJECT_0;
-}
-#else
-static void *test_thread_main(void *untyped_data)
-{
- struct test_thread_data *data = untyped_data;
- data->main_pfn(data->user_data);
- free(untyped_data);
- return NULL;
-}
-
-static HANDLE create_thread(thread_main_pfn main_pfn, void *user_data)
-{
- struct test_thread_data *data;
- pthread_t *thread;
-
- if (!(thread = malloc(sizeof(*thread))))
- return NULL;
-
- if (!(data = malloc(sizeof(*data))))
- {
- free(thread);
- return NULL;
- }
- data->main_pfn = main_pfn;
- data->user_data = user_data;
-
- if (pthread_create(thread, NULL, test_thread_main, data))
- {
- free(data);
- free(thread);
- return NULL;
- }
-
- return thread;
-}
-
-static bool join_thread(HANDLE untyped_thread)
-{
- pthread_t *thread = untyped_thread;
- int rc;
-
- rc = pthread_join(*thread, NULL);
- free(thread);
- return !rc;
-}
-#endif
-
-static HRESULT wait_for_fence(ID3D12Fence *fence, UINT64 value)
-{
- unsigned int ret;
- HANDLE event;
- HRESULT hr;
-
- if (ID3D12Fence_GetCompletedValue(fence) >= value)
- return S_OK;
-
- if (!(event = create_event()))
- return E_FAIL;
-
- if (FAILED(hr = ID3D12Fence_SetEventOnCompletion(fence, value, event)))
- {
- destroy_event(event);
- return hr;
- }
-
- ret = wait_event(event, INFINITE);
- destroy_event(event);
- return ret == WAIT_OBJECT_0 ? S_OK : E_FAIL;
-}
-
-static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
-{
- ID3D12Fence *fence;
- HRESULT hr;
-
- hr = ID3D12Device_CreateFence(device, 0, D3D12_FENCE_FLAG_NONE,
- &IID_ID3D12Fence, (void **)&fence);
- ok_(line)(hr == S_OK, "Failed to create fence, hr %#x.\n", hr);
-
- hr = ID3D12CommandQueue_Signal(queue, fence, 1);
- ok_(line)(hr == S_OK, "Failed to signal fence, hr %#x.\n", hr);
- hr = wait_for_fence(fence, 1);
- ok_(line)(hr == S_OK, "Failed to wait for fence, hr %#x.\n", hr);
-
- ID3D12Fence_Release(fence);
-}
-
#define create_default_buffer(a, b, c, d) create_default_buffer_(__LINE__, a, b, c, d)
static ID3D12Resource *create_default_buffer_(unsigned int line, ID3D12Device *device,
size_t size, D3D12_RESOURCE_FLAGS resource_flags, D3D12_RESOURCE_STATES initial_resource_state)
@@ -780,93 +611,6 @@ static void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture
expected_value->x, expected_value->y, expected_value->z, expected_value->w, x, y);
}
-static bool use_warp_device;
-static unsigned int use_adapter_idx;
-
-#ifdef _WIN32
-static IUnknown *create_warp_adapter(IDXGIFactory4 *factory)
-{
- IUnknown *adapter;
- HRESULT hr;
-
- adapter = NULL;
- hr = IDXGIFactory4_EnumWarpAdapter(factory, &IID_IUnknown, (void **)&adapter);
- if (FAILED(hr))
- trace("Failed to get WARP adapter, hr %#x.\n", hr);
- return adapter;
-}
-
-static IUnknown *create_adapter(void)
-{
- IUnknown *adapter = NULL;
- IDXGIFactory4 *factory;
- HRESULT hr;
-
- hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
- ok(hr == S_OK, "Failed to create IDXGIFactory4, hr %#x.\n", hr);
-
- if (use_warp_device && !(adapter = create_warp_adapter(factory)))
- {
- IDXGIFactory4_Release(factory);
- return adapter;
- }
-
- hr = IDXGIFactory4_EnumAdapters(factory, use_adapter_idx, (IDXGIAdapter **)&adapter);
- IDXGIFactory4_Release(factory);
- if (FAILED(hr))
- trace("Failed to get adapter, hr %#x.\n", hr);
- return adapter;
-}
-
-static void print_adapter_info(void)
-{
- IDXGIAdapter *dxgi_adapter;
- DXGI_ADAPTER_DESC desc;
- IUnknown *adapter;
- HRESULT hr;
-
- if (!(adapter = create_adapter()))
- return;
-
- hr = IUnknown_QueryInterface(adapter, &IID_IDXGIAdapter, (void **)&dxgi_adapter);
- ok(hr == S_OK, "Failed to query IDXGIAdapter, hr %#x.\n", hr);
- IUnknown_Release(adapter);
-
- hr = IDXGIAdapter_GetDesc(dxgi_adapter, &desc);
- ok(hr == S_OK, "Failed to get adapter desc, hr %#x.\n", hr);
-
- trace("Adapter: %04x:%04x.\n", desc.VendorId, desc.DeviceId);
-
- IDXGIAdapter_Release(dxgi_adapter);
-}
-#else
-static IUnknown *create_adapter(void)
-{
- return NULL;
-}
-
-static void print_adapter_info(void) {}
-#endif
-
-static ID3D12Device *create_device(void)
-{
- IUnknown *adapter = NULL;
- ID3D12Device *device;
- HRESULT hr;
-
- if ((use_warp_device || use_adapter_idx) && !(adapter = create_adapter()))
- {
- trace("Failed to create adapter.\n");
- return NULL;
- }
-
- hr = D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device);
- if (adapter)
- IUnknown_Release(adapter);
-
- return SUCCEEDED(hr) ? device : NULL;
-}
-
static bool broken_on_warp(bool condition)
{
return broken(use_warp_device && condition);
diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h
index daf156b15b4a..ddba9feaa589 100644
--- a/tests/d3d12_crosstest.h
+++ b/tests/d3d12_crosstest.h
@@ -60,4 +60,260 @@ typedef int HRESULT;
#include "d3d12_test_utils.h"
+#ifdef _WIN32
+static inline HANDLE create_event(void)
+{
+ return CreateEventA(NULL, FALSE, FALSE, NULL);
+}
+
+static inline void signal_event(HANDLE event)
+{
+ SetEvent(event);
+}
+
+static inline unsigned int wait_event(HANDLE event, unsigned int milliseconds)
+{
+ return WaitForSingleObject(event, milliseconds);
+}
+
+static inline void destroy_event(HANDLE event)
+{
+ CloseHandle(event);
+}
+#else
+#define INFINITE VKD3D_INFINITE
+#define WAIT_OBJECT_0 VKD3D_WAIT_OBJECT_0
+#define WAIT_TIMEOUT VKD3D_WAIT_TIMEOUT
+
+static inline HANDLE create_event(void)
+{
+ return vkd3d_create_event();
+}
+
+static inline void signal_event(HANDLE event)
+{
+ vkd3d_signal_event(event);
+}
+
+static inline unsigned int wait_event(HANDLE event, unsigned int milliseconds)
+{
+ return vkd3d_wait_event(event, milliseconds);
+}
+
+static inline void destroy_event(HANDLE event)
+{
+ vkd3d_destroy_event(event);
+}
+#endif
+
+typedef void (*thread_main_pfn)(void *data);
+
+struct test_thread_data
+{
+ thread_main_pfn main_pfn;
+ void *user_data;
+};
+
+#ifdef _WIN32
+static inline DWORD WINAPI test_thread_main(void *untyped_data)
+{
+ struct test_thread_data *data = untyped_data;
+ data->main_pfn(data->user_data);
+ free(untyped_data);
+ return 0;
+}
+
+static inline HANDLE create_thread(thread_main_pfn main_pfn, void *user_data)
+{
+ struct test_thread_data *data;
+
+ if (!(data = malloc(sizeof(*data))))
+ return NULL;
+ data->main_pfn = main_pfn;
+ data->user_data = user_data;
+
+ return CreateThread(NULL, 0, test_thread_main, data, 0, NULL);
+}
+
+static inline bool join_thread(HANDLE thread)
+{
+ unsigned int ret;
+
+ ret = WaitForSingleObject(thread, INFINITE);
+ CloseHandle(thread);
+ return ret == WAIT_OBJECT_0;
+}
+#else
+static void *test_thread_main(void *untyped_data)
+{
+ struct test_thread_data *data = untyped_data;
+ data->main_pfn(data->user_data);
+ free(untyped_data);
+ return NULL;
+}
+
+static inline HANDLE create_thread(thread_main_pfn main_pfn, void *user_data)
+{
+ struct test_thread_data *data;
+ pthread_t *thread;
+
+ if (!(thread = malloc(sizeof(*thread))))
+ return NULL;
+
+ if (!(data = malloc(sizeof(*data))))
+ {
+ free(thread);
+ return NULL;
+ }
+ data->main_pfn = main_pfn;
+ data->user_data = user_data;
+
+ if (pthread_create(thread, NULL, test_thread_main, data))
+ {
+ free(data);
+ free(thread);
+ return NULL;
+ }
+
+ return thread;
+}
+
+static inline bool join_thread(HANDLE untyped_thread)
+{
+ pthread_t *thread = untyped_thread;
+ int rc;
+
+ rc = pthread_join(*thread, NULL);
+ free(thread);
+ return !rc;
+}
+#endif
+
+static HRESULT wait_for_fence(ID3D12Fence *fence, UINT64 value)
+{
+ unsigned int ret;
+ HANDLE event;
+ HRESULT hr;
+
+ if (ID3D12Fence_GetCompletedValue(fence) >= value)
+ return S_OK;
+
+ if (!(event = create_event()))
+ return E_FAIL;
+
+ if (FAILED(hr = ID3D12Fence_SetEventOnCompletion(fence, value, event)))
+ {
+ destroy_event(event);
+ return hr;
+ }
+
+ ret = wait_event(event, INFINITE);
+ destroy_event(event);
+ return ret == WAIT_OBJECT_0 ? S_OK : E_FAIL;
+}
+
+static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12CommandQueue *queue)
+{
+ ID3D12Fence *fence;
+ HRESULT hr;
+
+ hr = ID3D12Device_CreateFence(device, 0, D3D12_FENCE_FLAG_NONE,
+ &IID_ID3D12Fence, (void **)&fence);
+ ok_(line)(hr == S_OK, "Failed to create fence, hr %#x.\n", hr);
+
+ hr = ID3D12CommandQueue_Signal(queue, fence, 1);
+ ok_(line)(hr == S_OK, "Failed to signal fence, hr %#x.\n", hr);
+ hr = wait_for_fence(fence, 1);
+ ok_(line)(hr == S_OK, "Failed to wait for fence, hr %#x.\n", hr);
+
+ ID3D12Fence_Release(fence);
+}
+
+static bool use_warp_device;
+static unsigned int use_adapter_idx;
+
+#ifdef _WIN32
+static IUnknown *create_warp_adapter(IDXGIFactory4 *factory)
+{
+ IUnknown *adapter;
+ HRESULT hr;
+
+ adapter = NULL;
+ hr = IDXGIFactory4_EnumWarpAdapter(factory, &IID_IUnknown, (void **)&adapter);
+ if (FAILED(hr))
+ trace("Failed to get WARP adapter, hr %#x.\n", hr);
+ return adapter;
+}
+
+static IUnknown *create_adapter(void)
+{
+ IUnknown *adapter = NULL;
+ IDXGIFactory4 *factory;
+ HRESULT hr;
+
+ hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
+ ok(hr == S_OK, "Failed to create IDXGIFactory4, hr %#x.\n", hr);
+
+ if (use_warp_device && !(adapter = create_warp_adapter(factory)))
+ {
+ IDXGIFactory4_Release(factory);
+ return adapter;
+ }
+
+ hr = IDXGIFactory4_EnumAdapters(factory, use_adapter_idx, (IDXGIAdapter **)&adapter);
+ IDXGIFactory4_Release(factory);
+ if (FAILED(hr))
+ trace("Failed to get adapter, hr %#x.\n", hr);
+ return adapter;
+}
+
+static void print_adapter_info(void)
+{
+ IDXGIAdapter *dxgi_adapter;
+ DXGI_ADAPTER_DESC desc;
+ IUnknown *adapter;
+ HRESULT hr;
+
+ if (!(adapter = create_adapter()))
+ return;
+
+ hr = IUnknown_QueryInterface(adapter, &IID_IDXGIAdapter, (void **)&dxgi_adapter);
+ ok(hr == S_OK, "Failed to query IDXGIAdapter, hr %#x.\n", hr);
+ IUnknown_Release(adapter);
+
+ hr = IDXGIAdapter_GetDesc(dxgi_adapter, &desc);
+ ok(hr == S_OK, "Failed to get adapter desc, hr %#x.\n", hr);
+
+ trace("Adapter: %04x:%04x.\n", desc.VendorId, desc.DeviceId);
+
+ IDXGIAdapter_Release(dxgi_adapter);
+}
+#else
+static IUnknown *create_adapter(void)
+{
+ return NULL;
+}
+
+static void print_adapter_info(void) {}
+#endif
+
+static ID3D12Device *create_device(void)
+{
+ IUnknown *adapter = NULL;
+ ID3D12Device *device;
+ HRESULT hr;
+
+ if ((use_warp_device || use_adapter_idx) && !(adapter = create_adapter()))
+ {
+ trace("Failed to create adapter.\n");
+ return NULL;
+ }
+
+ hr = D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device);
+ if (adapter)
+ IUnknown_Release(adapter);
+
+ return SUCCEEDED(hr) ? device : NULL;
+}
+
#endif /* __VKD3D_D3D12_CROSSTEST_H */
--
2.19.2
3
2
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
tests/d3d12.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 143 insertions(+), 4 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 4344aa9f6f1c..6f45ac99fd5d 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -18575,15 +18575,96 @@ static void test_execute_indirect(void)
ID3D12CommandSignature *command_signature;
ID3D12GraphicsCommandList *command_list;
ID3D12Resource *argument_buffer, *uav;
+ D3D12_INPUT_LAYOUT_DESC input_layout;
D3D12_ROOT_PARAMETER root_parameter;
ID3D12PipelineState *pipeline_state;
ID3D12RootSignature *root_signature;
+ struct test_context_desc desc;
+ D3D12_VERTEX_BUFFER_VIEW vbv;
+ D3D12_INDEX_BUFFER_VIEW ibv;
struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
+ ID3D12Resource *vb, *ib;
unsigned int i;
+ D3D12_BOX box;
HRESULT hr;
+ static const struct
+ {
+ struct vec4 position;
+ uint32_t color;
+ }
+ vertices[] =
+ {
+ {{-1.0f, -1.0f, 0.0f, 1.0f}, 0xffffff00},
+ {{-1.0f, 1.0f, 0.0f, 1.0f}, 0xffffff00},
+ {{ 1.0f, -1.0f, 0.0f, 1.0f}, 0xffffff00},
+ {{ 1.0f, 1.0f, 0.0f, 1.0f}, 0xffffff00},
+
+ {{-1.0f, -1.0f, 0.0f, 1.0f}, 0xff00ff00},
+ {{-1.0f, 0.5f, 0.0f, 1.0f}, 0xff00ff00},
+ {{ 0.5f, -1.0f, 0.0f, 1.0f}, 0xff00ff00},
+ {{ 0.5f, 0.5f, 0.0f, 1.0f}, 0xff00ff00},
+ };
+ static const uint32_t indices[] = {0, 1, 2, 3, 2, 1};
+ static const D3D12_INPUT_ELEMENT_DESC layout_desc[] =
+ {
+ {"SV_POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0},
+ {"COLOR", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 16, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0},
+ };
+ static const DWORD vs_code[] =
+ {
+#if 0
+ struct vs_data
+ {
+ float4 pos : SV_POSITION;
+ float4 color : COLOR;
+ };
+
+ void main(in struct vs_data vs_input, out struct vs_data vs_output)
+ {
+ vs_output.pos = vs_input.pos;
+ vs_output.color = vs_input.color;
+ }
+#endif
+ 0x43425844, 0xd5b32785, 0x35332906, 0x4d05e031, 0xf66a58af, 0x00000001, 0x00000144, 0x00000003,
+ 0x0000002c, 0x00000080, 0x000000d4, 0x4e475349, 0x0000004c, 0x00000002, 0x00000008, 0x00000038,
+ 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x00000044, 0x00000000, 0x00000000,
+ 0x00000003, 0x00000001, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x4f4c4f43, 0xabab0052,
+ 0x4e47534f, 0x0000004c, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003,
+ 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x0000000f,
+ 0x505f5653, 0x5449534f, 0x004e4f49, 0x4f4c4f43, 0xabab0052, 0x52444853, 0x00000068, 0x00010040,
+ 0x0000001a, 0x0300005f, 0x001010f2, 0x00000000, 0x0300005f, 0x001010f2, 0x00000001, 0x04000067,
+ 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x001020f2, 0x00000001, 0x05000036, 0x001020f2,
+ 0x00000000, 0x00101e46, 0x00000000, 0x05000036, 0x001020f2, 0x00000001, 0x00101e46, 0x00000001,
+ 0x0100003e,
+ };
+ static const D3D12_SHADER_BYTECODE vs = {vs_code, sizeof(vs_code)};
+ static const DWORD ps_code[] =
+ {
+#if 0
+ struct ps_data
+ {
+ float4 pos : SV_POSITION;
+ float4 color : COLOR;
+ };
+
+ float4 main(struct ps_data ps_input) : SV_Target
+ {
+ return ps_input.color;
+ }
+#endif
+ 0x43425844, 0x89803e59, 0x3f798934, 0xf99181df, 0xf5556512, 0x00000001, 0x000000f4, 0x00000003,
+ 0x0000002c, 0x00000080, 0x000000b4, 0x4e475349, 0x0000004c, 0x00000002, 0x00000008, 0x00000038,
+ 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000,
+ 0x00000003, 0x00000001, 0x00000f0f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x4f4c4f43, 0xabab0052,
+ 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
+ 0x00000000, 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000038, 0x00000040,
+ 0x0000000e, 0x03001062, 0x001010f2, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x05000036,
+ 0x001020f2, 0x00000000, 0x00101e46, 0x00000001, 0x0100003e,
+ };
+ static const D3D12_SHADER_BYTECODE ps = {ps_code, sizeof(ps_code)};
static const DWORD cs_code[] =
{
#if 0
@@ -18610,15 +18691,19 @@ static void test_execute_indirect(void)
{
D3D12_DRAW_ARGUMENTS draw;
D3D12_DISPATCH_ARGUMENTS dispatch;
+ D3D12_DRAW_INDEXED_ARGUMENTS indexed_draws[2];
}
argument_data =
{
{3, 1, 0, 0},
{2, 3, 4},
+ {{6, 1, 0, 0, 0}, {6, 1, 0, 4, 0}},
};
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
- if (!init_test_context(&context, NULL))
+ memset(&desc, 0, sizeof(desc));
+ desc.root_signature_flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;
+ if (!init_test_context(&context, &desc))
return;
command_list = context.list;
queue = context.queue;
@@ -18633,7 +18718,7 @@ static void test_execute_indirect(void)
signature_desc.NodeMask = 0;
hr = ID3D12Device_CreateCommandSignature(context.device, &signature_desc,
NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
- ok(SUCCEEDED(hr), "Failed to create command signature, hr %#x.\n", hr);
+ ok(hr == S_OK, "Failed to create command signature, hr %#x.\n", hr);
ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL);
@@ -18656,7 +18741,7 @@ static void test_execute_indirect(void)
signature_desc.ByteStride = sizeof(D3D12_DISPATCH_ARGUMENTS);
hr = ID3D12Device_CreateCommandSignature(context.device, &signature_desc,
NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
- ok(SUCCEEDED(hr), "Failed to create command signature, hr %#x.\n", hr);
+ ok(hr == S_OK, "Failed to create command signature, hr %#x.\n", hr);
uav = create_default_buffer(context.device, 2 * 3 * 4 * sizeof(UINT),
D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
@@ -18671,7 +18756,7 @@ static void test_execute_indirect(void)
root_signature_desc.pStaticSamplers = NULL;
root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;
hr = create_root_signature(context.device, &root_signature_desc, &root_signature);
- ok(SUCCEEDED(hr), "Failed to create root signature, hr %#x.\n", hr);
+ ok(hr == S_OK, "Failed to create root signature, hr %#x.\n", hr);
ID3D12GraphicsCommandList_SetComputeRootSignature(command_list, root_signature);
pipeline_state = create_compute_pipeline_state(context.device, root_signature,
@@ -18692,9 +18777,63 @@ static void test_execute_indirect(void)
}
release_resource_readback(&rb);
+ reset_command_list(command_list, context.allocator);
+ transition_resource_state(command_list, context.render_target,
+ D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET);
+
+ ID3D12CommandSignature_Release(command_signature);
+ argument_desc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED;
+ signature_desc.ByteStride = sizeof(*argument_data.indexed_draws);
+ hr = ID3D12Device_CreateCommandSignature(context.device, &signature_desc,
+ NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
+ ok(hr == S_OK, "Failed to create command signature, hr %#x.\n", hr);
+
+ ID3D12PipelineState_Release(context.pipeline_state);
+ input_layout.pInputElementDescs = layout_desc;
+ input_layout.NumElements = ARRAY_SIZE(layout_desc);
+ context.pipeline_state = create_pipeline_state(context.device,
+ context.root_signature, context.render_target_desc.Format, &vs, &ps, &input_layout);
+
+ vb = create_upload_buffer(context.device, sizeof(vertices), vertices);
+ vbv.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(vb);
+ vbv.StrideInBytes = sizeof(*vertices);
+ vbv.SizeInBytes = sizeof(vertices);
+
+ ib = create_upload_buffer(context.device, sizeof(indices), indices);
+ ibv.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(ib);
+ ibv.SizeInBytes = sizeof(indices);
+ ibv.Format = DXGI_FORMAT_R32_UINT;
+
+ ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL);
+
+ ID3D12GraphicsCommandList_SetGraphicsRootSignature(command_list, context.root_signature);
+ ID3D12GraphicsCommandList_SetPipelineState(command_list, context.pipeline_state);
+ ID3D12GraphicsCommandList_IASetPrimitiveTopology(command_list, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+ ID3D12GraphicsCommandList_IASetIndexBuffer(command_list, &ibv);
+ ID3D12GraphicsCommandList_IASetVertexBuffers(command_list, 0, 1, &vbv);
+ ID3D12GraphicsCommandList_RSSetViewports(command_list, 1, &context.viewport);
+ ID3D12GraphicsCommandList_RSSetScissorRects(command_list, 1, &context.scissor_rect);
+ ID3D12GraphicsCommandList_OMSetRenderTargets(command_list, 1, &context.rtv, FALSE, NULL);
+ ID3D12GraphicsCommandList_ExecuteIndirect(command_list, command_signature,
+ ARRAY_SIZE(argument_data.indexed_draws), argument_buffer,
+ offsetof(struct argument_data, indexed_draws), NULL, 0);
+
+ transition_resource_state(command_list, context.render_target,
+ D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
+ get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
+ set_box(&box, 0, 0, 0, 32, 8, 1);
+ check_readback_data_uint(&rb, &box, 0xffffff00, 0);
+ set_box(&box, 24, 8, 0, 32, 32, 1);
+ check_readback_data_uint(&rb, &box, 0xffffff00, 0);
+ set_box(&box, 0, 8, 0, 24, 32, 1);
+ check_readback_data_uint(&rb, &box, 0xff00ff00, 0);
+ release_resource_readback(&rb);
+
ID3D12PipelineState_Release(pipeline_state);
ID3D12RootSignature_Release(root_signature);
+ ID3D12Resource_Release(ib);
ID3D12Resource_Release(uav);
+ ID3D12Resource_Release(vb);
ID3D12CommandSignature_Release(command_signature);
ID3D12Resource_Release(argument_buffer);
destroy_test_context(&context);
--
2.19.2
2
1
[PATCH vkd3d 03/10] vkd3d: Validate that command signature contains exactly one dispatch/draw command.
by Józef Kucia Dec. 4, 2018
by Józef Kucia Dec. 4, 2018
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
libs/vkd3d/command.c | 20 +++++++++++++++++
tests/d3d12.c | 51 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 71 insertions(+)
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 06823c893099..a175091b04ff 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -4850,6 +4850,26 @@ HRESULT d3d12_command_signature_create(struct d3d12_device *device, const D3D12_
struct d3d12_command_signature **signature)
{
struct d3d12_command_signature *object;
+ unsigned int i;
+
+ for (i = 0; i < desc->NumArgumentDescs; ++i)
+ {
+ const D3D12_INDIRECT_ARGUMENT_DESC *argument_desc = &desc->pArgumentDescs[i];
+ switch (argument_desc->Type)
+ {
+ case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW:
+ case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED:
+ case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH:
+ if (i != desc->NumArgumentDescs - 1)
+ {
+ WARN("Draw/dispatch must be the last element of a command signature.\n");
+ return E_INVALIDARG;
+ }
+ break;
+ default:
+ break;
+ }
+ }
if (!(object = vkd3d_malloc(sizeof(*object))))
return E_OUTOFMEMORY;
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 7ad0303985be..4344aa9f6f1c 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -1685,6 +1685,56 @@ static void test_create_command_queue(void)
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
}
+static void test_create_command_signature(void)
+{
+ D3D12_INDIRECT_ARGUMENT_DESC argument_desc[3];
+ D3D12_COMMAND_SIGNATURE_DESC signature_desc;
+ ID3D12CommandSignature *command_signature;
+ ID3D12Device *device;
+ unsigned int i;
+ ULONG refcount;
+ HRESULT hr;
+
+ if (!(device = create_device()))
+ {
+ skip("Failed to create device.\n");
+ return;
+ }
+
+ signature_desc.ByteStride = 1024;
+ signature_desc.NumArgumentDescs = ARRAY_SIZE(argument_desc);
+ signature_desc.pArgumentDescs = argument_desc;
+ signature_desc.NodeMask = 0;
+
+ for (i = 0; i < ARRAY_SIZE(argument_desc); ++i)
+ argument_desc[i].Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW;
+ hr = ID3D12Device_CreateCommandSignature(device, &signature_desc,
+ NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(argument_desc); ++i)
+ argument_desc[i].Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED;
+ hr = ID3D12Device_CreateCommandSignature(device, &signature_desc,
+ NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ for (i = 0; i < ARRAY_SIZE(argument_desc); ++i)
+ argument_desc[i].Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH;
+ hr = ID3D12Device_CreateCommandSignature(device, &signature_desc,
+ NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ argument_desc[0].Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH;
+ argument_desc[1].Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW;
+ signature_desc.NumArgumentDescs = 2;
+ hr = ID3D12Device_CreateCommandSignature(device, &signature_desc,
+ NULL, &IID_ID3D12CommandSignature, (void **)&command_signature);
+ ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+
+ refcount = ID3D12Device_Release(device);
+ ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
+}
+
static void test_create_committed_resource(void)
{
D3D12_GPU_VIRTUAL_ADDRESS gpu_address;
@@ -22116,6 +22166,7 @@ START_TEST(d3d12)
run_test(test_create_command_allocator);
run_test(test_create_command_list);
run_test(test_create_command_queue);
+ run_test(test_create_command_signature);
run_test(test_create_committed_resource);
run_test(test_create_heap);
run_test(test_create_placed_resource);
--
2.19.2
2
1
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
libs/vkd3d/command.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 937c7e37fc49..06823c893099 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -4087,6 +4087,10 @@ static void STDMETHODCALLTYPE d3d12_command_list_EndEvent(ID3D12GraphicsCommandL
FIXME("iface %p stub!\n", iface);
}
+STATIC_ASSERT(sizeof(VkDispatchIndirectCommand) == sizeof(D3D12_DISPATCH_ARGUMENTS));
+STATIC_ASSERT(sizeof(VkDrawIndexedIndirectCommand) == sizeof(D3D12_DRAW_INDEXED_ARGUMENTS));
+STATIC_ASSERT(sizeof(VkDrawIndirectCommand) == sizeof(D3D12_DRAW_ARGUMENTS));
+
static void STDMETHODCALLTYPE d3d12_command_list_ExecuteIndirect(ID3D12GraphicsCommandList *iface,
ID3D12CommandSignature *command_signature, UINT max_command_count, ID3D12Resource *arg_buffer,
UINT64 arg_buffer_offset, ID3D12Resource *count_buffer, UINT64 count_buffer_offset)
--
2.19.2
2
1
[PATCH vkd3d 01/10] vkd3d: Get rid of asserts from d3d12_device_CopyDescriptors().
by Józef Kucia Dec. 4, 2018
by Józef Kucia Dec. 4, 2018
Dec. 4, 2018
From: Józef Kucia <jkucia(a)codeweavers.com>
Do not require that source range sizes match destination range sizes.
It works on Windows even though D3D12 validation layers throw errors
about size mismatches.
Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com>
---
libs/vkd3d/device.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index cf40e7a1f064..9e3682830684 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1997,17 +1997,14 @@ static void STDMETHODCALLTYPE d3d12_device_CopyDescriptors(ID3D12Device *iface,
dst_range_size = dst_descriptor_range_sizes ? dst_descriptor_range_sizes[dst_range_idx] : 1;
}
- assert(dst_range_idx < dst_descriptor_range_count);
- assert(dst_idx < dst_range_size);
+ if (dst_range_idx >= dst_descriptor_range_count)
+ break;
d3d12_desc_copy(dst++, src++, device);
++dst_idx;
}
}
-
- assert(dst_idx == dst_range_size);
- assert(dst_range_idx == dst_descriptor_range_count - 1);
}
static void STDMETHODCALLTYPE d3d12_device_CopyDescriptorsSimple(ID3D12Device *iface,
--
2.19.2
2
1
[PATCH 2/2] winetest: Implement GUI to display the results of individual tests
by Isira Seneviratne Dec. 4, 2018
by Isira Seneviratne Dec. 4, 2018
Dec. 4, 2018
2
1
2
1
Dec. 4, 2018
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
This supersedes patch 155517.
dlls/wined3d/state.c | 26 +++-----------------------
1 file changed, 3 insertions(+), 23 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 42c109da57b..8708aa09b3e 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -4152,35 +4152,15 @@ static void light(struct wined3d_context *context, const struct wined3d_state *s
else
{
float quad_att;
- float colRGBA[] = {0.0f, 0.0f, 0.0f, 0.0f};
/* Light settings are affected by the model view in OpenGL, the View transform in direct3d*/
gl_info->gl_ops.gl.p_glMatrixMode(GL_MODELVIEW);
gl_info->gl_ops.gl.p_glPushMatrix();
gl_info->gl_ops.gl.p_glLoadMatrixf(&state->transforms[WINED3D_TS_VIEW]._11);
- /* Diffuse: */
- colRGBA[0] = lightInfo->OriginalParms.diffuse.r;
- colRGBA[1] = lightInfo->OriginalParms.diffuse.g;
- colRGBA[2] = lightInfo->OriginalParms.diffuse.b;
- colRGBA[3] = lightInfo->OriginalParms.diffuse.a;
- gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_DIFFUSE, colRGBA);
- checkGLcall("glLightfv");
-
- /* Specular */
- colRGBA[0] = lightInfo->OriginalParms.specular.r;
- colRGBA[1] = lightInfo->OriginalParms.specular.g;
- colRGBA[2] = lightInfo->OriginalParms.specular.b;
- colRGBA[3] = lightInfo->OriginalParms.specular.a;
- gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_SPECULAR, colRGBA);
- checkGLcall("glLightfv");
-
- /* Ambient */
- colRGBA[0] = lightInfo->OriginalParms.ambient.r;
- colRGBA[1] = lightInfo->OriginalParms.ambient.g;
- colRGBA[2] = lightInfo->OriginalParms.ambient.b;
- colRGBA[3] = lightInfo->OriginalParms.ambient.a;
- gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_AMBIENT, colRGBA);
+ gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_DIFFUSE, &lightInfo->OriginalParms.diffuse.r);
+ gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_SPECULAR, &lightInfo->OriginalParms.specular.r);
+ gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0 + Index, GL_AMBIENT, &lightInfo->OriginalParms.ambient.r);
checkGLcall("glLightfv");
if ((lightInfo->OriginalParms.range * lightInfo->OriginalParms.range) >= FLT_MIN)
--
2.11.0
1
0
Dec. 4, 2018
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
The memcpy(vp, ..., size) is present on the else branch too.
The memsets where introduced with:
f4865564ec7c ddraw: Do not return unset viewport from GetViewport().
dlls/ddraw/viewport.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index e6f862156e..78a2fde6f3 100644
--- a/dlls/ddraw/viewport.c
+++ b/dlls/ddraw/viewport.c
@@ -274,7 +274,6 @@ static HRESULT WINAPI d3d_viewport_GetViewport(IDirect3DViewport3 *iface, D3DVIE
wined3d_mutex_lock();
size = vp->dwSize;
- memset(vp, 0, size);
if (viewport->version == DDRAW_VIEWPORT_VERSION_1)
{
memcpy(vp, &viewport->viewports.vp1, size);
@@ -927,7 +926,6 @@ static HRESULT WINAPI d3d_viewport_GetViewport2(IDirect3DViewport3 *iface, D3DVI
wined3d_mutex_lock();
size = vp->dwSize;
- memset(vp, 0, size);
if (viewport->version == DDRAW_VIEWPORT_VERSION_2)
{
memcpy(vp, &viewport->viewports.vp2, size);
--
2.14.5
3
2
Dec. 4, 2018
The basic idea is that a project like vkd3d could provide its own
implementation of the IWineDXGISwapChainFactory interface, and so wouldn't
need specific handling in dxgi_factory_CreateSwapChainForHwnd().
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/dxgi/device.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/dxgi/dxgi_private.h | 3 +-
dlls/dxgi/factory.c | 9 ++--
dlls/dxgi/swapchain.c | 63 -------------------------
include/wine/winedxgi.idl | 17 +++++++
5 files changed, 141 insertions(+), 69 deletions(-)
diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c
index c7481c6b6ef..c7d663f953b 100644
--- a/dlls/dxgi/device.c
+++ b/dlls/dxgi/device.c
@@ -49,6 +49,13 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_QueryInterface(IWineDXGIDevice *ifa
return S_OK;
}
+ if (IsEqualGUID(riid, &IID_IWineDXGISwapChainFactory))
+ {
+ IUnknown_AddRef(iface);
+ *object = &device->IWineDXGISwapChainFactory_iface;
+ return S_OK;
+ }
+
if (device->child_layer)
{
TRACE("Forwarding to child layer %p.\n", device->child_layer);
@@ -403,6 +410,116 @@ static const struct IWineDXGIDeviceVtbl dxgi_device_vtbl =
dxgi_device_create_swapchain,
};
+static inline struct dxgi_device *impl_from_IWineDXGISwapChainFactory(IWineDXGISwapChainFactory *iface)
+{
+ return CONTAINING_RECORD(iface, struct dxgi_device, IWineDXGISwapChainFactory_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE dxgi_swapchain_factory_QueryInterface(IWineDXGISwapChainFactory *iface,
+ REFIID iid, void **out)
+{
+ struct dxgi_device *device = impl_from_IWineDXGISwapChainFactory(iface);
+
+ TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
+
+ return dxgi_device_QueryInterface(&device->IWineDXGIDevice_iface, iid, out);
+}
+
+static ULONG STDMETHODCALLTYPE dxgi_swapchain_factory_AddRef(IWineDXGISwapChainFactory *iface)
+{
+ struct dxgi_device *device = impl_from_IWineDXGISwapChainFactory(iface);
+
+ TRACE("iface %p.\n", iface);
+
+ return dxgi_device_AddRef(&device->IWineDXGIDevice_iface);
+}
+
+static ULONG STDMETHODCALLTYPE dxgi_swapchain_factory_Release(IWineDXGISwapChainFactory *iface)
+{
+ struct dxgi_device *device = impl_from_IWineDXGISwapChainFactory(iface);
+
+ TRACE("iface %p.\n", iface);
+
+ return dxgi_device_Release(&device->IWineDXGIDevice_iface);
+}
+
+static HRESULT STDMETHODCALLTYPE dxgi_swapchain_factory_create_swapchain(IWineDXGISwapChainFactory *iface,
+ IDXGIFactory *factory, HWND window, const DXGI_SWAP_CHAIN_DESC1 *desc,
+ const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc, IDXGIOutput *output, IDXGISwapChain1 **swapchain)
+{
+ struct dxgi_device *device = impl_from_IWineDXGISwapChainFactory(iface);
+ struct wined3d_swapchain *wined3d_swapchain;
+ struct wined3d_swapchain_desc wined3d_desc;
+ HRESULT hr;
+
+ TRACE("iface %p, factory %p, window %p, desc %p, fullscreen_desc %p, output %p, swapchain %p.\n",
+ iface, factory, window, desc, fullscreen_desc, output, swapchain);
+
+ if (desc->Scaling != DXGI_SCALING_STRETCH)
+ FIXME("Ignoring scaling %#x.\n", desc->Scaling);
+ if (desc->AlphaMode != DXGI_ALPHA_MODE_IGNORE)
+ FIXME("Ignoring alpha mode %#x.\n", desc->AlphaMode);
+ if (fullscreen_desc && fullscreen_desc->ScanlineOrdering)
+ FIXME("Unhandled scanline ordering %#x.\n", fullscreen_desc->ScanlineOrdering);
+ if (fullscreen_desc && fullscreen_desc->Scaling)
+ FIXME("Unhandled mode scaling %#x.\n", fullscreen_desc->Scaling);
+
+ switch (desc->SwapEffect)
+ {
+ case DXGI_SWAP_EFFECT_DISCARD:
+ wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
+ break;
+ case DXGI_SWAP_EFFECT_SEQUENTIAL:
+ wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_SEQUENTIAL;
+ break;
+ case DXGI_SWAP_EFFECT_FLIP_DISCARD:
+ wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_DISCARD;
+ break;
+ case DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL:
+ wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_SEQUENTIAL;
+ break;
+ default:
+ WARN("Invalid swap effect %#x.\n", desc->SwapEffect);
+ return DXGI_ERROR_INVALID_CALL;
+ }
+
+ wined3d_desc.backbuffer_width = desc->Width;
+ wined3d_desc.backbuffer_height = desc->Height;
+ wined3d_desc.backbuffer_format = wined3dformat_from_dxgi_format(desc->Format);
+ wined3d_desc.backbuffer_count = desc->BufferCount;
+ wined3d_desc.backbuffer_bind_flags = wined3d_bind_flags_from_dxgi_usage(desc->BufferUsage);
+ wined3d_sample_desc_from_dxgi(&wined3d_desc.multisample_type,
+ &wined3d_desc.multisample_quality, &desc->SampleDesc);
+ wined3d_desc.device_window = window;
+ wined3d_desc.windowed = fullscreen_desc ? fullscreen_desc->Windowed : TRUE;
+ wined3d_desc.enable_auto_depth_stencil = FALSE;
+ wined3d_desc.auto_depth_stencil_format = 0;
+ wined3d_desc.flags = wined3d_swapchain_flags_from_dxgi(desc->Flags);
+ wined3d_desc.refresh_rate = fullscreen_desc ? dxgi_rational_to_uint(&fullscreen_desc->RefreshRate) : 0;
+ wined3d_desc.auto_restore_display_mode = TRUE;
+
+ if (FAILED(hr = dxgi_device_create_swapchain(&device->IWineDXGIDevice_iface,
+ &wined3d_desc, FALSE, &wined3d_swapchain)))
+ {
+ WARN("Failed to create swapchain, hr %#x.\n", hr);
+ return hr;
+ }
+
+ wined3d_mutex_lock();
+ *swapchain = wined3d_swapchain_get_parent(wined3d_swapchain);
+ wined3d_mutex_unlock();
+
+ return S_OK;
+}
+
+static const struct IWineDXGISwapChainFactoryVtbl dxgi_swapchain_factory_vtbl =
+{
+ dxgi_swapchain_factory_QueryInterface,
+ dxgi_swapchain_factory_AddRef,
+ dxgi_swapchain_factory_Release,
+ dxgi_swapchain_factory_create_swapchain,
+};
+
HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *layer,
IDXGIFactory *factory, IDXGIAdapter *adapter,
const D3D_FEATURE_LEVEL *feature_levels, unsigned int level_count)
@@ -428,6 +545,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
}
device->IWineDXGIDevice_iface.lpVtbl = &dxgi_device_vtbl;
+ device->IWineDXGISwapChainFactory_iface.lpVtbl = &dxgi_swapchain_factory_vtbl;
device->refcount = 1;
wined3d_mutex_lock();
wined3d_private_store_init(&device->private_store);
diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h
index 1268a9ca648..320a347dde5 100644
--- a/dlls/dxgi/dxgi_private.h
+++ b/dlls/dxgi/dxgi_private.h
@@ -122,6 +122,7 @@ struct dxgi_factory *unsafe_impl_from_IDXGIFactory(IDXGIFactory *iface) DECLSPEC
struct dxgi_device
{
IWineDXGIDevice IWineDXGIDevice_iface;
+ IWineDXGISwapChainFactory IWineDXGISwapChainFactory_iface;
IUnknown *child_layer;
LONG refcount;
struct wined3d_private_store private_store;
@@ -172,8 +173,6 @@ struct d3d11_swapchain
IDXGIOutput *target;
};
-HRESULT d3d11_swapchain_create(IWineDXGIDevice *device, HWND window, const DXGI_SWAP_CHAIN_DESC1 *swapchain_desc,
- const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc, IDXGISwapChain1 **swapchain) DECLSPEC_HIDDEN;
HRESULT d3d11_swapchain_init(struct d3d11_swapchain *swapchain, struct dxgi_device *device,
struct wined3d_swapchain_desc *desc, BOOL implicit) DECLSPEC_HIDDEN;
diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c
index a4577ae278f..52c145bc6a8 100644
--- a/dlls/dxgi/factory.c
+++ b/dlls/dxgi/factory.c
@@ -250,8 +250,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc,
IDXGIOutput *output, IDXGISwapChain1 **swapchain)
{
+ IWineDXGISwapChainFactory *swapchain_factory;
ID3D12CommandQueue *command_queue;
- IWineDXGIDevice *dxgi_device;
HRESULT hr;
TRACE("iface %p, device %p, window %p, desc %p, fullscreen_desc %p, output %p, swapchain %p.\n",
@@ -275,10 +275,11 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChainForHwnd(IWineDXGIFa
if (output)
FIXME("Ignoring output %p.\n", output);
- if (SUCCEEDED(IUnknown_QueryInterface(device, &IID_IWineDXGIDevice, (void **)&dxgi_device)))
+ if (SUCCEEDED(IUnknown_QueryInterface(device, &IID_IWineDXGISwapChainFactory, (void **)&swapchain_factory)))
{
- hr = d3d11_swapchain_create(dxgi_device, window, desc, fullscreen_desc, swapchain);
- IWineDXGIDevice_Release(dxgi_device);
+ hr = IWineDXGISwapChainFactory_create_swapchain(swapchain_factory,
+ (IDXGIFactory *)iface, window, desc, fullscreen_desc, output, swapchain);
+ IWineDXGISwapChainFactory_Release(swapchain_factory);
return hr;
}
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index 5aa2525c06e..07438f3e037 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -803,69 +803,6 @@ cleanup:
return hr;
}
-HRESULT d3d11_swapchain_create(IWineDXGIDevice *device, HWND window, const DXGI_SWAP_CHAIN_DESC1 *swapchain_desc,
- const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc, IDXGISwapChain1 **swapchain)
-{
- struct wined3d_swapchain *wined3d_swapchain;
- struct wined3d_swapchain_desc wined3d_desc;
- HRESULT hr;
-
- if (swapchain_desc->Scaling != DXGI_SCALING_STRETCH)
- FIXME("Ignoring scaling %#x.\n", swapchain_desc->Scaling);
- if (swapchain_desc->AlphaMode != DXGI_ALPHA_MODE_IGNORE)
- FIXME("Ignoring alpha mode %#x.\n", swapchain_desc->AlphaMode);
- if (fullscreen_desc && fullscreen_desc->ScanlineOrdering)
- FIXME("Unhandled scanline ordering %#x.\n", fullscreen_desc->ScanlineOrdering);
- if (fullscreen_desc && fullscreen_desc->Scaling)
- FIXME("Unhandled mode scaling %#x.\n", fullscreen_desc->Scaling);
-
- switch (swapchain_desc->SwapEffect)
- {
- case DXGI_SWAP_EFFECT_DISCARD:
- wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
- break;
- case DXGI_SWAP_EFFECT_SEQUENTIAL:
- wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_SEQUENTIAL;
- break;
- case DXGI_SWAP_EFFECT_FLIP_DISCARD:
- wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_DISCARD;
- break;
- case DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL:
- wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_FLIP_SEQUENTIAL;
- break;
- default:
- WARN("Invalid swap effect %#x.\n", swapchain_desc->SwapEffect);
- return DXGI_ERROR_INVALID_CALL;
- }
-
- wined3d_desc.backbuffer_width = swapchain_desc->Width;
- wined3d_desc.backbuffer_height = swapchain_desc->Height;
- wined3d_desc.backbuffer_format = wined3dformat_from_dxgi_format(swapchain_desc->Format);
- wined3d_desc.backbuffer_count = swapchain_desc->BufferCount;
- wined3d_desc.backbuffer_bind_flags = wined3d_bind_flags_from_dxgi_usage(swapchain_desc->BufferUsage);
- wined3d_sample_desc_from_dxgi(&wined3d_desc.multisample_type,
- &wined3d_desc.multisample_quality, &swapchain_desc->SampleDesc);
- wined3d_desc.device_window = window;
- wined3d_desc.windowed = fullscreen_desc ? fullscreen_desc->Windowed : TRUE;
- wined3d_desc.enable_auto_depth_stencil = FALSE;
- wined3d_desc.auto_depth_stencil_format = 0;
- wined3d_desc.flags = wined3d_swapchain_flags_from_dxgi(swapchain_desc->Flags);
- wined3d_desc.refresh_rate = fullscreen_desc ? dxgi_rational_to_uint(&fullscreen_desc->RefreshRate) : 0;
- wined3d_desc.auto_restore_display_mode = TRUE;
-
- if (FAILED(hr = IWineDXGIDevice_create_swapchain(device, &wined3d_desc, FALSE, &wined3d_swapchain)))
- {
- WARN("Failed to create swapchain, hr %#x.\n", hr);
- return hr;
- }
-
- wined3d_mutex_lock();
- *swapchain = wined3d_swapchain_get_parent(wined3d_swapchain);
- wined3d_mutex_unlock();
-
- return S_OK;
-}
-
#ifdef SONAME_LIBVKD3D
static PFN_vkd3d_acquire_vk_queue vkd3d_acquire_vk_queue;
diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl
index fccf45d7921..f300eb928b6 100644
--- a/include/wine/winedxgi.idl
+++ b/include/wine/winedxgi.idl
@@ -23,6 +23,23 @@ import "dxgi1_6.idl";
[
object,
local,
+ uuid(53cb4ff0-c25a-4164-a891-0e83db0a7aac)
+]
+interface IWineDXGISwapChainFactory : IUnknown
+{
+ HRESULT create_swapchain(
+ [in] IDXGIFactory *factory,
+ [in] HWND window,
+ [in] const DXGI_SWAP_CHAIN_DESC1 *desc,
+ [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *fullscreen_desc,
+ [in] IDXGIOutput *output,
+ [out] IDXGISwapChain1 **swapchain
+ );
+}
+
+[
+ object,
+ local,
uuid(3e1ff30b-c951-48c3-b010-0fb49f3dca71)
]
interface IWineDXGIDevice : IDXGIDevice2
--
2.11.0
2
1
[PATCH v7 01/10] comctl32/listbox: Check for out of bounds index using an unsigned index
by Gabriel Ivăncescu Dec. 4, 2018
by Gabriel Ivăncescu Dec. 4, 2018
Dec. 4, 2018
Needed for LBS_NODATA.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/comctl32/listbox.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c
index cb645b4..71f1c05 100644
--- a/dlls/comctl32/listbox.c
+++ b/dlls/comctl32/listbox.c
@@ -489,7 +489,7 @@ static INT LISTBOX_GetItemFromPoint( const LB_DESCR *descr, INT x, INT y )
* Paint an item.
*/
static void LISTBOX_PaintItem( LB_DESCR *descr, HDC hdc, const RECT *rect,
- INT index, UINT action, BOOL ignoreFocus )
+ UINT index, UINT action, BOOL ignoreFocus )
{
BOOL selected = FALSE, focused;
LB_ITEMDATA *item = NULL;
@@ -508,7 +508,7 @@ static void LISTBOX_PaintItem( LB_DESCR *descr, HDC hdc, const RECT *rect,
RECT r;
HRGN hrgn;
- if (!item)
+ if (index >= descr->nb_items)
{
if (action == ODA_FOCUS)
DrawFocusRect( hdc, rect );
--
2.19.1
1
9
[PATCH 7/7] webservices: Maximize the amount of data read with each recv call.
by Hans Leidekker Dec. 4, 2018
by Hans Leidekker Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/reader.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 270aecc220..53448c1926 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -628,7 +628,7 @@ static HRESULT read_more_data( struct reader *reader, ULONG min_size, const WS_A
if (reader->input_type != WS_XML_READER_INPUT_TYPE_STREAM) return WS_E_INVALID_FORMAT;
if (min_size > reader->input_size) return WS_E_QUOTA_EXCEEDED;
- if (min_size > reader->input_size - reader->read_pos)
+ if (reader->read_pos)
{
memmove( reader->stream_buf, reader->stream_buf + reader->read_pos, reader->read_size - reader->read_pos );
reader->read_size -= reader->read_pos;
--
2.11.0
1
0
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/msg.c | 27 +++++++++++++++++++++++++++
dlls/webservices/webservices.spec | 2 +-
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/msg.c b/dlls/webservices/msg.c
index ada549c773..31c424b8f0 100644
--- a/dlls/webservices/msg.c
+++ b/dlls/webservices/msg.c
@@ -831,6 +831,33 @@ done:
return hr;
}
+/**************************************************************************
+ * WsFlushBody [webservices.@]
+ */
+HRESULT WINAPI WsFlushBody( WS_MESSAGE *handle, ULONG size, const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error )
+{
+ struct msg *msg = (struct msg *)handle;
+ HRESULT hr;
+
+ TRACE( "%p %u %p %p\n", handle, size, ctx, error );
+
+ if (!msg) return E_INVALIDARG;
+
+ EnterCriticalSection( &msg->cs );
+
+ if (msg->magic != MSG_MAGIC)
+ {
+ LeaveCriticalSection( &msg->cs );
+ return E_INVALIDARG;
+ }
+
+ hr = WsFlushWriter( msg->writer_body, size, ctx, error );
+
+ LeaveCriticalSection( &msg->cs );
+ TRACE( "returning %08x\n", hr );
+ return hr;
+}
+
static BOOL match_current_element( WS_XML_READER *reader, const WS_XML_STRING *localname )
{
const WS_XML_NODE *node;
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index bd152b1ac3..c8db3a0375 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -46,7 +46,7 @@
@ stdcall WsFillBody(ptr long ptr ptr)
@ stdcall WsFillReader(ptr long ptr ptr)
@ stdcall WsFindAttribute(ptr ptr ptr long ptr ptr)
-@ stub WsFlushBody
+@ stdcall WsFlushBody(ptr long ptr ptr)
@ stdcall WsFlushWriter(ptr long ptr ptr)
@ stdcall WsFreeChannel(ptr)
@ stdcall WsFreeError(ptr)
--
2.11.0
1
0
[PATCH 5/7] webservices: Allow calling WsAcceptChannel again with the same channel handle.
by Hans Leidekker Dec. 4, 2018
by Hans Leidekker Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/listener.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/listener.c b/dlls/webservices/listener.c
index e06b39447f..de1abb557c 100644
--- a/dlls/webservices/listener.c
+++ b/dlls/webservices/listener.c
@@ -644,7 +644,10 @@ HRESULT WINAPI WsAcceptChannel( WS_LISTENER *handle, WS_CHANNEL *channel_handle,
return E_INVALIDARG;
}
- if (listener->state != WS_LISTENER_STATE_OPEN || listener->channel) hr = WS_E_INVALID_OPERATION;
+ if (listener->state != WS_LISTENER_STATE_OPEN || (listener->channel && listener->channel != channel_handle))
+ {
+ hr = WS_E_INVALID_OPERATION;
+ }
else
{
wait = listener->wait;
--
2.11.0
1
0
[PATCH 4/7] webservices: Use stream I/O for UDP and session-less TCP channel bindings.
by Hans Leidekker Dec. 4, 2018
by Hans Leidekker Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/channel.c | 167 ++++++++++++++++++++++++++-------------------
1 file changed, 95 insertions(+), 72 deletions(-)
diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c
index 5394aa6c28..139e625a36 100644
--- a/dlls/webservices/channel.c
+++ b/dlls/webservices/channel.c
@@ -1144,33 +1144,9 @@ done:
return hr;
}
-static void set_blocking( SOCKET socket, BOOL blocking )
-{
- ULONG state = !blocking;
- ioctlsocket( socket, FIONBIO, &state );
-}
-
-static int sock_recv( SOCKET socket, char *buf, int len )
-{
- int count, ret;
-
- if ((ret = recv( socket, buf, len, 0 )) <= 0) return ret;
- len -= ret;
-
- set_blocking( socket, FALSE );
- for (;;)
- {
- if ((count = recv( socket, buf + ret, len, 0 )) <= 0) break;
- ret += count;
- len -= count;
- }
- set_blocking( socket, TRUE );
- return ret;
-}
-
static HRESULT receive_bytes( struct channel *channel, unsigned char *bytes, int len )
{
- int count = sock_recv( channel->u.tcp.socket, (char *)bytes, len );
+ int count = recv( channel->u.tcp.socket, (char *)bytes, len, 0 );
if (count < 0) return HRESULT_FROM_WIN32( WSAGetLastError() );
if (count != len) return WS_E_INVALID_FORMAT;
return S_OK;
@@ -1214,8 +1190,6 @@ static HRESULT send_message( struct channel *channel, WS_MESSAGE *msg )
HRESULT hr;
channel->msg = msg;
- if ((hr = connect_channel( channel )) != S_OK) return hr;
-
WsGetMessageProperty( channel->msg, WS_MESSAGE_PROPERTY_BODY_WRITER, &writer, sizeof(writer), NULL );
WsGetWriterProperty( writer, WS_XML_WRITER_PROPERTY_BYTES, &buf, sizeof(buf), NULL );
@@ -1232,7 +1206,7 @@ static HRESULT send_message( struct channel *channel, WS_MESSAGE *msg )
return send_message_http( channel->u.http.request, buf.bytes, buf.length );
case WS_TCP_CHANNEL_BINDING:
- if (channel->encoding == WS_ENCODING_XML_BINARY_SESSION_1)
+ if (channel->type & WS_CHANNEL_TYPE_SESSION)
{
switch (channel->session_state)
{
@@ -1249,10 +1223,10 @@ static HRESULT send_message( struct channel *channel, WS_MESSAGE *msg )
return WS_E_OTHER;
}
}
- return send_bytes( channel->u.tcp.socket, buf.bytes, buf.length );
+ /* fall through */
case WS_UDP_CHANNEL_BINDING:
- return send_bytes( channel->u.udp.socket, buf.bytes, buf.length );
+ return WsFlushWriter( writer, 0, NULL, NULL );
default:
ERR( "unhandled binding %u\n", channel->binding );
@@ -1273,7 +1247,7 @@ HRESULT channel_send_message( WS_CHANNEL *handle, WS_MESSAGE *msg )
return E_INVALIDARG;
}
- hr = send_message( channel, msg );
+ if ((hr = connect_channel( channel )) == S_OK) hr = send_message( channel, msg );
LeaveCriticalSection( &channel->cs );
return hr;
@@ -1305,11 +1279,25 @@ static HRESULT CALLBACK dict_cb( void *state, const WS_XML_STRING *str, BOOL *fo
return hr;
}
+static CALLBACK HRESULT write_callback( void *state, const WS_BYTES *buf, ULONG count,
+ const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error )
+{
+ SOCKET socket = *(SOCKET *)state;
+ if (send( socket, (const char *)buf->bytes, buf->length, 0 ) < 0)
+ {
+ TRACE( "send failed %u\n", WSAGetLastError() );
+ }
+ return S_OK;
+}
+
static HRESULT init_writer( struct channel *channel )
{
WS_XML_WRITER_BUFFER_OUTPUT buf = {{WS_XML_WRITER_OUTPUT_TYPE_BUFFER}};
+ WS_XML_WRITER_STREAM_OUTPUT stream = {{WS_XML_WRITER_OUTPUT_TYPE_STREAM}};
WS_XML_WRITER_TEXT_ENCODING text = {{WS_XML_WRITER_ENCODING_TYPE_TEXT}, WS_CHARSET_UTF8};
WS_XML_WRITER_BINARY_ENCODING bin = {{WS_XML_WRITER_ENCODING_TYPE_BINARY}};
+ const WS_XML_WRITER_ENCODING *encoding;
+ const WS_XML_WRITER_OUTPUT *output;
WS_XML_WRITER_PROPERTY prop;
ULONG max_size = (1 << 17);
HRESULT hr;
@@ -1322,19 +1310,33 @@ static HRESULT init_writer( struct channel *channel )
switch (channel->encoding)
{
case WS_ENCODING_XML_UTF8:
- return WsSetOutput( channel->writer, &text.encoding, &buf.output, NULL, 0, NULL );
+ encoding = &text.encoding;
+ if (channel->binding == WS_UDP_CHANNEL_BINDING ||
+ (channel->binding == WS_TCP_CHANNEL_BINDING && !(channel->type & WS_CHANNEL_TYPE_SESSION)))
+ {
+ stream.writeCallback = write_callback;
+ stream.writeCallbackState = (channel->binding == WS_UDP_CHANNEL_BINDING) ?
+ &channel->u.udp.socket : &channel->u.tcp.socket;
+ output = &stream.output;
+ }
+ else output = &buf.output;
+ break;
case WS_ENCODING_XML_BINARY_SESSION_1:
bin.staticDictionary = (WS_XML_DICTIONARY *)&dict_builtin_static.dict;
/* fall through */
case WS_ENCODING_XML_BINARY_1:
- return WsSetOutput( channel->writer, &bin.encoding, &buf.output, NULL, 0, NULL );
+ encoding = &bin.encoding;
+ output = &buf.output;
+ break;
default:
FIXME( "unhandled encoding %u\n", channel->encoding );
return WS_E_NOT_SUPPORTED;
}
+
+ return WsSetOutput( channel->writer, encoding, output, NULL, 0, NULL );
}
static HRESULT write_message( struct channel *channel, WS_MESSAGE *msg, const WS_ELEMENT_DESCRIPTION *desc,
@@ -1378,6 +1380,7 @@ HRESULT WINAPI WsSendMessage( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS_MESS
if ((hr = WsAddressMessage( msg, &channel->addr, NULL )) != S_OK) goto done;
if ((hr = message_set_action( msg, desc->action )) != S_OK) goto done;
+ if ((hr = connect_channel( channel )) != S_OK) goto done;
if ((hr = init_writer( channel )) != S_OK) goto done;
if ((hr = write_message( channel, msg, desc->bodyElementDescription, option, body, size )) != S_OK) goto done;
hr = send_message( channel, msg );
@@ -1419,6 +1422,7 @@ HRESULT WINAPI WsSendReplyMessage( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS
if ((hr = message_get_id( request, &req_id )) != S_OK) goto done;
if ((hr = message_set_request_id( msg, &req_id )) != S_OK) goto done;
+ if ((hr = connect_channel( channel )) != S_OK) goto done;
if ((hr = init_writer( channel )) != S_OK) goto done;
if ((hr = write_message( channel, msg, desc->bodyElementDescription, option, body, size )) != S_OK) goto done;
hr = send_message( channel, msg );
@@ -1448,12 +1452,29 @@ static HRESULT resize_read_buffer( struct channel *channel, ULONG size )
return S_OK;
}
+static CALLBACK HRESULT read_callback( void *state, void *buf, ULONG buflen, ULONG *retlen,
+ const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error )
+{
+ SOCKET socket = *(SOCKET *)state;
+ int ret;
+
+ if ((ret = recv( socket, buf, buflen, 0 )) >= 0) *retlen = ret;
+ else
+ {
+ TRACE( "recv failed %u\n", WSAGetLastError() );
+ *retlen = 0;
+ }
+ return S_OK;
+}
+
static HRESULT init_reader( struct channel *channel )
{
WS_XML_READER_BUFFER_INPUT buf = {{WS_XML_READER_INPUT_TYPE_BUFFER}};
+ WS_XML_READER_STREAM_INPUT stream = {{WS_XML_READER_INPUT_TYPE_STREAM}};
WS_XML_READER_TEXT_ENCODING text = {{WS_XML_READER_ENCODING_TYPE_TEXT}};
WS_XML_READER_BINARY_ENCODING bin = {{WS_XML_READER_ENCODING_TYPE_BINARY}};
- WS_XML_READER_ENCODING *encoding;
+ const WS_XML_READER_ENCODING *encoding;
+ const WS_XML_READER_INPUT *input;
HRESULT hr;
if (!channel->reader && (hr = WsCreateReader( NULL, 0, &channel->reader, NULL )) != S_OK) return hr;
@@ -1463,6 +1484,21 @@ static HRESULT init_reader( struct channel *channel )
case WS_ENCODING_XML_UTF8:
text.charSet = WS_CHARSET_UTF8;
encoding = &text.encoding;
+
+ if (channel->binding == WS_UDP_CHANNEL_BINDING ||
+ (channel->binding == WS_TCP_CHANNEL_BINDING && !(channel->type & WS_CHANNEL_TYPE_SESSION)))
+ {
+ stream.readCallback = read_callback;
+ stream.readCallbackState = (channel->binding == WS_UDP_CHANNEL_BINDING) ?
+ &channel->u.udp.socket : &channel->u.tcp.socket;
+ input = &stream.input;
+ }
+ else
+ {
+ buf.encodedData = channel->read_buf;
+ buf.encodedDataSize = channel->read_size;
+ input = &buf.input;
+ }
break;
case WS_ENCODING_XML_BINARY_SESSION_1:
@@ -1472,6 +1508,10 @@ static HRESULT init_reader( struct channel *channel )
case WS_ENCODING_XML_BINARY_1:
encoding = &bin.encoding;
+
+ buf.encodedData = channel->read_buf;
+ buf.encodedDataSize = channel->read_size;
+ input = &buf.input;
break;
default:
@@ -1479,9 +1519,7 @@ static HRESULT init_reader( struct channel *channel )
return WS_E_NOT_SUPPORTED;
}
- buf.encodedData = channel->read_buf;
- buf.encodedDataSize = channel->read_size;
- return WsSetInput( channel->reader, encoding, &buf.input, NULL, 0, NULL );
+ return WsSetInput( channel->reader, encoding, input, NULL, 0, NULL );
}
#define INITIAL_READ_BUFFER_SIZE 4096
@@ -1515,26 +1553,6 @@ static HRESULT receive_message_http( struct channel *channel )
offset += bytes_read;
}
- return init_reader( channel );
-}
-
-static HRESULT receive_message_unsized( struct channel *channel, SOCKET socket )
-{
- int bytes_read;
- ULONG max_len;
- HRESULT hr;
-
- prop_get( channel->prop, channel->prop_count, WS_CHANNEL_PROPERTY_MAX_BUFFERED_MESSAGE_SIZE,
- &max_len, sizeof(max_len) );
-
- if ((hr = resize_read_buffer( channel, max_len )) != S_OK) return hr;
-
- channel->read_size = 0;
- if ((bytes_read = sock_recv( socket, channel->read_buf, max_len )) < 0)
- {
- return HRESULT_FROM_WIN32( WSAGetLastError() );
- }
- channel->read_size = bytes_read;
return S_OK;
}
@@ -1549,7 +1567,7 @@ static HRESULT receive_message_sized( struct channel *channel, unsigned int size
channel->read_size = 0;
while (channel->read_size < size)
{
- if ((bytes_read = sock_recv( channel->u.tcp.socket, channel->read_buf + offset, to_read )) < 0)
+ if ((bytes_read = recv( channel->u.tcp.socket, channel->read_buf + offset, to_read, 0 )) < 0)
{
return HRESULT_FROM_WIN32( WSAGetLastError() );
}
@@ -1798,14 +1816,7 @@ static HRESULT receive_message_session( struct channel *channel )
memmove( channel->read_buf, channel->read_buf + size, channel->read_size );
}
- return init_reader( channel );
-}
-
-static HRESULT receive_message_sock( struct channel *channel, SOCKET socket )
-{
- HRESULT hr;
- if ((hr = receive_message_unsized( channel, socket )) != S_OK) return hr;
- return init_reader( channel );
+ return S_OK;
}
static HRESULT receive_message_bytes( struct channel *channel )
@@ -1819,7 +1830,7 @@ static HRESULT receive_message_bytes( struct channel *channel )
return receive_message_http( channel );
case WS_TCP_CHANNEL_BINDING:
- if (channel->encoding == WS_ENCODING_XML_BINARY_SESSION_1)
+ if (channel->type & WS_CHANNEL_TYPE_SESSION)
{
switch (channel->session_state)
{
@@ -1836,10 +1847,10 @@ static HRESULT receive_message_bytes( struct channel *channel )
return WS_E_OTHER;
}
}
- return receive_message_sock( channel, channel->u.tcp.socket );
+ return S_OK; /* nothing to do, data is read through stream callback */
case WS_UDP_CHANNEL_BINDING:
- return receive_message_sock( channel, channel->u.udp.socket );
+ return S_OK;
default:
ERR( "unhandled binding %u\n", channel->binding );
@@ -1860,7 +1871,7 @@ HRESULT channel_receive_message( WS_CHANNEL *handle )
return E_INVALIDARG;
}
- hr = receive_message_bytes( channel );
+ if ((hr = receive_message_bytes( channel )) == S_OK) hr = init_reader( channel );
LeaveCriticalSection( &channel->cs );
return hr;
@@ -1901,6 +1912,8 @@ static HRESULT receive_message( struct channel *channel, WS_MESSAGE *msg, const
ULONG i;
if ((hr = receive_message_bytes( channel )) != S_OK) return hr;
+ if ((hr = init_reader( channel )) != S_OK) return hr;
+
for (i = 0; i < count; i++)
{
const WS_ELEMENT_DESCRIPTION *body = desc[i]->bodyElementDescription;
@@ -2012,6 +2025,7 @@ static HRESULT request_reply( struct channel *channel, WS_MESSAGE *request,
if ((hr = WsAddressMessage( request, &channel->addr, NULL )) != S_OK) return hr;
if ((hr = message_set_action( request, request_desc->action )) != S_OK) return hr;
+ if ((hr = connect_channel( channel )) != S_OK) return hr;
if ((hr = init_writer( channel )) != S_OK) return hr;
if ((hr = write_message( channel, request, request_desc->bodyElementDescription, write_option, request_body,
request_size )) != S_OK) return hr;
@@ -2141,7 +2155,8 @@ HRESULT WINAPI WsReadMessageStart( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS
if ((hr = receive_message_bytes( channel )) == S_OK)
{
- hr = WsReadEnvelopeStart( msg, channel->reader, NULL, NULL, NULL );
+ if ((hr = init_reader( channel )) == S_OK)
+ hr = WsReadEnvelopeStart( msg, channel->reader, NULL, NULL, NULL );
}
LeaveCriticalSection( &channel->cs );
@@ -2202,6 +2217,7 @@ HRESULT WINAPI WsWriteMessageStart( WS_CHANNEL *handle, WS_MESSAGE *msg, const W
return E_INVALIDARG;
}
+ if ((hr = connect_channel( channel )) != S_OK) goto done;
if ((hr = init_writer( channel )) != S_OK) goto done;
if ((hr = WsAddressMessage( msg, &channel->addr, NULL )) != S_OK) goto done;
hr = WsWriteEnvelopeStart( msg, channel->writer, NULL, NULL, NULL );
@@ -2235,13 +2251,20 @@ HRESULT WINAPI WsWriteMessageEnd( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS_
return E_INVALIDARG;
}
- if ((hr = WsWriteEnvelopeEnd( msg, NULL )) == S_OK) hr = send_message( channel, msg );
+ if ((hr = WsWriteEnvelopeEnd( msg, NULL )) == S_OK && (hr = connect_channel( channel ) == S_OK))
+ hr = send_message( channel, msg );
LeaveCriticalSection( &channel->cs );
TRACE( "returning %08x\n", hr );
return hr;
}
+static void set_blocking( SOCKET socket, BOOL blocking )
+{
+ ULONG state = !blocking;
+ ioctlsocket( socket, FIONBIO, &state );
+}
+
static HRESULT sock_accept( SOCKET socket, HANDLE wait, HANDLE cancel, SOCKET *ret )
{
HANDLE handles[] = { wait, cancel };
--
2.11.0
1
0
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/reader.c | 1 -
dlls/webservices/tests/writer.c | 71 ++++++++++++++++++++++++
dlls/webservices/webservices.spec | 2 +-
dlls/webservices/webservices_private.h | 2 +
dlls/webservices/writer.c | 98 ++++++++++++++++++++++++++++++----
include/webservices.h | 14 +++--
6 files changed, 172 insertions(+), 16 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 9a9d491730..270aecc220 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -6921,7 +6921,6 @@ static void set_input_buffer( struct reader *reader, const unsigned char *data,
reader->text_conv_offset = 0;
}
-#define STREAM_BUFSIZE 4096
static void set_input_stream( struct reader *reader, WS_READ_CALLBACK callback, void *state )
{
reader->input_type = WS_XML_READER_INPUT_TYPE_STREAM;
diff --git a/dlls/webservices/tests/writer.c b/dlls/webservices/tests/writer.c
index a55da605e8..8d189fd9e4 100644
--- a/dlls/webservices/tests/writer.c
+++ b/dlls/webservices/tests/writer.c
@@ -4685,6 +4685,76 @@ static void test_repeating_element_choice(void)
WsFreeWriter( writer );
}
+static const struct stream_test
+{
+ ULONG min_size;
+ ULONG ret_size;
+}
+stream_tests[] =
+{
+ { 0, 4 },
+ { 1, 4 },
+ { 4, 4 },
+ { 5, 4 },
+};
+
+static CALLBACK HRESULT write_callback( void *state, const WS_BYTES *buf, ULONG count,
+ const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error )
+{
+ ULONG i = *(ULONG *)state;
+ ok( buf->length == stream_tests[i].ret_size, "%u: got %u\n", i, buf->length );
+ ok( !memcmp( buf->bytes, "<t/>", stream_tests[i].ret_size ), "%u: wrong data\n", i );
+ ok( count == 1, "%u: got %u\n", i, count );
+ return S_OK;
+}
+
+static void test_stream_output(void)
+{
+ static WS_XML_STRING str_ns = {0, NULL}, str_t = {1, (BYTE *)"t"};
+ WS_XML_WRITER_TEXT_ENCODING text = {{WS_XML_WRITER_ENCODING_TYPE_TEXT}, WS_CHARSET_UTF8};
+ WS_XML_WRITER_STREAM_OUTPUT stream;
+ WS_XML_WRITER *writer;
+ HRESULT hr;
+ ULONG i = 0;
+
+ hr = WsCreateWriter( NULL, 0, &writer, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsFlushWriter( writer, 0, NULL, NULL );
+ ok( hr == WS_E_INVALID_OPERATION, "got %08x\n", hr );
+
+ stream.output.outputType = WS_XML_WRITER_OUTPUT_TYPE_STREAM;
+ stream.writeCallback = write_callback;
+ stream.writeCallbackState = &i;
+ hr = WsSetOutput( writer, &text.encoding, &stream.output, NULL, 0, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsSetOutput( writer, &text.encoding, &stream.output, NULL, 0, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsWriteStartElement( writer, NULL, &str_t, &str_ns, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+ hr = WsWriteEndElement( writer, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+ hr = WsFlushWriter( writer, 0, NULL, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ for (i = 0; i < ARRAY_SIZE(stream_tests); i++)
+ {
+ stream.writeCallbackState = &i;
+ hr = WsSetOutput( writer, &text.encoding, &stream.output, NULL, 0, NULL );
+ ok( hr == S_OK, "%u: got %08x\n", i, hr );
+ hr = WsWriteStartElement( writer, NULL, &str_t, &str_ns, NULL );
+ ok( hr == S_OK, "%u: got %08x\n", i, hr );
+ hr = WsWriteEndElement( writer, NULL );
+ ok( hr == S_OK, "%u: got %08x\n", i, hr );
+ hr = WsFlushWriter( writer, stream_tests[i].min_size, NULL, NULL );
+ ok( hr == S_OK, "%u: got %08x\n", i, hr );
+ }
+
+ WsFreeWriter( writer );
+}
+
START_TEST(writer)
{
test_WsCreateWriter();
@@ -4728,4 +4798,5 @@ START_TEST(writer)
test_union_type();
test_text_types_binary();
test_repeating_element_choice();
+ test_stream_output();
}
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index adad68dbdd..bd152b1ac3 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -47,7 +47,7 @@
@ stdcall WsFillReader(ptr long ptr ptr)
@ stdcall WsFindAttribute(ptr ptr ptr long ptr ptr)
@ stub WsFlushBody
-@ stub WsFlushWriter
+@ stdcall WsFlushWriter(ptr long ptr ptr)
@ stdcall WsFreeChannel(ptr)
@ stdcall WsFreeError(ptr)
@ stdcall WsFreeHeap(ptr)
diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h
index b482b5ba20..6a6f65dbec 100644
--- a/dlls/webservices/webservices_private.h
+++ b/dlls/webservices/webservices_private.h
@@ -18,6 +18,8 @@
#include "winhttp.h"
+#define STREAM_BUFSIZE 4096
+
struct xmlbuf
{
WS_HEAP *heap;
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 0a28d9dc84..4f6cb60195 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -84,9 +84,12 @@ struct writer
WS_XML_WRITER_ENCODING_TYPE output_enc;
WS_CHARSET output_charset;
WS_XML_WRITER_OUTPUT_TYPE output_type;
+ WS_WRITE_CALLBACK output_cb;
+ void *output_cb_state;
struct xmlbuf *output_buf;
BOOL output_buf_user;
WS_HEAP *output_heap;
+ unsigned char *stream_buf;
const WS_XML_DICTIONARY *dict;
BOOL dict_do_lookup;
WS_DYNAMIC_STRING_CALLBACK dict_cb;
@@ -121,6 +124,7 @@ static void free_writer( struct writer *writer )
destroy_nodes( writer->root );
free_xml_string( writer->current_ns );
WsFreeHeap( writer->output_heap );
+ heap_free( writer->stream_buf );
#ifndef __MINGW32__
writer->cs.DebugInfo->Spare[0] = 0;
@@ -294,7 +298,7 @@ HRESULT WINAPI WsGetWriterProperty( WS_XML_WRITER *handle, WS_XML_WRITER_PROPERT
return E_INVALIDARG;
}
- if (!writer->output_type) hr = WS_E_INVALID_OPERATION;
+ if (writer->output_type != WS_XML_WRITER_OUTPUT_TYPE_BUFFER) hr = WS_E_INVALID_OPERATION;
else
{
switch (id)
@@ -346,6 +350,15 @@ static void set_output_buffer( struct writer *writer, struct xmlbuf *xmlbuf )
writer->write_pos = 0;
}
+static void set_output_stream( struct writer *writer, WS_WRITE_CALLBACK callback, void *state )
+{
+ writer->output_type = WS_XML_WRITER_OUTPUT_TYPE_STREAM;
+ writer->output_cb = callback;
+ writer->output_cb_state = state;
+ writer->write_bufptr = writer->stream_buf;
+ writer->write_pos = 0;
+}
+
/**************************************************************************
* WsSetOutput [webservices.@]
*/
@@ -384,7 +397,7 @@ HRESULT WINAPI WsSetOutput( WS_XML_WRITER *handle, const WS_XML_WRITER_ENCODING
{
case WS_XML_WRITER_ENCODING_TYPE_TEXT:
{
- WS_XML_WRITER_TEXT_ENCODING *text = (WS_XML_WRITER_TEXT_ENCODING *)encoding;
+ const WS_XML_WRITER_TEXT_ENCODING *text = (const WS_XML_WRITER_TEXT_ENCODING *)encoding;
if (text->charSet != WS_CHARSET_UTF8)
{
FIXME( "charset %u not supported\n", text->charSet );
@@ -397,7 +410,7 @@ HRESULT WINAPI WsSetOutput( WS_XML_WRITER *handle, const WS_XML_WRITER_ENCODING
}
case WS_XML_WRITER_ENCODING_TYPE_BINARY:
{
- WS_XML_WRITER_BINARY_ENCODING *bin = (WS_XML_WRITER_BINARY_ENCODING *)encoding;
+ const WS_XML_WRITER_BINARY_ENCODING *bin = (const WS_XML_WRITER_BINARY_ENCODING *)encoding;
writer->output_enc = WS_XML_WRITER_ENCODING_TYPE_BINARY;
writer->output_charset = 0;
writer->dict = bin->staticDictionary;
@@ -426,6 +439,18 @@ HRESULT WINAPI WsSetOutput( WS_XML_WRITER *handle, const WS_XML_WRITER_ENCODING
writer->output_buf_user = FALSE;
break;
}
+ case WS_XML_WRITER_OUTPUT_TYPE_STREAM:
+ {
+ const WS_XML_WRITER_STREAM_OUTPUT *stream = (const WS_XML_WRITER_STREAM_OUTPUT *)output;
+ if (!writer->stream_buf && !(writer->stream_buf = heap_alloc( STREAM_BUFSIZE )))
+ {
+ hr = E_OUTOFMEMORY;
+ goto done;
+ }
+ set_output_stream( writer, stream->writeCallback, stream->writeCallbackState );
+ break;
+
+ }
default:
FIXME( "output type %u not supported\n", output->outputType );
hr = E_NOTIMPL;
@@ -489,12 +514,63 @@ done:
return hr;
}
+static HRESULT flush_writer( struct writer *writer, ULONG min_size, const WS_ASYNC_CONTEXT *ctx,
+ WS_ERROR *error )
+{
+ WS_BYTES buf;
+
+ if (writer->write_pos < min_size) return S_OK;
+
+ buf.bytes = writer->write_bufptr;
+ buf.length = writer->write_pos;
+ writer->output_cb( writer->output_cb_state, &buf, 1, ctx, error );
+ writer->write_pos = 0;
+ return S_OK;
+}
+
+/**************************************************************************
+ * WsFlushWriter [webservices.@]
+ */
+HRESULT WINAPI WsFlushWriter( WS_XML_WRITER *handle, ULONG min_size, const WS_ASYNC_CONTEXT *ctx,
+ WS_ERROR *error )
+{
+ struct writer *writer = (struct writer *)handle;
+ HRESULT hr;
+
+ TRACE( "%p %u %p %p\n", handle, min_size, ctx, error );
+ if (error) FIXME( "ignoring error parameter\n" );
+ if (ctx) FIXME( "ignoring ctx parameter\n" );
+
+ if (!writer) return E_INVALIDARG;
+
+ EnterCriticalSection( &writer->cs );
+
+ if (writer->magic != WRITER_MAGIC)
+ {
+ LeaveCriticalSection( &writer->cs );
+ return E_INVALIDARG;
+ }
+
+ if (writer->output_type != WS_XML_WRITER_OUTPUT_TYPE_STREAM) hr = WS_E_INVALID_OPERATION;
+ else hr = flush_writer( writer, min_size, ctx, error );
+
+ LeaveCriticalSection( &writer->cs );
+ TRACE( "returning %08x\n", hr );
+ return hr;
+}
+
static HRESULT write_grow_buffer( struct writer *writer, ULONG size )
{
struct xmlbuf *buf = writer->output_buf;
SIZE_T new_size;
void *tmp;
+ if (writer->output_type == WS_XML_WRITER_OUTPUT_TYPE_STREAM)
+ {
+ if (size > STREAM_BUFSIZE) return WS_E_QUOTA_EXCEEDED;
+ return flush_writer( writer, STREAM_BUFSIZE - size, NULL, NULL );
+ }
+
if (buf->size >= writer->write_pos + size)
{
buf->bytes.length = writer->write_pos + size;
@@ -2047,7 +2123,7 @@ HRESULT WINAPI WsWriteStartAttribute( WS_XML_WRITER *handle, const WS_XML_STRING
}
/* flush current start element if necessary */
-static HRESULT write_flush( struct writer *writer )
+static HRESULT write_commit( struct writer *writer )
{
if (writer->state == WRITER_STATE_STARTELEMENT)
{
@@ -2089,7 +2165,7 @@ static HRESULT write_cdata( struct writer *writer )
static HRESULT write_cdata_node( struct writer *writer )
{
HRESULT hr;
- if ((hr = write_flush( writer )) != S_OK) return hr;
+ if ((hr = write_commit( writer )) != S_OK) return hr;
if ((hr = write_add_cdata_node( writer )) != S_OK) return hr;
if ((hr = write_add_endcdata_node( writer )) != S_OK) return hr;
if ((hr = write_cdata( writer )) != S_OK) return hr;
@@ -2220,7 +2296,7 @@ static HRESULT write_element_node( struct writer *writer, const WS_XML_STRING *p
const WS_XML_STRING *localname, const WS_XML_STRING *ns )
{
HRESULT hr;
- if ((hr = write_flush( writer )) != S_OK) return hr;
+ if ((hr = write_commit( writer )) != S_OK) return hr;
if ((hr = write_add_element_node( writer, prefix, localname, ns )) != S_OK) return hr;
if ((hr = write_add_endelement_node( writer, writer->current )) != S_OK) return hr;
writer->state = WRITER_STATE_STARTELEMENT;
@@ -2826,7 +2902,7 @@ static HRESULT write_text_node( struct writer *writer, const WS_XML_TEXT *text )
ULONG offset = 0;
HRESULT hr;
- if ((hr = write_flush( writer )) != S_OK) return hr;
+ if ((hr = write_commit( writer )) != S_OK) return hr;
if (node_type( writer->current ) != WS_XML_NODE_TYPE_TEXT)
{
if ((hr = write_add_text_node( writer, text )) != S_OK) return hr;
@@ -4158,7 +4234,7 @@ HRESULT WINAPI WsWriteXmlBuffer( WS_XML_WRITER *handle, WS_XML_BUFFER *buffer, W
goto done;
}
- if ((hr = write_flush( writer )) != S_OK) goto done;
+ if ((hr = write_commit( writer )) != S_OK) goto done;
if ((hr = write_grow_buffer( writer, xmlbuf->bytes.length )) != S_OK) goto done;
write_bytes( writer, xmlbuf->bytes.bytes, xmlbuf->bytes.length );
@@ -4261,7 +4337,7 @@ static HRESULT write_qualified_name( struct writer *writer, const WS_XML_STRING
WS_XML_QNAME_TEXT qname = {{WS_XML_TEXT_TYPE_QNAME}};
HRESULT hr;
- if ((hr = write_flush( writer )) != S_OK) return hr;
+ if ((hr = write_commit( writer )) != S_OK) return hr;
if (!prefix && ((hr = find_prefix( writer, ns, &prefix )) != S_OK)) return hr;
qname.prefix = (WS_XML_STRING *)prefix;
@@ -4398,7 +4474,7 @@ HRESULT WINAPI WsMoveWriter( WS_XML_WRITER *handle, WS_MOVE_TO move, BOOL *found
return E_INVALIDARG;
}
- if (!writer->output_type) hr = WS_E_INVALID_OPERATION;
+ if (writer->output_type != WS_XML_WRITER_OUTPUT_TYPE_BUFFER) hr = WS_E_INVALID_OPERATION;
else hr = write_move_to( writer, move, found );
LeaveCriticalSection( &writer->cs );
@@ -4526,7 +4602,7 @@ static HRESULT write_comment( struct writer *writer )
static HRESULT write_comment_node( struct writer *writer, const WS_XML_STRING *value )
{
HRESULT hr;
- if ((hr = write_flush( writer )) != S_OK) return hr;
+ if ((hr = write_commit( writer )) != S_OK) return hr;
if ((hr = write_add_comment_node( writer, value )) != S_OK) return hr;
if ((hr = write_comment( writer )) != S_OK) return hr;
writer->state = WRITER_STATE_COMMENT;
diff --git a/include/webservices.h b/include/webservices.h
index 69e3c8a276..a6018d5d25 100644
--- a/include/webservices.h
+++ b/include/webservices.h
@@ -296,15 +296,21 @@ typedef struct _WS_ASYNC_CONTEXT {
typedef HRESULT (CALLBACK *WS_READ_CALLBACK)
(void*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*);
-typedef HRESULT (CALLBACK *WS_WRITE_CALLBACK)
- (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
-
typedef struct _WS_XML_READER_STREAM_INPUT {
WS_XML_READER_INPUT input;
WS_READ_CALLBACK readCallback;
void *readCallbackState;
} WS_XML_READER_STREAM_INPUT;
+typedef HRESULT (CALLBACK *WS_WRITE_CALLBACK)
+ (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
+
+typedef struct _WS_XML_WRITER_STREAM_OUTPUT {
+ WS_XML_WRITER_OUTPUT output;
+ WS_WRITE_CALLBACK writeCallback;
+ void *writeCallbackState;
+} WS_XML_WRITER_STREAM_OUTPUT;
+
typedef enum {
WS_ELEMENT_TYPE_MAPPING = 1,
WS_ATTRIBUTE_TYPE_MAPPING = 2,
@@ -1626,6 +1632,8 @@ HRESULT WINAPI WsFillBody(WS_MESSAGE*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*
HRESULT WINAPI WsFillReader(WS_XML_READER*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
HRESULT WINAPI WsFindAttribute(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL,
ULONG*, WS_ERROR*);
+HRESULT WINAPI WsFlushBody(WS_MESSAGE*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
+HRESULT WINAPI WsFlushWriter(WS_XML_WRITER*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
void WINAPI WsFreeChannel(WS_CHANNEL*);
void WINAPI WsFreeError(WS_ERROR*);
void WINAPI WsFreeHeap(WS_HEAP*);
--
2.11.0
1
0
[PATCH 2/7] webservices: Properly check the input buffer type in WsMoveReader.
by Hans Leidekker Dec. 4, 2018
by Hans Leidekker Dec. 4, 2018
Dec. 4, 2018
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/reader.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index ba6a951e9c..9a9d491730 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -653,6 +653,7 @@ HRESULT WINAPI WsFillReader( WS_XML_READER *handle, ULONG min_size, const WS_ASY
TRACE( "%p %u %p %p\n", handle, min_size, ctx, error );
if (error) FIXME( "ignoring error parameter\n" );
+ if (ctx) FIXME( "ignoring ctx parameter\n" );
if (!reader) return E_INVALIDARG;
@@ -3582,7 +3583,7 @@ HRESULT WINAPI WsMoveReader( WS_XML_READER *handle, WS_MOVE_TO move, BOOL *found
return E_INVALIDARG;
}
- if (!reader->input_type) hr = WS_E_INVALID_OPERATION;
+ if (reader->input_type != WS_XML_READER_INPUT_TYPE_BUFFER) hr = WS_E_INVALID_OPERATION;
else hr = read_move_to( reader, move, found );
LeaveCriticalSection( &reader->cs );
@@ -6982,8 +6983,8 @@ HRESULT WINAPI WsSetInput( WS_XML_READER *handle, const WS_XML_READER_ENCODING *
{
if (input->inputType == WS_XML_READER_INPUT_TYPE_BUFFER)
{
- WS_XML_READER_TEXT_ENCODING *text = (WS_XML_READER_TEXT_ENCODING *)encoding;
- WS_XML_READER_BUFFER_INPUT *buf = (WS_XML_READER_BUFFER_INPUT *)input;
+ const WS_XML_READER_TEXT_ENCODING *text = (const WS_XML_READER_TEXT_ENCODING *)encoding;
+ const WS_XML_READER_BUFFER_INPUT *buf = (const WS_XML_READER_BUFFER_INPUT *)input;
if (text->charSet != WS_CHARSET_AUTO) reader->input_charset = text->charSet;
else reader->input_charset = detect_charset( buf->encodedData, buf->encodedDataSize, &offset );
}
@@ -6993,7 +6994,7 @@ HRESULT WINAPI WsSetInput( WS_XML_READER *handle, const WS_XML_READER_ENCODING *
}
case WS_XML_READER_ENCODING_TYPE_BINARY:
{
- WS_XML_READER_BINARY_ENCODING *bin = (WS_XML_READER_BINARY_ENCODING *)encoding;
+ const WS_XML_READER_BINARY_ENCODING *bin = (const WS_XML_READER_BINARY_ENCODING *)encoding;
reader->input_enc = WS_XML_READER_ENCODING_TYPE_BINARY;
reader->input_charset = 0;
reader->dict_static = bin->staticDictionary ? bin->staticDictionary : &dict_builtin_static.dict;
@@ -7010,13 +7011,13 @@ HRESULT WINAPI WsSetInput( WS_XML_READER *handle, const WS_XML_READER_ENCODING *
{
case WS_XML_READER_INPUT_TYPE_BUFFER:
{
- WS_XML_READER_BUFFER_INPUT *buf = (WS_XML_READER_BUFFER_INPUT *)input;
+ const WS_XML_READER_BUFFER_INPUT *buf = (const WS_XML_READER_BUFFER_INPUT *)input;
set_input_buffer( reader, (const unsigned char *)buf->encodedData + offset, buf->encodedDataSize - offset );
break;
}
case WS_XML_READER_INPUT_TYPE_STREAM:
{
- WS_XML_READER_STREAM_INPUT *stream = (WS_XML_READER_STREAM_INPUT *)input;
+ const WS_XML_READER_STREAM_INPUT *stream = (const WS_XML_READER_STREAM_INPUT *)input;
if (!reader->stream_buf && !(reader->stream_buf = heap_alloc( STREAM_BUFSIZE )))
{
hr = E_OUTOFMEMORY;
--
2.11.0
1
0
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/webservices/msg.c | 27 +++++++++++++++++++++++++++
dlls/webservices/webservices.spec | 2 +-
include/webservices.h | 1 +
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/msg.c b/dlls/webservices/msg.c
index e28baa2693..ada549c773 100644
--- a/dlls/webservices/msg.c
+++ b/dlls/webservices/msg.c
@@ -999,6 +999,33 @@ HRESULT WINAPI WsReadBody( WS_MESSAGE *handle, const WS_ELEMENT_DESCRIPTION *des
}
/**************************************************************************
+ * WsFillBody [webservices.@]
+ */
+HRESULT WINAPI WsFillBody( WS_MESSAGE *handle, ULONG size, const WS_ASYNC_CONTEXT *ctx, WS_ERROR *error )
+{
+ struct msg *msg = (struct msg *)handle;
+ HRESULT hr;
+
+ TRACE( "%p %u %p %p\n", handle, size, ctx, error );
+
+ if (!msg) return E_INVALIDARG;
+
+ EnterCriticalSection( &msg->cs );
+
+ if (msg->magic != MSG_MAGIC)
+ {
+ LeaveCriticalSection( &msg->cs );
+ return E_INVALIDARG;
+ }
+
+ hr = WsFillReader( msg->reader_body, size, ctx, error );
+
+ LeaveCriticalSection( &msg->cs );
+ TRACE( "returning %08x\n", hr );
+ return hr;
+}
+
+/**************************************************************************
* WsInitializeMessage [webservices.@]
*/
HRESULT WINAPI WsInitializeMessage( WS_MESSAGE *handle, WS_MESSAGE_INITIALIZATION init,
diff --git a/dlls/webservices/webservices.spec b/dlls/webservices/webservices.spec
index 30c97e3473..adad68dbdd 100644
--- a/dlls/webservices/webservices.spec
+++ b/dlls/webservices/webservices.spec
@@ -43,7 +43,7 @@
@ stub WsEndReaderCanonicalization
@ stub WsEndWriterCanonicalization
@ stdcall WsFileTimeToDateTime(ptr ptr ptr)
-@ stub WsFillBody
+@ stdcall WsFillBody(ptr long ptr ptr)
@ stdcall WsFillReader(ptr long ptr ptr)
@ stdcall WsFindAttribute(ptr ptr ptr long ptr ptr)
@ stub WsFlushBody
diff --git a/include/webservices.h b/include/webservices.h
index 6cafcc63d6..69e3c8a276 100644
--- a/include/webservices.h
+++ b/include/webservices.h
@@ -1622,6 +1622,7 @@ HRESULT WINAPI WsDateTimeToFileTime(const WS_DATETIME*, FILETIME*, WS_ERROR*);
HRESULT WINAPI WsDecodeUrl(const WS_STRING*, ULONG, WS_HEAP*, WS_URL**, WS_ERROR*);
HRESULT WINAPI WsEncodeUrl(const WS_URL*, ULONG, WS_HEAP*, WS_STRING*, WS_ERROR*);
HRESULT WINAPI WsFileTimeToDateTime(const FILETIME*, WS_DATETIME*, WS_ERROR*);
+HRESULT WINAPI WsFillBody(WS_MESSAGE*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
HRESULT WINAPI WsFillReader(WS_XML_READER*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);
HRESULT WINAPI WsFindAttribute(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL,
ULONG*, WS_ERROR*);
--
2.11.0
1
0
Add a #ifdef to deal with NetBSD specific debug register structure.
Debug register structure on NetBSD for x86 (/usr/include/<arch>/reg.h) is:
struct dbreg {
int dr[<nb>];
}
with nb=8 on i386 and nb=16 on amd64.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46229
Signed-off-by: Frédéric Fauberteau <triaxx(a)NetBSD.org>
---
server/ptrace.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/server/ptrace.c b/server/ptrace.c
index 4eda8ebec3..808328ecbc 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -720,6 +720,13 @@ void get_thread_context( struct thread *thread, context_t *context, unsigned int
context->debug.i386_regs.dr3 = DBREG_DRX((&dbregs), 3);
context->debug.i386_regs.dr6 = DBREG_DRX((&dbregs), 6);
context->debug.i386_regs.dr7 = DBREG_DRX((&dbregs), 7);
+#elif defined(__NetBSD__)
+ context->debug.i386_regs.dr0 = dbregs.dr[0];
+ context->debug.i386_regs.dr1 = dbregs.dr[1];
+ context->debug.i386_regs.dr2 = dbregs.dr[2];
+ context->debug.i386_regs.dr3 = dbregs.dr[3];
+ context->debug.i386_regs.dr6 = dbregs.dr[6];
+ context->debug.i386_regs.dr7 = dbregs.dr[7];
#else
context->debug.i386_regs.dr0 = dbregs.dr0;
context->debug.i386_regs.dr1 = dbregs.dr1;
@@ -754,6 +761,15 @@ void set_thread_context( struct thread *thread, const context_t *context, unsign
DBREG_DRX((&dbregs), 5) = 0;
DBREG_DRX((&dbregs), 6) = context->debug.i386_regs.dr6;
DBREG_DRX((&dbregs), 7) = context->debug.i386_regs.dr7;
+#elif defined(__NetBSD__)
+ dbregs.dr[0] = context->debug.i386_regs.dr0;
+ dbregs.dr[1] = context->debug.i386_regs.dr1;
+ dbregs.dr[2] = context->debug.i386_regs.dr2;
+ dbregs.dr[3] = context->debug.i386_regs.dr3;
+ dbregs.dr[4] = 0;
+ dbregs.dr[5] = 0;
+ dbregs.dr[6] = context->debug.i386_regs.dr6;
+ dbregs.dr[7] = context->debug.i386_regs.dr7;
#else
dbregs.dr0 = context->debug.i386_regs.dr0;
dbregs.dr1 = context->debug.i386_regs.dr1;
--
2.19.2
1
0
[PATCH v6 1/7] comctl32/listbox: Check for out of bounds index using an unsigned index
by Gabriel Ivăncescu Dec. 4, 2018
by Gabriel Ivăncescu Dec. 4, 2018
Dec. 4, 2018
Needed for LBS_NODATA.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/comctl32/listbox.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c
index cb645b4..71f1c05 100644
--- a/dlls/comctl32/listbox.c
+++ b/dlls/comctl32/listbox.c
@@ -489,7 +489,7 @@ static INT LISTBOX_GetItemFromPoint( const LB_DESCR *descr, INT x, INT y )
* Paint an item.
*/
static void LISTBOX_PaintItem( LB_DESCR *descr, HDC hdc, const RECT *rect,
- INT index, UINT action, BOOL ignoreFocus )
+ UINT index, UINT action, BOOL ignoreFocus )
{
BOOL selected = FALSE, focused;
LB_ITEMDATA *item = NULL;
@@ -508,7 +508,7 @@ static void LISTBOX_PaintItem( LB_DESCR *descr, HDC hdc, const RECT *rect,
RECT r;
HRGN hrgn;
- if (!item)
+ if (index >= descr->nb_items)
{
if (action == ODA_FOCUS)
DrawFocusRect( hdc, rect );
--
2.19.1
2
8
From: Michael Müller <michael(a)fds-team.de>
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44897
Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com>
---
Patch from Wine Staging with minor changes.
https://raw.githubusercontent.com/wine-staging/wine-staging/master/patches/…
---
dlls/ntdll/ntdll.spec | 1 +
dlls/ntdll/rtl.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 3741eb9397..c2e2fb1c66 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -681,6 +681,7 @@
# @ stub RtlGetSetBootStatusData
@ stdcall RtlGetThreadErrorMode()
@ stdcall RtlGetUnloadEventTrace()
+@ stdcall RtlGetUnloadEventTraceEx(ptr ptr ptr)
@ stub RtlGetUserInfoHeap
@ stdcall RtlGetVersion(ptr)
@ stdcall -arch=arm,arm64,x86_64 RtlGrowFunctionTable(ptr long)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index e80aa5e324..393bd27b1a 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -1679,6 +1679,20 @@ RTL_UNLOAD_EVENT_TRACE * WINAPI RtlGetUnloadEventTrace(void)
return NULL;
}
+/*********************************************************************
+ * RtlGetUnloadEventTraceEx [NTDLL.@]
+ */
+void WINAPI RtlGetUnloadEventTraceEx(ULONG **size, ULONG **count, void **trace)
+{
+ static ULONG dummy_size, dummy_count;
+
+ FIXME("(%p, %p, %p): stub!\n", size, count, trace);
+
+ if (size) *size = &dummy_size;
+ if (count) *count = &dummy_count;
+ if (trace) *trace = NULL;
+}
+
/*********************************************************************
* RtlQueryPackageIdentity [NTDLL.@]
*/
--
2.19.2
1
0
Dec. 4, 2018
Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com>
---
v2: Keep using lstrlenW for the URL itself
---
dlls/ieframe/intshcut.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/dlls/ieframe/intshcut.c b/dlls/ieframe/intshcut.c
index 4331bb9b0a..8bf8ae8702 100644
--- a/dlls/ieframe/intshcut.c
+++ b/dlls/ieframe/intshcut.c
@@ -456,11 +456,11 @@ static HRESULT get_profile_string(LPCWSTR lpAppName, LPCWSTR lpKeyName,
static HRESULT WINAPI PersistFile_Load(IPersistFile *pFile, LPCOLESTR pszFileName, DWORD dwMode)
{
+ static const WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0};
+ static const WCHAR str_URL[] = {'U','R','L',0};
+ static const WCHAR str_iconfile[] = {'i','c','o','n','f','i','l','e',0};
+ static const WCHAR str_iconindex[] = {'i','c','o','n','i','n','d','e','x',0};
InternetShortcut *This = impl_from_IPersistFile(pFile);
- static WCHAR str_header[] = {'I','n','t','e','r','n','e','t','S','h','o','r','t','c','u','t',0};
- static WCHAR str_URL[] = {'U','R','L',0};
- static WCHAR str_iconfile[] = {'i','c','o','n','f','i','l','e',0};
- static WCHAR str_iconindex[] = {'i','c','o','n','i','n','d','e','x',0};
WCHAR *filename = NULL;
WCHAR *url;
HRESULT hr;
@@ -573,12 +573,12 @@ static HRESULT WINAPI PersistFile_Save(IPersistFile *pFile, LPCOLESTR pszFileNam
file = CreateFileW(pszFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (file != INVALID_HANDLE_VALUE)
{
+ static const char str_header[] = "[InternetShortcut]";
+ static const char str_URL[] = "URL=";
+ static const char str_ICONFILE[] = "ICONFILE=";
+ static const char str_eol[] = "\r\n";
DWORD bytesWritten;
char *iconfile;
- char str_header[] = "[InternetShortcut]";
- char str_URL[] = "URL=";
- char str_ICONFILE[] = "ICONFILE=";
- char str_eol[] = "\r\n";
IPropertyStorage *pPropStgRead;
PROPSPEC ps[2];
PROPVARIANT pvread[2];
@@ -587,11 +587,11 @@ static HRESULT WINAPI PersistFile_Save(IPersistFile *pFile, LPCOLESTR pszFileNam
ps[1].ulKind = PRSPEC_PROPID;
ps[1].u.propid = PID_IS_ICONINDEX;
- WriteFile(file, str_header, lstrlenA(str_header), &bytesWritten, NULL);
- WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL);
- WriteFile(file, str_URL, lstrlenA(str_URL), &bytesWritten, NULL);
+ WriteFile(file, str_header, ARRAY_SIZE(str_header) - 1, &bytesWritten, NULL);
+ WriteFile(file, str_eol, ARRAY_SIZE(str_eol) - 1, &bytesWritten, NULL);
+ WriteFile(file, str_URL, ARRAY_SIZE(str_URL) - 1, &bytesWritten, NULL);
WriteFile(file, url, lstrlenA(url), &bytesWritten, NULL);
- WriteFile(file, str_eol, lstrlenA(str_eol), &bytesWritten, NULL);
+ WriteFile(file, str_eol, ARRAY_SIZE(str_eol) - 1, &bytesWritten, NULL);
hr = IPropertySetStorage_Open(This->property_set_storage, &FMTID_Intshcut, STGM_READ|STGM_SHARE_EXCLUSIVE, &pPropStgRead);
if (SUCCEEDED(hr))
--
2.19.2
1
0