����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 13.127.148.211  /  Your IP : 216.73.216.159
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux ip-172-31-43-195 5.15.0-1083-aws #90~20.04.1-Ubuntu SMP Tue Apr 22 09:59:53 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 7.4.3-4ubuntu2.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/lib/dpkg/info/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/lib/dpkg/info/keyboard-configuration.config
#!/bin/sh

#     Copyright © 2005 Anton Zinoviev <anton@lml.bas.bg>

#     This program is free software; you can redistribute it and/or modify
#     it under the terms of the GNU General Public License as published by
#     the Free Software Foundation; either version 2 of the License, or
#     (at your option) any later version.

#     This program 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 General Public License for more details.

#     If you have not received a copy of the GNU General Public License
#     along with this program, write to the Free Software Foundation, Inc.,
#     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#                        ----------
#                         CONTENTS
#                        ----------
#
# 1. Define the auxiliary functions db_default, regex_excape,
#    regex_pattern_escape and regex_unescape.
#
# 2. Define the function all_kbdnames listing all supported keyboard
#    models, layouts and variants and a function keyboard_present
#    testing whether the computer has at least one keyboard
#
# 3. Function ask_debconf.  Ask the user to choose amongst the options
#    listed in $kbdnames.
#
# 4. Function guess_arch - detect the architecture and subarchitecture
#
# 5. Function keyboard_present - test if the computer has at least one keyboard
#
# 6. Set $locale.  Extract the strings for the chosen language in $kbdnames.
#
# 7. Compute default values for $XKBMODEL, $XKBLAYOUT, $XKBVARIANT
#    based on the architecture and the locale.
#
# 8. Overwrite (some of) the computed default values by:
#    - preseeded values (for the udeb);
#    - the value of debian-installer/keymap
#    - the contents of /etc/X11/xorg.conf
#    - the settings in the configuration files (/etc/default/...).
#    - correct some bugs of previous versions of console-setup
#
# 9. If the computer doesn't have keyboard then do not ask questions,
#    simply store the default values in the configuration file.  This
#    is in order to support headless installs in d-i.  The regular
#    packages (console-setup and console-setup-mini) should not be
#    installed on such sistems.
#
# 10. Compute default values for the Debconf questions.  For example
#     from XKBLAYOUT=us,el we obtain debconf_layout=el and from
#     XKBOPTIONS=lv3:ralt_switch we obtain debconf_altgr='Right Alt (AltGr)'
#
# 11. Ask the Debconf questions starting from STATE=1.

set -e

. /usr/share/debconf/confmodule

db_capb backup

CONFIGFILE=/etc/default/keyboard
OLDCONFIGFILE=/etc/default/console-setup

debconf_toggle=''
debconf_switch=''
debconf_altgr=''
debconf_compose=''
debconf_layout=''
debconf_variant=''
XKBMODEL=''
XKBLAYOUT=''
XKBVARIANT=''
XKBOPTIONS=''

CAPB="$RET"
detect_keyboard=false
case $CAPB in
    *plugin-detect-keyboard*)
	detect_keyboard=:
	;;
esac

if [ -f /usr/share/console-setup/keyboard-configuration.config ]; then
    is_debian_installer=yes
    is_not_debian_installer=''
else
    is_debian_installer=''
    is_not_debian_installer=yes
fi

######################################################################
#   Define auxiliary the functions db_default, regex_excape,
#   regex_pattern_escape, regex_unescape, and read_config.
######################################################################

read_config() {
    [ -r $1 ] || return 0
    . $1 || true
    # Treat missing XKBOPTIONS as empty, other vars have sane defaults:
    for var in XKBOPTIONS; do
        if ! grep "^ *${var}=" $1 >/dev/null; then
            eval ${var}=""
        fi
    done
}

which () {
    local IFS
    IFS=:
    for i in $PATH; do
	if [ -f "$i/$1" -a -x "$i/$1" ]; then
	    echo "$i/$1"
	    return 0
	fi
    done
    return 1
}

# Store default value into debconf db.  Workaround #352697.
db_default () {
    db_get keyboard-configuration/store_defaults_in_debconf_db
    if [ "$RET" = true ]; then
	db_set $1 "$2"
    fi
}

regex_escape () {
    sed \
	-e 's/[.]/%period%/g' \
	-e 's/\[/%lbracket%/g' \
	-e 's/\]/%rbracket%/g' \
	-e 's/\^/%caret%/g' \
	-e 's/\$/%dollar%/g' \
	-e 's/\\/%bslash%/g' \
	-e 's/[/]/%slash%/g' \
	-e 's/[?]/%question%/g' \
	-e 's/[+]/%plus%/g'
}

regex_pattern_escape () {
    sed \
	-e 's/[.]/%period%/g' \
	-e 's/\[/%lbracket%/g' \
	-e 's/\]/%rbracket%/g' \
	-e 's/\^/%caret%/g' \
	-e 's/\$/%dollar%/g' \
	-e 's/\\/%bslash%/g' \
	-e 's/[/]/%slash%/g' \
	-e 's/[?]/%question%/g' \
	-e 's/[+]/%plus%/g' \
	-e 's/[*]/\\*/g'
}

regex_unescape () {
    sed \
	-e 's/%period%/./g' \
	-e 's/%lbracket%/[/g' \
	-e 's/%rbracket%/]/g' \
	-e 's/%caret%/^/g' \
	-e 's/%dollar%/$/g' \
	-e 's/%bslash%/\\/g' \
	-e 's/%slash%/\//g' \
	-e 's/%question%/?/g' \
	-e 's/%plus%/+/g'
}

######################################################################
#   Define the function all_kbdnames listing all supported keyboard
#   models, layouts and variants and a function keyboard_present
#   testing whether the computer has at least one keyboard
######################################################################

