Re: patch for Czech (cz) console keyboard

Jiri Navratil <[email protected]> Tue, 28 Jul 2026 18:10:23 +0200
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
--jK3+96aUgr9ta5BS
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi Crystal,

Thank you a lot for the review. I'm enclosing adjusted
add-cz-console-keyboard-v2.patch

Index: sys/dev/wscons/wsksymdef.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/sys/dev/wscons/wsksymdef.h,v
diff -u -p -u -p -r1.43 wsksymdef.h
--- sys/dev/wscons/wsksymdef.h	9 Nov 2025 16:21:56 -0000	1.43
+++ sys/dev/wscons/wsksymdef.h	28 Jul 2026 15:40:36 -0000
@@ -376,6 +376,7 @@
 #define KS_L2_Nacute		0x0143
 #define KS_L2_nacute		0x0144
 #define KS_L2_Ncaron		0x0147
+#define KS_L2_ncaron		0x0148
 #define KS_L2_Odoubleacute	0x0150
 #define KS_L2_odoubleacute	0x0151
 #define KS_L2_Racute		0x0154
@@ -741,6 +742,7 @@
 #define KB_LV			0x1b00
 #define KB_IS			0x1c00
 #define KB_EE			0x1d00
+#define KB_CZ			0x1e00
=20
 #define KB_NODEAD		0x00000001 /* disable dead accents */
 #define KB_DECLK		0x00000002 /* DEC LKnnn layout */
@@ -782,7 +784,8 @@
 	{ KB_CF,	"cf" }, \
 	{ KB_LV,	"lv" }, \
 	{ KB_IS,	"is" }, \
-	{ KB_EE,	"ee" }
+	{ KB_EE,	"ee" }, \
+	{ KB_CZ,	"cz" }
=20
 #define KB_VARTAB \
 	{ KB_NODEAD,	"nodead" }, \
Index: sys/dev/pckbc/wskbdmap_mfii.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/sys/dev/pckbc/wskbdmap_mfii.c,v
diff -u -p -u -p -r1.49 wskbdmap_mfii.c
--- sys/dev/pckbc/wskbdmap_mfii.c	9 Nov 2025 16:21:56 -0000	1.49
+++ sys/dev/pckbc/wskbdmap_mfii.c	28 Jul 2026 15:40:36 -0000
@@ -1110,6 +1110,57 @@ static const keysym_t pckbd_keydesc_ee_n
     KC(41),  KS_L2_caron,	KS_asciitilde,
 };