all_kbdnames () {
 cat <<'EOF'
C*model*a4techKB21*A4Tech KB-21
C*model*a4techKBS8*A4Tech KBS-8
C*model*a4_rfkb23*A4Tech Wireless Desktop RFKB-23
C*model*airkey*Acer AirKey V
C*model*acer_c300*Acer C300
C*model*acer_ferrari4k*Acer Ferrari 4000
C*model*acer_laptop*Acer laptop
C*model*scorpius*Advance Scorpius KI
C*model*amiga*Amiga
C*model*apple*Apple
C*model*applealu_ansi*Apple Aluminium (ANSI)
C*model*applealu_iso*Apple Aluminium (ISO)
C*model*applealu_jis*Apple Aluminium (JIS)
C*model*apple_laptop*Apple laptop
C*model*asus_laptop*Asus laptop
C*model*ataritt*Atari TT
C*model*azonaRF2300*Azona RF2300 wireless Internet
C*model*btc5090*BTC 5090
C*model*btc5113rf*BTC 5113RF Multimedia
C*model*btc5126t*BTC 5126T
C*model*btc6301urf*BTC 6301URF
C*model*btc9000*BTC 9000
C*model*btc9000a*BTC 9000A
C*model*btc9001ah*BTC 9001AH
C*model*btc9019u*BTC 9019U
C*model*btc9116u*BTC 9116U Mini Wireless Internet and Gaming
C*model*benqx*BenQ X-Touch
C*model*benqx730*BenQ X-Touch 730
C*model*benqx800*BenQ X-Touch 800
C*model*brother*Brother Internet
C*model*cherrybunlim*Cherry B.UNLIMITED
C*model*cherryblue*Cherry Blue Line CyBo@rd
C*model*cherrybluea*Cherry Blue Line CyBo@rd (alt.)
C*model*cherrycyboard*Cherry CyBo@rd USB-Hub
C*model*cherrycmexpert*Cherry CyMotion Expert
C*model*cymotionlinux*Cherry CyMotion Master Linux
C*model*cherryblueb*Cherry CyMotion Master XPress
C*model*chicony*Chicony Internet
C*model*chicony9885*Chicony KB-9885
C*model*chicony0108*Chicony KU-0108
C*model*chicony0420*Chicony KU-0420
C*model*chromebook*Chromebook
C*model*classmate*Classmate PC
C*model*armada*Compaq Armada laptop
C*model*compaqeak8*Compaq Easy Access
C*model*compaqik13*Compaq Internet (13 keys)
C*model*compaqik18*Compaq Internet (18 keys)
C*model*compaqik7*Compaq Internet (7 keys)
C*model*presario*Compaq Presario laptop
C*model*ipaq*Compaq iPaq
C*model*creativedw7000*Creative Desktop Wireless 7000
C*model*dtk2000*DTK2000
C*model*dell*Dell
C*model*dell101*Dell 101-key PC
C*model*inspiron*Dell Inspiron 6000/8000 laptop
C*model*latitude*Dell Latitude laptop
C*model*precision_m*Dell Precision M laptop
C*model*dellm65*Dell Precision M65 laptop
C*model*dellsk8125*Dell SK-8125
C*model*dellsk8135*Dell SK-8135
C*model*dellusbmm*Dell USB Multimedia
C*model*dexxa*Dexxa Wireless Desktop
C*model*diamond*Diamond 9801/9802
C*model*SKIP*Do not configure keyboard; keep kernel keymap
C*model*ennyah_dkb1008*Ennyah DKB-1008
C*model*everex*Everex STEPnote
C*model*compalfl90*FL90
C*model*fscaa1667g*Fujitsu-Siemens Amilo laptop
C*model*pc101*Generic 101-key PC
C*model*pc102*Generic 102-key PC (intl.)
C*model*pc104*Generic 104-key PC
C*model*pc105*Generic 105-key PC (intl.)
C*model*geniuscomfy*Genius Comfy KB-12e
C*model*genius*Genius Comfy KB-16M/Multimedia KWD-910
C*model*geniuscomfy2*Genius Comfy KB-21e-Scroll
C*model*geniuskb19e*Genius KB-19e NB
C*model*geniuskkb2050hs*Genius KKB-2050HS
C*model*gyration*Gyration
C*model*hhk*Happy Hacking
C*model*macintosh_hhk*Happy Hacking for Mac
C*model*hpi6*Hewlett-Packard Internet
C*model*hpmini110*Hewlett-Packard Mini 110 laptop
C*model*hp250x*Hewlett-Packard NEC SK-2500 Multimedia
C*model*hp5xx*Hewlett-Packard Omnibook 500
C*model*hp500fa*Hewlett-Packard Omnibook 500 FA
C*model*hp6000*Hewlett-Packard Omnibook 6000/6100
C*model*hpxe3gc*Hewlett-Packard Omnibook XE3 GC
C*model*hpxe3gf*Hewlett-Packard Omnibook XE3 GF
C*model*hpxt1000*Hewlett-Packard Omnibook XT1000
C*model*hpzt11xx*Hewlett-Packard Pavilion ZT1100
C*model*hpdv5*Hewlett-Packard Pavilion dv5
C*model*hpnx9020*Hewlett-Packard nx9020
C*model*honeywell_euroboard*Honeywell Euroboard
C*model*rapidaccess*IBM Rapid Access
C*model*rapidaccess2*IBM Rapid Access II
C*model*ibm_spacesaver*IBM Space Saver
C*model*thinkpad*IBM ThinkPad 560Z/600/600E/A22E
C*model*thinkpad60*IBM ThinkPad R60/T60/R61/T61
C*model*thinkpadz60*IBM ThinkPad Z60m/Z60t/Z61m/Z61t
C*model*flexpro*Keytronic FlexPro
C*model*kinesis*Kinesis
C*model*logitech_base*Logitech
C*model*logiaccess*Logitech Access
C*model*logicd*Logitech Cordless Desktop
C*model*logicda*Logitech Cordless Desktop (alt.)
C*model*logiex110*Logitech Cordless Desktop EX110
C*model*logiclx300*Logitech Cordless Desktop LX-300
C*model*logicdn*Logitech Cordless Desktop Navigator
C*model*logicd_opt*Logitech Cordless Desktop Optical
C*model*logicdpa2*Logitech Cordless Desktop Pro (2nd alt.)
C*model*logicd_it*Logitech Cordless Desktop iTouch
C*model*logicfn*Logitech Cordless Freedom/Desktop Navigator
C*model*logitech_g15*Logitech G15 extra keys via G15daemon
C*model*logiik*Logitech Internet
C*model*logimel*Logitech Internet 350
C*model*logicink*Logitech Internet Navigator
C*model*logiultrax*Logitech Ultra-X
C*model*logiultraxc*Logitech Ultra-X Cordless Media Desktop
C*model*logidinovo*Logitech diNovo
C*model*logidinovoedge*Logitech diNovo Edge
C*model*itouch*Logitech iTouch
C*model*logiitc*Logitech iTouch Cordless Y-RB6
C*model*logiinkse*Logitech iTouch Internet Navigator SE
C*model*logiinkseusb*Logitech iTouch Internet Navigator SE USB
C*model*macbook78*MacBook/MacBook Pro
C*model*macbook79*MacBook/MacBook Pro (intl.)
C*model*macintosh*Macintosh
C*model*macintosh_old*Macintosh Old
C*model*mx1998*Memorex MX1998
C*model*mx2500*Memorex MX2500 EZ-Access
C*model*mx2750*Memorex MX2750
C*model*microsoftccurve2k*Microsoft Comfort Curve 2000
C*model*microsoftinet*Microsoft Internet
C*model*microsoftprose*Microsoft Internet Pro (Swedish)
C*model*microsoft*Microsoft Natural
C*model*microsoftelite*Microsoft Natural Elite
C*model*microsoft4000*Microsoft Natural Ergonomic 4000
C*model*microsoftprooem*Microsoft Natural Pro OEM
C*model*microsoftprousb*Microsoft Natural Pro USB/Internet Pro
C*model*microsoftpro*Microsoft Natural Pro/Internet Pro
C*model*microsoft7000*Microsoft Natural Wireless Ergonomic 7000
C*model*microsoftoffice*Microsoft Office Keyboard
C*model*microsoftsurface*Microsoft Surface
C*model*microsoftmult*Microsoft Wireless Multimedia 1.0A
C*model*sk1300*NEC SK-1300
C*model*sk2500*NEC SK-2500
C*model*sk6200*NEC SK-6200
C*model*sk7100*NEC SK-7100
C*model*omnikey101*Northgate OmniKey 101
C*model*olpc*OLPC
C*model*oretec*Ortek Multimedia/Internet MCK-800
C*model*pc98*PC-98
C*model*propeller*Propeller Voyager KTEZ-1000
C*model*qtronix*QTronix Scorpius 98N+
C*model*sven*SVEN Ergonomic 2500
C*model*sven303*SVEN Slim 303
C*model*samsung4500*Samsung SDM 4500P
C*model*samsung4510*Samsung SDM 4510P
C*model*sanwaskbkg3*Sanwa Supply SKB-KG3
C*model*silvercrest*Silvercrest Multimedia Wireless
C*model*apex300*SteelSeries Apex 300 (Apex RAW)
C*model*sun4*Sun Type 4
C*model*sun5*Sun Type 5
C*model*sun_type6_jp*Sun Type 6 (Japanese)
C*model*sun_type6_jp_usb*Sun Type 6 USB (Japanese)
C*model*sun_type6_unix_usb*Sun Type 6 USB (Unix)
C*model*sun_type6_usb*Sun Type 6/7 USB
C*model*sun_type6_euro_usb*Sun Type 6/7 USB (European)
C*model*sun_type7_usb*Sun Type 7 USB
C*model*sun_type7_euro_usb*Sun Type 7 USB (European)
C*model*sun_type7_jp_usb*Sun Type 7 USB (Japanese)/Japanese 106-key
C*model*sun_type7_unix_usb*Sun Type 7 USB (Unix)
C*model*sp_inet*Super Power Multimedia
C*model*symplon*Symplon PaceBook tablet
C*model*targa_v811*Targa Visionary 811
C*model*toshiba_s3000*Toshiba Satellite S3000
C*model*teck227*Truly Ergonomic 227
C*model*teck229*Truly Ergonomic 229
C*model*teck227*Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)
C*model*teck229*Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)
C*model*trustda*Trust Direct Access
C*model*trust_slimline*Trust Slimline
C*model*trust*Trust Wireless Classic
C*model*tm2020*TypeMatrix EZ-Reach 2020
C*model*tm2030PS2*TypeMatrix EZ-Reach 2030 PS2
C*model*tm2030USB*TypeMatrix EZ-Reach 2030 USB
C*model*tm2030USB-102*TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)
C*model*tm2030USB-106*TypeMatrix EZ-Reach 2030 USB (106:JP mode)
C*model*unitekkb1925*Unitek KB-1925
C*model*vsonku306*ViewSonic KU-306 Internet
C*model*winbook*Winbook Model XP5
C*model*yahoo*Yahoo! Internet
C*model*emachines*eMachines m6800 laptop
C*layout*af*Afghani
C*variant*af**Afghani
C*variant*af*ps*Afghani - Pashto
C*variant*af*olpc-ps*Afghani - Pashto (Afghanistan, OLPC)
C*variant*af*fa-olpc*Afghani - Persian (Afghanistan, Dari OLPC)
C*variant*af*uz*Afghani - Uzbek (Afghanistan)
C*variant*af*uz-olpc*Afghani - Uzbek (Afghanistan, OLPC)
C*layout*al*Albanian
C*variant*al**Albanian
C*variant*al*plisi*Albanian - Albanian (Plisi)
C*variant*al*veqilharxhi*Albanian - Albanian (Veqilharxhi)
C*layout*et*Amharic
C*variant*et**Amharic
C*layout*ara*Arabic
C*variant*ara**Arabic
C*variant*ara*azerty*Arabic - Arabic (AZERTY)
C*variant*ara*azerty_digits*Arabic - Arabic (AZERTY/digits)
C*variant*ara*buckwalter*Arabic - Arabic (Buckwalter)
C*variant*ara*mac*Arabic - Arabic (Macintosh)
C*variant*ara*olpc*Arabic - Arabic (OLPC)
C*variant*ara*qwerty*Arabic - Arabic (QWERTY)
C*variant*ara*digits*Arabic - Arabic (digits)
C*variant*ara*qwerty_digits*Arabic - Arabic (qwerty/digits)
C*layout*ma*Arabic (Morocco)
C*variant*ma**Arabic (Morocco)
C*variant*ma*tifinagh-alt-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh alt. phonetic)
C*variant*ma*tifinagh-alt*Arabic (Morocco) - Berber (Morocco, Tifinagh alt.)
C*variant*ma*tifinagh-extended-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh extended phonetic)
C*variant*ma*tifinagh-extended*Arabic (Morocco) - Berber (Morocco, Tifinagh extended)
C*variant*ma*tifinagh-phonetic*Arabic (Morocco) - Berber (Morocco, Tifinagh phonetic)
C*variant*ma*tifinagh*Arabic (Morocco) - Berber (Morocco, Tifinagh)
C*variant*ma*french*Arabic (Morocco) - French (Morocco)
C*layout*sy*Arabic (Syria)
C*variant*sy**Arabic (Syria)
C*variant*sy*ku_f*Arabic (Syria) - Kurdish (Syria, F)
C*variant*sy*ku_alt*Arabic (Syria) - Kurdish (Syria, Latin Alt-Q)
C*variant*sy*ku*Arabic (Syria) - Kurdish (Syria, Latin Q)
C*variant*sy*syc*Arabic (Syria) - Syriac
C*variant*sy*syc_phonetic*Arabic (Syria) - Syriac (phonetic)
C*layout*am*Armenian
C*variant*am**Armenian
C*variant*am*eastern-alt*Armenian - Armenian (alt. eastern)
C*variant*am*phonetic-alt*Armenian - Armenian (alt. phonetic)
C*variant*am*eastern*Armenian - Armenian (eastern)
C*variant*am*phonetic*Armenian - Armenian (phonetic)
C*variant*am*western*Armenian - Armenian (western)
C*layout*az*Azerbaijani
C*variant*az**Azerbaijani
C*variant*az*cyrillic*Azerbaijani - Azerbaijani (Cyrillic)
C*layout*ml*Bambara
C*variant*ml**Bambara
C*variant*ml*us-mac*Bambara - English (Mali, US, Macintosh)
C*variant*ml*us-intl*Bambara - English (Mali, US, intl.)
C*variant*ml*fr-oss*Bambara - French (Mali, alt.)
C*layout*bd*Bangla
C*variant*bd**Bangla
C*variant*bd*probhat*Bangla - Bangla (Probhat)
C*layout*by*Belarusian
C*variant*by**Belarusian
C*variant*by*latin*Belarusian - Belarusian (Latin)
C*variant*by*legacy*Belarusian - Belarusian (legacy)
C*layout*be*Belgian
C*variant*be**Belgian
C*variant*be*wang*Belgian - Belgian (Wang 724 AZERTY)
C*variant*be*iso-alternate*Belgian - Belgian (alt. ISO)
C*variant*be*oss*Belgian - Belgian (alt.)
C*variant*be*oss_latin9*Belgian - Belgian (alt., Latin-9 only)
C*variant*be*oss_sundeadkeys*Belgian - Belgian (alt., with Sun dead keys)
C*variant*be*nodeadkeys*Belgian - Belgian (no dead keys)
C*variant*be*sundeadkeys*Belgian - Belgian (with Sun dead keys)
C*layout*dz*Berber (Algeria, Latin)
C*variant*dz**Berber (Algeria, Latin)
C*variant*dz*ar*Berber (Algeria, Latin) - Arabic (Algeria)
C*variant*dz*ber*Berber (Algeria, Latin) - Berber (Algeria, Tifinagh)
C*layout*ba*Bosnian
C*variant*ba**Bosnian
C*variant*ba*unicodeus*Bosnian - Bosnian (US, with Bosnian digraphs)
C*variant*ba*us*Bosnian - Bosnian (US, with Bosnian letters)
C*variant*ba*unicode*Bosnian - Bosnian (with Bosnian digraphs)
C*variant*ba*alternatequotes*Bosnian - Bosnian (with guillemets)
C*layout*brai*Braille
C*variant*brai**Braille
C*variant*brai*left_hand_invert*Braille - Braille (left-handed inverted thumb)
C*variant*brai*left_hand*Braille - Braille (left-handed)
C*variant*brai*right_hand_invert*Braille - Braille (right-handed inverted thumb)
C*variant*brai*right_hand*Braille - Braille (right-handed)
C*layout*bg*Bulgarian
C*variant*bg**Bulgarian
C*variant*bg*bas_phonetic*Bulgarian - Bulgarian (new phonetic)
C*variant*bg*phonetic*Bulgarian - Bulgarian (traditional phonetic)
C*layout*mm*Burmese
C*variant*mm**Burmese
C*variant*mm*zawgyi*Burmese - Burmese Zawgyi
C*layout*cn*Chinese
C*variant*cn**Chinese
C*variant*cn*altgr-pinyin*Chinese - Hanyu Pinyin (altgr)
C*variant*cn*mon_trad*Chinese - Mongolian (Bichig)
C*variant*cn*mon_trad_galik*Chinese - Mongolian Galik
C*variant*cn*mon_trad_manchu*Chinese - Mongolian Manchu
C*variant*cn*mon_manchu_galik*Chinese - Mongolian Manchu Galik
C*variant*cn*mon_trad_todo*Chinese - Mongolian Todo
C*variant*cn*mon_todo_galik*Chinese - Mongolian Todo Galik
C*variant*cn*mon_trad_xibe*Chinese - Mongolian Xibe
C*variant*cn*tib*Chinese - Tibetan
C*variant*cn*tib_asciinum*Chinese - Tibetan (with ASCII numerals)
C*variant*cn*ug*Chinese - Uyghur
C*layout*hr*Croatian
C*variant*hr**Croatian
C*variant*hr*unicodeus*Croatian - Croatian (US, with Croatian digraphs)
C*variant*hr*us*Croatian - Croatian (US, with Croatian letters)
C*variant*hr*unicode*Croatian - Croatian (with Croatian digraphs)
C*variant*hr*alternatequotes*Croatian - Croatian (with guillemets)
C*layout*cz*Czech
C*variant*cz**Czech
C*variant*cz*qwerty*Czech - Czech (QWERTY)
C*variant*cz*qwerty-mac*Czech - Czech (QWERTY, Macintosh)
C*variant*cz*qwerty_bksl*Czech - Czech (QWERTY, extended backslash)
C*variant*cz*ucw*Czech - Czech (UCW, only accented letters)
C*variant*cz*dvorak-ucw*Czech - Czech (US, Dvorak, UCW support)
C*variant*cz*bksl*Czech - Czech (with <\|> key)
C*variant*cz*rus*Czech - Russian (Czech, phonetic)
C*layout*dk*Danish
C*variant*dk**Danish
C*variant*dk*dvorak*Danish - Danish (Dvorak)
C*variant*dk*mac*Danish - Danish (Macintosh)
C*variant*dk*mac_nodeadkeys*Danish - Danish (Macintosh, no dead keys)
C*variant*dk*winkeys*Danish - Danish (Win keys)
C*variant*dk*nodeadkeys*Danish - Danish (no dead keys)
C*layout*mv*Dhivehi
C*variant*mv**Dhivehi
C*layout*nl*Dutch
C*variant*nl**Dutch
C*variant*nl*mac*Dutch - Dutch (Macintosh)
C*variant*nl*std*Dutch - Dutch (standard)
C*variant*nl*sundeadkeys*Dutch - Dutch (with Sun dead keys)
C*layout*bt*Dzongkha
C*variant*bt**Dzongkha
C*layout*au*English (Australian)
C*variant*au**English (Australian)
C*layout*cm*English (Cameroon)
C*variant*cm**English (Cameroon)
C*variant*cm*azerty*English (Cameroon) - Cameroon Multilingual (AZERTY)
C*variant*cm*dvorak*English (Cameroon) - Cameroon Multilingual (Dvorak)
C*variant*cm*qwerty*English (Cameroon) - Cameroon Multilingual (QWERTY)
C*variant*cm*french*English (Cameroon) - French (Cameroon)
C*variant*cm*mmuock*English (Cameroon) - Mmuock
C*layout*gh*English (Ghana)
C*variant*gh**English (Ghana)
C*variant*gh*akan*English (Ghana) - Akan
C*variant*gh*avn*English (Ghana) - Avatime
C*variant*gh*gillbt*English (Ghana) - English (Ghana, GILLBT)
C*variant*gh*generic*English (Ghana) - English (Ghana, multilingual)
C*variant*gh*ewe*English (Ghana) - Ewe
C*variant*gh*fula*English (Ghana) - Fula
C*variant*gh*ga*English (Ghana) - Ga
C*variant*gh*hausa*English (Ghana) - Hausa (Ghana)
C*layout*ng*English (Nigeria)
C*variant*ng**English (Nigeria)
C*variant*ng*hausa*English (Nigeria) - Hausa (Nigeria)
C*variant*ng*igbo*English (Nigeria) - Igbo
C*variant*ng*yoruba*English (Nigeria) - Yoruba
C*layout*za*English (South Africa)
C*variant*za**English (South Africa)
C*layout*gb*English (UK)
C*variant*gb**English (UK)
C*variant*gb*colemak*English (UK) - English (UK, Colemak)
C*variant*gb*dvorak*English (UK) - English (UK, Dvorak)
C*variant*gb*dvorakukp*English (UK) - English (UK, Dvorak, with UK punctuation)
C*variant*gb*mac*English (UK) - English (UK, Macintosh)
C*variant*gb*extd*English (UK) - English (UK, extended, with Win keys)
C*variant*gb*mac_intl*English (UK) - English (UK, intl., Macintosh)
C*variant*gb*intl*English (UK) - English (UK, intl., with dead keys)
C*variant*gb*pl*English (UK) - Polish (British keyboard)
C*layout*us*English (US)
C*variant*us**English (US)
C*variant*us*chr*English (US) - Cherokee
C*variant*us*colemak*English (US) - English (Colemak)
C*variant*us*dvorak*English (US) - English (Dvorak)
C*variant*us*dvorak-alt-intl*English (US) - English (Dvorak, alt. intl.)
C*variant*us*dvorak-intl*English (US) - English (Dvorak, intl., with dead keys)
C*variant*us*dvorak-l*English (US) - English (Dvorak, left-handed)
C*variant*us*dvorak-r*English (US) - English (Dvorak, right-handed)
C*variant*us*mac*English (US) - English (Macintosh)
C*variant*us*norman*English (US) - English (Norman)
C*variant*us*alt-intl*English (US) - English (US, alt. intl.)
C*variant*us*euro*English (US) - English (US, euro on 5)
C*variant*us*intl*English (US) - English (US, intl., with dead keys)
C*variant*us*workman*English (US) - English (Workman)
C*variant*us*workman-intl*English (US) - English (Workman, intl., with dead keys)
C*variant*us*dvorak-classic*English (US) - English (classic Dvorak)
C*variant*us*altgr-intl*English (US) - English (intl., with AltGr dead keys)
C*variant*us*dvp*English (US) - English (programmer Dvorak)
C*variant*us*olpc2*English (US) - English (the divide/multiply keys toggle the layout)
C*variant*us*rus*English (US) - Russian (US, phonetic)
C*variant*us*hbs*English (US) - Serbo-Croatian (US)
C*layout*epo*Esperanto
C*variant*epo**Esperanto
C*variant*epo*legacy*Esperanto - Esperanto (displaced semicolon and quote, obsolete)
C*layout*ee*Estonian
C*variant*ee**Estonian
C*variant*ee*dvorak*Estonian - Estonian (Dvorak)
C*variant*ee*us*Estonian - Estonian (US, with Estonian letters)
C*variant*ee*nodeadkeys*Estonian - Estonian (no dead keys)
C*layout*fo*Faroese
C*variant*fo**Faroese
C*variant*fo*nodeadkeys*Faroese - Faroese (no dead keys)
C*layout*ph*Filipino
C*variant*ph**Filipino
C*variant*ph*capewell-dvorak-bay*Filipino - Filipino (Capewell-Dvorak, Baybayin)
C*variant*ph*capewell-dvorak*Filipino - Filipino (Capewell-Dvorak, Latin)
C*variant*ph*capewell-qwerf2k6-bay*Filipino - Filipino (Capewell-QWERF 2006, Baybayin)
C*variant*ph*capewell-qwerf2k6*Filipino - Filipino (Capewell-QWERF 2006, Latin)
C*variant*ph*colemak-bay*Filipino - Filipino (Colemak, Baybayin)
C*variant*ph*colemak*Filipino - Filipino (Colemak, Latin)
C*variant*ph*dvorak-bay*Filipino - Filipino (Dvorak, Baybayin)
C*variant*ph*dvorak*Filipino - Filipino (Dvorak, Latin)
C*variant*ph*qwerty-bay*Filipino - Filipino (QWERTY, Baybayin)
C*layout*fi*Finnish
C*variant*fi**Finnish
C*variant*fi*mac*Finnish - Finnish (Macintosh)
C*variant*fi*winkeys*Finnish - Finnish (Winkeys)
C*variant*fi*classic*Finnish - Finnish (classic)
C*variant*fi*nodeadkeys*Finnish - Finnish (classic, no dead keys)
C*variant*fi*smi*Finnish - Northern Saami (Finland)
C*layout*fr*French
C*variant*fr**French
C*variant*fr*afnor*French - French (AFNOR standardized AZERTY)
C*variant*fr*azerty*French - French (AZERTY)
C*variant*fr*bepo*French - French (Bepo, ergonomic, Dvorak way)
C*variant*fr*bepo_afnor*French - French (Bepo, ergonomic, Dvorak way, AFNOR)
C*variant*fr*bepo_latin9*French - French (Bepo, ergonomic, Dvorak way, Latin-9 only)
C*variant*fr*bre*French - French (Breton)
C*variant*fr*dvorak*French - French (Dvorak)
C*variant*fr*mac*French - French (Macintosh)
C*variant*fr*us*French - French (US, with French letters)
C*variant*fr*oss*French - French (alt.)
C*variant*fr*oss_latin9*French - French (alt., Latin-9 only)
C*variant*fr*oss_nodeadkeys*French - French (alt., no dead keys)
C*variant*fr*oss_sundeadkeys*French - French (alt., with Sun dead keys)
C*variant*fr*latin9*French - French (legacy, alt.)
C*variant*fr*latin9_nodeadkeys*French - French (legacy, alt., no dead keys)
C*variant*fr*latin9_sundeadkeys*French - French (legacy, alt., with Sun dead keys)
C*variant*fr*nodeadkeys*French - French (no dead keys)
C*variant*fr*sundeadkeys*French - French (with Sun dead keys)
C*variant*fr*geo*French - Georgian (France, AZERTY Tskapo)
C*variant*fr*oci*French - Occitan
C*layout*ca*French (Canada)
C*variant*ca**French (Canada)
C*variant*ca*multix*French (Canada) - Canadian Multilingual
C*variant*ca*multi*French (Canada) - Canadian Multilingual (1st part)
C*variant*ca*multi-2gr*French (Canada) - Canadian Multilingual (2nd part)
C*variant*ca*eng*French (Canada) - English (Canada)
C*variant*ca*fr-dvorak*French (Canada) - French (Canada, Dvorak)
C*variant*ca*fr-legacy*French (Canada) - French (Canada, legacy)
C*variant*ca*ike*French (Canada) - Inuktitut
C*layout*cd*French (Democratic Republic of the Congo)
C*variant*cd**French (Democratic Republic of the Congo)
C*layout*gn*French (Guinea)
C*variant*gn**French (Guinea)
C*layout*tg*French (Togo)
C*variant*tg**French (Togo)
C*layout*ge*Georgian
C*variant*ge**Georgian
C*variant*ge*mess*Georgian - Georgian (MESS)
C*variant*ge*ergonomic*Georgian - Georgian (ergonomic)
C*variant*ge*os*Georgian - Ossetian (Georgia)
C*variant*ge*ru*Georgian - Russian (Georgia)
C*layout*de*German
C*variant*de**German
C*variant*de*dvorak*German - German (Dvorak)
C*variant*de*mac*German - German (Macintosh)
C*variant*de*mac_nodeadkeys*German - German (Macintosh, no dead keys)
C*variant*de*neo*German - German (Neo 2)
C*variant*de*qwerty*German - German (QWERTY)
C*variant*de*T3*German - German (T3)
C*variant*de*deadacute*German - German (dead acute)
C*variant*de*deadgraveacute*German - German (dead grave acute)
C*variant*de*deadtilde*German - German (dead tilde)
C*variant*de*nodeadkeys*German - German (no dead keys)
C*variant*de*sundeadkeys*German - German (with Sun dead keys)
C*variant*de*dsb*German - Lower Sorbian
C*variant*de*dsb_qwertz*German - Lower Sorbian (QWERTZ)
C*variant*de*ro*German - Romanian (Germany)
C*variant*de*ro_nodeadkeys*German - Romanian (Germany, no dead keys)
C*variant*de*ru*German - Russian (Germany, phonetic)
C*variant*de*tr*German - Turkish (Germany)
C*layout*at*German (Austria)
C*variant*at**German (Austria)
C*variant*at*mac*German (Austria) - German (Austria, Macintosh)
C*variant*at*nodeadkeys*German (Austria) - German (Austria, no dead keys)
C*variant*at*sundeadkeys*German (Austria) - German (Austria, with Sun dead keys)
C*layout*gr*Greek
C*variant*gr**Greek
C*variant*gr*extended*Greek - Greek (extended)
C*variant*gr*nodeadkeys*Greek - Greek (no dead keys)
C*variant*gr*polytonic*Greek - Greek (polytonic)
C*variant*gr*simple*Greek - Greek (simple)
C*layout*il*Hebrew
C*variant*il**Hebrew
C*variant*il*biblical*Hebrew - Hebrew (Biblical, Tiro)
C*variant*il*lyx*Hebrew - Hebrew (lyx)
C*variant*il*phonetic*Hebrew - Hebrew (phonetic)
C*layout*hu*Hungarian
C*variant*hu**Hungarian
C*variant*hu*101_qwerty_comma_dead*Hungarian - Hungarian (101/QWERTY/comma/dead keys)
C*variant*hu*101_qwerty_comma_nodead*Hungarian - Hungarian (101/QWERTY/comma/no dead keys)
C*variant*hu*101_qwerty_dot_dead*Hungarian - Hungarian (101/QWERTY/dot/dead keys)
C*variant*hu*101_qwerty_dot_nodead*Hungarian - Hungarian (101/QWERTY/dot/no dead keys)
C*variant*hu*101_qwertz_comma_dead*Hungarian - Hungarian (101/QWERTZ/comma/dead keys)
C*variant*hu*101_qwertz_comma_nodead*Hungarian - Hungarian (101/QWERTZ/comma/no dead keys)
C*variant*hu*101_qwertz_dot_dead*Hungarian - Hungarian (101/QWERTZ/dot/dead keys)
C*variant*hu*101_qwertz_dot_nodead*Hungarian - Hungarian (101/QWERTZ/dot/no dead keys)
C*variant*hu*102_qwerty_comma_dead*Hungarian - Hungarian (102/QWERTY/comma/dead keys)
C*variant*hu*102_qwerty_comma_nodead*Hungarian - Hungarian (102/QWERTY/comma/no dead keys)
C*variant*hu*102_qwerty_dot_dead*Hungarian - Hungarian (102/QWERTY/dot/dead keys)
C*variant*hu*102_qwerty_dot_nodead*Hungarian - Hungarian (102/QWERTY/dot/no dead keys)
C*variant*hu*102_qwertz_comma_dead*Hungarian - Hungarian (102/QWERTZ/comma/dead keys)
C*variant*hu*102_qwertz_comma_nodead*Hungarian - Hungarian (102/QWERTZ/comma/no dead keys)
C*variant*hu*102_qwertz_dot_dead*Hungarian - Hungarian (102/QWERTZ/dot/dead keys)
C*variant*hu*102_qwertz_dot_nodead*Hungarian - Hungarian (102/QWERTZ/dot/no dead keys)
C*variant*hu*qwerty*Hungarian - Hungarian (QWERTY)
C*variant*hu*nodeadkeys*Hungarian - Hungarian (no dead keys)
C*variant*hu*standard*Hungarian - Hungarian (standard)
C*layout*is*Icelandic
C*variant*is**Icelandic
C*variant*is*dvorak*Icelandic - Icelandic (Dvorak)
C*variant*is*mac*Icelandic - Icelandic (Macintosh)
C*variant*is*mac_legacy*Icelandic - Icelandic (Macintosh, legacy)
C*variant*is*nodeadkeys*Icelandic - Icelandic (no dead keys)
C*variant*is*Sundeadkeys*Icelandic - Icelandic (with Sun dead keys)
C*layout*in*Indian
C*variant*in**Indian
C*variant*in*ben*Indian - Bangla (India)
C*variant*in*ben_inscript*Indian - Bangla (India, Baishakhi Inscript)
C*variant*in*ben_baishakhi*Indian - Bangla (India, Baishakhi)
C*variant*in*ben_bornona*Indian - Bangla (India, Bornona)
C*variant*in*ben_probhat*Indian - Bangla (India, Probhat)
C*variant*in*ben_gitanjali*Indian - Bangla (India, Uni Gitanjali)
C*variant*in*eng*Indian - English (India, with rupee)
C*variant*in*guj*Indian - Gujarati
C*variant*in*bolnagri*Indian - Hindi (Bolnagri)
C*variant*in*hin-kagapa*Indian - Hindi (KaGaPa phonetic)
C*variant*in*hin-wx*Indian - Hindi (Wx)
C*variant*in*kan*Indian - Kannada
C*variant*in*kan-kagapa*Indian - Kannada (KaGaPa phonetic)
C*variant*in*mal*Indian - Malayalam
C*variant*in*mal_lalitha*Indian - Malayalam (Lalitha)
C*variant*in*mal_enhanced*Indian - Malayalam (enhanced Inscript, with rupee)
C*variant*in*eeyek*Indian - Manipuri (Eeyek)
C*variant*in*mar-kagapa*Indian - Marathi (KaGaPa phonetic)
C*variant*in*olck*Indian - Ol Chiki
C*variant*in*ori*Indian - Oriya
C*variant*in*jhelum*Indian - Punjabi (Gurmukhi Jhelum)
C*variant*in*guru*Indian - Punjabi (Gurmukhi)
C*variant*in*san-kagapa*Indian - Sanskrit (KaGaPa phonetic)
C*variant*in*tam*Indian - Tamil (Inscript)
C*variant*in*tam_tamilnet_with_tam_nums*Indian - Tamil (TamilNet 99 with Tamil numerals)
C*variant*in*tam_tamilnet*Indian - Tamil (TamilNet 99)
C*variant*in*tam_tamilnet_TAB*Indian - Tamil (TamilNet 99, TAB encoding)
C*variant*in*tam_tamilnet_TSCII*Indian - Tamil (TamilNet 99, TSCII encoding)
C*variant*in*tel*Indian - Telugu
C*variant*in*tel-kagapa*Indian - Telugu (KaGaPa phonetic)
C*variant*in*tel-sarala*Indian - Telugu (Sarala)
C*variant*in*urd-winkeys*Indian - Urdu (Win keys)
C*variant*in*urd-phonetic3*Indian - Urdu (alt. phonetic)
C*variant*in*urd-phonetic*Indian - Urdu (phonetic)
C*layout*id*Indonesian (Arab Melayu, phonetic)
C*variant*id**Indonesian (Arab Melayu, phonetic)
C*variant*id*phoneticx*Indonesian (Arab Melayu, phonetic) - Indonesian (Arab Melayu, ext. phonetic)
C*layout*jv*Indonesian (Javanese)
C*variant*jv**Indonesian (Javanese)
C*layout*iq*Iraqi
C*variant*iq**Iraqi
C*variant*iq*ku_ara*Iraqi - Kurdish (Iraq, Arabic-Latin)
C*variant*iq*ku_f*Iraqi - Kurdish (Iraq, F)
C*variant*iq*ku_alt*Iraqi - Kurdish (Iraq, Latin Alt-Q)
C*variant*iq*ku*Iraqi - Kurdish (Iraq, Latin Q)
C*layout*ie*Irish
C*variant*ie**Irish
C*variant*ie*CloGaelach*Irish - CloGaelach
C*variant*ie*UnicodeExpert*Irish - Irish (UnicodeExpert)
C*variant*ie*ogam*Irish - Ogham
C*variant*ie*ogam_is434*Irish - Ogham (IS434)
C*layout*it*Italian
C*variant*it**Italian
C*variant*it*fur*Italian - Friulian (Italy)
C*variant*it*geo*Italian - Georgian (Italy)
C*variant*it*ibm*Italian - Italian (IBM 142)
C*variant*it*mac*Italian - Italian (Macintosh)
C*variant*it*us*Italian - Italian (US, with Italian letters)
C*variant*it*winkeys*Italian - Italian (Winkeys)
C*variant*it*intl*Italian - Italian (intl., with dead keys)
C*variant*it*nodeadkeys*Italian - Italian (no dead keys)
C*variant*it*scn*Italian - Sicilian
C*layout*jp*Japanese
C*variant*jp**Japanese
C*variant*jp*dvorak*Japanese - Japanese (Dvorak)
C*variant*jp*kana86*Japanese - Japanese (Kana 86)
C*variant*jp*kana*Japanese - Japanese (Kana)
C*variant*jp*mac*Japanese - Japanese (Macintosh)
C*variant*jp*OADG109A*Japanese - Japanese (OADG 109A)
C*layout*nec_vndr/jp*Japanese (PC-98)
C*variant*nec_vndr/jp**Japanese (PC-98)
C*layout*kz*Kazakh
C*variant*kz**Kazakh
C*variant*kz*latin*Kazakh - Kazakh (Latin)
C*variant*kz*ext*Kazakh - Kazakh (extended)
C*variant*kz*kazrus*Kazakh - Kazakh (with Russian)
C*variant*kz*ruskaz*Kazakh - Russian (Kazakhstan, with Kazakh)
C*layout*kh*Khmer (Cambodia)
C*variant*kh**Khmer (Cambodia)
C*layout*kr*Korean
C*variant*kr**Korean
C*variant*kr*kr104*Korean - Korean (101/104 key compatible)
C*layout*kg*Kyrgyz
C*variant*kg**Kyrgyz
C*variant*kg*phonetic*Kyrgyz - Kyrgyz (phonetic)
C*layout*la*Lao
C*variant*la**Lao
C*variant*la*stea*Lao - Lao (STEA proposed standard layout)
C*layout*lv*Latvian
C*variant*lv**Latvian
C*variant*lv*fkey*Latvian - Latvian (F)
C*variant*lv*adapted*Latvian - Latvian (adapted)
C*variant*lv*apostrophe*Latvian - Latvian (apostrophe)
C*variant*lv*ergonomic*Latvian - Latvian (ergonomic, ŪGJRMV)
C*variant*lv*modern*Latvian - Latvian (modern)
C*variant*lv*tilde*Latvian - Latvian (tilde)
C*layout*lt*Lithuanian
C*variant*lt**Lithuanian
C*variant*lt*ibm*Lithuanian - Lithuanian (IBM LST 1205-92)
C*variant*lt*lekp*Lithuanian - Lithuanian (LEKP)
C*variant*lt*lekpa*Lithuanian - Lithuanian (LEKPa)
C*variant*lt*us*Lithuanian - Lithuanian (US, with Lithuanian letters)
C*variant*lt*std*Lithuanian - Lithuanian (standard)
C*variant*lt*sgs*Lithuanian - Samogitian
C*layout*mk*Macedonian
C*variant*mk**Macedonian
C*variant*mk*nodeadkeys*Macedonian - Macedonian (no dead keys)
C*layout*my*Malay (Jawi, Arabic Keyboard)
C*variant*my**Malay (Jawi, Arabic Keyboard)
C*variant*my*phonetic*Malay (Jawi, Arabic Keyboard) - Malay (Jawi, phonetic)
C*layout*mt*Maltese
C*variant*mt**Maltese
C*variant*mt*alt-gb*Maltese - Maltese (UK layout with AltGr overrides)
C*variant*mt*alt-us*Maltese - Maltese (US layout with AltGr overrides)
C*variant*mt*us*Maltese - Maltese (with US layout)
C*layout*mao*Maori
C*variant*mao**Maori
C*layout*md*Moldavian
C*variant*md**Moldavian
C*variant*md*gag*Moldavian - Moldavian (Gagauz)
C*layout*mn*Mongolian
C*variant*mn**Mongolian
C*layout*me*Montenegrin
C*variant*me**Montenegrin
C*variant*me*cyrillicalternatequotes*Montenegrin - Montenegrin (Cyrillic with guillemets)
C*variant*me*cyrillic*Montenegrin - Montenegrin (Cyrillic)
C*variant*me*cyrillicyz*Montenegrin - Montenegrin (Cyrillic, ZE and ZHE swapped)
C*variant*me*latinalternatequotes*Montenegrin - Montenegrin (Latin with guillemets)
C*variant*me*latinyz*Montenegrin - Montenegrin (Latin, QWERTY)
C*variant*me*latinunicode*Montenegrin - Montenegrin (Latin, Unicode)
C*variant*me*latinunicodeyz*Montenegrin - Montenegrin (Latin, Unicode, QWERTY)
C*layout*np*Nepali
C*variant*np**Nepali
C*layout*no*Norwegian
C*variant*no**Norwegian
C*variant*no*smi*Norwegian - Northern Saami (Norway)
C*variant*no*smi_nodeadkeys*Norwegian - Northern Saami (Norway, no dead keys)
C*variant*no*colemak*Norwegian - Norwegian (Colemak)
C*variant*no*dvorak*Norwegian - Norwegian (Dvorak)
C*variant*no*mac*Norwegian - Norwegian (Macintosh)
C*variant*no*mac_nodeadkeys*Norwegian - Norwegian (Macintosh, no dead keys)
C*variant*no*winkeys*Norwegian - Norwegian (Win keys)
C*variant*no*nodeadkeys*Norwegian - Norwegian (no dead keys)
C*layout*ir*Persian
C*variant*ir**Persian
C*variant*ir*ku_ara*Persian - Kurdish (Iran, Arabic-Latin)
C*variant*ir*ku_f*Persian - Kurdish (Iran, F)
C*variant*ir*ku_alt*Persian - Kurdish (Iran, Latin Alt-Q)
C*variant*ir*ku*Persian - Kurdish (Iran, Latin Q)
C*variant*ir*pes_keypad*Persian - Persian (with Persian keypad)
C*layout*pl*Polish
C*variant*pl**Polish
C*variant*pl*csb*Polish - Kashubian
C*variant*pl*dvorak*Polish - Polish (Dvorak)
C*variant*pl*dvorak_altquotes*Polish - Polish (Dvorak, with Polish quotes on key 1)
C*variant*pl*dvorak_quotes*Polish - Polish (Dvorak, with Polish quotes on quotemark key)
C*variant*pl*qwertz*Polish - Polish (QWERTZ)
C*variant*pl*legacy*Polish - Polish (legacy)
C*variant*pl*dvp*Polish - Polish (programmer Dvorak)
C*variant*pl*ru_phonetic_dvorak*Polish - Russian (Poland, phonetic Dvorak)
C*variant*pl*szl*Polish - Silesian
C*layout*pt*Portuguese
C*variant*pt**Portuguese
C*variant*pt*nativo-epo*Portuguese - Esperanto (Portugal, Nativo)
C*variant*pt*mac*Portuguese - Portuguese (Macintosh)
C*variant*pt*mac_nodeadkeys*Portuguese - Portuguese (Macintosh, no dead keys)
C*variant*pt*mac_sundeadkeys*Portuguese - Portuguese (Macintosh, with Sun dead keys)
C*variant*pt*nativo-us*Portuguese - Portuguese (Nativo for US keyboards)
C*variant*pt*nativo*Portuguese - Portuguese (Nativo)
C*variant*pt*nodeadkeys*Portuguese - Portuguese (no dead keys)
C*variant*pt*sundeadkeys*Portuguese - Portuguese (with Sun dead keys)
C*layout*br*Portuguese (Brazil)
C*variant*br**Portuguese (Brazil)
C*variant*br*nativo-epo*Portuguese (Brazil) - Esperanto (Brazil, Nativo)
C*variant*br*dvorak*Portuguese (Brazil) - Portuguese (Brazil, Dvorak)
C*variant*br*thinkpad*Portuguese (Brazil) - Portuguese (Brazil, IBM/Lenovo ThinkPad)
C*variant*br*nativo-us*Portuguese (Brazil) - Portuguese (Brazil, Nativo for US keyboards)
C*variant*br*nativo*Portuguese (Brazil) - Portuguese (Brazil, Nativo)
C*variant*br*nodeadkeys*Portuguese (Brazil) - Portuguese (Brazil, no dead keys)
C*layout*ro*Romanian
C*variant*ro**Romanian
C*variant*ro*winkeys*Romanian - Romanian (Win keys)
C*variant*ro*cedilla*Romanian - Romanian (cedilla)
C*variant*ro*std_cedilla*Romanian - Romanian (standard cedilla)
C*variant*ro*std*Romanian - Romanian (standard)
C*layout*ru*Russian
C*variant*ru**Russian
C*variant*ru*bak*Russian - Bashkirian
C*variant*ru*cv*Russian - Chuvash
C*variant*ru*cv_latin*Russian - Chuvash (Latin)
C*variant*ru*xal*Russian - Kalmyk
C*variant*ru*kom*Russian - Komi
C*variant*ru*chm*Russian - Mari
C*variant*ru*os_winkeys*Russian - Ossetian (Win keys)
C*variant*ru*os_legacy*Russian - Ossetian (legacy)
C*variant*ru*dos*Russian - Russian (DOS)
C*variant*ru*mac*Russian - Russian (Macintosh)
C*variant*ru*legacy*Russian - Russian (legacy)
C*variant*ru*phonetic_yazherty*Russian - Russian (phonetic yazherty)
C*variant*ru*phonetic*Russian - Russian (phonetic)
C*variant*ru*phonetic_azerty*Russian - Russian (phonetic, AZERTY)
C*variant*ru*phonetic_dvorak*Russian - Russian (phonetic, Dvorak)
C*variant*ru*phonetic_fr*Russian - Russian (phonetic, French)
C*variant*ru*phonetic_winkeys*Russian - Russian (phonetic, with Win keys)
C*variant*ru*typewriter*Russian - Russian (typewriter)
C*variant*ru*typewriter-legacy*Russian - Russian (typewriter, legacy)
C*variant*ru*srp*Russian - Serbian (Russia)
C*variant*ru*tt*Russian - Tatar
C*variant*ru*udm*Russian - Udmurt
C*variant*ru*sah*Russian - Yakut
C*layout*rs*Serbian
C*variant*rs**Serbian
C*variant*rs*rue*Serbian - Pannonian Rusyn
C*variant*rs*alternatequotes*Serbian - Serbian (Cyrillic with guillemets)
C*variant*rs*yz*Serbian - Serbian (Cyrillic, ZE and ZHE swapped)
C*variant*rs*latinalternatequotes*Serbian - Serbian (Latin with guillemets)
C*variant*rs*latin*Serbian - Serbian (Latin)
C*variant*rs*latinyz*Serbian - Serbian (Latin, QWERTY)
C*variant*rs*latinunicode*Serbian - Serbian (Latin, Unicode)
C*variant*rs*latinunicodeyz*Serbian - Serbian (Latin, Unicode, QWERTY)
C*layout*lk*Sinhala (phonetic)
C*variant*lk**Sinhala (phonetic)
C*variant*lk*us*Sinhala (phonetic) - Sinhala (US, with Sinhala letters)
C*variant*lk*tam_unicode*Sinhala (phonetic) - Tamil (Sri Lanka, TamilNet 99)
C*variant*lk*tam_TAB*Sinhala (phonetic) - Tamil (Sri Lanka, TamilNet 99, TAB encoding)
C*layout*sk*Slovak
C*variant*sk**Slovak
C*variant*sk*qwerty*Slovak - Slovak (QWERTY)
C*variant*sk*qwerty_bksl*Slovak - Slovak (QWERTY, extended backslash)
C*variant*sk*bksl*Slovak - Slovak (extended backslash)
C*layout*si*Slovenian
C*variant*si**Slovenian
C*variant*si*us*Slovenian - Slovenian (US, with Slovenian letters)
C*variant*si*alternatequotes*Slovenian - Slovenian (with guillemets)
C*layout*es*Spanish
C*variant*es**Spanish
C*variant*es*ast*Spanish - Asturian (Spain, with bottom-dot H and bottom-dot L)
C*variant*es*cat*Spanish - Catalan (Spain, with middle-dot L)
C*variant*es*dvorak*Spanish - Spanish (Dvorak)
C*variant*es*mac*Spanish - Spanish (Macintosh)
C*variant*es*winkeys*Spanish - Spanish (Win keys)
C*variant*es*deadtilde*Spanish - Spanish (dead tilde)
C*variant*es*nodeadkeys*Spanish - Spanish (no dead keys)
C*variant*es*sundeadkeys*Spanish - Spanish (with Sun dead keys)
C*layout*latam*Spanish (Latin American)
C*variant*latam**Spanish (Latin American)
C*variant*latam*colemak-gaming*Spanish (Latin American) - Spanish (Latin American, Colemak for gaming)
C*variant*latam*colemak*Spanish (Latin American) - Spanish (Latin American, Colemak)
C*variant*latam*dvorak*Spanish (Latin American) - Spanish (Latin American, Dvorak)
C*variant*latam*deadtilde*Spanish (Latin American) - Spanish (Latin American, dead tilde)
C*variant*latam*nodeadkeys*Spanish (Latin American) - Spanish (Latin American, no dead keys)
C*variant*latam*sundeadkeys*Spanish (Latin American) - Spanish (Latin American, with Sun dead keys)
C*layout*ke*Swahili (Kenya)
C*variant*ke**Swahili (Kenya)
C*variant*ke*kik*Swahili (Kenya) - Kikuyu
C*layout*tz*Swahili (Tanzania)
C*variant*tz**Swahili (Tanzania)
C*layout*se*Swedish
C*variant*se**Swedish
C*variant*se*smi*Swedish - Northern Saami (Sweden)
C*variant*se*rus*Swedish - Russian (Sweden, phonetic)
C*variant*se*rus_nodeadkeys*Swedish - Russian (Sweden, phonetic, no dead keys)
C*variant*se*dvorak*Swedish - Swedish (Dvorak)
C*variant*se*mac*Swedish - Swedish (Macintosh)
C*variant*se*svdvorak*Swedish - Swedish (Svdvorak)
C*variant*se*us*Swedish - Swedish (US, with Swedish letters)
C*variant*se*us_dvorak*Swedish - Swedish (based on US Intl. Dvorak)
C*variant*se*nodeadkeys*Swedish - Swedish (no dead keys)
C*variant*se*swl*Swedish - Swedish Sign Language
C*layout*ch*Switzerland
C*variant*ch**Switzerland
C*variant*ch*fr*Switzerland - French (Switzerland)
C*variant*ch*fr_mac*Switzerland - French (Switzerland, Macintosh)
C*variant*ch*fr_nodeadkeys*Switzerland - French (Switzerland, no dead keys)
C*variant*ch*fr_sundeadkeys*Switzerland - French (Switzerland, with Sun dead keys)
C*variant*ch*de_mac*Switzerland - German (Switzerland, Macintosh)
C*variant*ch*legacy*Switzerland - German (Switzerland, legacy)
C*variant*ch*de_nodeadkeys*Switzerland - German (Switzerland, no dead keys)
C*variant*ch*de_sundeadkeys*Switzerland - German (Switzerland, with Sun dead keys)
C*layout*tw*Taiwanese
C*variant*tw**Taiwanese
C*variant*tw*saisiyat*Taiwanese - Saisiyat (Taiwan)
C*variant*tw*indigenous*Taiwanese - Taiwanese (indigenous)
C*layout*tj*Tajik
C*variant*tj**Tajik
C*variant*tj*legacy*Tajik - Tajik (legacy)
C*layout*th*Thai
C*variant*th**Thai
C*variant*th*pat*Thai - Thai (Pattachote)
C*variant*th*tis*Thai - Thai (TIS-820.2538)
C*layout*bw*Tswana
C*variant*bw**Tswana
C*layout*tr*Turkish
C*variant*tr**Turkish
C*variant*tr*crh_alt*Turkish - Crimean Tatar (Turkish Alt-Q)
C*variant*tr*crh_f*Turkish - Crimean Tatar (Turkish F)
C*variant*tr*crh*Turkish - Crimean Tatar (Turkish Q)
C*variant*tr*ku_f*Turkish - Kurdish (Turkey, F)
C*variant*tr*ku_alt*Turkish - Kurdish (Turkey, Latin Alt-Q)
C*variant*tr*ku*Turkish - Kurdish (Turkey, Latin Q)
C*variant*tr*alt*Turkish - Turkish (Alt-Q)
C*variant*tr*f*Turkish - Turkish (F)
C*variant*tr*intl*Turkish - Turkish (intl., with dead keys)
C*variant*tr*sundeadkeys*Turkish - Turkish (with Sun dead keys)
C*layout*tm*Turkmen
C*variant*tm**Turkmen
C*variant*tm*alt*Turkmen - Turkmen (Alt-Q)
C*layout*ua*Ukrainian
C*variant*ua**Ukrainian
C*variant*ua*rstu_ru*Ukrainian - Russian (Ukraine, standard RSTU)
C*variant*ua*winkeys*Ukrainian - Ukrainian (Win keys)
C*variant*ua*homophonic*Ukrainian - Ukrainian (homophonic)
C*variant*ua*legacy*Ukrainian - Ukrainian (legacy)
C*variant*ua*phonetic*Ukrainian - Ukrainian (phonetic)
C*variant*ua*rstu*Ukrainian - Ukrainian (standard RSTU)
C*variant*ua*typewriter*Ukrainian - Ukrainian (typewriter)
C*layout*pk*Urdu (Pakistan)
C*variant*pk**Urdu (Pakistan)
C*variant*pk*ara*Urdu (Pakistan) - Arabic (Pakistan)
C*variant*pk*snd*Urdu (Pakistan) - Sindhi
C*variant*pk*urd-crulp*Urdu (Pakistan) - Urdu (Pakistan, CRULP)
C*variant*pk*urd-nla*Urdu (Pakistan) - Urdu (Pakistan, NLA)
C*layout*uz*Uzbek
C*variant*uz**Uzbek
C*variant*uz*latin*Uzbek - Uzbek (Latin)
C*layout*vn*Vietnamese
C*variant*vn**Vietnamese
C*variant*vn*fr*Vietnamese - Vietnamese (French, with Vietnamese letters)
C*variant*vn*us*Vietnamese - Vietnamese (US, with Vietnamese letters)
C*layout*sn*Wolof
C*variant*sn**Wolof
EOF
}

# all_kbdnames () {
#  cat <<'EOF' 
# C*model*logidinovo*Logitech diNovo Keyboard
# C*model*amiga*Amiga
# ...
# zh_TW*layout*al*阿爾巴尼亞
# zh_TW*variant*al**阿爾巴尼亞
# EOF
# }



keyboard_present () {
    local kern kbdpattern class subclass protocol

    kern=`uname -r`
    case "$kern" in
	2.0*|2.1*|2.2*|2.3*|2.4*|2.5*)
	    # can't check keyboard presence
	    return 0; 
	    ;;
    esac

    [ -d /sys/bus/usb/devices ] || return 0
    for d in /sys/bus/usb/devices/*:*; do
	[ -d "$d" ] || continue
	class=$(cat "$d/bInterfaceClass") # 03 = Human Interface Device
	subclass=$(cat "$d/bInterfaceSubClass") # 01 = Boot Interface Subclass
	protocol=$(cat "$d/bInterfaceProtocol") # 01 = Keyboard
	case "$class:$subclass:$protocol" in
	    03:01:01)
		return 0
		;;
	esac
    done

    # For Bluetooth keyboards one has to check the class of the device
    # -- it has to be 0x000540 or 0x002540.  I don't how to make the
    # required test, so instead we test (unreliably) for a string
    # bluetooth.*keyboard in /proc/bus/input/devices.

    [ -f /proc/bus/input/devices ] || return 0
    kbdpattern="AT Set \|AT Translated Set\|AT Raw Set"
    kbdpattern="$kbdpattern\|Atari Keyboard"
    kbdpattern="$kbdpattern\|Amiga Keyboard"
    kbdpattern="$kbdpattern\|HIL keyboard"
    kbdpattern="$kbdpattern\|ADB keyboard"
    kbdpattern="$kbdpattern\|Sun Type"
    kbdpattern="$kbdpattern\|bluetooth.*keyboard"
    if grep -i "$kbdpattern" /proc/bus/input/devices >/dev/null; then
	return 0
    fi

    return 1
}

# keyboard_present () {
#     if there is a keyboard; then
# 	return 0
#     else
# 	return 1
#     fi
# }

######################################################################
#    Function ask_debconf.  Ask the user to choose amongst the options
#    listed in $kbdnames.
######################################################################

ask_debconf () {
    local template priority prefix default_code default_description choices add

    # The template to ask
    template="$1"
    # The priority for the question
    priority="$2"
    # The prefix for $kbdnames
    prefix="$(echo "$3"|regex_pattern_escape)"
    # The default choice (optional)
    default_code="$(echo "$4"|regex_pattern_escape)"
    # Additional string to append to $kbdnames
    add="$(echo "$5"|regex_escape)"
    add="
$add"

    choices1=`echo "$kbdnames" | grep "^$prefix\*" | 
        sed -e "s/^$prefix\*[^\*]*\*//" -e 's/,/\\\\,/g' | sort`
    choices2=`echo "$add" | grep "^$prefix\*" | 
        sed -e "s/^$prefix\*[^\*]*\*//" -e 's/,/\\\\,/g'`
    choices=`echo "$choices1
$choices2" | sed -e 's/$/,/'`
    choices=`echo $choices | sed 's/, *$//' | regex_unescape`

    choices=`echo $choices | sed 's/,$//'`

    if echo "$choices" | grep '[^\\\\],' >/dev/null; then
	db_subst $template CHOICES "$choices"
	default_description=`echo "$kbdnames$add" |  
            grep "^$prefix\*${default_code}\*" |
            sed -e "s/^$prefix\*${default_code}\*//" |
	    regex_unescape`
	if [ -z "$default_description" ]; then
	    # For XkbVariant the empty string is usually a sensible default
	    default_description=`echo "$kbdnames$add" |  
                grep "^$prefix\*\*" |
		sed -e "s/^$prefix\*\*//" |
		regex_unescape `
	fi
	if [ -n "$default_description" ]; then
	    db_default $template "$default_description"
	elif [ -n "$default_code" ]; then
	    # A default was requested, but we couldn't resolve it to a
	    # description, so we'd better ask.
	    priority=critical
	fi
	
        db_input $priority $template || true
	db_go || return 255
	db_get $template
    else
	# There is only one choice - no need to use debconf
	[ $STATE -gt $old_state ] || return 255
	RET=$(echo "$choices"|sed 's/ *$//')
    fi

    RET=`echo "$RET" | regex_pattern_escape`
    RET=`echo "$kbdnames$add" | grep "^$prefix\*[^\*]*\*" |
             sed 's/  */ /g' |
             grep "\*$RET\$" |
             sed -e "s/^$prefix\*\([^\*]*\)\*.*/\1/" |
	     regex_unescape`
    return 0
}