=20
+static const keysym_t pckbd_keydesc_cz[] =3D {
+/*  pos      normal		shifted		altgr */
+    KC(41),  KS_semicolon,	KS_dead_abovering, KS_grave,
+    KC(2),   KS_plus,		KS_1,		KS_exclam,
+    KC(3),   KS_L2_ecaron,	KS_2,		KS_at,
+    KC(4),   KS_L2_scaron,	KS_3,		KS_numbersign,
+    KC(5),   KS_L2_ccaron,	KS_4,		KS_dollar,
+    KC(6),   KS_L2_rcaron,	KS_5,		KS_percent,
+    KC(7),   KS_L2_zcaron,	KS_6,		KS_asciicircum,
+    KC(8),   KS_yacute,	KS_7,		KS_ampersand,
+    KC(9),   KS_aacute,	KS_8,		KS_asterisk,
+    KC(10),  KS_iacute,	KS_9,		KS_braceleft,
+    KC(11),  KS_eacute,	KS_0,		KS_braceright,
+    KC(12),  KS_equal,		KS_percent,	KS_backslash,
+    KC(13),  KS_dead_acute,	KS_dead_caron,	KS_dead_diaeresis,
+    KC(16),  KS_q,		KS_Q,		KS_backslash,
+    KC(17),  KS_w,		KS_W,		KS_bar,
+    KC(18),  KS_e,		KS_E,		KS_currency,
+    KC(19),  KS_r,		KS_R,
+    KC(20),  KS_t,		KS_T,
+    KC(21),  KS_z,		KS_Z,
+    KC(22),  KS_u,		KS_U,
+    KC(23),  KS_i,		KS_I,
+    KC(24),  KS_o,		KS_O,
+    KC(25),  KS_p,		KS_P,
+    KC(26),  KS_uacute,	KS_slash,	KS_bracketleft,
+    KC(27),  KS_parenright,	KS_parenleft,	KS_bracketright,
+    KC(30),  KS_a,		KS_A,		KS_asciitilde,
+    KC(31),  KS_s,		KS_S,		KS_L2_dstroke,
+    KC(32),  KS_d,		KS_D,		KS_L2_Dstroke,
+    KC(33),  KS_f,		KS_F,		KS_bracketleft,
+    KC(34),  KS_g,		KS_G,		KS_bracketright,
+    KC(35),  KS_h,		KS_H,		KS_grave,
+    KC(36),  KS_j,		KS_J,		KS_apostrophe,
+    KC(37),  KS_k,		KS_K,		KS_L2_lstroke,
+    KC(38),  KS_l,		KS_L,		KS_L2_Lstroke,
+    KC(39),  KS_L2_uring,	KS_quotedbl,	KS_dollar,
+    KC(40),  KS_section,	KS_exclam,	KS_apostrophe,
+    KC(44),  KS_y,		KS_Y,		KS_degree,
+    KC(45),  KS_x,		KS_X,		KS_numbersign,
+    KC(46),  KS_c,		KS_C,		KS_ampersand,
+    KC(47),  KS_v,		KS_V,		KS_at,
+    KC(48),  KS_b,		KS_B,		KS_braceleft,
+    KC(49),  KS_n,		KS_N,		KS_braceright,
+    KC(50),  KS_m,		KS_M,		KS_asciicircum,
+    KC(51),  KS_comma,		KS_question,	KS_less,
+    KC(52),  KS_period,	KS_colon,	KS_greater,
+    KC(53),  KS_minus,		KS_underscore,	KS_asterisk,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
 #endif	/* WSKBD_NO_INTL_LAYOUTS */
=20
 #define KBD_MAP(name, base, map) \
@@ -1171,6 +1222,7 @@ const struct wscons_keydesc pckbd_keydes
 	KBD_MAP(KB_IS | KB_NODEAD,	KB_IS, 	pckbd_keydesc_is_nodead),
 	KBD_MAP(KB_EE,			KB_US,	pckbd_keydesc_ee),
 	KBD_MAP(KB_EE | KB_NODEAD,	KB_EE,	pckbd_keydesc_ee_nodead),
+	KBD_MAP(KB_CZ,			KB_US,	pckbd_keydesc_cz),
 #endif	/* WSKBD_NO_INTL_LAYOUTS */
 	{0, 0, 0, 0}
 };
Index: sys/dev/wscons/wskbdutil.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/sys/dev/wscons/wskbdutil.c,v
diff -u -p -u -p -r1.19 wskbdutil.c
--- sys/dev/wscons/wskbdutil.c	30 Dec 2021 06:55:11 -0000	1.19
+++ sys/dev/wscons/wskbdutil.c	28 Jul 2026 15:40:36 -0000
@@ -174,7 +174,21 @@ static struct compose_tab_s {
 	{ { KS_dead_caron,		KS_S },			KS_L2_Scaron },
 	{ { KS_dead_caron,		KS_Z },			KS_L2_Zcaron },
 	{ { KS_dead_caron,		KS_s },			KS_L2_scaron },
-	{ { KS_dead_caron,		KS_z },			KS_L2_zcaron }
+	{ { KS_dead_caron,		KS_z },			KS_L2_zcaron },
+	{ { KS_dead_caron,		KS_C },			KS_L2_Ccaron },
+	{ { KS_dead_caron,		KS_c },			KS_L2_ccaron },
+	{ { KS_dead_caron,		KS_D },			KS_L2_Dcaron },
+	{ { KS_dead_caron,		KS_d },			KS_L2_dcaron },
+	{ { KS_dead_caron,		KS_E },			KS_L2_Ecaron },
+	{ { KS_dead_caron,		KS_e },			KS_L2_ecaron },
+	{ { KS_dead_caron,		KS_N },			KS_L2_Ncaron },
+	{ { KS_dead_caron,		KS_n },			KS_L2_ncaron },
+	{ { KS_dead_caron,		KS_R },			KS_L2_Rcaron },
+	{ { KS_dead_caron,		KS_r },			KS_L2_rcaron },
+	{ { KS_dead_caron,		KS_T },			KS_L2_Tcaron },
+	{ { KS_dead_caron,		KS_t },			KS_L2_tcaron },
+	{ { KS_dead_abovering,		KS_U },			KS_L2_Uring },
+	{ { KS_dead_abovering,		KS_u },			KS_L2_uring }
 };