######################################################################
#    Function guess_arch - detect the architecture and subarchitecture
######################################################################

# The guess arch code is taken from "console-data.conf"
# (translated from Perl to shell)

# SUBARCH	KEYMAP SET	DETECTION
# m68k/atari	atari		"Model: Atari"
# m68k/amiga	amiga		"Model: Amiga"
# m68k/mac	mac		"Model: Macintosh"
# m68k/mvme	pc		"Model: Motorola"
# m68k/bvme	pc		"Model: BVME[46]000"
# m68k/{sun,apollo,next,q40,hp300} Not supported by Debian

# ppc/apus	amiga		"machine: Amiga"
# ppc/chrp	pc,mac		"machine: CHRP"
# ppc/pmac	mac		"machine: PowerMac|[Pp]ower[Bb]ook*|Power|iMac*|PowerMac1*"
# ppc/prep	pc		"machine: PReP"
# ppc/ps3	pc		"platform: PS3"
# ppc/cell	pc		"platform: Cell"
# ppc/{bbox,mbx,ppc64,82xx,8xx} Not yet supported by Debian

# arm/*		pc		(refered to as 'arm' only)

guess_arch () {
    local arch subarch line

    if which archdetect 2>/dev/null >/dev/null; then
	archdetect
	return 0
    fi

    arch=`dpkg --print-architecture`
    
    if [ "$arch" = 'powerpc' -o "$arch" = 'm68k' ]; then
	if [ "$arch" = powerpc ]; then
	    line=`sed -n 's/^platform.*: *//p' /proc/cpuinfo`
	    if [ "$line" = PS3 ] || [ "$line" = Cell ]; then
		subarch=`echo $line|tr A-Z a-z`
	    else
		line=`sed -n 's/^machine.*: *//p' /proc/cpuinfo`
		if [ "$line" = '' ]; then
		    echo unknown
		    return 0
		fi
		subarch=`echo $line|tr A-Z a-z`
	    fi
	elif [ "$arch" = m68k ]; then
	    line=`sed -n 's/^Model.*: *//p' /proc/hardware`
	    if [ "$line" = '' ]; then
		echo unknown
		return 0
	    fi
	    subarch=`echo $line|tr A-Z a-z`
	fi
	case "$subarch" in
	    *amiga*)
		subarch=amiga
		;;
	    *chrp*)
		subarch=chrp
		;;
	    *prep*)
		subarch=prep
		;;
	    *macintosh*|*powermac*|*powerbook*|*power*|*imac*|*powermac1*)
		subarch=mac
		;;
	    *atari*)
		subarch=atari
		;;
	    *motorola*)
		subarch=mvme
		;;
	    *bvme*)
		subarch=bvme
		;;
	    *)
		subarch=`echo $subarch|sed  's/^\s*//'`
		;;
	esac
	arch="$arch/$subarch"
    fi
    echo $arch
    return 0
}

#########################################################################
# Set $locale.  Extract the strings for the chosen language in $kbdnames
#########################################################################

if which locale 2>/dev/null >/dev/null; then
    eval `locale`
fi

if [ "$LC_CTYPE"  -a "$LC_CTYPE" != C ]; then
    locale=$LC_CTYPE
elif db_get debian-installer/locale && [ "$RET" ]; then
    locale="$RET"
else
    locale=C
fi

langcountry="$locale"
if ! type locale >/dev/null 2>&1 || [ "$OVERRIDE_USE_DEBCONF_LOCALE" ]; then
    if db_get localechooser/languagelist && [ "$RET" ]; then
	lang="$RET"
	if db_get debian-installer/country && [ "$RET" ]; then
	    langcountry="${lang}_$RET"
	fi
    fi
fi

if [ "$LC_MESSAGES"  -a "$LC_MESSAGES" != C ]; then
    messages=$LC_MESSAGES
elif db_get debian-installer/locale && [ "$RET" ]; then
    messages="$RET"
else
    messages=C
fi

messages_lang=$(echo $messages | sed 's/_.*//')
messages_country=$(echo $messages | sed 's/.*_//;s/\..*//;s/@.*//')
messages_modif=
echo $messages | grep -v -q @ || messages_modif=$(echo $messages | sed 's/.*@//')

lang_kbdnames () {
    all_kbdnames | \
	regex_escape | \
	grep "^$1[*]" | \
	sed "s/^$1[*]//"
}

kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country}__${messages_modif})
[ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country}__${messages_modif})
[ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang}_${messages_country})
[ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames ${messages_lang})
[ -n "$kbdnames" ] || kbdnames=$(lang_kbdnames C)

if [ "$is_not_debian_installer" ]; then
    if \
        ! which iconv >/dev/null \
        || ! kbdnames="$(echo "$kbdnames" |
                iconv -f UTF-8 -t $(locale charmap)//TRANSLIT)"
    then
        kbdnames=$(lang_kbdnames C)
    fi
fi

######################################################################
#    Compute default values for $XKBMODEL, $XKBLAYOUT, $XKBVARIANT
#    based on the architecture and the locale.
######################################################################