=20
 #define COMPOSE_SIZE	nitems(compose_tab)
Index: sys/dev/wscons/wsemul_subr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/sys/dev/wscons/wsemul_subr.c,v
diff -u -p -u -p -r1.2 wsemul_subr.c
--- sys/dev/wscons/wsemul_subr.c	6 Mar 2023 17:14:44 -0000	1.2
+++ sys/dev/wscons/wsemul_subr.c	28 Jul 2026 15:40:36 -0000
@@ -613,6 +613,7 @@ wsemul_local_translate(u_int32_t unisym,
 			break;
 		case KB_PL:
 		case KB_SI:
+		case KB_CZ:
 			if (unisym < 0x100 + nitems(unicode_to_latin2) &&
 			    unicode_to_latin2[unisym - 0x100] !=3D 0)
 				unisym =3D unicode_to_latin2[unisym - 0x100];
@@ -624,6 +625,7 @@ wsemul_local_translate(u_int32_t unisym,
 		switch (KB_ENCODING(layout)) {
 		case KB_PL:
 		case KB_SI:
+		case KB_CZ:
 			switch (unisym) {
 			case KS_L2_caron:
 				unisym =3D 0xb7;
Index: share/man/man4/wskbd.4
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/share/man/man4/wskbd.4,v
diff -u -p -u -p -r1.25 wskbd.4
--- share/man/man4/wskbd.4	16 Aug 2025 11:28:25 -0000	1.25
+++ share/man/man4/wskbd.4	28 Jul 2026 15:40:35 -0000
@@ -146,6 +146,7 @@ and
 .It Li br Ta Dv KB_BR Ta Brazilian with
 .Dq dead accents
 .It Li cf Ta Dv KB_CF Ta Canadian French
+.It Li cz Ta Dv KB_CZ Ta Czech
 .It Li dk Ta Dv KB_DK Ta Danish with
 .Dq dead accents
 .It Li nl Ta Dv KB_NL Ta Dutch
Index: share/man/man4/pckbd.4
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/share/man/man4/pckbd.4,v
diff -u -p -u -p -r1.42 pckbd.4
--- share/man/man4/pckbd.4	1 May 2021 16:11:09 -0000	1.42
+++ share/man/man4/pckbd.4	28 Jul 2026 15:40:34 -0000
@@ -69,6 +69,9 @@ Brazilian.
 .It KB_CF
 .Pq cf
 Canadian French.
+.It KB_CZ
+.Pq cz
+Czech.
 .It KB_DE
 .Pq de
 German with
Index: share/man/man4/ukbd.4
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/share/man/man4/ukbd.4,v
diff -u -p -u -p -r1.22 ukbd.4
--- share/man/man4/ukbd.4	11 May 2019 14:19:16 -0000	1.22
+++ share/man/man4/ukbd.4	28 Jul 2026 15:40:35 -0000
@@ -96,6 +96,9 @@ Brazilian.
 .It KB_CF
 .Pq cf
 Canadian French.
+.It KB_CZ
+.Pq cz
+Czech.
 .It KB_DE
 .Pq de
 German with


--=20
Jiri Navratil, https://www.navratil.cz, +420 777 224 245

--jK3+96aUgr9ta5BS
Content-Type: application/x-pkcs7-signature
Content-Disposition: attachment; filename=smime.p7s
Content-Transfer-Encoding: base64

MIIUoAYJKoZIhvcNAQcCoIIUkTCCFI0CAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0B
BwGgghDhMIIHsDCCBZigAwIBAgICEBEwDQYJKoZIhvcNAQENBQAwZTELMAkGA1UEBhMCQ1ox
FzAVBgNVBGETDk5UUkNaLTQ3MTE0OTgzMR0wGwYDVQQKDBTEjGVza8OhIHBvxaF0YSwgcy5w
LjEeMBwGA1UEAxMVUG9zdFNpZ251bSBSb290IFFDQSA0MB4XDTE4MDkyNzA3MzkyM1oXDTMz
MDkyNzA3MzkyM1owaTELMAkGA1UEBhMCQ1oxFzAVBgNVBGETDk5UUkNaLTQ3MTE0OTgzMR0w
GwYDVQQKDBTEjGVza8OhIHBvxaF0YSwgcy5wLjEiMCAGA1UEAxMZUG9zdFNpZ251bSBRdWFs
aWZpZWQgQ0EgNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALn4cm0aMs92PJ1i
wAnlTVIu2WBzRcPSHgU0C7O3+uxKlKVXpRVOlvo3jiQUPh72sF14DZ0EaeSDihdPf2BSOgPP
2O/VNKJ1wqbRW0Rj6KBhnRGzs0i5ASgw3OQGaBgstnI7lFx41r3jKgtV2ka7VwhuHlYnoITD
Q9Ss26lgoANS/y2PACXZB/ojdi6u7v2GEgXTLgwvhO2L7Xy427QD/VsvXsyH/swz/tpqC/Wd
Ref/Rden0xGbky6qNYL70eBfqgvrGVFEodFGa543oDunEFg6SVv4L+kdlxqeoSZ6j9iQamhO
qgYe1gM9vkhGlA/1QXLQ8xhpDQP8OMVofxhxnWlJwMLzxadsW7xOmaJJnbPok0b5RmKQ+Mw2
+OMwF7sm6zZTEzGGb66dHh5Z37a2F+8/CuPNJLA6Lpjsn+9mLmZaOi8XVYmsgbAkGqIDo3fn
EBYgLUpycUVHSC+pRK1v5IOBXwIXGVTLjw3SP6CfQw+2HJZyJscUwAxQL7acA6mJna5mkk0n
h15InSou5F+9HKypm7p3iY6S+7r1XIyBZASRZqJen5DnKQXe9I5p6BXVebAsw+Ja8HAXMVR3
rdDj6iDUknzMztfvE8kymZ6DBZ2XFqDJuHudRDtyIaMpsnD3ddyO6hr9+WA/0iO86HWbiwU/
yFJkFbjcB94+reDWRLSVAgMBAAGjggJkMIICYDCB1QYDVR0gBIHNMIHKMIHHBgRVHSAAMIG+
MIG7BggrBgEFBQcCAjCBrhqBq1RlbnRvIGNlcnRpZmlrYXQgcHJvIGVsZWt0cm9uaWNrb3Ug
cGVjZXQgYnlsIHZ5ZGFuIHYgc291bGFkdSBzIG5hcml6ZW5pbSBFVSBjLiA5MTAvMjAxNC5U
aGlzIGlzIGEgY2VydGlmaWNhdGUgZm9yIGVsZWN0cm9uaWMgc2VhbCBhY2NvcmRpbmcgdG8g
UmVndWxhdGlvbiAoRVUpIE5vIDkxMC8yMDE0LjASBgNVHRMBAf8ECDAGAQH/AgEAMHoGCCsG
AQUFBwEBBG4wbDA3BggrBgEFBQcwAoYraHR0cDovL2NydC5wb3N0c2lnbnVtLmN6L2NydC9w
c3Jvb3RxY2E0LmNydDAxBggrBgEFBQcwAYYlaHR0cDovL29jc3AucG9zdHNpZ251bS5jei9P
Q1NQL1JRQ0E0LzAOBgNVHQ8BAf8EBAMCAQYwHwYDVR0jBBgwFoAUkxg2H6lpcFE1qk8/rI1Q
fiYFKQowgaUGA1UdHwSBnTCBmjAxoC+gLYYraHR0cDovL2NybC5wb3N0c2lnbnVtLmN6L2Ny
bC9wc3Jvb3RxY2E0LmNybDAyoDCgLoYsaHR0cDovL2NybDIucG9zdHNpZ251bS5jei9jcmwv
cHNyb290cWNhNC5jcmwwMaAvoC2GK2h0dHA6Ly9jcmwucG9zdHNpZ251bS5ldS9jcmwvcHNy
b290cWNhNC5jcmwwHQYDVR0OBBYEFA8ofD42ADgQUK49uCGXi/dgXGF4MA0GCSqGSIb3DQEB
DQUAA4ICAQAbhhYsYpF0Fzj3iisDvJa2cWrwl846MIlgQ5sgc6b4nStKcomDZ6mmCidpPffy
19JfJ/ExdLe1zNEw82Tdrje6WDww6C7Xt6DoCE+tMsrwJSg0W9irFrQDImySUQQhlFJsoAfA
8PJsrHxNPkzKSWtFht+SKlSoLD+2eGUt68FNJtU03BPm+a2eTX5+aPKmaM+4u6th95ac0shl
wW2T197xuVmv6Wd6pVA0vWzS7WXTGbu+zFotfYoGex6uF6f/DhP8xSRD2O3MVvlo/g3bQmUb
IbdHutN8NhcRRXn3r3oYnBWAX+oOPE81Mbq0bwfteSDJzWczRV7ROdNqMm9jxq3DspHoVtXw
Dj1R4H0DRcYscg9kuvC74vyHyretV++pSATrd0Z4JTB73iMVxozCKancH+vbpWzgDLnrZj0P
ILb8vOFOkzBkyUaMnnyQb9q6kJvdWQ4KCzALNYK1Izjo6GXXlY77rXSQ//s0ez9M3RjWfzZ/
bEZTprsHZVNWf7na73KPT7Sk/KjeX0H6WGPcGJ3rm0T1OCwsIsfBZ6ocSnEe5rW1VXRI6wwo
w/rRFG9u0R0pJU8kF1FKtRDWtBaZTDbOJZ3oOcDK2iKuURxt4qgKhPU4eRPrPicqAGQeeKfs
vKc3YJRHV2P/PrK/FT1I8Las5ktxIKxqp24jdYmHgHdaNDCCCSkwggcRoAMCAQICBAFt9s0w
DQYJKoZIhvcNAQELBQAwaTELMAkGA1UEBhMCQ1oxFzAVBgNVBGETDk5UUkNaLTQ3MTE0OTgz
MR0wGwYDVQQKDBTEjGVza8OhIHBvxaF0YSwgcy5wLjEiMCAGA1UEAxMZUG9zdFNpZ251bSBR
dWFsaWZpZWQgQ0EgNDAeFw0yNTA4MjgwNjA4MDFaFw0yODA5MTYwNjA4MDFaMGQxCzAJBgNV
BAYTAkNaMR4wHAYDVQQDDBVJbmcuIEppxZnDrSBOYXZyw6F0aWwxEjAQBgNVBAQMCU5hdnLD
oXRpbDEPMA0GA1UEKgwGSmnFmcOtMRAwDgYDVQQFEwdQMzAwNDExMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEA5afPyHnQKGWXbnYaMhdLanQtUcttKVBJ+VuAJC4+kceFNd61
IiKlFpEe1zh89OUSs9+0LDC7LuN8qqHM3qm4Qd8eRnm7N5M3QSuIxVthHcQUvY2vVXSbfTGT
bPXBJU99wmrXr0R69VwBYs82QFigLs2RW4dRpNc51F9sgFbK2lhZsuvm0Ar2ZZ0673oEQboY
Qr631rcKIMlQAhdwQTor9at6kjd4rawU1u7FxKPnLhFr/I+eIewz5Z7NoL35WbHCtzlsDdvH
T4CZ7KnOUjbTs1Y9CJ84u0zk36r2M3XFEzvIHbrPJLVQc/Zj4tj3+Bao/FGyg2CcmCA6reWa
wvtydWAOKbGMckBBJB612JedT9PVLLYE0eCeLeUd17XISNsv++kWFETQUKGBX32wvpL2ly3u
+LQnEZJheaQ8+aXCdcMSkdYiWiyEPsztGs9B8mUowxdCRb5gZZngGzGCC2zjJjgvXQp9zuR6
P/X5CLeQ17o5+xnQx9QY0myHJ8PJU0cC6kjYRQaa3EOxmJma8J42bpizy9pyVyALrH3+IcuW
QAQgibQyZC1Xu6wBTnensFmLU/NRH8BKNw+ZJFp4jmSr9oPtQYeHtcwQdqu+shnu9F3Wwh0r
vEBWVD7MhzJi/KoIoioZJkey9gdx+h9hja5C3MyU214UZbisrCjGzXjV3P8CAwEAAaOCA9ww
ggPYMFkGA1UdEQRSMFCBEGppcmlAbmF2cmF0aWwuY3qgGQYJKwYBBAHcGQIBoAwTCjE0MDc3
Nzg3MzWBEXBsYXZjaWtAZ21haWwuY29tgQ5wbGF2Y2lrQG1lLmNvbTAJBgNVHRMEAjAAMIIB
LAYDVR0gBIIBIzCCAR8wggEQBglngQYBBAERgVIwggEBMIHYBggrBgEFBQcCAjCByxqByFRl
bnRvIGt2YWxpZmlrb3ZhbnkgY2VydGlmaWthdCBwcm8gZWxla3Ryb25pY2t5IHBvZHBpcyBi
eWwgdnlkYW4gdiBzb3VsYWR1IHMgbmFyaXplbmltIEVVIGMuIDkxMC8yMDE0LlRoaXMgaXMg
YSBxdWFsaWZpZWQgY2VydGlmaWNhdGUgZm9yIGVsZWN0cm9uaWMgc2lnbmF0dXJlIGFjY29y
ZGluZyB0byBSZWd1bGF0aW9uIChFVSkgTm8gOTEwLzIwMTQuMCQGCCsGAQUFBwIBFhhodHRw
Oi8vd3d3LnBvc3RzaWdudW0uY3owCQYHBACL7EABADCBmwYIKwYBBQUHAQMEgY4wgYswCAYG
BACORgEBMGoGBgQAjkYBBTBgMC4WKGh0dHBzOi8vd3d3LnBvc3RzaWdudW0uY3ovcGRzL3Bk
c19lbi5wZGYTAmVuMC4WKGh0dHBzOi8vd3d3LnBvc3RzaWdudW0uY3ovcGRzL3Bkc19jcy5w
ZGYTAmNzMBMGBgQAjkYBBjAJBgcEAI5GAQYBMH0GCCsGAQUFBwEBBHEwbzA7BggrBgEFBQcw
AoYvaHR0cDovL2NydC5wb3N0c2lnbnVtLmN6L2NydC9wc3F1YWxpZmllZGNhNC5jcnQwMAYI
KwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBvc3RzaWdudW0uY3ovT0NTUC9RQ0E0LzAOBgNVHQ8B
Af8EBAMCBeAwHwYDVR0lBBgwFgYIKwYBBQUHAwQGCisGAQQBgjcKAwwwHwYDVR0jBBgwFoAU
Dyh8PjYAOBBQrj24IZeL92BcYXgwgbEGA1UdHwSBqTCBpjA1oDOgMYYvaHR0cDovL2NybC5w
b3N0c2lnbnVtLmN6L2NybC9wc3F1YWxpZmllZGNhNC5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwy
LnBvc3RzaWdudW0uY3ovY3JsL3BzcXVhbGlmaWVkY2E0LmNybDA1oDOgMYYvaHR0cDovL2Ny
bC5wb3N0c2lnbnVtLmV1L2NybC9wc3F1YWxpZmllZGNhNC5jcmwwHQYDVR0OBBYEFAVHg3EQ
IoAP5DPs7+O0Wvz3F6OtMA0GCSqGSIb3DQEBCwUAA4ICAQB+FYl4A7hRnmAIdkMlEMwBiLul
aLYe7aXWkuZHUdplhkbcShu4HTHd+q5TiqfFoRzFx3i23EkJf8UHUS3w4QkFyhWt/sXWmjER
sB0E0Tpq/Gs/SCDK0w+WeXZM81KUQ/PjHtF/B2dnOUC+huTBCj1Xl5DE75JpjXPjZdqpolSX
egmdgl+R9SlXjmIltehK/uHDlILwE+j6h9Vw6xfzn8fJ/7humVz9JAIMB02UZ3DsdRxpmuGn
iUyNXw6BXSaQp1OkP+Sc2/XDOZeK6gyNvm7KSIp34ei9EiBqsSMhM7eBzokxAh4Lqq5iiQiV
eY03nP51lQ9gI3diaGBUkcjTQvvSm8GEz/szzjv82DiL+D+MZbh62yCuKuTXczExFpzc9YrI
M+v7Boq77tIQJQhgxKrN8X5AnJCToy2lytoN6tYtHtiLBWOREASwqScNlbKarh/pdIhxOMrg
lBYteGPCCX3vVoYWEiuNtGTxZZv0xfO8ziGXCHba2G24aLN1jDyFfQARIks5MbvyqSANwgV+
xqZSqpoLrYq3kH67OoRVzV8vq4jH7LUD+CCCEhscy+KOhGkI6Z303OrR2VchimuF1k+BEeOq
erejwnTRFH+l8quMUSWfA+fh7DX8XtfoFEZe1o40VpGZXPGagO3ua5Jj2e1wJwC26UV9kTCM
zuDfyDFiMDGCA4MwggN/AgEBMHEwaTELMAkGA1UEBhMCQ1oxFzAVBgNVBGETDk5UUkNaLTQ3
MTE0OTgzMR0wGwYDVQQKDBTEjGVza8OhIHBvxaF0YSwgcy5wLjEiMCAGA1UEAxMZUG9zdFNp
Z251bSBRdWFsaWZpZWQgQ0EgNAIEAW32zTANBglghkgBZQMEAgEFAKCB5DAYBgkqhkiG9w0B
CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjA3MjgxNjEwMjNaMC8GCSqGSIb3
DQEJBDEiBCDmeIoVF5Z+Fdjm17ZT21gQrNENJmvdmADXIoyif0xueDB5BgkqhkiG9w0BCQ8x
bDBqMAsGCWCGSAFlAwQBKjALBglghkgBZQMEARYwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMH
MA4GCCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIB
KDANBgkqhkiG9w0BAQEFAASCAgBNbikpPvrzTIZY3XzKXqDk73DFZdzYPqVf2vTKh6pZrcqw
sVBtyKTACjeBgzHMF+R6PvKt/txuXF6hLkvqPTs6KE2sK/fZ/h3faNvMh+OLeS/YvOCuFpdJ
27bFvnIjrVIVmj8jwuIs+dALa5TMhFqURPclMqUMNbHR+S4C29Nh7dHqSmA/ViCq8Sw25Z9C
2AJ+IN6FemAiwMA6YlE8+j0Zx4eI9xQG9/gmQvGSaJP7gSxNU/xKjpf2Gwv34yc/ZTr4V6LO
sIOoLYBQPDQ10ik70IfXcemGndoTaHSny4GsedS2KZIS4VNzCfoxvdl/g0s/L9A2VPKMwiJs
aOC17rhAZF7c4YUFSRgiPuKmbWArkpgcJy6rHonOOeCJS/i+uKuFjd8QFA3TXtp59dZG4PxA
1EWUC90duipwbLASnorzgv7IFFMFyMFHR4dYmvPQDFoS8JxeB3pzHtU987ICtyUSXGk8pFmb
WOQvHp3yW1xpi8/iRZl6Z+uQ2qzC+aeVHZNPLoGqyEHlRwWGaMgp29XGYhiXonI9pPolaGwj
5nbZ7y/uT9TE0D3v0NVJrcGSDstumcf/ePKKhSkbTmS47VBQQTVViCVIlrMBhaeBmUaMYp9B
uDWs7mBJMOB0d4doysROd3QDfuufr9UcDp08gf3S3v3Nq4Jtjj24sCPNuvocog==

--jK3+96aUgr9ta5BS--