arch=`guess_arch`
case "$arch" in
    alpha*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    amd64*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    arm*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    i386*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    hppa*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    ia64*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    m68k/amiga)
	XKBMODEL=amiga
	model_priority=medium
	;;
    m68k/atari)
	XKBMODEL=ataritt
	model_priority=medium
	;;
    m68k/mac)
	XKBMODEL=macintosh_old
	model_priority=medium
	;;
    m68k/sun*)
	XKBMODEL=pc105 # UNKNOWN: sun4, sun5 or pc105
	model_priority=critical
	;;
    m68k/*vme*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    mips*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    powerpc/amiga)
	XKBMODEL=amiga
	model_priority=medium
	;;
    powerpc/apus)
	XKBMODEL=amiga
	model_priority=medium
	;;
    powerpc/chrp*)
	XKBMODEL=pc105 # UNKNOWN: pc105, macintosh_old or maybe amiga
	model_priority=critical
	;;
    powerpc/mac)
	XKBMODEL=pc105
	model_priority=medium
	;;
    powerpc/pasemi)
	XKBMODEL=pc105
	model_priority=medium
	;;
    powerpc/powermac*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    powerpc/prep)
	XKBMODEL=pc105
	model_priority=medium
	;;
    powerpc/ps3|powerpc/cell)
	XKBMODEL=pc105
	model_priority=medium
	;;
    ppc64el/*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    sparc*)
	XKBMODEL=pc105 # sun4 or sun5 on older kernels
	model_priority=medium
	;;
    s390*)
	XKBMODEL=pc105
	model_priority=medium
	;;
    *)
	XKBMODEL=pc105 # UNKNOWN
	model_priority=critical
	;;
esac    

layout_priority=high
case "$langcountry" in
    # Keyboards for countries
    *_AL*)
	XKBLAYOUT=al  # Albania
	;;
    *_AZ*)
	XKBLAYOUT=az  # Azerbaijan
	;;
    *_BD*)
	XKBLAYOUT=us,bd  # Bangladesh
	;;
    *_BE*)
	XKBLAYOUT=be  # Belgium
	;;
    *_BG*)
	XKBLAYOUT=us,bg  # Bulgaria
	layout_priority=critical
	;;
    *_BR*)
	XKBLAYOUT=br  # Brazil
	;;
    *_BT*)
	XKBLAYOUT=us,bt  # Bhutan
	;;
    *_BY*)
	XKBLAYOUT=us,by  # Belarus
	;;
    fr_CA*)
	XKBLAYOUT=ca  # Canada
	;;
    *_CA*)
	XKBLAYOUT=us  # U.S. English
	;;
    de_CH*)
	XKBLAYOUT=ch  # Switzerland
	;;
    fr_CH*)
	XKBLAYOUT=ch  # Switzerland
	XKBVARIANT=fr # French
	;;
    *_CH*)
	XKBLAYOUT=ch  # Switzerland
	layout_priority=critical
	;;
    *_CZ*)
	XKBLAYOUT=cz  # Czechia
	layout_priority=critical
	;;
    *_DK*)
	XKBLAYOUT=dk  # Denmark
	;;
    *_EE*)
	XKBLAYOUT=ee  # Estonia
	;;
    ast_ES*)
	XKBLAYOUT=es  # Spain
	XKBVARIANT=ast # Asturian
	;;
    bo_*)
	XKBLAYOUT=us,cn  # China
	XKBVARIANT=,tib # Tibetan
	;;
    ca_ES*)
	XKBLAYOUT=es  # Spain
	XKBVARIANT=cat # Catalan
	;;
    *_ES*)
	XKBLAYOUT=es  # Spain
	;;
    *_ET*)
	XKBLAYOUT=us,et  # Ethiopia
	;;
    se_FI*)
	XKBLAYOUT=fi  # Finland
	XKBVARIANT=smi # Northern Saami
	;;
    *_FI*)
	XKBLAYOUT=fi  # Finland
	;;
    *_FR*)
	XKBLAYOUT=fr  # French
	XKBVARIANT=latin9
	;;
    *_GB*)
	XKBLAYOUT=gb  # United Kingdom
	;;
    *_GG*)
	XKBLAYOUT=gb  # United Kingdom
	;;
    *_HU*)
	XKBLAYOUT=hu  # Hungary
	;;
    *_IE*)
	XKBLAYOUT=ie  # Ireland
	;;
    *_IL*)
	XKBLAYOUT=us,il  # Israel
	layout_priority=critical
	;;
    *_IM*)
	XKBLAYOUT=gb  # United Kingdom
	;;
    *_IR*)
	XKBLAYOUT=us,ir  # Iran
	;;
    *_IS*)
	XKBLAYOUT=is  # Iceland
	;;
    *_IT*)
	XKBLAYOUT=it  # Italy
	;;
    *_JE*)
	XKBLAYOUT=gb  # United Kingdom
	;;
    *_JP*)
	XKBLAYOUT=jp  # Japan
	;;
    *_LT*)
	XKBLAYOUT=lt  # Lithuania
	layout_priority=critical
	;;
    *_LV*)
	XKBLAYOUT=lv  # Latvia
	;;
    *_KG*)
	XKBLAYOUT=us,kg  # Kyrgyzstan
	;;
    *_KH*)
	XKBLAYOUT=us,kh  # Cambodia
	;;
    *_KR*)
	XKBLAYOUT=kr      # South Korea
	XKBVARIANT=kr104  # pc104 compatible mode, safe choice
	;;
    *_KZ*)
	XKBLAYOUT=us,kz  # Kazakhstan
	;;
    *_LK*)
	XKBLAYOUT=us,lk  # Sri Lanka
	;;
    *_MA*)
	XKBLAYOUT=us,ma  # Morocco
	;;
    *_MK*)
	XKBLAYOUT=us,mk  # Macedonia
	;;
# According to https://launchpad.net/bugs/129982, Dutch users prefer the US
# intl keymap.
    *_NL*)
	XKBLAYOUT=us  # Netherlands
	XKBVARIANT=intl # International (with dead keys)
	;;
    *_MM*)
	XKBLAYOUT=us,mm  # Myanmar
	;;
    *_MN*)
	XKBLAYOUT=us,mn  # Mongolia
	;;
    *_MT*)
	XKBLAYOUT=mt  # Malta
	layout_priority=critical
	;;
    se_NO*)
	XKBLAYOUT=no  # Norway
	XKBVARIANT=smi # Northern Saami
	;;
    *_NO*)
	XKBLAYOUT=no  # Norway (se_NO is not in this case)
	;;
    *_NP*)
	XKBLAYOUT=us,np  # Nepal
	;;
    *_PH*)
	XKBLAYOUT=ph  # Philipines
	;;
    *_PL*)
	XKBLAYOUT=pl  # Poland
	;;
    *_PT*)
	XKBLAYOUT=pt  # Portugal
	;;
    *_RO*)
	XKBLAYOUT=ro  # Romania
	;;
    *_RU*)
	XKBLAYOUT=us,ru  # Russia
	layout_priority=critical
	;;
    se_SE*)
	XKBLAYOUT=se  # Sweden
	XKBVARIANT=smi # Northern Saami
	;;
    *_SK*)
	XKBLAYOUT=sk  # Slovakia
	;;
    *_SI*)
	XKBLAYOUT=si  # Slovenia
	;;
    tg_*)
	XKBLAYOUT=us,tj  # Tajik
	;;
    *_TJ*)
	XKBLAYOUT=us,tj  # Tajikistan
	;;
    *_TH*)
	XKBLAYOUT=us,th  # Thailand
	layout_priority=critical
	;;
    ku_TR*)
	XKBLAYOUT=tr  # Turkish
	XKBVARIANT=ku # Kurdish, Latin Q
	;;
    *_TR*)
	XKBLAYOUT=tr  # Turkish
	layout_priority=critical
	;;
    *_UA*)
	XKBLAYOUT=us,ua  # Ukraine
	;;
    en_US*)
	XKBLAYOUT=us  # U.S. English
	;;
# According to https://launchpad.net/bugs/191451, most keyboards in Vietnam
# are in fact US keyboards.
    *_VN*)
	XKBLAYOUT=us  # Vietnam
	;;
    *_ZA*)
	XKBLAYOUT=za  # South Africa
	;;
    # Keyboards for specific languages and international keyboards:
    # TODO: Is the following list correct?
    *_AR*|*_BO*|*_CL*|*_CO*|*_CR*|*_DO*|*_EC*|*_GT*|*_HN*|*_MX*|*_NI*|*_PA*|*_PE*|es_PR*|*_PY*|*_SV*|es_US*|*_UY*|*_VE*)
	XKBLAYOUT=latam # Latin American
	;;
    ar_*)
	XKBLAYOUT=us,ara # Arabic
	;;
    bn_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,ben # Bengali
	;;
    bs_*)
	XKBLAYOUT=ba  # Bosnia and Herzegovina
	;;
    de_LI*)
	XKBLAYOUT=ch  # Liechtenstein
	;;
    de_*)
	XKBLAYOUT=de  # Germany
	;;
    el_*)
	XKBLAYOUT=us,gr  # Greece
	;;
    eo|eo.*|eo_*|eo\@*)
	XKBLAYOUT=epo  # Esperanto
	layout_priority=critical
	;;
    fr_*)
	XKBLAYOUT=fr  # France
	XKBVARIANT=oss # Alternative
	layout_priority=critical
	;;
    gu_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,guj # Gujarati
	;;
    hi_*)
	XKBLAYOUT=us,in  # India
	;;
    hr_*)
	XKBLAYOUT=hr  # Croatia
	;;
    hy_*)
	XKBLAYOUT=us,am  # Armenia
	;;
    ka_*)
	XKBLAYOUT=us,ge  # Georgia
	layout_priority=critical
	;;
    kn_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,kan # Kannada
	;;
    ku_*)
	XKBLAYOUT=tr  # Turkish
	XKBVARIANT=ku # Kurdish
	layout_priority=critical
	;;
    lo_*)
	XKBLAYOUT=us,la  # Laos
	;;
    mr_*)
	XKBLAYOUT=us,in  # India
	;;
    ml_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,mal # Malayalam
	;;
    my_*)
	XKBLAYOUT=us,mm  # Burmese
	;;
    ne_*)
	XKBLAYOUT=us,np  # Nepali
	;;
    os_*)
	XKBLAYOUT=ru  # Russia
	XKBVARIANT=os  # Ossetian
	;;
    pa_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,guru # Gurmukhi
	;;
    si_*)
	XKBLAYOUT=us,si  # Sri Lanka
	XKBVARIANT=,sin_phonetic # Sinhala
	;;
    sr_*)
	XKBLAYOUT=rs,rs  # Serbia and Montenegro
	XKBVARIANT=latin,
	layout_priority=critical
	;;
    sv_*)
	XKBLAYOUT=se  # Sweden
	;;
    ta_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,tam # Tamil
	;;
    te_*)
	XKBLAYOUT=us,in  # India
	XKBVARIANT=,tel # Telugu
	;;
    tg_*)
	XKBLAYOUT=us,tj  # Tajikistan
	;;
    the_*)
	XKBLAYOUT=us,np  # Nepali keymap for Tharu
	;;
    tl_*)
	XKBLAYOUT=ph  # Philipines
	;;
    ug_*)
	XKBLAYOUT=us,cn  # China
	XKBVARIANT=,ug # Uyghur
	;;
    zh_*)
	XKBLAYOUT=cn  # Chinese
	;;
    # Fallback
    *)
	XKBLAYOUT=us
	;;
esac

######################################################################
#    Overwrite (some of) the computed default values by:
#    - preseeded values (for the udeb);
#    - the value of debian-installer/keymap
#    - the contents of /etc/X11/xorg.conf
#    - the settings in the configuration files (/etc/default/...).
#    - correct some bugs of previous versions of console-setup
######################################################################

# Get defaults from debconf, to allow preseeding in the udeb
if db_get keyboard-configuration/modelcode && [ "$RET" ]; then
    XKBMODEL="$RET"
fi
if db_get keyboard-configuration/layoutcode && [ "$RET" ]; then
    # Don't use the default variant if the layout is being overridden.
    if [ "$RET" != "$XKBLAYOUT" ]; then
	XKBVARIANT=''
    fi
    XKBLAYOUT="$RET"
    if db_fget keyboard-configuration/layoutcode seen && [ "$RET" = true ]; then
	layout_priority=medium
	db_set console-setup/ask_detect false
	db_fset console-setup/ask_detect seen true
    fi
fi
if db_get keyboard-configuration/variantcode && [ "$RET" ]; then
    XKBVARIANT="$RET"
fi
if db_get keyboard-configuration/optionscode && [ "$RET" ]; then
    XKBOPTIONS="$RET"
fi

# Use the value of console-data debian-installer/keymap to get better default
# layout.  This guesswork is copied from xserver-xorg.config.
# Lower the priority of the Debconf question to medium.
if db_get debian-installer/keymap && [ "$RET" ]; then
    di_keymap="${RET##mac-usb-}"
    di_keymap="${di_keymap%%-latin1}"
    
    old_xkbvariant="$XKBVARIANT"
    XKBVARIANT=''
    old_layout_priority=$layout_priority
    layout_priority=medium
    case "$di_keymap" in
	be2) XKBLAYOUT="be";;
	bg) XKBLAYOUT="us,bg";;
	br) XKBLAYOUT="us"; XKBVARIANT="intl";;
	br-abnt2) XKBLAYOUT="br"; XKBVARIANT="abnt2";;
	by) XKBLAYOUT="us,by";;
	cf) XKBLAYOUT="ca"; XKBVARIANT="fr";;
	croat) XKBLAYOUT="hr";;
	cz-lat2) XKBLAYOUT="cz";;
	de-latin1-nodeadkeys) XKBLAYOUT="de"; XKBVARIANT="nodeadkeys";;
	de) XKBLAYOUT="de";;
	dvorak) XKBLAYOUT="us"; XKBVARIANT="dvorak";;
	dk) XKBLAYOUT="dk";;
	es) XKBLAYOUT="es";;
	et) XKBLAYOUT="ee";;
	'fi') XKBLAYOUT="fi";;
	fr-latin9) XKBLAYOUT="fr"; XKBVARIANT="latin9";;
	fr_CH) XKBLAYOUT="ch"; XKBVARIANT="fr";;
	fr) XKBLAYOUT="fr";;
	hebrew) XKBLAYOUT="us,il";;
	hu) XKBLAYOUT="hu";;
	gb) XKBLAYOUT="gb";;
	is) XKBLAYOUT="is";;
	it) XKBLAYOUT="it";;
	jp106) XKBLAYOUT="jp"; XKBVARIANT="106";;
	kr|kr106) XKBLAYOUT="kr"; XKBVARIANT='';;
	kr104) XKBLAYOUT="kr"; XKBVARIANT="kr104";;
	la) XKBLAYOUT="latam";;
	lt) XKBLAYOUT="lt";; 
	lv-latin4) XKBLAYOUT="lv";;
	mac-us-std) XKBLAYOUT="us";;
	mac-de2-ext) XKBLAYOUT="de"; XKBVARIANT="nodeadkeys";;
	mac-fr2-ext) XKBLAYOUT="fr";;
	mac-fr3) XKBLAYOUT="fr";;
	mac-es) XKBLAYOUT="es";;
	ky) XKBLAYOUT="us,kg";;
	mk) XKBLAYOUT="us,mk";;
	nl) XKBLAYOUT="nl";;
	no) XKBLAYOUT="no";;
	pl) XKBLAYOUT="pl";;
	pt) XKBLAYOUT="pt";;
	ro) XKBLAYOUT="ro";;
	ru) XKBLAYOUT="us,ru";;
	se) XKBLAYOUT="se";;
	sg) XKBLAYOUT="ch"; XKBVARIANT="de";;
	sk-qwerty) XKBLAYOUT="sk"; XKBVARIANT="qwerty";;
	slovene) XKBLAYOUT="si";;
	sr-cy) XKBLAYOUT="rs,rs"; XKBVARIANT="latin," ;;
	trf|trfu) XKBLAYOUT="tr"; XKBVARIANT="f";;
	trq|trqu) XKBLAYOUT="tr";;
	ua) XKBLAYOUT="us,ua";;
	uk) XKBLAYOUT="gb";;
	us) XKBLAYOUT="us";;
	*) 
	    XKBVARIANT="$old_xkbvariant"
	    layout_priority=$old_layout_priority
	    ;;
    esac
fi

# Get default layout from xorg.conf if available
# Lower the priority of the Debconf question to medium.
if \
    [ -f /etc/X11/xorg.conf -a ! -e $CONFIGFILE ] \
    && which awk 2>/dev/null >/dev/null
then
    awk_expr='
{
    sub("#.*","")
    line = $0;
    $0 = tolower($0);
    xkb = "";
}

/^[ \t]*section[ \t]+"inputdevice"/,/^[ \t]*endsection/ {
    if ($1 == "option") {
	if ($2 == "\"xkbmodel\"") {
	    xkb = "XKBMODEL";
	} else if ($2 == "\"xkblayout\"") {
	    xkb = "XKBLAYOUT";
	    print "layout_priority=medium";
	} else if ($2 == "\"xkbvariant\"") {
	    xkb = "XKBVARIANT";
	} else if ($2 == "\"xkboptions\"") {
	    xkb = "XKBOPTIONS"; 
	}
	$0 = line;
	$1 = "";
	$2 = "";
    }
}

xkb != "" && /^[ \t]*\"[^"]+\"[ \t]*$/ {
    sub("^[ \t]*\"", "");
    sub("\".*", "");
    gsub("[ \t]", "");
    if ($1 !~ /[()]/) {
	print xkb "=\"" $0 "\"";
    } else {
	if (xkb == "XKBLAYOUT" && $1 ~ /^[^()]+\([^()]+\)$/) {
	    l=$1;                      # us(intl),cz(qwerty)
	    gsub(/\([^()]*\)/,"",l);   # us,cz
	    v=$1;                      # us(intl),cz(qwerty)     us,bg
	    gsub(/\)/,"",v);           # us(intl,cz(qwerty       us,bg
	    gsub(/^[^(,]*,/,",",v);    # us(intl,cz(qwerty       ,bg
	    gsub(/^[^(,]*$/,"",v);     # us(intl,cz(qwerty       ,bg
	    gsub(/^[^(,]*\(/,"",v);    # intl,cz(qwerty          ,bg
	    gsub(/,[^(,]*,/,",,",v);   # intl,cz(qwerty          ,bg
	    gsub(/,[^(,]*$/,",",v);    # intl,cz(qwerty          ,
	    gsub(/,[^(,]*\(/,",",v);   # intl,qwerty             ,
	    print "XKBLAYOUT=" l;
	    print "XKBVARIANT=" v;
	}
    }
}
'
    eval $(awk "$awk_expr" < /etc/X11/xorg.conf)
fi

# Load the config file, if it exists.  Overwrite the current values of
# XKBMODEL, XKBLAYOUT, XKBVARIANT, and XKBOPTIONS in the process.
read_config $OLDCONFIGFILE
read_config $CONFIGFILE

XKBMODEL=$(echo $XKBMODEL | sed 's/ *//g')
XKBLAYOUT=$(echo $XKBLAYOUT | sed 's/ *//g')
XKBVARIANT=$(echo $XKBVARIANT | sed 's/ *//g')

# Version 1.37 of console-setup would destroy the values of $XKBMODEL,
# $XKBLAYOUT and $XKBVARIANT in the configfile if sharutils was not
# installed.  Version 1.47 destroyed $XKBMODEL.
if [ -z "$XKBMODEL" ]; then
    model_priority=critical
    XKBMODEL=pc105
    db_fset keyboard-configuration/model seen false
fi
if [ -z "$XKBLAYOUT" ]; then
    layout_priority=critical
    XKBLAYOUT=us
    db_fset keyboard-configuration/layout seen false
    db_fset keyboard-configuration/variant seen false
fi

#######################################################################
#    If the computer doesn't have keyboard then do not ask questions,
#    simply store the default values in the configuration file.  This
#    is in order to support headless installs in d-i.  The regular
#    packages (console-setup and console-setup-mini) should not be
#    installed on such sistems.
#######################################################################

if ! keyboard_present; then
    # No questions, just store the defaults for postinst
    db_set keyboard-configuration/modelcode "$XKBMODEL"
    db_set keyboard-configuration/layoutcode "$XKBLAYOUT"
    db_set keyboard-configuration/variantcode "$XKBVARIANT"
    if [ -z "$XKBOPTIONS" -a ! -f $CONFIGFILE ]; then
	case "$XKBLAYOUT" in
	    *,*) XKBOPTIONS="grp_led:scroll";;
	    us) XKBOPTIONS="";;
	    *) XKBOPTIONS="lv3:ralt_switch";;
	esac
    fi
    db_set keyboard-configuration/optionscode "$XKBOPTIONS"
    exit 0
fi

#######################################################################
#    Compute default values for the Debconf questions.  For example
#    from XKBLAYOUT=us,el we obtain debconf_layout=el and from
#    XKBOPTIONS=lv3:ralt_switch we obtain debconf_altgr='Right Alt (AltGr)'
#######################################################################

# Set debconf_model.  There is no difference between debconf_model and
# XKBMODEL, but lets create a new variable for consistency.
debconf_model="$XKBMODEL"

# Compute debconf_layout, debconf_variant and unsupported_layout based
# on values of $XKBLAYOUT and $XKBVARIANT.
if [ "$XKBLAYOUT" ]; then
    case "$XKBLAYOUT" in
	lt,us)
	    debconf_layout="${XKBLAYOUT%,*}"
	    debconf_variant="${XKBVARIANT%,*}"
	    unsupported_layout=no
	    ;;
	rs,rs|us,rs|jp,jp|us,jp)
	    debconf_layout="${XKBLAYOUT#*,}"
	    debconf_variant="${XKBVARIANT#*,}"
	    unsupported_layout=no
	    ;;
	# TODO: make s.t. to not forget to update this list
	us,am|us,af|us,ara|us,ben|us,bd|us,bg|us,bt|us,by|us,cn|us,et|us,ge|us,gh|us,gr|us,guj|us,guru|us,il|us,in|us,ir|us,iku|us,iq|us,ir|us,kan|us,kh|us,kz|us,la|us,lao|us,lk|us,lt|us,kg|us,ma|us,mal|us,mk|us,mm|us,mn|us,mv|us,np|us,ori|us,pk|us,ru|us,scc|us,sy|us,syr|us,tel|us,th|us,tj|us,tam|us,tib|us,ua|us,ug|us,uz)
	    if [ "${XKBVARIANT%,*}" = '' ]; then
		debconf_layout="${XKBLAYOUT#*,}"
		debconf_variant="${XKBVARIANT#*,}"
		unsupported_layout=no
	    else
		unsupported_layout=yes
	    fi
	    ;;	    
	*,*)
	    unsupported_layout=yes
	    ;;
	*)
	    debconf_layout="$XKBLAYOUT"
	    debconf_variant="$XKBVARIANT"
            unsupported_layout=no
	    ;;
    esac
fi

# Make sure debconf_layout and debconf_variant point to existing in
# $kbdnames layout and variant.  If the requested layout and/or
# variant are not in the $kbdnames, then we prefer debconf_layout=us
# and debconf_variant=''
if \
    ! echo "$kbdnames" \
    | grep "variant[*]$debconf_layout[*]$debconf_variant[*]" >/dev/null
then
    unsupported_layout=yes
    debconf_variant=''
    if \
	! echo "$kbdnames" \
	| grep "layout[*]$debconf_layout[*]" >/dev/null
    then
	debconf_layout=us
    fi
fi

# Compute debconf_* variables based on the value of $XKBOPTIONS.  The
# values of these variables are human-friendly text.
debconf_toggle='No toggling'
debconf_switch='No temporary switch'
debconf_altgr='The default for the keyboard layout'
debconf_compose='No compose key'
debconf_ctrl_alt_bksp=false
if [ "$XKBOPTIONS" ]; then
    debconf_toggle='No toggling'
    debconf_switch='No temporary switch'
    debconf_altgr='The default for the keyboard layout'
    debconf_compose='No compose key'
    for option in `echo $XKBOPTIONS | sed 's/,/ /g'`; do
	case "$option" in
	    compose:caps)
		debconf_compose='Caps Lock';;
	    compose:lwin)
		debconf_compose='Left Logo key';;
	    compose:menu)
		debconf_compose='Menu key';;
	    compose:ralt)
		debconf_compose='Right Alt (AltGr)';;
	    compose:rctrl)
		debconf_compose='Right Control';;
	    compose:rwin)
		debconf_compose='Right Logo key';;
	    grp:alt_caps_toggle)
		debconf_toggle='Alt+Caps Lock';;
	    grp:alt_shift_toggle)
		debconf_toggle='Alt+Shift';;
	    grp:caps_toggle)
		debconf_toggle='Caps Lock';;
	    grp:ctrl_alt_toggle)
		debconf_toggle='Control+Alt';;
	    grp:ctrl_shift_toggle)
		debconf_toggle='Control+Shift';;
	    grp:lalt_toggle)
		debconf_toggle='Left Alt';;
	    grp:lctrl_lshift_toggle)
		debconf_toggle='Left Control+Left Shift';;
	    grp:lctrl_toggle)
		debconf_toggle='Left Control';;
	    grp:lshift_toggle)
		debconf_toggle='Left Shift';;
	    grp:lswitch)
		debconf_switch='Left Alt';;
	    grp:lwin_switch)
		debconf_switch='Left Logo key';;
	    grp:lwin_toggle)
		debconf_toggle='Left Logo key';;
	    grp:menu_toggle)
		debconf_toggle='Menu key';;
	    grp:rctrl_toggle)
		debconf_toggle='Right Control';;
	    grp:rshift_toggle)
		debconf_toggle='Right Shift';;
	    grp:rwin_switch)
		debconf_switch='Right Logo key';;
	    grp:rwin_toggle)
		debconf_toggle='Right Logo key';;
	    grp:sclk_toggle)
		debconf_toggle='Scroll Lock key';;
	    grp:switch)
		debconf_switch='Right Alt (AltGr)';;
	    grp:toggle)
		debconf_toggle='Right Alt (AltGr)';;
	    grp:win_switch)
		debconf_switch='Both Logo keys';;
	    lv3:ralt_alt)
		debconf_altgr='No AltGr key';;
	    lv3:alt_switch)
		debconf_altgr='Both Alt keys';;
	    lv3:enter_switch)
		debconf_altgr='Keypad Enter key';;
	    lv3:lalt_switch)
		debconf_altgr='Left Alt';;
	    lv3:lwin_switch)
		debconf_altgr='Left Logo key';;
	    lv3:menu_switch)
		debconf_altgr='Menu key';;
	    lv3:ralt_switch)
		debconf_altgr='Right Alt (AltGr)';;
	    lv3:rwin_switch)
		debconf_altgr='Right Logo key';;
	    lv3:switch)
		debconf_altgr='Right Control';;
	    lv3:win_switch)
		debconf_altgr='Both Logo keys';;
	    terminate:ctrl_alt_bksp)
		debconf_ctrl_alt_bksp=true;;
	    grp_led:scroll)
		;;
	    *)
		unsupported_options=yes
		;;
	esac
    done
fi

# Store the default values for the options into debconf db.  Notice we
# do not store the default values for the model, the layout and the
# variant since the respective questions are asked by the function
# ask_debconf and it takes care to store in debconf db the reqired text.
db_default keyboard-configuration/toggle "$debconf_toggle"
db_default keyboard-configuration/switch "$debconf_switch"
db_default keyboard-configuration/altgr "$debconf_altgr"
db_default keyboard-configuration/compose "$debconf_compose"
db_default keyboard-configuration/ctrl_alt_bksp "$debconf_ctrl_alt_bksp"

#######################################################################
#     Ask the Debconf questions starting from STATE=1.
#######################################################################

# At this point if unsupported_layout=yes, then the values of
# XKBLAYOUT and XKBVARIANT are relevant.  Otherwise the values of
# debconf_layout and debconf_variant have to be used.  Notice the
# difference between these variables - for example when
# XKBLAYOUT=us,el we have debconf_layout=el.

# Notice that the user may choose to disregard the fact that the
# configuration is unsupported (question unsupported_config_layout).
# Because of this, at this point we have to have sensible values for
# debconf_layout and debconf_variant even when unsupported_layout=yes.

STATE=1
old_state=0
while :; do
    starting_state=$STATE
    case "$STATE" in
	1)
	    if [ "$is_debian_installer" ]; then
		# do not ask model question in Debian installer
		db_set keyboard-configuration/modelcode "$debconf_model"
		db_fset keyboard-configuration/model seen true
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    else
		if \
		    ask_debconf keyboard-configuration/model $model_priority \
		        model "$debconf_model"
		then
		    debconf_model="$RET"
		    db_set keyboard-configuration/modelcode "$RET"
		    STATE=$(($STATE + 1))
		else
		    STATE=$(($STATE - 1))
		fi
	    fi
	    ;;
	2)
	    if \
		$detect_keyboard \
		&& [ "$XKBMODEL" != SKIP ] \
		&& [ -e "/usr/share/console-setup-mini/$XKBMODEL.tree" ]
	    then
		db_input high console-setup/ask_detect || true
		if db_go; then
		    STATE=$(($STATE + 1))
		else
		    STATE=$(($STATE - 1))
		fi
	    else
		STATE=$(($STATE + $STATE - $old_state))
	    fi
	    ;;
	3)
	    if \
		[ "$STATE" -ge "$old_state" ] \
		&& $detect_keyboard \
		&& [ "$XKBMODEL" != SKIP ] \
		&& [ -e "/usr/share/console-setup-mini/$XKBMODEL.tree" ] \
		&& db_get console-setup/ask_detect \
		&& [ "$RET" = true ]
	    then
		db_subst console-setup/detect FILENAME \
		    "/usr/share/console-setup-mini/$XKBMODEL.tree"
		if db_input critical console-setup/detect && db_go; then
		    db_get console-setup/detect
		    detected_keyboard="$RET"
		    # TODO: produce human-readable layout name
		    db_subst console-setup/detected LAYOUT "$detected_keyboard"
		    db_input high console-setup/detected || true
		    if db_go; then
			unsupported_layout=no
			STATE=$(($STATE + 1))
		    else
			detected_keyboard=
			STATE=$(($STATE - 1))
		    fi
		else
		    STATE=$(($STATE - 1))
		fi
	    else
		detected_keyboard=
		STATE=$(($STATE + $STATE - $old_state))
	    fi
	    ;;
	4)
	    if [ "$detected_keyboard" ] || [ "$XKBMODEL" = SKIP ]; then
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$unsupported_layout" = yes ]; then
                # For the question about the keeping of the
                # unsupported configuration we use two different
                # Debconf templates depending on whether the
                # unsupported layout/variant combination has been
                # taken from existing configuration file (obviously in
                # this case the admin is responsible) or it has been
                # computed based on the system configuration such as
                # the locale or xorg.conf (in which case the user may
                # be unaware).
		if [ -f $CONFIGFILE ]; then
                    template=keyboard-configuration/unsupported_config_layout
                else
                    template=keyboard-configuration/unsupported_layout
		    case "$XKBVARIANT" in
		        ,|,,|,,,|'')
		            db_subst $template XKBLAYOUTVARIANT "$XKBLAYOUT"
			    ;;
		        *)
		            db_subst $template XKBLAYOUTVARIANT \
                                "$XKBLAYOUT/$XKBVARIANT"
			    ;;
		    esac
                fi
		db_subst $template XKBLAYOUT "$XKBLAYOUT"
		db_subst $template XKBVARIANT "$XKBVARIANT"
		db_input medium $template || true
		if db_go; then
		    STATE=$(($STATE + 1))
		else
                    # The following code is for the following
                    # situation: admin creates unsupported
                    # configuration, then asks c-s not to keep this
                    # configuration (i.e. gives answer 'no' to this
                    # question), then restores by hand the unsupported
                    # configuration.  Un upgrade the old answer to
                    # this question will be remembered by Debconf so
                    # c-s will overwrite the configuration.  See #729321.
		    db_reset $template || true
		    db_fset $template seen false
		    STATE=$(($STATE - 1))
		fi
		db_get $template
		if [ "$RET" != true ]; then
		    unsupported_layout=no
		fi
	    else
                # The following code is for the following situation:
                # first admin configures unsupported configuration,
                # then gives answer to keep the configuration.  After
                # that admin configures (by hand) a supported
                # configuration.  And after that again unsupported.
                # In this case we want the question about unsupported
                # layout to be asked again.
		db_reset keyboard-configuration/unsupported_config_layout || true
		db_fset keyboard-configuration/unsupported_config_layout seen false
		db_reset keyboard-configuration/unsupported_layout || true
		db_fset keyboard-configuration/unsupported_layout seen false
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    fi
	    ;;
	5)
	    if [ "$detected_keyboard" ]; then
		XKBLAYOUT="${detected_keyboard%%:*}"
		debconf_layout="$XKBLAYOUT"
		db_set keyboard-configuration/layoutcode "$XKBLAYOUT"
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$XKBMODEL" = SKIP ]; then
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$unsupported_layout" = yes ]; then
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif \
		ask_debconf keyboard-configuration/layout "$layout_priority" \
		    layout "$debconf_layout"
	    then
		debconf_layout="$RET"
		STATE=$(($STATE + 1)) 
	    else
		# always to the next question
		STATE=$(($STATE + 1))
	    fi
	    ;;
	6)
	    adjust_layout=false
	    if [ "$detected_keyboard" ]; then
		case $detected_keyboard in
		    *:*)
			variant="${detected_keyboard#*:}"
			;;
		    *)
			variant=
			;;
		esac
		debconf_variant="$variant"
		adjust_layout=:
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$XKBMODEL" = SKIP ]; then
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$unsupported_layout" = yes ]; then
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif \
		! ask_debconf keyboard-configuration/variant \
			"$layout_priority" \
			"variant*${debconf_layout}" \
			"$debconf_variant"
	    then
		# skip the previous question
		starting_state=$(($STATE - 1))
		STATE=$(($STATE - 2))
	    else
		debconf_variant="$RET"
		variant="$RET"
		adjust_layout=:
		STATE=$(($STATE + 1))
	    fi

            # Compute $XKBLAYOUT and $XKBVARIANT and store their
            # values in debconf db.
	    if $adjust_layout; then
		case "$debconf_layout" in
		    rs)
			case "$debconf_variant" in
			    latin*)
				XKBLAYOUT=$debconf_layout
				;;
			    *)
				XKBLAYOUT=rs,rs
				;;
			esac
			;;
		    jp)
			case "$debconf_variant" in
			    106|common|OADG109A|nicola_f_bs|'')
				XKBLAYOUT=$debconf_layout
				;;
			    *)
				XKBLAYOUT=jp,jp
				;;
			esac
			;;
		    lt)
			XKBLAYOUT=lt,us
			;;
		    me)
			case "$debconf_variant" in
			    basic|latin*)
				XKBLAYOUT=$debconf_layout
				;;
			    *)
				XKBLAYOUT=me,me
				;;
			esac
			;;
		    af|am|ara|ben|bd|bg|bt|by|et|ge|gh|gr|guj|guru|il|'in'|iq|ir|iku|kan|kh|kz|la|lao|lk|kg|ma|mk|mm|mn|mv|mal|np|ori|pk|ru|scc|sy|syr|tel|th|tj|tam|tib|ua|ug|uz)
	                XKBLAYOUT=us,$debconf_layout
	                ;;
	            *)
	                XKBLAYOUT=$debconf_layout
	                ;;
	        esac
		case "$XKBLAYOUT" in
                    rs,rs)
		        case "$debconf_variant" in
		            yz)
                                XKBVARIANT="latinyz,$debconf_variant" ;;
		            alternatequotes)
                                XKBVARIANT="latinalternatequotes,$debconf_variant" ;;
		            *)
                                XKBVARIANT="latin,$debconf_variant" ;;
		        esac
                        ;;
                    lt,us)
		        case "$debconf_variant" in
		            us)
                                XKBVARIANT="us," ;;
		            *)
                                XKBVARIANT="$debconf_variant,altgr-intl" ;;
		        esac
                        ;;
		    *,*)
                        XKBVARIANT=",$debconf_variant"
                        ;;
		    *)
                        XKBVARIANT="$debconf_variant"
                        ;;
		esac
            fi
	    db_set keyboard-configuration/layoutcode "$XKBLAYOUT"
	    db_set keyboard-configuration/variantcode "$XKBVARIANT"
	    ;;
	7)
	    if \
		[ "$unsupported_options" = yes -a "$is_not_debian_installer" ]
	    then
		if [ -f $CONFIGFILE ]; then
                    template=keyboard-configuration/unsupported_config_options
                else
                    template=keyboard-configuration/unsupported_options
                fi
		db_subst $template XKBOPTIONS "$XKBOPTIONS"
		db_input medium $template || true
		if db_go; then
		    STATE=$(($STATE + 1))
		else
		    db_reset $template || true
		    db_fset $template seen false
		    STATE=$(($STATE - 1))
		fi
		db_get $template
		if [ "$RET" != true ]; then
		    unsupported_options=no
		fi
	    else
		db_reset keyboard-configuration/unsupported_config_options || true
		db_fset keyboard-configuration/unsupported_config_options seen false
		db_reset keyboard-configuration/unsupported_options || true
		db_fset keyboard-configuration/unsupported_options seen false
		# skip the question without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    fi
	    ;;
	8)
	    if [ "$unsupported_options" = yes ]; then
		db_set keyboard-configuration/optionscode "$XKBOPTIONS"
		# skip the questions without making Debconf loop
		STATE=$(( $STATE + $STATE - $old_state ))
	    elif [ "$XKBMODEL" = SKIP ]; then
		STATE=$(( $STATE + $STATE - $old_state ))
	    else
		caps_allocated=no
		lalt_allocated=no
		lctrl_allocated=no
		lshift_allocated=no
		lwin_allocated=no
		menu_allocated=no
		ralt_allocated=no
		rctrl_allocated=no
		rshift_allocated=no
		rwin_allocated=no

		case "$XKBLAYOUT" in
		    *,*)
                        ;;
		    *)
		        db_set keyboard-configuration/toggle 'No toggling'
		        db_set keyboard-configuration/switch 'No temporary switch'
                        ;;
		esac

		db_beginblock
		case "$XKBLAYOUT" in
		    *,*)
		        db_input high keyboard-configuration/toggle || true
		        if [ "$is_not_debian_installer" ]; then
			    db_input medium keyboard-configuration/switch || true
		        fi
                        ;;
		    *)
		        ;;
		esac
		if [ "$is_not_debian_installer" ]; then
		    db_input medium keyboard-configuration/altgr || true
		    db_input medium keyboard-configuration/compose || true
		fi
		if [ -f /usr/bin/X ]; then
		    db_input medium keyboard-configuration/ctrl_alt_bksp || true
		fi
		db_endblock

		if db_go; then
		    STATE=$(($STATE + 1))
		else
		    STATE=$(($STATE - 1))
		fi

		db_get keyboard-configuration/toggle
		case "$RET" in
		    Caps\ Lock)
		        caps_allocated=yes
		        toggle=caps_toggle;;
		    Right\ Alt*)
		        ralt_allocated=yes
		        toggle=toggle;;
		    Right\ Control)
		        rctrl_allocated=yes
		        toggle=rctrl_toggle;;
		    Right\ Shift)
		        rshift_allocated=yes
		        toggle=rshift_toggle;;
		    Right\ Logo?key)
		        rwin_allocated=yes
		        toggle=rwin_toggle;;
		    Menu?key)
			menu_allocated=yes
			toggle=menu_toggle;;
		    Alt+Shift)
			toggle=alt_shift_toggle;;
		    Control+Shift)
			toggle=ctrl_shift_toggle;;
		    Left\ Control+Left\ Shift)
			toggle=lctrl_lshift_toggle;;
		    Scroll\ Lock\ key)
			toggle=sclk_toggle;;
		    Alt+Caps\ Lock)
			toggle=alt_caps_toggle;;
		    Control+Alt)
			toggle=ctrl_alt_toggle;;
		    Left\ Alt)
		        lalt_allocated=yes
		        toggle=lalt_toggle;;
		    Left\ Control)
		        lctrl_allocated=yes
		        toggle=lctrl_toggle;;
		    Left\ Shift)
		        lshift_allocated=yes
		        toggle=lshift_toggle;;
		    Left\ Logo?key)
		        lwin_allocated=yes
		        toggle=lwin_toggle;;
		    No\ toggling)
		        toggle='';;
		    *)
			echo Unknown toggle key option
			exit 1
			;;
		esac
		if [ "$toggle" ]; then
		    toggle=grp:$toggle
		fi
		
		db_get keyboard-configuration/switch
		switch=''
		case "$RET" in
		    Right\ Alt*)
		        if [ "$ralt_allocated" != yes ]; then
			    switch=switch
			    ralt_allocated=yes
		        fi;;
		    Left\ Alt)
		        if [ "$lalt_allocated" != yes ]; then
			    switch=lswitch
			    lalt_allocated=yes
		        fi;;
		    Right\ Logo?key)
		        if [ "$rwin_allocated" != yes ]; then
			    switch=rwin_switch
			    rwin_allocated=yes
		        fi;;
		    Left\ Logo?key)
		        if [ "$lwin_allocated" != yes ]; then
			    switch=lwin_switch
			    lwin_allocated=yes
		        fi;;
		    Both\ Logo?keys)
		        if \
			    [ "$rwin_allocated" != yes ] \
			    && [ "$lwin_allocated" != yes ]
			then
			    switch=win_switch
			    rwin_allocated=yes
			    lwin_allocated=yes
		        fi;;
		    No\ temporary\ switch)
		        switch='';;
		    *)
			echo Unknown switch key option
			exit 1
			;;
		esac
		if [ "$switch" ]; then
		    switch=grp:$switch
		fi
		
		db_get keyboard-configuration/altgr
		altgr=''
		case "$RET" in
		    The?default?for?the?keyboard?layout)
			altgr='';;
		    No?AltGr?key)
			if [ "$ralt_allocated" != yes ]; then
			    # no need for ralt_allocated=yes
			    altgr=ralt_alt
			fi;;
		    Right?Alt*)
			if [ "$ralt_allocated" != yes ]; then
			    altgr=ralt_switch
			    ralt_allocated=yes
			fi;;
		    Right?Control)
			if [ "$rctrl_allocated" != yes ]; then
			    altgr=switch
			    rctrl_allocated=yes
			fi;;
		    Menu?key)
			if [ "$menu_allocated" != yes ]; then
			    altgr=menu_switch
			    menu_allocated=yes
			fi;;
		    Keypad?Enter?key)
			altgr=enter_switch;;
		    Right?Logo?key)
			if [ "$rwin_allocated" != yes ]; then
			    altgr=rwin_switch
			    rwin_allocated=yes
			fi;;
		    Left?Logo?key)
			if [ "$lwin_allocated" != yes ]; then
			    altgr=lwin_switch
			    lwin_allocated=yes
			fi;;
		    Both?Logo?keys)
			if \
			    [ "$rwin_allocated" != yes ] \
			    && [ "$lwin_allocated" != yes ]
			then
			    altgr=win_switch
			    rwin_allocated=yes
			    lwin_allocated=yes
			fi;;
		    Both?Alt?keys)
			if \
			    [ "$lalt_allocated" != yes ] \
			    && [ "$ralt_allocated" != yes ]
			then
			    altgr=alt_switch
			    ralt_allocated=yes
			    lalt_allocated=yes
			fi;;
		    Left?Alt)
			if [ "$lalt_allocated" != yes ]; then
			    altgr=lalt_switch
			    lalt_allocated=yes
			fi;;
		    *)
			echo Unknown altgr key option
			exit 1
			;;
		esac
		if [ "$altgr" ]; then
		    altgr=lv3:$altgr
		fi

		db_get keyboard-configuration/compose
		compose=''
		case "$RET" in
		    No?compose?key)
			compose='';;
		    Right?Alt*)
			if [ "$ralt_allocated" != yes ]; then
			    compose=ralt
			    ralt_allocated=yes
			fi;;
		    Right?Logo?key)
			if [ "$rwin_allocated" != yes ]; then
			    compose=rwin
			    rwin_allocated=yes
			fi;;
		    Left?Logo?key)
			if [ "$lwin_allocated" != yes ]; then
			    compose=lwin 
			    lwin_allocated=yes
			fi;;
		    Right?Control)
			if [ "$rctrl_allocated" != yes ]; then
			    compose=rctrl 
			    rctrl_allocated=yes
			fi;;
		    Menu?key)
			if [ "$menu_allocated" != yes ]; then
			    compose=menu
			    menu_allocated=yes
			fi;;
		    Caps?Lock)
			if [ "$caps_allocated" != yes ]; then
			    compose=caps
			    caps_allocated=yes
			fi;;
		    *)
			echo Unknown compose key option
			exit 1
			;;
		esac
		if [ "$compose" ]; then
		    compose=compose:$compose
		fi
		
		db_get keyboard-configuration/ctrl_alt_bksp
		if [ "$RET" = true ]; then
		    terminate=terminate:ctrl_alt_bksp
		else
		    terminate=''
		fi
		
		# A fix for #566009
		if [ "$ralt_allocated" = yes -a "$altgr" = lv3:ralt_alt ]; then
		    altgr=''
		fi

		case "$XKBLAYOUT" in
		    *,*)
		        leds=grp_led:scroll;;
		    *)
			leds='';;
		esac
		
		options=$(
		    echo $toggle $switch $altgr $compose $terminate $leds \
			| sed -e 's/^ *//' -e 's/ *$//' -e 's/  */,/g'
		)
		db_set keyboard-configuration/optionscode "$options"
	    fi
	    ;;
	*)
	    break
	    ;;
    esac
    old_state=$starting_state
done

if [ $STATE -eq 0 ]; then
    exit 10
else
    db_set keyboard-configuration/store_defaults_in_debconf_db false
fi

exit 0

Youez - 2016 - github.com/yon3zu
LinuXploit