#!/usr/bin/perl

#     ckbcomp -- translate XKB layout to loadkeys or kbdcontrol format
#     Copyright © 2005,2006 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

use warnings 'all';
use strict;

my $debug_flag = 1;
sub debug {
    if ($debug_flag) {
	print STDERR "@_";
    }
}

sub warning {
    print STDERR  "WARNING: @_";
}

########### ARGUMENTS ###############################################

my $charmap;
my $compose_charmap;
my $acm;

my $verbosity = 0;

my $installdir=$0;
$installdir =~ s|/[^/]*$||g;
if ($installdir =~ m|/bin$|) {
    $installdir =~ s|/bin$||;
} else {
    $installdir .= "/..";
}
if ( $installdir eq '' || ! -d "$installdir/bin") {
    $installdir = '/usr';
}

my @xdirs = ('/etc/console-setup/ckb',
             "$installdir/etc/console-setup/ckb",
	     '/usr/local/share/X11/xkb',
	     '/usr/share/X11/xkb',
	     '/etc/X11/xkb');

my $keycodes;
my $symbols;

my $rules;
my $model;
my @layouts;
my @variants = ();
my @options = ();
my $compact = 0;
my $backspace = '';
my $freebsd = 0;

while (@ARGV) {
    $_ = shift @ARGV;
    if (s/^-//) {
	if (/^charmap$/) {
	    if ($charmap) {
		die "$0: No more than one -charmap option is allowed\n";
	    }
	    $charmap = $ARGV[0];
	    shift @ARGV;
	} elsif (/^ccharmap$/) {
	    if ($compose_charmap) {
		die "$0: No more than one -ccharmap option is allowed\n";
	    }
	    $compose_charmap = $ARGV[0];
	    shift @ARGV;
	} elsif (/^v(erbose)?$/) {
	    if ($verbosity) {
		die "$0: No more than one -verbose option is allowed\n";
	    }
	    if ($ARGV[0] =~ /^[0-9]|10$/) {
		$verbosity = $ARGV[0];
		shift @ARGV;
	    } else {
		$verbosity = 5;
	    }
	} elsif (/^I(.*)$/) {
	    @xdirs = ($1, @xdirs);
	} elsif (/^keycodes$/) {
	    if ($keycodes) {
		die "$0: No more than one -keycodes option is allowed\n";
	    }
	    $keycodes = $ARGV[0];
	    shift @ARGV;
	} elsif (/^symbols$/) {
	    if ($symbols) {
		die "$0: No more than one -symbols option is allowed\n";
	    }
	    $symbols = $ARGV[0];
	    shift @ARGV;
	} elsif (/^rules$/) {
	    if ($rules) {
		die "$0: No more than one -rules option is allowed\n";
	    }
	    $rules = $ARGV[0];
	    shift @ARGV;
	} elsif (/^model$/) {
	    if ($model) {
		die "$0: No more than one -model option is allowed\n";
	    }
	    $model = $ARGV[0];
	    $model =~ s/[[:space:]]//g;
	    shift @ARGV;
	} elsif (/^layout$/) {
	    if (@layouts) {
		die "$0: No more than one -layout option is allowed\n";
	    }
	    $ARGV[0] =~ s/[[:space:]]//g;
	    @layouts = split (/,/, $ARGV[0], -1);
	    shift @ARGV;
	} elsif (/^variant$/) {
	    if (@variants) {
		die "$0: No more than one -variant option is allowed\n";
	    }
	    $ARGV[0] =~ s/[[:space:]]//g;
	    @variants = split (/,/, $ARGV[0], -1);
	    shift @ARGV;
	} elsif (/^option$/) {
	    $ARGV[0] =~ s/[[:space:]]//g;
	    @options = (@options, split (/,/, $ARGV[0], -1));
	    shift @ARGV;
	} elsif (/^help$|^-help$|^\?$/) {
	    print <<EOT;
Usage: ckbcomp [args] [<layout> [<variant> [<option> ... ]]]
Where legal args are:
-?,-help            Print this message
-charmap <name>     Specifies the encoding to use
-ccharmap <name>    Specifies the encoding to use for compose sequences
-I<dir>             Add <dir> to list of directories to be used
-keycodes <name>    Specifies keycodes component name
-symbols <name>     Specifies symbols component name
-rules <name>       Name of rules file to use
-model <name>       Specifies model used to choose component names
-layout <name>      Specifies layout used to choose component names
-variant <name>     Specifies layout variant used to choose component names
-option <name>      Adds an option used to choose component names
-v[erbose] [<lvl>]  Sets verbosity (1..10).  Higher values yield
                    more messages
-compact            Generate compact keymap
-freebsd            Generate keymap for FreeBSD
-backspace bs|del   Backspace is BS (^h) or DEL (^?)
EOT
            exit 0;
	} elsif (/^compact$/) {
	    $compact = 1;
	} elsif (/^freebsd$/) {
	    $freebsd = 1;
	} elsif (/^backspace$/) {
	    $backspace = $ARGV[0];
            if ($backspace ne 'del' && $backspace ne 'bs') {
                die "$0: Option -backspace accepts either del or bs\n";
            }
            shift @ARGV;
	} else {
	    die "$0: Unknown option -$_\n";
	}
    } else {
	if (! @layouts) {
	    $_ =~ s/[[:space:]]//g;
	    @layouts = split (/,/, $_, -1);
	    @layouts = ('us') if (! @layouts);
	} elsif (! @variants) {
	    $_ =~ s/[[:space:]]//g;
	    @variants = split (/,/, $_, -1);
	    @variants = ('') if (! @variants);
	} else {
	    $_ =~ s/[[:space:]]//g;
	    @options = (@options, split (/,/, $_, -1));
	}
    }
}

$rules = 'base' if (! $rules);
$model = 'pc104' if (! $model);
$backspace = $freebsd ? 'bs' : 'del' if (! $backspace);

########### GLOBAL VARIABLES #########################################

my %rules_variables = (); # The variables defined in the rules file

my $arch = 'at'; # The name of a mapping between X key codes and kernel
                 # keycodes

my %acmtable; # Unicode -> legacy code (defined only when -charmap is given)

my $KEYMAP = ''; # This variable contains the generated keymap

my $broken_caps = 0; # In unicode mode Caps_Lock doesn't work for non-ASCII
                     # letters.  1 = the keymap contains non-ascii letters.
                     # See http://bugzilla.kernel.org/show_bug.cgi?id=7746#c21

my %keycodes_table; # x keysym -> x key code
my %aliases;        # x keysym -> x keysym

my %symbols_table;   # x key code -> [[symbols for group0,...],
                     #                [symbols for group1,...], ...]
my %types_table;     # x key code -> key type (i.e. "TWO_LEVEL")

my $augment_method = 1;   # Constants for different XKB include methods
my $override_method = 2;
my $replace_method = 3;
my $alternate_method = 4;
my $ignore_method = 5;    # This is not a XKB method and means "don't include"

my $filename;       # The name of the currently read file
my $stream = '';    # The contents of $filename that still has not been parsed
my $method = $override_method; # The current method (by default "override")
my $base_group = 0; # The base group to include in (for "symbols" files only)

my %kernel_modifiers = ( # Linux
                         'Shift' => 0x01,
                         'Shift_Lock' => 0x01,
                         'AltGr' => 0x02,
                         'AltGr_Lock' => 0x02,
                         'Control' => 0x04,
                         'Control_Lock' => 0x04,
                         'Alt' => 0x08,
                         'Alt_Lock' => 0x08,
                         'ShiftL' => 0x10,
                         'ShiftL_Lock' => 0x10,
                         'ShiftR' => 0x20,
                         'ShiftR_Lock' => 0x20,
                         'CtrlL' => 0x40,
                         'CtrlL_Lock' => 0x40,
                         'CtrlR' => 0x80,
                         'CtrlR_Lock' => 0x80,
                         # FreeBSD
                         'lshift' => 0x01,
                         'rshift' => 0x01,
                         'shifta' => 0x01, # is this correct ?
                         'lshifta' => 0x01, # is this correct ?
                         'rshifta' => 0x01, # is this correct ?
                         'alt' => 0x02,
                         'lalt' => 0x02,
                         'ralt' => 0x02,
                         'alta' => 0x02, # is this correct ?
                         'lalta' => 0x02, # is this correct ?
                         'ralta' => 0x02, # is this correct ?
                         'ctrl' => 0x04,
                         'lctrl' => 0x04,
                         'rctrl' => 0x04,
                         'ctrla' => 0x04, # is this correct ?
                         'lctrla' => 0x04, # is this correct ?
                         'rctrla' => 0x04, # is this correct ?
                         'alock' => 0x10,
                         'ashift' => 0x10,
    );

my @modifier_combinations = ('plain',
                             'shift',
                             'altgr',
                             'altgr shift',
                             'control',
                             'control shift',
                             'control altgr',
                             'control altgr shift',
                             'alt',
                             'alt shift',
                             'alt altgr',
                             'alt altgr shift',
                             'alt control',
                             'alt control shift',
                             'alt control altgr',
                             'alt control altgr shift',
                             'shiftl',
                             'shiftl shift',
                             'shiftl altgr',
                             'shiftl altgr shift',
                             'shiftl control',
                             'shiftl control shift',
                             'shiftl control altgr',
                             'shiftl control altgr shift',
                             'shiftl alt',
                             'shiftl alt shift',
                             'shiftl alt altgr',
                             'shiftl alt altgr shift',
                             'shiftl alt control',
                             'shiftl alt control shift',
                             'shiftl alt control altgr',
                             'shiftl alt control altgr shift',
                             'shiftr',
                             'shiftr shift',
                             'shiftr altgr',
                             'shiftr altgr shift',
                             'shiftr control',
                             'shiftr control shift',
                             'shiftr control altgr',
                             'shiftr control altgr shift',
                             'shiftr alt',
                             'shiftr alt shift',
                             'shiftr alt altgr',
                             'shiftr alt altgr shift',
                             'shiftr alt control',
                             'shiftr alt control shift',
                             'shiftr alt control altgr',
                             'shiftr alt control altgr shift',
                             'shiftr shiftl',
                             'shiftr shiftl shift',
                             'shiftr shiftl altgr',
                             'shiftr shiftl altgr shift',
                             'shiftr shiftl control',
                             'shiftr shiftl control shift',
                             'shiftr shiftl control altgr',
                             'shiftr shiftl control altgr shift',
                             'shiftr shiftl alt',
                             'shiftr shiftl alt shift',
                             'shiftr shiftl alt altgr',
                             'shiftr shiftl alt altgr shift',
                             'shiftr shiftl alt control',
                             'shiftr shiftl alt control shift',
                             'shiftr shiftl alt control altgr',
                             'shiftr shiftl alt control altgr shift',
                             'ctrll',
                             'ctrll shift',
                             'ctrll altgr',
                             'ctrll altgr shift',
                             'ctrll control',
                             'ctrll control shift',
                             'ctrll control altgr',
                             'ctrll control altgr shift',
                             'ctrll alt',
                             'ctrll alt shift',
                             'ctrll alt altgr',
                             'ctrll alt altgr shift',
                             'ctrll alt control',
                             'ctrll alt control shift',
                             'ctrll alt control altgr',
                             'ctrll alt control altgr shift',
                             'ctrll shiftl',
                             'ctrll shiftl shift',
                             'ctrll shiftl altgr',
                             'ctrll shiftl altgr shift',
                             'ctrll shiftl control',
                             'ctrll shiftl control shift',
                             'ctrll shiftl control altgr',
                             'ctrll shiftl control altgr shift',
                             'ctrll shiftl alt',
                             'ctrll shiftl alt shift',
                             'ctrll shiftl alt altgr',
                             'ctrll shiftl alt altgr shift',
                             'ctrll shiftl alt control',
                             'ctrll shiftl alt control shift',
                             'ctrll shiftl alt control altgr',
                             'ctrll shiftl alt control altgr shift',
                             'ctrll shiftr',
                             'ctrll shiftr shift',
                             'ctrll shiftr altgr',
                             'ctrll shiftr altgr shift',
                             'ctrll shiftr control',
                             'ctrll shiftr control shift',
                             'ctrll shiftr control altgr',
                             'ctrll shiftr control altgr shift',
                             'ctrll shiftr alt',
                             'ctrll shiftr alt shift',
                             'ctrll shiftr alt altgr',
                             'ctrll shiftr alt altgr shift',
                             'ctrll shiftr alt control',
                             'ctrll shiftr alt control shift',
                             'ctrll shiftr alt control altgr',
                             'ctrll shiftr alt control altgr shift',
                             'ctrll shiftr shiftl',
                             'ctrll shiftr shiftl shift',
                             'ctrll shiftr shiftl altgr',
                             'ctrll shiftr shiftl altgr shift',
                             'ctrll shiftr shiftl control',
                             'ctrll shiftr shiftl control shift',
                             'ctrll shiftr shiftl control altgr',
                             'ctrll shiftr shiftl control altgr shift',
                             'ctrll shiftr shiftl alt',
                             'ctrll shiftr shiftl alt shift',
                             'ctrll shiftr shiftl alt altgr',
                             'ctrll shiftr shiftl alt altgr shift',
                             'ctrll shiftr shiftl alt control',
                             'ctrll shiftr shiftl alt control shift',
                             'ctrll shiftr shiftl alt control altgr',
                             'ctrll shiftr shiftl alt control altgr shift',
			    );

# Some Unicodes cause the kernel/loadkeys to issue "Segmentation fault"
# kbd 1.15-1 (deliberately) fails on anything in the range 0xf000..0xffff;
# see http://bugs.debian.org/500116.
my %forbidden;
{
    for my $i (0xf000..0xffff) {
	$forbidden{$i} = 1;
    }
}

my %xkbsym_table = (
    'space' => '0020',
    'exclam' => '0021',
    'quotedbl' => '0022',
    'numbersign' => '0023',
    'dollar' => '0024',
    'percent' => '0025',
    'ampersand' => '0026',
    'apostrophe' => '0027',
    'quoteright' => '0027',
    'parenleft' => '0028',
    'parenlef' => '0028', # Is this recognised by X ? (speling error)
    'parenright' => '0029',
    'asterisk' => '002a',
    'asterix' => '002a', # Is this recognised by X ? (speling error)
    'plus' => '002b',
    'comma' => '002c',
    'minus' => '002d',
    'period' => '002e',
    'slash' => '002f',
    '0' => '0030',
    '1' => '0031',
    '2' => '0032',
    '3' => '0033',
    '4' => '0034',
    '5' => '0035',
    '6' => '0036',
    '7' => '0037',
    '8' => '0038',
    '9' => '0039',
    'colon' => '003a',
    'semicolon' => '003b',
    'less' => '003c',
    'equal' => '003d',
    'greater' => '003e',
    'question' => '003f',
    'at' => '0040',
    'A' => '0041',
    'B' => '0042',
    'C' => '0043',
    'D' => '0044',
    'E' => '0045',
    'F' => '0046',
    'G' => '0047',
    'H' => '0048',
    'I' => '0049',
    'J' => '004a',
    'K' => '004b',
    'L' => '004c',
    'M' => '004d',
    'N' => '004e',
    'O' => '004f',
    'P' => '0050',
    'Q' => '0051',
    'R' => '0052',
    'S' => '0053',
    'T' => '0054',
    'U' => '0055',
    'V' => '0056',
    'W' => '0057',
    'X' => '0058',
    'Y' => '0059',
    'Z' => '005a',
    'bracketleft' => '005b',
    'backslash' => '005c',
    'backlash' => '005c',   # Is this recognised by X ? (speling error)
    'bracketright' => '005d',
    'circumflex' => '005e',
    'asciicircum' => '005e',
    'underscore' => '005f',
    'grave' => '0060',
    'quoteleft' => '0060',
    'a' => '0061',
    'b' => '0062',
    'c' => '0063',
    'd' => '0064',
    'e' => '0065',
    'f' => '0066',
    'g' => '0067',
    'h' => '0068',
    'i' => '0069',
    'j' => '006a',
    'k' => '006b',
    'l' => '006c',
    'm' => '006d',
    'n' => '006e',
    'o' => '006f',
    'p' => '0070',
    'q' => '0071',
    'r' => '0072',
    's' => '0073',
    't' => '0074',
    'u' => '0075',
    'v' => '0076',
    'w' => '0077',
    'x' => '0078',
    'y' => '0079',
    'z' => '007a',
    'braceleft' => '007b',
    'pipe' => '007c', # Is this recognised by X ?
    'bar' => '007c',
    'braceright' => '007d',
    'asciitilde' => '007e',
    'nobreakspace' => '00a0',
    'exclamdown' => '00a1',
    'cent' => '00a2',
    'sterling' => '00a3',
    'currency' => '00a4',
    'yen' => '00a5',
    'brokenbar' => '00a6',
    'section' => '00a7',
    'diaeresis' => '00a8',
    'copyright' => '00a9',
    'ordfeminine' => '00aa',
    'guillemotleft' => '00ab',
    'notsign' => '00ac',
    'hyphen' => '00ad',
    'registered' => '00ae',
    'macron' => '00af',
    'overbar' => '00af',
    'degree' => '00b0',
    'plusminus' => '00b1',
    'twosuperior' => '00b2',
    'threesuperior' => '00b3',
    'acute' => '0027', # APOSTROPHE instead of ACUTE ACCENT
    'mu' => '00b5',
    'paragraph' => '00b6',
    'periodcentered' => '00b7',
    'cedilla' => '00b8',
    'onesuperior' => '00b9',
    'masculine' => '00ba',
    'guillemotright' => '00bb',
    'onequarter' => '00bc',
    'onehalf' => '00bd',
    'threequarters' => '00be',
    'questiondown' => '00bf',
    'Agrave' => '00c0',
    'Aacute' => '00c1',
    'Acircumflex' => '00c2',
    'Atilde' => '00c3',
    'Adiaeresis' => '00c4',
    'Aring' => '00c5',
    'AE' => '00c6',
    'Ccedilla' => '00c7',
    'Egrave' => '00c8',
    'Eacute' => '00c9',
    'Ecircumflex' => '00ca',
    'Ediaeresis' => '00cb',
    'Igrave' => '00cc',
    'Iacute' => '00cd',
    'Icircumflex' => '00ce',
    'Idiaeresis' => '00cf',
    'ETH' => '00d0',
    'Eth' => '00d0',
    'Ntilde' => '00d1',
    'Ograve' => '00d2',
    'Oacute' => '00d3',
    'Ocircumflex' => '00d4',
    'Otilde' => '00d5',
    'Odiaeresis' => '00d6',
    'multiply' => '00d7',
    'Ooblique' => '00d8',
    'Oslash' => '00d8',
    'Ugrave' => '00d9',
    'Uacute' => '00da',
    'Ucircumflex' => '00db',
    'Udiaeresis' => '00dc',
    'Yacute' => '00dd',
    'THORN' => '00de',
    'Thorn' => '00de',
    'ssharp' => '00df',
    'agrave' => '00e0',
    'aacute' => '00e1',
    'acircumflex' => '00e2',
    'atilde' => '00e3',
    'adiaeresis' => '00e4',
    'aring' => '00e5',
    'ae' => '00e6',
    'ccedilla' => '00e7',
    'egrave' => '00e8',
    'eacute' => '00e9',
    'ecircumflex' => '00ea',
    'ediaeresis' => '00eb',
    'igrave' => '00ec',
    'iacute' => '00ed',
    'icircumflex' => '00ee',
    'idiaeresis' => '00ef',
    'eth' => '00f0',
    'ntilde' => '00f1',
    'ograve' => '00f2',
    'oacute' => '00f3',
    'ocircumflex' => '00f4',
    'otilde' => '00f5',
    'odiaeresis' => '00f6',
    'division' => '00f7',
    'oslash' => '00f8',
    'ooblique' => '00f8',
    'ugrave' => '00f9',
    'uacute' => '00fa',
    'ucircumflex' => '00fb',
    'udiaeresis' => '00fc',
    'yacute' => '00fd',
    'thorn' => '00fe',
    'ydiaeresis' => '00ff',
    'Amacron' => '0100',
    'amacron' => '0101',
    'Abreve' => '0102',
    'abreve' => '0103',
    'Aogonek' => '0104',
    'aogonek' => '0105',
    'Cacute' => '0106',
    'cacute' => '0107',
    'Ccircumflex' => '0108',
    'ccircumflex' => '0109',
    'Cabovedot' => '010a',
    'cabovedot' => '010b',
    'Ccaron' => '010c',
    'ccaron' => '010d',
    'Dcaron' => '010e',
    'dcaron' => '010f',
    'Dstroke' => '0110',
    'dstroke' => '0111',
    'Emacron' => '0112',
    'emacron' => '0113',
    'Eabovedot' => '0116',
    'eabovedot' => '0117',
    'Eogonek' => '0118',
    'eogonek' => '0119',
    'Ecaron' => '011a',
    'ecaron' => '011b',
    'Gcircumflex' => '011c',
    'gcircumflex' => '011d',
    'Gbreve' => '011e',
    'gbreve' => '011f',
    'Gabovedot' => '0120',
    'gabovedot' => '0121',
    'Gcedilla' => '0122',
    'gcedilla' => '0123',
    'Hcircumflex' => '0124',
    'hcircumflex' => '0125',
    'Hstroke' => '0126',
    'hstroke' => '0127',
    'Itilde' => '0128',
    'itilde' => '0129',
    'Imacron' => '012a',
    'imacron' => '012b',
    'Ibreve' => '012c',
    'ibreve' => '012d',
    'Iogonek' => '012e',
    'iogonek' => '012f',
    'Iabovedot' => '0130',
    'idotless' => '0131',
    'Jcircumflex' => '0134',
    'jcircumflex' => '0135',
    'Kcedilla' => '0136',
    'kcedilla' => '0137',
    'kra' => '0138',
    'Lacute' => '0139',
    'lacute' => '013a',
    'Lcedilla' => '013b',
    'lcedilla' => '013c',
    'Lcaron' => '013d',
    'lcaron' => '013e',
    'Lstroke' => '0141',
    'lstroke' => '0142',
    'Nacute' => '0143',
    'nacute' => '0144',
    'Ncedilla' => '0145',
    'ncedilla' => '0146',
    'Ncaron' => '0147',
    'ncaron' => '0148',
    'ENG' => '014a',
    'eng' => '014b',
    'Omacron' => '014c',
    'omacron' => '014d',
    'Odoubleacute' => '0150',
    'odoubleacute' => '0151',
    'OE' => '0152',
    'oe' => '0153',
    'Racute' => '0154',
    'racute' => '0155',
    'Rcedilla' => '0156',
    'rcedilla' => '0157',
    'Rcaron' => '0158',
    'rcaron' => '0159',
    'Sacute' => '015a',
    'sacute' => '015b',
    'Scircumflex' => '015c',
    'scircumflex' => '015d',
    'Scedilla' => '015e',
    'scedilla' => '015f',
    'Scaron' => '0160',
    'scaron' => '0161',
    'Tcedilla' => '0162',
    'tcedilla' => '0163',
    'Tcaron' => '0164',
    'tcaron' => '0165',
    'Tslash' => '0166',
    'tslash' => '0167',
    'Utilde' => '0168',
    'utilde' => '0169',
    'Umacron' => '016a',
    'umacron' => '016b',
    'Ubreve' => '016c',
    'ubreve' => '016d',
    'Uring' => '016e',
    'uring' => '016f',
    'Udoubleacute' => '0170',
    'udoubleacute' => '0171',
    'Uogonek' => '0172',
    'uogonek' => '0173',
    'Wcircumflex' => '0174',
    'wcircumflex' => '0175',
    'Ycircumflex' => '0176',
    'ycircumflex' => '0177',
    'Ydiaeresis' => '0178',
    'Zacute' => '0179',
    'zacute' => '017a',
    'Zabovedot' => '017b',
    'zabovedot' => '017c',
    'Zcaron' => '017d',
    'zcaron' => '017e',
    'SCHWA' => '018f',
    'Schwa' => '018f', # Is this recognised by X ?
    'function' => '0192',
    'Obarred' => '019f',
    'Ohorn' => '01a0', # Is this recognised by X ?
    'ohorn' => '01a1', # Is this recognised by X ?
    'Uhorn' => '01af',
    'uhorn' => '01b0',
    'Zstroke' => '01b5',
    'zstroke' => '01b6',
    'EZH' => '01b7',
    'Ezh' => '01b7',
    'Ocaron' => '01d1',
    'ocaron' => '01d2',
    'Gcaron' => '01e6', # Is this recognised by X ?
    'gcaron' => '01e7', # Is this recognised by X ?
    'schwa' => '0259', # Is this recognised by X ?
    'obarred' => '0275',
    'ezh' => '0292',
    'caron' => '02c7',
    'breve' => '02d8',
    'abovedot' => '02d9',
    'ogonek' => '02db',
    'doubleacute' => '02dd',
    'Greek_accentdieresis' => '0385',
    'Greek_ALPHAaccent' => '0386',
    'Greek_EPSILONaccent' => '0388',
    'Greek_ETAaccent' => '0389',
    'Greek_IOTAaccent' => '038a',
    'Greek_OMICRONaccent' => '038c',
    'Greek_UPSILONaccent' => '038e',
    'Greek_OMEGAaccent' => '038f',
    'Greek_iotaaccentdieresis' => '0390',
    'Greek_ALPHA' => '0391',
    'Greek_BETA' => '0392',
    'Greek_GAMMA' => '0393',
    'Greek_DELTA' => '0394',
    'Greek_EPSILON' => '0395',
    'Greek_ZETA' => '0396',
    'Greek_ETA' => '0397',
    'Greek_THETA' => '0398',
    'Greek_IOTA' => '0399',
    'Greek_KAPPA' => '039a',
    'Greek_LAMBDA' => '039b',
    'Greek_LAMDA' => '039b',   # Is this recognised by X ? (speling error)
    'Greek_MU' => '039c',
    'Greek_NU' => '039d',
    'Greek_XI' => '039e',
    'Greek_OMICRON' => '039f',
    'Greek_PI' => '03a0',
    'Greek_RHO' => '03a1',
    'Greek_SIGMA' => '03a3',
    'Greek_TAU' => '03a4',
    'Greek_UPSILON' => '03a5',
    'Greek_PHI' => '03a6',
    'Greek_CHI' => '03a7',
    'Greek_PSI' => '03a8',
    'Greek_OMEGA' => '03a9',
    'Greek_IOTAdiaeresis' => '03aa',
    'Greek_UPSILONdieresis' => '03ab',
    'Greek_alphaaccent' => '03ac',
    'Greek_epsilonaccent' => '03ad',
    'Greek_etaaccent' => '03ae',
    'Greek_iotaaccent' => '03af',
    'Greek_upsilonaccentdieresis' => '03b0',
    'Greek_alpha' => '03b1',
    'Greek_beta' => '03b2',
    'Greek_gamma' => '03b3',
    'Greek_delta' => '03b4',
    'Greek_epsilon' => '03b5',
    'Greek_zeta' => '03b6',
    'Greek_eta' => '03b7',
    'Greek_theta' => '03b8',
    'Greek_iota' => '03b9',
    'Greek_kappa' => '03ba',
    'Greek_lambda' => '03bb',
    'Greek_lamda' => '03bb', # Is this recognised by X ? (speling error)
    'Greek_mu' => '03bc',
    'Greek_nu' => '03bd',
    'Greek_xi' => '03be',
    'Greek_omicron' => '03bf',
    'Greek_pi' => '03c0',
    'Greek_rho' => '03c1',
    'Greek_finalsmallsigma' => '03c2',
    'Greek_sigma' => '03c3',
    'Greek_tau' => '03c4',
    'Greek_upsilon' => '03c5',
    'Greek_phi' => '03c6',
    'Greek_chi' => '03c7',
    'Greek_psi' => '03c8',
    'Greek_omega' => '03c9',
    'Greek_iotadieresis' => '03ca',
    'Greek_upsilondieresis' => '03cb',
    'Greek_omicronaccent' => '03cc',
    'Greek_upsilonaccent' => '03cd',
    'Greek_omegaaccent' => '03ce',
    'Cyrillic_IO' => '0401',
    'Serbian_DJE' => '0402',
    'Macedonia_GJE' => '0403',
    'Ukrainian_IE' => '0404',
    'Macedonia_DSE' => '0405',
    'Ukrainian_I' => '0406',
    'Ukrainian_YI' => '0407',
    'Cyrillic_JE' => '0408',
    'Cyrillic_LJE' => '0409',
    'Cyrillic_NJE' => '040a',
    'Serbian_TSHE' => '040b',
    'Macedonia_KJE' => '040c',
    'Byelorussian_SHORTU' => '040e',
    'Cyrillic_DZHE' => '040f',
    'Cyrillic_A' => '0410',
    'Cyrillic_BE' => '0411',
    'Cyrillic_VE' => '0412',
    'Cyrillic_GHE' => '0413',
    'Cyrillic_DE' => '0414',
    'Cyrillic_IE' => '0415',
    'Cyrillic_ZHE' => '0416',
    'Cyrillic_ZH' => '0416',
    'Cyrillic_ZE' => '0417',
    'Cyrillic_I' => '0418',
    'Cyrillic_SHORTI' => '0419',
    'Cyrillic_KA' => '041a',
    'Cyrillic_EL' => '041b',
    'Cyrillic_EM' => '041c',
    'Cyrillic_EN' => '041d',
    'Cyrillic_N' => '041d',
    'Cyrillic_O' => '041e',
    'Cyrillic_PE' => '041f',
    'Cyrillic_ER' => '0420',
    'Cyrillic_ES' => '0421',
    'Cyrillic_TE' => '0422',
    'Cyrillic_U' => '0423',
    'Cyrillic_EF' => '0424',
    'Cyrillic_F' => '0424',
    'Cyrillic_HA' => '0425',
    'Cyrillic_TSE' => '0426',
    'Cyrillic_CHE' => '0427',
    'Cyrillic_SHA' => '0428',
    'Cyrillic_SHCHA' => '0429',
    'Cyrillic_HARDSIGN' => '042a',
    'Cyrillic_YERU' => '042b',
    'Cyrillic_UI' => '042b',
    'Cyrillic_SOFTSIGN' => '042c',
    'Cyrillic_E' => '042d',
    'Cyrillic_YU' => '042e',
    'Cyrillic_YA' => '042f',
    'Cyrillic_a' => '0430',
    'Cyrillic_be' => '0431',
    'Cyrillic_ve' => '0432',
    'Cyrillic_ghe' => '0433',
    'Cyrillic_de' => '0434',
    'Cyrillic_ie' => '0435',
    'Cyrillic_zhe' => '0436',
    'Cyrillic_zh' => '0436',
    'Cyrillic_ze' => '0437',
    'Cyrillic_i' => '0438',
    'Cyrillic_shorti' => '0439',
    'Cyrillic_ka' => '043a',
    'Cyrillic_el' => '043b',
    'Cyrillic_em' => '043c',
    'Cyrillic_en' => '043d',
    'Cyrillic_n' => '043d',
    'Cyrillic_o' => '043e',
    'Cyrillic_pe' => '043f',
    'Cyrillic_er' => '0440',
    'Cyrillic_es' => '0441',
    'Cyrillic_te' => '0442',
    'Cyrillic_u' => '0443',
    'Cyrillic_ef' => '0444',
    'Cyrillic_f' => '0444',
    'Cyrillic_ha' => '0445',
    'Cyrillic_tse' => '0446',
    'Cyrillic_che' => '0447',
    'Cyrillic_sha' => '0448',
    'Cyrillic_shcha' => '0449',
    'Cyrillic_hardsign' => '044a',
    'Cyrillic_yeru' => '044b',
    'Cyrillic_ui' => '044b',
    'Cyrillic_softsign' => '044c',
    'Cyrillic_e' => '044d',
    'Cyrillic_yu' => '044e',
    'Cyrillic_ya' => '044f',
    'Cyrillic_io' => '0451',
    'Serbian_dje' => '0452',
    'Macedonia_gje' => '0453',
    'Ukrainian_ie' => '0454',
    'Macedonia_dse' => '0455',
    'Ukrainian_i' => '0456',
    'Ukrainian_yi' => '0457',
    'Cyrillic_je' => '0458',
    'Cyrillic_lje' => '0459',
    'Cyrillic_nje' => '045a',
    'Serbian_tshe' => '045b',
    'Macedonia_kje' => '045c',
    'Byelorussian_shortu' => '045e',
    'Cyrillic_dzhe' => '045f',
    'Ukrainian_GHE_WITH_UPTURN' => '0490', # Is this recognised by X ?
    'Ukrainian_ghe_with_upturn' => '0491', # Is this recognised by X ?
    'Cyrillic_GHE_bar' => '0492', # Is this recognised by X ?
    'Cyrillic_ghe_bar' => '0493', # Is this recognised by X ?
    'Cyrillic_ZHE_descender' => '0496',
    'Cyrillic_zhe_descender' => '0497',
    'Cyrillic_KA_descender' => '049a', # Is this recognised by X ?
    'Cyrillic_ka_descender' => '049b', # Is this recognised by X ?
    'Cyrillic_KA_vertstroke' => '049c', # Is this recognised by X ?
    'Cyrillic_ka_vertstroke' => '049d', # Is this recognised by X ?
    'Cyrillic_EN_descender' => '04a2', # Is this recognised by X ?
    'Cyrillic_en_descender' => '04a3', # Is this recognised by X ?
    'Cyrillic_U_straight' => '04ae', # Is this recognised by X ?
    'Cyrillic_u_straight' => '04af', # Is this recognised by X ?
    'Cyrillic_U_straight_bar' => '04b0', # Is this recognised by X ?
    'Cyrillic_u_straight_bar' => '04b1', # Is this recognised by X ?
    'Cyrillic_HA_descender' => '04b2', # Is this recognised by X ?
    'Cyrillic_ha_descender' => '04b3', # Is this recognised by X ?
    'Cyrillic_CHE_descender' => '04b6',
    'Cyrillic_che_descender' => '04b7',
    'Cyrillic_CHE_vertstroke' => '04b8', # Is this recognised by X ?
    'Cyrillic_che_vertstroke' => '04b9', # Is this recognised by X ?
    'Cyrillic_SHHA' => '04ba', # Is this recognised by X ?
    'Cyrillic_shha' => '04bb', # Is this recognised by X ?
    'Cyrillic_SCHWA' => '04d8', # Is this recognised by X ?
    'Cyrillic_schwa' => '04d9', # Is this recognised by X ?
    'Cyrillic_I_macron' => '04e2',
    'Cyrillic_i_macron' => '04e3',
    'Cyrillic_O_bar' => '04e8', # Is this recognised by X ?
    'Cyrillic_o_bar' => '04e9', # Is this recognised by X ?
    'Cyrillic_U_macron' => '04ee',
    'Cyrillic_u_macron' => '04ef',
    'Armenian_AYB' => '0531',
    'Armenian_BEN' => '0532',
    'Armenian_GIM' => '0533',
    'Armenian_DA' => '0534',
    'Armenian_YECH' => '0535',
    'Armenian_ZA' => '0536',
    'Armenian_E' => '0537',
    'Armenian_AT' => '0538',
    'Armenian_TO' => '0539',
    'Armenian_ZHE' => '053a',
    'Armenian_INI' => '053b',
    'Armenian_LYUN' => '053c',
    'Armenian_KHE' => '053d',
    'Armenian_TSA' => '053e',
    'Armenian_KEN' => '053f',
    'Armenian_HO' => '0540',
    'Armenian_DZA' => '0541',
    'Armenian_GHAT' => '0542',
    'Armenian_TCHE' => '0543',
    'Armenian_MEN' => '0544',
    'Armenian_HI' => '0545',
    'Armenian_NU' => '0546',
    'Armenian_SHA' => '0547',
    'Armenian_VO' => '0548',
    'Armenian_CHA' => '0549',
    'Armenian_PE' => '054a',
    'Armenian_JE' => '054b',
    'Armenian_RA' => '054c',
    'Armenian_SE' => '054d',
    'Armenian_VEV' => '054e',
    'Armenian_TYUN' => '054f',
    'Armenian_RE' => '0550',
    'Armenian_TSO' => '0551',
    'Armenian_VYUN' => '0552',
    'Armenian_PYUR' => '0553',
    'Armenian_KE' => '0554',
    'Armenian_O' => '0555',
    'Armenian_FE' => '0556',
    'Armenian_apostrophe' => '055a',
    'Armenian_accent' => '055b',
    'Armenian_shesht' => '055b',
    'Armenian_amanak' => '055c',
    'Armenian_exclam' => '055c',
    'Armenian_but' => '055d',
    'Armenian_separation_mark' => '055d',
    'Armenian_paruyk' => '055e',
    'Armenian_question' => '055e',
    'Armenian_ayb' => '0561',
    'Armenian_ben' => '0562',
    'Armenian_gim' => '0563',
    'Armenian_da' => '0564',
    'Armenian_yech' => '0565',
    'Armenian_za' => '0566',
    'Armenian_e' => '0567',
    'Armenian_at' => '0568',
    'Armenian_to' => '0569',
    'Armenian_zhe' => '056a',
    'Armenian_ini' => '056b',
    'Armenian_lyun' => '056c',
    'Armenian_khe' => '056d',
    'Armenian_tsa' => '056e',
    'Armenian_ken' => '056f',
    'Armenian_ho' => '0570',
    'Armenian_dza' => '0571',
    'Armenian_ghat' => '0572',
    'Armenian_tche' => '0573',
    'Armenian_men' => '0574',
    'Armenian_hi' => '0575',
    'Armenian_nu' => '0576',
    'Armenian_sha' => '0577',
    'Armenian_vo' => '0578',
    'Armenian_cha' => '0579',
    'Armenian_pe' => '057a',
    'Armenian_je' => '057b',
    'Armenian_ra' => '057c',
    'Armenian_se' => '057d',
    'Armenian_vev' => '057e',
    'Armenian_tyun' => '057f',
    'Armenian_re' => '0580',
    'Armenian_tso' => '0581',
    'Armenian_vyun' => '0582',
    'Armenian_pyur' => '0583',
    'Armenian_ke' => '0584',
    'Armenian_o' => '0585',
    'Armenian_fe' => '0586',
    'Armenian_ligature_ew' => '0587',
    'Armenian_full_stop' => '0589',
    'Armenian_verjaket' => '0589',
    'Armenian_hyphen' => '058a',
    'Armenian_yentamna' => '058a',
    'hebrew_aleph' => '05d0',
    'hebrew_bet' => '05d1',
    'hebrew_gimel' => '05d2',
    'hebrew_dalet' => '05d3',
    'hebrew_he' => '05d4',
    'hebrew_waw' => '05d5',
    'hebrew_zain' => '05d6',
    'hebrew_chet' => '05d7',
    'hebrew_tet' => '05d8',
    'hebrew_yod' => '05d9',
    'hebrew_finalkaph' => '05da',
    'hebrew_kaph' => '05db',
    'hebrew_lamed' => '05dc',
    'hebrew_finalmem' => '05dd',
    'hebrew_mem' => '05de',
    'hebrew_finalnun' => '05df',
    'hebrew_nun' => '05e0',
    'hebrew_samech' => '05e1',
    'hebrew_ayin' => '05e2',
    'hebrew_finalpe' => '05e3',
    'hebrew_pe' => '05e4',
    'hebrew_finalzade' => '05e5',
    'hebrew_zade' => '05e6',
    'hebrew_qoph' => '05e7',
    'hebrew_resh' => '05e8',
    'hebrew_shin' => '05e9',
    'hebrew_taw' => '05ea',
    'Arabic_comma' => '060c',
    'Arabic_semicolon' => '061b',
    'Arabic_question_mark' => '061f',
    'Arabic_hamza' => '0621',
    'Arabic_maddaonalef' => '0622',
    'Arabic_hamzaonalef' => '0623',
    'Arabic_hamzaonwaw' => '0624',
    'Arabic_hamzaunderalef' => '0625',
    'Arabic_hamzaonyeh' => '0626',
    'Arabic_alef' => '0627',
    'Arabic_beh' => '0628',
    'Arabic_tehmarbuta' => '0629',
    'Arabic_teh' => '062a',
    'Arabic_theh' => '062b',
    'Arabic_jeem' => '062c',
    'Arabic_hah' => '062d',
    'Arabic_khah' => '062e',
    'Arabic_dal' => '062f',
    'Arabic_thal' => '0630',
    'Arabic_ra' => '0631',
    'Arabic_zain' => '0632',
    'Arabic_seen' => '0633',
    'Arabic_sheen' => '0634',
    'Arabic_sad' => '0635',
    'Arabic_dad' => '0636',
    'Arabic_tah' => '0637',
    'Arabic_zah' => '0638',
    'Arabic_ain' => '0639',
    'Arabic_ghain' => '063a',
    'Arabic_tatweel' => '0640',
    'Arabic_feh' => '0641',
    'Arabic_qaf' => '0642',
    'Arabic_kaf' => '0643',
    'Arabic_lam' => '0644',
    'Arabic_meem' => '0645',
    'Arabic_noon' => '0646',
    'Arabic_ha' => '0647',
    'Arabic_heh' => '0647', # Is this recognised by X ?
    'Arabic_waw' => '0648',
    'Arabic_alefmaksura' => '0649',
    'Arabic_yeh' => '064a',
    'Arabic_fathatan' => '064b',
    'Arabic_dammatan' => '064c',
    'Arabic_kasratan' => '064d',
    'Arabic_fatha' => '064e',
    'Arabic_damma' => '064f',
    'Arabic_kasra' => '0650',
    'Arabic_shadda' => '0651',
    'Arabic_sukun' => '0652',
    'Arabic_madda_above' => '0653', # Is this recognised by X ?
    'Arabic_hamza_above' => '0654', # Is this recognised by X ?
    'Arabic_hamza_below' => '0655', # Is this recognised by X ?
    'Arabic_0' => '0660',
    'Arabic_1' => '0661',
    'Arabic_2' => '0662',
    'Arabic_3' => '0663',
    'Arabic_4' => '0664',
    'Arabic_5' => '0665',
    'Arabic_6' => '0666',
    'Arabic_7' => '0667',
    'Arabic_8' => '0668',
    'Arabic_9' => '0669',
    'Arabic_percent' => '066a',
    'Arabic_superscript_alef' => '0670', # Is this recognised by X ?
    'Arabic_tteh' => '0679',
    'Arabic_peh' => '067e',
    'Arabic_tcheh' => '0686',
    'Arabic_ddal' => '0688',
    'Arabic_rreh' => '0691',
    'Arabic_jeh' => '0698',
    'Arabic_veh' => '06a4',
    'Arabic_keheh' => '06a9',
    'Arabic_gaf' => '06af',
    'Arabic_noon_ghunna' => '06ba',
    'Arabic_heh_doachashmee' => '06be',
    'Arabic_heh_goal' => '06c1',
    'Arabic_farsi_yeh' => '06cc',
    'Farsi_yeh' => '06cc',
    'Arabic_yeh_baree' => '06d2',
    'Arabic_fullstop' => '06d4',
    'Farsi_0' => '06f0',
    'Farsi_1' => '06f1',
    'Farsi_2' => '06f2',
    'Farsi_3' => '06f3',
    'Farsi_4' => '06f4',
    'Farsi_5' => '06f5',
    'Farsi_6' => '06f6',
    'Farsi_7' => '06f7',
    'Farsi_8' => '06f8',
    'Farsi_9' => '06f9',
    'Sinh_ng' => '0d82',
    'Sinh_h2' => '0d83',
    'Sinh_a' => '0d85',
    'Sinh_aa' => '0d86',
    'Sinh_ae' => '0d87',
    'Sinh_aee' => '0d88',
    'Sinh_i' => '0d89',
    'Sinh_ii' => '0d8a',
    'Sinh_u' => '0d8b',
    'Sinh_uu' => '0d8c',
    'Sinh_ri' => '0d8d',
    'Sinh_rii' => '0d8e',
    'Sinh_lu' => '0d8f',
    'Sinh_luu' => '0d90',
    'Sinh_e' => '0d91',
    'Sinh_ee' => '0d92',
    'Sinh_ai' => '0d93',
    'Sinh_o' => '0d94',
    'Sinh_oo' => '0d95',
    'Sinh_au' => '0d96',
    'Sinh_ka' => '0d9a',
    'Sinh_kha' => '0d9b',
    'Sinh_ga' => '0d9c',
    'Sinh_gha' => '0d9d',
    'Sinh_ng2' => '0d9e',
    'Sinh_nga' => '0d9f',
    'Sinh_ca' => '0da0',
    'Sinh_cha' => '0da1',
    'Sinh_ja' => '0da2',
    'Sinh_jha' => '0da3',
    'Sinh_nya' => '0da4',
    'Sinh_jnya' => '0da5',
    'Sinh_nja' => '0da6',
    'Sinh_tta' => '0da7',
    'Sinh_ttha' => '0da8',
    'Sinh_dda' => '0da9',
    'Sinh_ddha' => '0daa',
    'Sinh_nna' => '0dab',
    'Sinh_ndda' => '0dac',
    'Sinh_tha' => '0dad',
    'Sinh_thha' => '0dae',
    'Sinh_dha' => '0daf',
    'Sinh_dhha' => '0db0',
    'Sinh_na' => '0db1',
    'Sinh_ndha' => '0db3',
    'Sinh_pa' => '0db4',
    'Sinh_pha' => '0db5',
    'Sinh_ba' => '0db6',
    'Sinh_bha' => '0db7',
    'Sinh_ma' => '0db8',
    'Sinh_mba' => '0db9',
    'Sinh_ya' => '0dba',
    'Sinh_ra' => '0dbb',
    'Sinh_la' => '0dbd',
    'Sinh_va' => '0dc0',
    'Sinh_sha' => '0dc1',
    'Sinh_ssha' => '0dc2',
    'Sinh_sa' => '0dc3',
    'Sinh_ha' => '0dc4',
    'Sinh_lla' => '0dc5',
    'Sinh_fa' => '0dc6',
    'Sinh_al' => '0dca',
    'Sinh_aa2' => '0dcf',
    'Sinh_ae2' => '0dd0',
    'Sinh_aee2' => '0dd1',
    'Sinh_i2' => '0dd2',
    'Sinh_ii2' => '0dd3',
    'Sinh_u2' => '0dd4',
    'Sinh_uu2' => '0dd6',
    'Sinh_ru2' => '0dd8',
    'Sinh_e2' => '0dd9',
    'Sinh_ee2' => '0dda',
    'Sinh_ai2' => '0ddb',
    'Sinh_o2' => '0ddc',
    'Sinh_oo2' => '0ddd',
    'Sinh_au2' => '0dde',
    'Sinh_lu2' => '0ddf',
    'Sinh_ruu2' => '0df2',
    'Sinh_luu2' => '0df3',
    'Thai_kokai' => '0e01',
    'Thai_khokhai' => '0e02',
    'Thai_khokhuat' => '0e03',
    'Thai_khokhwai' => '0e04',
    'Thai_khokhon' => '0e05',
    'Thai_khorakhang' => '0e06',
    'Thai_ngongu' => '0e07',
    'Thai_chochan' => '0e08',
    'Thai_choching' => '0e09',
    'Thai_chochang' => '0e0a',
    'Thai_soso' => '0e0b',
    'Thai_chochoe' => '0e0c',
    'Thai_yoying' => '0e0d',
    'Thai_dochada' => '0e0e',
    'Thai_topatak' => '0e0f',
    'Thai_thothan' => '0e10',
    'Thai_thonangmontho' => '0e11',
    'Thai_thophuthao' => '0e12',
    'Thai_nonen' => '0e13',
    'Thai_dodek' => '0e14',
    'Thai_totao' => '0e15',
    'Thai_thothung' => '0e16',
    'Thai_thothahan' => '0e17',
    'Thai_thothong' => '0e18',
    'Thai_nonu' => '0e19',
    'Thai_bobaimai' => '0e1a',
    'Thai_popla' => '0e1b',
    'Thai_phophung' => '0e1c',
    'Thai_fofa' => '0e1d',
    'Thai_phophan' => '0e1e',
    'Thai_fofan' => '0e1f',
    'Thai_phosamphao' => '0e20',
    'Thai_moma' => '0e21',
    'Thai_yoyak' => '0e22',
    'Thai_rorua' => '0e23',
    'Thai_ru' => '0e24',
    'Thai_loling' => '0e25',
    'Thai_lu' => '0e26',
    'Thai_wowaen' => '0e27',
    'Thai_sosala' => '0e28',
    'Thai_sorusi' => '0e29',
    'Thai_sosua' => '0e2a',
    'Thai_hohip' => '0e2b',
    'Thai_lochula' => '0e2c',
    'Thai_oang' => '0e2d',
    'Thai_honokhuk' => '0e2e',
    'Thai_paiyannoi' => '0e2f',
    'Thai_saraa' => '0e30',
    'Thai_maihanakat' => '0e31',
    'Thai_saraaa' => '0e32',
    'Thai_saraam' => '0e33',
    'Thai_sarai' => '0e34',
    'Thai_saraii' => '0e35',
    'Thai_saraue' => '0e36',
    'Thai_sarauee' => '0e37',
    'Thai_sarau' => '0e38',
    'Thai_sarauu' => '0e39',
    'Thai_phinthu' => '0e3a',
    'Thai_baht' => '0e3f',
    'Thai_sarae' => '0e40',
    'Thai_saraae' => '0e41',
    'Thai_sarao' => '0e42',
    'Thai_saraaimaimuan' => '0e43',
    'Thai_saraaimaimalai' => '0e44',
    'Thai_lakkhangyao' => '0e45',
    'Thai_maiyamok' => '0e46',
    'Thai_maitaikhu' => '0e47',
    'Thai_maiek' => '0e48',
    'Thai_maitho' => '0e49',
    'Thai_maitri' => '0e4a',
    'Thai_maichattawa' => '0e4b',
    'Thai_thanthakhat' => '0e4c',
    'Thai_nikhahit' => '0e4d',
    'Thai_leksun' => '0e50',
    'Thai_leknung' => '0e51',
    'Thai_leksong' => '0e52',
    'Thai_leksam' => '0e53',
    'Thai_leksi' => '0e54',
    'Thai_lekha' => '0e55',
    'Thai_lekhok' => '0e56',
    'Thai_lekchet' => '0e57',
    'Thai_lekpaet' => '0e58',
    'Thai_lekkao' => '0e59',
    'Georgian_an' => '10d0',
    'Georgian_ban' => '10d1',
    'Georgian_gan' => '10d2',
    'Georgian_don' => '10d3',
    'Georgian_en' => '10d4',
    'Georgian_vin' => '10d5',
    'Georgian_zen' => '10d6',
    'Georgian_tan' => '10d7',
    'Georgian_in' => '10d8',
    'Georgian_kan' => '10d9',
    'Georgian_las' => '10da',
    'Georgian_man' => '10db',
    'Georgian_nar' => '10dc',
    'Georgian_on' => '10dd',
    'Georgian_par' => '10de',
    'Georgian_zhar' => '10df',
    'Georgian_rae' => '10e0',
    'Georgian_san' => '10e1',
    'Georgian_tar' => '10e2',
    'Georgian_un' => '10e3',
    'Georgian_phar' => '10e4',
    'Georgian_khar' => '10e5',
    'Georgian_ghan' => '10e6',
    'Georgian_qar' => '10e7',
    'Georgian_shin' => '10e8',
    'Georgian_chin' => '10e9',
    'Georgian_can' => '10ea',
    'Georgian_jil' => '10eb',
    'Georgian_cil' => '10ec',
    'Georgian_char' => '10ed',
    'Georgian_xan' => '10ee',
    'Georgian_jhan' => '10ef',
    'Georgian_hae' => '10f0',
    'Georgian_he' => '10f1',
    'Georgian_hie' => '10f2',
    'Georgian_we' => '10f3',
    'Georgian_har' => '10f4',
    'Georgian_hoe' => '10f5',
    'Georgian_fi' => '10f6',
    'Hangul_J_Kiyeog' => '11a8',
    'Hangul_J_SsangKiyeog' => '11a9',
    'Hangul_J_KiyeogSios' => '11aa',
    'Hangul_J_Nieun' => '11ab',
    'Hangul_J_NieunJieuj' => '11ac',
    'Hangul_J_NieunHieuh' => '11ad',
    'Hangul_J_Dikeud' => '11ae',
    'Hangul_J_Rieul' => '11af',
    'Hangul_J_RieulKiyeog' => '11b0',
    'Hangul_J_RieulMieum' => '11b1',
    'Hangul_J_RieulPieub' => '11b2',
    'Hangul_J_RieulSios' => '11b3',
    'Hangul_J_RieulTieut' => '11b4',
    'Hangul_J_RieulPhieuf' => '11b5',
    'Hangul_J_RieulHieuh' => '11b6',
    'Hangul_J_Mieum' => '11b7',
    'Hangul_J_Pieub' => '11b8',
    'Hangul_J_PieubSios' => '11b9',
    'Hangul_J_Sios' => '11ba',
    'Hangul_J_SsangSios' => '11bb',
    'Hangul_J_Ieung' => '11bc',
    'Hangul_J_Jieuj' => '11bd',
    'Hangul_J_Cieuc' => '11be',
    'Hangul_J_Khieuq' => '11bf',
    'Hangul_J_Tieut' => '11c0',
    'Hangul_J_Phieuf' => '11c1',
    'Hangul_J_Hieuh' => '11c2',
    'Hangul_J_PanSios' => '11eb',
    'Hangul_J_KkogjiDalrinIeung' => '11f0',
    'Hangul_J_YeorinHieuh' => '11f9',
    'Babovedot' => '1e02', # Is this recognised by X ?
    'babovedot' => '1e03', # Is this recognised by X ?
    'Dabovedot' => '1e0a', # Is this recognised by X ?
    'dabovedot' => '1e0b', # Is this recognised by X ?
    'Fabovedot' => '1e1e', # Is this recognised by X ?
    'fabovedot' => '1e1f', # Is this recognised by X ?
    'Lbelowdot' => '1e36',
    'lbelowdot' => '1e37',
    'Mabovedot' => '1e40', # Is this recognised by X ?
    'mabovedot' => '1e41', # Is this recognised by X ?
    'Pabovedot' => '1e56', # Is this recognised by X ?
    'pabovedot' => '1e57', # Is this recognised by X ?
    'Sabovedot' => '1e60', # Is this recognised by X ?
    'sabovedot' => '1e61', # Is this recognised by X ?
    'Tabovedot' => '1e6a', # Is this recognised by X ?
    'tabovedot' => '1e6b', # Is this recognised by X ?
    'Wgrave' => '1e80',
    'wgrave' => '1e81',
    'Wacute' => '1e82',
    'wacute' => '1e83',
    'Wdiaeresis' => '1e84',
    'wdiaeresis' => '1e85',
    'Xabovedot' => '1e8a',
    'xabovedot' => '1e8b',
    'Abelowdot' => '1ea0',
    'abelowdot' => '1ea1',
    'Ahook' => '1ea2',
    'ahook' => '1ea3',
    'Acircumflexacute' => '1ea4',
    'acircumflexacute' => '1ea5',
    'Acircumflexgrave' => '1ea6',
    'acircumflexgrave' => '1ea7',
    'Acircumflexhook' => '1ea8',
    'acircumflexhook' => '1ea9',
    'Acircumflextilde' => '1eaa',
    'acircumflextilde' => '1eab',
    'Acircumflexbelowdot' => '1eac',
    'acircumflexbelowdot' => '1ead',
    'Abreveacute' => '1eae',
    'abreveacute' => '1eaf',
    'Abrevegrave' => '1eb0',
    'abrevegrave' => '1eb1',
    'Abrevehook' => '1eb2',
    'abrevehook' => '1eb3',
    'Abrevetilde' => '1eb4',
    'abrevetilde' => '1eb5',
    'Abrevebelowdot' => '1eb6',
    'abrevebelowdot' => '1eb7',
    'Ebelowdot' => '1eb8',
    'ebelowdot' => '1eb9',
    'Ehook' => '1eba',
    'ehook' => '1ebb',
    'Etilde' => '1ebc',
    'etilde' => '1ebd',
    'Ecircumflexacute' => '1ebe',
    'ecircumflexacute' => '1ebf',
    'Ecircumflexgrave' => '1ec0',
    'ecircumflexgrave' => '1ec1',
    'Ecircumflexhook' => '1ec2',
    'ecircumflexhook' => '1ec3',
    'Ecircumflextilde' => '1ec4',
    'ecircumflextilde' => '1ec5',
    'Ecircumflexbelowdot' => '1ec6',
    'ecircumflexbelowdot' => '1ec7',
    'Ihook' => '1ec8',
    'ihook' => '1ec9',
    'Ibelowdot' => '1eca',
    'ibelowdot' => '1ecb',
    'Obelowdot' => '1ecc',
    'obelowdot' => '1ecd',
    'Ohook' => '1ece',
    'ohook' => '1ecf',
    'Ocircumflexacute' => '1ed0',
    'ocircumflexacute' => '1ed1',
    'Ocircumflexgrave' => '1ed2',
    'ocircumflexgrave' => '1ed3',
    'Ocircumflexhook' => '1ed4',
    'ocircumflexhook' => '1ed5',
    'Ocircumflextilde' => '1ed6',
    'ocircumflextilde' => '1ed7',
    'Ocircumflexbelowdot' => '1ed8',
    'ocircumflexbelowdot' => '1ed9',
    'Ohornacute' => '1eda',
    'ohornacute' => '1edb',
    'Ohorngrave' => '1edc',
    'ohorngrave' => '1edd',
    'Ohornhook' => '1ede',
    'ohornhook' => '1edf',
    'Ohorntilde' => '1ee0',
    'ohorntilde' => '1ee1',
    'Ohornbelowdot' => '1ee2',
    'ohornbelowdot' => '1ee3',
    'Ubelowdot' => '1ee4',
    'ubelowdot' => '1ee5',
    'Uhook' => '1ee6',
    'uhook' => '1ee7',
    'Uhornacute' => '1ee8',
    'uhornacute' => '1ee9',
    'Uhorngrave' => '1eea',
    'uhorngrave' => '1eeb',
    'Uhornhook' => '1eec',
    'uhornhook' => '1eed',
    'Uhorntilde' => '1eee',
    'uhorntilde' => '1eef',
    'Uhornbelowdot' => '1ef0',
    'uhornbelowdot' => '1ef1',
    'Ygrave' => '1ef2',
    'ygrave' => '1ef3',
    'Ybelowdot' => '1ef4',
    'ybelowdot' => '1ef5',
    'Yhook' => '1ef6',
    'yhook' => '1ef7',
    'Ytilde' => '1ef8',
    'ytilde' => '1ef9',
    'enspace' => '2002',
    'emspace' => '2003',
    'em3space' => '2004',
    'em4space' => '2005',
    'digitspace' => '2007',
    'punctspace' => '2008',
    'thinspace' => '2009',
    'hairspace' => '200a',
    'figdash' => '2012',
    'endash' => '2013',
    'emdash' => '2014',
    'Greek_horizbar' => '2015',
    'hebrew_doublelowline' => '2017',
    'leftsinglequotemark' => '2018',
    'rightsinglequotemark' => '2019',
    'singlelowquotemark' => '201a',
    'leftdoublequotemark' => '201c',
    'rightdoublequotemark' => '201d',
    'doublelowquotemark' => '201e',
    'dagger' => '2020',
    'doubledagger' => '2021',
    'enfilledcircbullet' => '2022',
    'doubbaselinedot' => '2025',
    'ellipsis' => '2026',
    'permille' => '2030',
    'minutes' => '2032',
    'seconds' => '2033',
    'caret' => '2038',
    'guilsinglleft' => '2039',
    'guilsinglright' => '203a',
    'overline' => '203e',
    'zerosuperior' => '2070',
    'foursuperior' => '2074',
    'fivesuperior' => '2075',
    'sixsuperior' => '2076',
    'sevensuperior' => '2077',
    'eightsuperior' => '2078',
    'ninesuperior' => '2079',
    'zerosubscript' => '2080',
    'onesubscript' => '2081',
    'twosubscript' => '2082',
    'threesubscript' => '2083',
    'foursubscript' => '2084',
    'fivesubscript' => '2085',
    'sixsubscript' => '2086',
    'sevensubscript' => '2087',
    'eightsubscript' => '2088',
    'ninesubscript' => '2089',
    'EcuSign' => '20a0',
    'ColonSign' => '20a1',
    'CruzeiroSign' => '20a2',
    'FFrancSign' => '20a3',
    'LiraSign' => '20a4',
    'MillSign' => '20a5',
    'NairaSign' => '20a6',
    'PesetaSign' => '20a7',
    'RupeeSign' => '20a8',
    'WonSign' => '20a9',
    'Korean_Won' => '20a9',
    'NewSheqelSign' => '20aa',
    'DongSign' => '20ab', # Is this recognised by X ?
    'EuroSign' => '20ac',
    'Euro' => '20ac',
    'careof' => '2105',
    'numerosign' => '2116',
    'phonographcopyright' => '2117',
    'prescription' => '211e',
    'trademark' => '2122',
    'onethird' => '2153',
    'twothirds' => '2154',
    'onefifth' => '2155',
    'twofifths' => '2156',
    'threefifths' => '2157',
    'fourfifths' => '2158',
    'onesixth' => '2159',
    'fivesixths' => '215a',
    'oneeighth' => '215b',
    'threeeighths' => '215c',
    'fiveeighths' => '215d',
    'seveneighths' => '215e',
    'leftarrow' => '2190',
    'uparrow' => '2191',
    'rightarrow' => '2192',
    'downarrow' => '2193',
    'implies' => '21d2',
    'ifonlyif' => '21d4',
    'partialderivative' => '2202',
    'partdifferential' => '2202',
    'emptyset' => '2205',
    'nabla' => '2207',
    'elementof' => '2208',
    'notelementof' => '2209',
    'containsas' => '220B',
    'jot' => '2218',
    'radical' => '221a',
    'squareroot' => '221a',
    'cuberoot' => '221b',
    'fourthroot' => '221c',
    'variation' => '221d',
    'infinity' => '221e',
    'logicaland' => '2227',
    'upcaret' => '2227',
    'downcaret' => '2228',
    'logicalor' => '2228',
    'intersection' => '2229',
    'upshoe' => '2229',
    'downshoe' => '222a',
    'union' => '222a',
    'integral' => '222b',
    'dintegral' => '222c',
    'tintegral' => '222d',
    'therefore' => '2234',
    'because' => '2235',
    'approximate' => '223c',
    'similarequal' => '2243',
    'notapproxeq' => '2247',
    'approxeq' => '2248',
    'notidentical' => '2262',
    'notequal' => '2260',
    'identical' => '2261',
    'stricteq' => '2263',
    'lessthanequal' => '2264',
    'greaterthanequal' => '2265',
    'includedin' => '2282',
    'leftshoe' => '2282',
    'includes' => '2283',
    'rightshoe' => '2283',
    'lefttack' => '22a2',
    'righttack' => '22a3',
    'uptack' => '22a4',
    'downtack' => '22a5',
    'upstile' => '2308',
    'downstile' => '230a',
    'telephonerecorder' => '2315',
    'topintegral' => '2320',
    'botintegral' => '2321',
    'leftanglebracket' => '2329',
    'rightanglebracket' => '232a',
    'quad' => '2395',
    'topleftparens' => '239b',
    'botleftparens' => '239d',
    'toprightparens' => '239e',
    'botrightparens' => '23a0',
    'topleftsqbracket' => '23a1',
    'botleftsqbracket' => '23a3',
    'toprightsqbracket' => '23a4',
    'botrightsqbracket' => '23a6',
    'leftmiddlecurlybrace' => '23a8',
    'rightmiddlecurlybrace' => '23ac',
    'leftradical' => '23b7',
    'horizlinescan1' => '23ba',
    'horizlinescan3' => '23bb',
    'horizlinescan7' => '23bc',
    'horizlinescan9' => '23bd',
    'ht' => '2409',
    'lf' => '240a',
    'vt' => '240b',
    'ff' => '240c',
    'cr' => '240d',
    'nl' => '2424',
    'horizconnector' => '2500',
    'horizlinescan5' => '2500',
    'vertbar' => '2502',
    'vertconnector' => '2502',
    'topleftradical' => '250c',
    'upleftcorner' => '250c',
    'uprightcorner' => '2510',
    'lowleftcorner' => '2514',
    'lowrightcorner' => '2518',
    'leftt' => '251c',
    'rightt' => '2524',
    'topt' => '252c',
    'bott' => '2534',
    'crossinglines' => '253c',
    'checkerboard' => '2592',
    'enfilledsqbullet' => '25aa',
    'enopensquarebullet' => '25ab',
    'filledrectbullet' => '25ac',
    'openrectbullet' => '25ad',
    'emfilledrect' => '25ae',
    'emopenrectangle' => '25af',
    'filledtribulletup' => '25b2',
    'opentribulletup' => '25b3',
    'filledrighttribullet' => '25b6',
    'rightopentriangle' => '25b7',
    'filledtribulletdown' => '25bc',
    'opentribulletdown' => '25bd',
    'filledlefttribullet' => '25c0',
    'leftopentriangle' => '25c1',
    'soliddiamond' => '25c6',
    'circle' => '25cb',
    'emopencircle' => '25cb',
    'emfilledcircle' => '25cf',
    'enopencircbullet' => '25e6',
    'openstar' => '2606',
    'telephone' => '260e',
    'signaturemark' => '2613',
    'leftpointer' => '261c',
    'rightpointer' => '261e',
    'femalesymbol' => '2640',
    'malesymbol' => '2642',
    'club' => '2663',
    'heart' => '2665',
    'diamond' => '2666',
    'musicalflat' => '266d',
    'musicalsharp' => '266f',
    'checkmark' => '2713',
    'ballotcross' => '2717',
    'latincross' => '271d',
    'maltesecross' => '2720',
    'braille_dots_1' => '2801',
    'braille_dots_2' => '2802',
    'braille_dots_12' => '2803',
    'braille_dots_3' => '2804',
    'braille_dots_13' => '2805',
    'braille_dots_23' => '2806',
    'braille_dots_123' => '2807',
    'braille_dots_4' => '2808',
    'braille_dots_14' => '2809',
    'braille_dots_24' => '280a',
    'braille_dots_124' => '280b',
    'braille_dots_34' => '280c',
    'braille_dots_134' => '280d',
    'braille_dots_234' => '280e',
    'braille_dots_1234' => '280f',
    'braille_dots_5' => '2810',
    'braille_dots_15' => '2811',
    'braille_dots_25' => '2812',
    'braille_dots_125' => '2813',
    'braille_dots_35' => '2814',
    'braille_dots_135' => '2815',
    'braille_dots_235' => '2816',
    'braille_dots_1235' => '2817',
    'braille_dots_45' => '2818',
    'braille_dots_145' => '2819',
    'braille_dots_245' => '281a',
    'braille_dots_1245' => '281b',
    'braille_dots_345' => '281c',
    'braille_dots_1345' => '281d',
    'braille_dots_2345' => '281e',
    'braille_dots_12345' => '281f',
    'braille_dots_6' => '2820',
    'braille_dots_16' => '2821',
    'braille_dots_26' => '2822',
    'braille_dots_126' => '2823',
    'braille_dots_36' => '2824',
    'braille_dots_136' => '2825',
    'braille_dots_236' => '2826',
    'braille_dots_1236' => '2827',
    'braille_dots_46' => '2828',
    'braille_dots_146' => '2829',
    'braille_dots_246' => '282a',
    'braille_dots_1246' => '282b',
    'braille_dots_346' => '282c',
    'braille_dots_1346' => '282d',
    'braille_dots_2346' => '282e',
    'braille_dots_12346' => '282f',
    'braille_dots_56' => '2830',
    'braille_dots_156' => '2831',
    'braille_dots_256' => '2832',
    'braille_dots_1256' => '2833',
    'braille_dots_356' => '2834',
    'braille_dots_1356' => '2835',
    'braille_dots_2356' => '2836',
    'braille_dots_12356' => '2837',
    'braille_dots_456' => '2838',
    'braille_dots_1456' => '2839',
    'braille_dots_2456' => '283a',
    'braille_dots_12456' => '283b',
    'braille_dots_3456' => '283c',
    'braille_dots_13456' => '283d',
    'braille_dots_23456' => '283e',
    'braille_dots_123456' => '283f',
    'braille_dots_7' => '2840',
    'braille_dots_17' => '2841',
    'braille_dots_27' => '2842',
    'braille_dots_127' => '2843',
    'braille_dots_37' => '2844',
    'braille_dots_137' => '2845',
    'braille_dots_237' => '2846',
    'braille_dots_1237' => '2847',
    'braille_dots_47' => '2848',
    'braille_dots_147' => '2849',
    'braille_dots_247' => '284a',
    'braille_dots_1247' => '284b',
    'braille_dots_347' => '284c',
    'braille_dots_1347' => '284d',
    'braille_dots_2347' => '284e',
    'braille_dots_12347' => '284f',
    'braille_dots_57' => '2850',
    'braille_dots_157' => '2851',
    'braille_dots_257' => '2852',
    'braille_dots_1257' => '2853',
    'braille_dots_357' => '2854',
    'braille_dots_1357' => '2855',
    'braille_dots_2357' => '2856',
    'braille_dots_12357' => '2857',
    'braille_dots_457' => '2858',
    'braille_dots_1457' => '2859',
    'braille_dots_2457' => '285a',
    'braille_dots_12457' => '285b',
    'braille_dots_3457' => '285c',
    'braille_dots_13457' => '285d',
    'braille_dots_23457' => '285e',
    'braille_dots_123457' => '285f',
    'braille_dots_67' => '2860',
    'braille_dots_167' => '2861',
    'braille_dots_267' => '2862',
    'braille_dots_1267' => '2863',
    'braille_dots_367' => '2864',
    'braille_dots_1367' => '2865',
    'braille_dots_2367' => '2866',
    'braille_dots_12367' => '2867',
    'braille_dots_467' => '2868',
    'braille_dots_1467' => '2869',
    'braille_dots_2467' => '286a',
    'braille_dots_12467' => '286b',
    'braille_dots_3467' => '286c',
    'braille_dots_13467' => '286d',
    'braille_dots_23467' => '286e',
    'braille_dots_123467' => '286f',
    'braille_dots_567' => '2870',
    'braille_dots_1567' => '2871',
    'braille_dots_2567' => '2872',
    'braille_dots_12567' => '2873',
    'braille_dots_3567' => '2874',
    'braille_dots_13567' => '2875',
    'braille_dots_23567' => '2876',
    'braille_dots_123567' => '2877',
    'braille_dots_4567' => '2878',
    'braille_dots_14567' => '2879',
    'braille_dots_24567' => '287a',
    'braille_dots_124567' => '287b',
    'braille_dots_34567' => '287c',
    'braille_dots_134567' => '287d',
    'braille_dots_234567' => '287e',
    'braille_dots_1234567' => '287f',
    'braille_dots_8' => '2880',
    'braille_dots_18' => '2881',
    'braille_dots_28' => '2882',
    'braille_dots_128' => '2883',
    'braille_dots_38' => '2884',
    'braille_dots_138' => '2885',
    'braille_dots_238' => '2886',
    'braille_dots_1238' => '2887',
    'braille_dots_48' => '2888',
    'braille_dots_148' => '2889',
    'braille_dots_248' => '288a',
    'braille_dots_1248' => '288b',
    'braille_dots_348' => '288c',
    'braille_dots_1348' => '288d',
    'braille_dots_2348' => '288e',
    'braille_dots_12348' => '288f',
    'braille_dots_58' => '2890',
    'braille_dots_158' => '2891',
    'braille_dots_258' => '2892',
    'braille_dots_1258' => '2893',
    'braille_dots_358' => '2894',
    'braille_dots_1358' => '2895',
    'braille_dots_2358' => '2896',
    'braille_dots_12358' => '2897',
    'braille_dots_458' => '2898',
    'braille_dots_1458' => '2899',
    'braille_dots_2458' => '289a',
    'braille_dots_12458' => '289b',
    'braille_dots_3458' => '289c',
    'braille_dots_13458' => '289d',
    'braille_dots_23458' => '289e',
    'braille_dots_123458' => '289f',
    'braille_dots_68' => '28a0',
    'braille_dots_168' => '28a1',
    'braille_dots_268' => '28a2',
    'braille_dots_1268' => '28a3',
    'braille_dots_368' => '28a4',
    'braille_dots_1368' => '28a5',
    'braille_dots_2368' => '28a6',
    'braille_dots_12368' => '28a7',
    'braille_dots_468' => '28a8',
    'braille_dots_1468' => '28a9',
    'braille_dots_2468' => '28aa',
    'braille_dots_12468' => '28ab',
    'braille_dots_3468' => '28ac',
    'braille_dots_13468' => '28ad',
    'braille_dots_23468' => '28ae',
    'braille_dots_123468' => '28af',
    'braille_dots_568' => '28b0',
    'braille_dots_1568' => '28b1',
    'braille_dots_2568' => '28b2',
    'braille_dots_12568' => '28b3',
    'braille_dots_3568' => '28b4',
    'braille_dots_13568' => '28b5',
    'braille_dots_23568' => '28b6',
    'braille_dots_123568' => '28b7',
    'braille_dots_4568' => '28b8',
    'braille_dots_14568' => '28b9',
    'braille_dots_24568' => '28ba',
    'braille_dots_124568' => '28bb',
    'braille_dots_34568' => '28bc',
    'braille_dots_134568' => '28bd',
    'braille_dots_234568' => '28be',
    'braille_dots_1234568' => '28bf',
    'braille_dots_78' => '28c0',
    'braille_dots_178' => '28c1',
    'braille_dots_278' => '28c2',
    'braille_dots_1278' => '28c3',
    'braille_dots_378' => '28c4',
    'braille_dots_1378' => '28c5',
    'braille_dots_2378' => '28c6',
    'braille_dots_12378' => '28c7',
    'braille_dots_478' => '28c8',
    'braille_dots_1478' => '28c9',
    'braille_dots_2478' => '28ca',
    'braille_dots_12478' => '28cb',
    'braille_dots_3478' => '28cc',
    'braille_dots_13478' => '28cd',
    'braille_dots_23478' => '28ce',
    'braille_dots_123478' => '28cf',
    'braille_dots_578' => '28d0',
    'braille_dots_1578' => '28d1',
    'braille_dots_2578' => '28d2',
    'braille_dots_12578' => '28d3',
    'braille_dots_3578' => '28d4',
    'braille_dots_13578' => '28d5',
    'braille_dots_23578' => '28d6',
    'braille_dots_123578' => '28d7',
    'braille_dots_4578' => '28d8',
    'braille_dots_14578' => '28d9',
    'braille_dots_24578' => '28da',
    'braille_dots_124578' => '28db',
    'braille_dots_34578' => '28dc',
    'braille_dots_134578' => '28dd',
    'braille_dots_234578' => '28de',
    'braille_dots_1234578' => '28df',
    'braille_dots_678' => '28e0',
    'braille_dots_1678' => '28e1',
    'braille_dots_2678' => '28e2',
    'braille_dots_12678' => '28e3',
    'braille_dots_3678' => '28e4',
    'braille_dots_13678' => '28e5',
    'braille_dots_23678' => '28e6',
    'braille_dots_123678' => '28e7',
    'braille_dots_4678' => '28e8',
    'braille_dots_14678' => '28e9',
    'braille_dots_24678' => '28ea',
    'braille_dots_124678' => '28eb',
    'braille_dots_34678' => '28ec',
    'braille_dots_134678' => '28ed',
    'braille_dots_234678' => '28ee',
    'braille_dots_1234678' => '28ef',
    'braille_dots_5678' => '28f0',
    'braille_dots_15678' => '28f1',
    'braille_dots_25678' => '28f2',
    'braille_dots_125678' => '28f3',
    'braille_dots_35678' => '28f4',
    'braille_dots_135678' => '28f5',
    'braille_dots_235678' => '28f6',
    'braille_dots_1235678' => '28f7',
    'braille_dots_45678' => '28f8',
    'braille_dots_145678' => '28f9',
    'braille_dots_245678' => '28fa',
    'braille_dots_1245678' => '28fb',
    'braille_dots_345678' => '28fc',
    'braille_dots_1345678' => '28fd',
    'braille_dots_2345678' => '28fe',
    'braille_dots_12345678' => '28ff',
    'kana_comma' => '3001',
    'kana_fullstop' => '3002',
    'kana_openingbracket' => '300c',
    'kana_closingbracket' => '300d',
    'voicedsound' => '309b',
    'semivoicedsound' => '309c',
    'kana_a' => '30a1',
    'kana_A' => '30a2',
    'kana_i' => '30a3',
    'kana_I' => '30a4',
    'kana_u' => '30a5',
    'kana_U' => '30a6',
    'kana_e' => '30a7',
    'kana_E' => '30a8',
    'kana_o' => '30a9',
    'kana_O' => '30aa',
    'kana_KA' => '30ab',
    'kana_KI' => '30ad',
    'kana_KU' => '30af',
    'kana_KE' => '30b1',
    'kana_KO' => '30b3',
    'kana_SA' => '30b5',
    'kana_SHI' => '30b7',
    'kana_SU' => '30b9',
    'kana_SE' => '30bb',
    'kana_SO' => '30bd',
    'kana_TA' => '30bf',
    'kana_CHI' => '30c1',
    'kana_tsu' => '30c3',
    'kana_TSU' => '30c4',
    'kana_TE' => '30c6',
    'kana_TO' => '30c8',
    'kana_NA' => '30ca',
    'kana_NI' => '30cb',
    'kana_NU' => '30cc',
    'kana_NE' => '30cd',
    'kana_NO' => '30ce',
    'kana_HA' => '30cf',
    'kana_HI' => '30d2',
    'kana_FU' => '30d5',
    'kana_HE' => '30d8',
    'kana_HO' => '30db',
    'kana_MA' => '30de',
    'kana_MI' => '30df',
    'kana_MU' => '30e0',
    'kana_ME' => '30e1',
    'kana_MO' => '30e2',
    'kana_ya' => '30e3',
    'kana_YA' => '30e4',
    'kana_yu' => '30e5',
    'kana_YU' => '30e6',
    'kana_yo' => '30e7',
    'kana_YO' => '30e8',
    'kana_RA' => '30e9',
    'kana_RI' => '30ea',
    'kana_RU' => '30eb',
    'kana_RE' => '30ec',
    'kana_RO' => '30ed',
    'kana_WA' => '30ef',
    'kana_WO' => '30f2',
    'kana_N' => '30f3',
    'kana_conjunctive' => '30fb',
    'kana_middledot' => '30fb', # Is this recognised by X ?
    'prolongedsound' => '30fc',
    'Hangul_Kiyeog' => '3131',
    'Hangul_SsangKiyeog' => '3132',
    'Hangul_KiyeogSios' => '3133',
    'Hangul_Nieun' => '3134',
    'Hangul_NieunJieuj' => '3135',
    'Hangul_NieunHieuh' => '3136',
    'Hangul_Dikeud' => '3137',
    'Hangul_SsangDikeud' => '3138',
    'Hangul_Rieul' => '3139',
    'Hangul_RieulKiyeog' => '313a',
    'Hangul_RieulMieum' => '313b',
    'Hangul_RieulPieub' => '313c',
    'Hangul_RieulSios' => '313d',
    'Hangul_RieulTieut' => '313e',
    'Hangul_RieulPhieuf' => '313f',
    'Hangul_RieulHieuh' => '3140',
    'Hangul_Mieum' => '3141',
    'Hangul_Pieub' => '3142',
    'Hangul_SsangPieub' => '3143',
    'Hangul_PieubSios' => '3144',
    'Hangul_Sios' => '3145',
    'Hangul_SsangSios' => '3146',
    'Hangul_Ieung' => '3147',
    'Hangul_Jieuj' => '3148',
    'Hangul_SsangJieuj' => '3149',
    'Hangul_Cieuc' => '314a',
    'Hangul_Khieuq' => '314b',
    'Hangul_Tieut' => '314c',
    'Hangul_Phieuf' => '314d',
    'Hangul_Hieuh' => '314e',
    'Hangul_A' => '314f',
    'Hangul_AE' => '3150',
    'Hangul_YA' => '3151',
    'Hangul_YAE' => '3152',
    'Hangul_EO' => '3153',
    'Hangul_E' => '3154',
    'Hangul_YEO' => '3155',
    'Hangul_YE' => '3156',
    'Hangul_O' => '3157',
    'Hangul_WA' => '3158',
    'Hangul_WAE' => '3159',
    'Hangul_OE' => '315a',
    'Hangul_YO' => '315b',
    'Hangul_U' => '315c',
    'Hangul_WEO' => '315d',
    'Hangul_WE' => '315e',
    'Hangul_WI' => '315f',
    'Hangul_YU' => '3160',
    'Hangul_EU' => '3161',
    'Hangul_YI' => '3162',
    'Hangul_I' => '3163',
    'Hangul_RieulYeorinHieuh' => '316d',
    'Hangul_SunkyeongeumMieum' => '3171',
    'Hangul_SunkyeongeumPieub' => '3178',
    'Hangul_PanSios' => '317f',
    'Hangul_KkogjiDalrinIeung' => '3181',
    'Hangul_SunkyeongeumPhieuf' => '3184',
    'Hangul_YeorinHieuh' => '3186',
    'Hangul_AraeA' => '318d',
    'Hangul_AraeAE' => '318e',
);

if ($freebsd) {
    %xkbsym_table = 
        (%xkbsym_table,
# Control symbols
         'BackSpace' => 'bs',      # 0008
         'Tab' => 'ht',            # 0009
         'Linefeed' => 'nl',       # 000a
         'Return' => 'cr',         # 000d
         'Escape' => 'esc',        # 001b
# Keypad keys
         'KP_Multiply' => '\'*\'',
         'KP_Add' => 'fkey56',
         'KP_Seprator' => '\',\'', # Is this recognised by X ?
         'KP_Separator' => '\',\'',
         'KP_Subtract' => 'fkey52',
         'KP_Decimal' => '\'.\'',
         'KP_Divide' => '\'/\'',
         'KP_0' => '\'0\'',
         'KP_1' => '\'1\'',
         'KP_2' => '\'2\'',
         'KP_3' => '\'3\'',
         'KP_4' => '\'4\'',
         'KP_5' => '\'5\'',
         'KP_6' => '\'6\'',
         'KP_7' => '\'7\'',
         'KP_8' => '\'8\'',
         'KP_9' => '\'9\'',
         'KP_Enter' => 'cr',
         'KP_Home' => 'fkey49',
         'KP_Left' => 'fkey53',
         'KP_Up' => 'fkey50',
         'KP_Right' => 'fkey55',
         'KP_Down' => 'fkey58',
         'KP_Prior' => 'fkey51',
         'KP_Page_Up' => 'fkey51',
         'KP_Next' => 'fkey59',
         'KP_Page_Down' => 'fkey59',
         'KP_End' => 'fkey57',
         'KP_Begin' => 'fkey54',
         'KP_Insert' => 'fkey60',
         'KP_Delete' => 'del',
         'KP_Space' => 'sp',
         'KP_Equal' => '\'=\'',
         'KP_Tab' => 'ht',
         'KP_F1' => 'fkey01',
         'KP_F2' => 'fkey02',
         'KP_F3' => 'fkey03',
         'KP_F4' => 'fkey04',
# Dead symbols
         'dead_grave' => 'dgra',
         'SunFA_Grave' => 'dgra_grave', # Is this recognised by X ?
         'dead_acute' => 'dacu',
         'SunFA_Acute' => 'dacu', # Is this recognised by X ?
         'dead_circumflex' => 'dcir',
         'SunFA_Circum' => 'dcir', # Is this recognised by X ?
         'dead_tilde' => 'dtil',
         'SunFA_Tilde' => 'dtil',
         'dead_breve' => 'dbre',
         'dead_diaeresis' => 'ddia',
         'SunFA_Diaeresis' => 'ddia', # Is this recognised by X ?
         'dead_doubleacute' => 'ddac',
         'dead_caron' => 'dcar',
         'dead_V' => 'dcar', # Is this correct?
         'dead_cedilla' => 'dced',
         'SunFA_Cedilla' => 'dced', # Is this recognised by X ?
         'dead_ogonek' => 'dogo',
         'dead_macron' => 'dmac',
         'dead_abovedot' => 'ddot',
         'dead_abovering' => 'drin',
         'dead_stroke' => 'nop',
         'dead_belowdot' => '0323',       # ???? Vietnamese
         'dead_hook' => 'dsla',           # ???? Vietnamese
         'dead_belowcomma' => 'nop',
         'dead_currency' => 'nop',
         'dead_doublegrave' => 'nop',
         'dead_invertedbreve' => 'nop',
         'dead_iota' => '03b9',           # ???? Greek
         'dead_horn' => '031b',           # ???? Greek
         'dead_psili' => 'nop',           # ???? Greek
         'dead_dasia' => 'nop',           # ???? Greek
         'dead_greek' => 'fe8c',
# Modifiers
         'Multi_key' => 'nop',
         'Mode_switch' => 'ashift',
         'script_switch' => 'nop',
         'Shift_L' => 'lshift',
         'Shift_R' => 'rshift',
         'Control_L' => 'lctrl',
         'Control_R' => 'rctrl',
         'Caps_Lock' => 'clock',
         'Shift_Lock' => 'clock',
         'Meta_L' => 'meta',
         'Meta_R' => 'meta',
         'Alt_L' => 'lalt',
         'Alt_R' => 'ralt',
         'Super_L' => 'fkey62',
         'Super_R' => 'fkey63',
         'Hyper_L' => 'meta',
         'Hyper_R' => 'meta',
         'ISO_Lock' => 'clock',
         'ISO_Level2_Latch' => 'lshift',
         'ISO_Level3_Shift' => 'alt',
         'ISO_Level3_Latch' => 'alt',
         'ISO_Level3_Lock' => 'alta',
         'ISO_Level5_Shift' => 'alt',
         'ISO_Level5_Latch' => 'alt',
         'ISO_Level5_Lock' => 'alta',
         'ISO_Group_Shift' => 'ashift',
         'ISO_Group_Latch' => 'ashift',
         'ISO_Group_Lock' => 'alock',
         'ISO_Next_Group' => 'alock',
         'ISO_Next_Group_Lock' => 'alock',
         'ISO_Prev_Group' => 'alock',
         'ISO_Prev_Group_Lock' => 'alock',
         'ISO_First_Group' => 'alock',
         'ISO_First_Group_Lock' => 'alock',
         'ISO_Last_Group' => 'alock',
         'ISO_Last_Group_Lock' => 'alock',
# Other symbols
         'NoAction' => 'NoSymbol', # Is this recognised by X ?
         'nosymbol' => 'NoSymbol', # Is this recognised by X ?
         'Nosymbol' => 'NoSymbol', # Is this recognised by X ?
         'noSymbol' => 'NoSymbol', # Is this recognised by X ?
         'NoSymbol' => 'NoSymbol',
         'any' => 'NoSymbol', # Is this recognised by X ?
         'VoidSymbol' => 'nop',
         'voidsymbol' => 'nop', # Is this recognised by X ?
         'ISO_Left_Tab' => 'ht',
         'Clear' => 'nop',
         'Pause' => 'saver',
         'Scroll_Lock' => 'slock',
         'Sys_Req' => 'nop',
         'Delete' => 'fkey61',
         'Codeinput' => 'nop',
         'SingleCandidate' => 'nop',
         'MultipleCandidate' => 'nop',
         'PreviousCandidate' => 'nop',
         'Home' => 'fkey49',
         'Left' => 'fkey53',
         'Up' => 'fkey50',
         'Right' => 'fkey55',
         'Down' => 'fkey58',
         'Prior' => 'fkey51',
         'Page_Up' => 'fkey51',
         'Next' => 'fkey59',
         'Page_Down' => 'fkey59',
         'End' => 'fkey57',
         'Begin' => 'fkey54',
         'Select' => 'fkey57',
         'Print' => 'nscr',
         'Execute' => 'nop',
         'Insert' => 'fkey60',
         'Undo' => 'nop',
         'Redo' => 'nop',
         'Menu' => 'fkey64',
         'Find' => 'fkey49',
         'Cancel' => 'nop',
         'Help' => 'slock', # Is this correct?
         'Break' => 'nop',
         'Num_Lock' => 'nlock',
         'F1' => 'fkey01',
         'F2' => 'fkey02',
         'F3' => 'fkey03',
         'F4' => 'fkey04',
         'F5' => 'fkey05',
         'F6' => 'fkey06',
         'F7' => 'fkey07',
         'F8' => 'fkey08',
         'F9' => 'fkey09',
         'F10' => 'fkey10',
         'F11' => 'fkey11',
         'L1' => 'fkey11',
         'F12' => 'fkey12',
         'L2' => 'fkey12',
         'F13' => 'fkey13',
         'L3' => 'fkey13',
         'F14' => 'fkey14',
         'L4' => 'fkey14',
         'F15' => 'fkey15',
         'L5' => 'fkey15',
         'F16' => 'fkey16',
         'L6' => 'fkey16',
         'F17' => 'fkey17',
         'L7' => 'fkey17',
         'F18' => 'fkey18',
         'L8' => 'fkey18',
         'F19' => 'fkey19',
         'L9' => 'fkey19',
         'F20' => 'fkey20',
         'L10' => 'fkey20',
         'F21' => 'fkey21',
         'R1' => 'fkey21',
         'F22' => 'fkey22',
         'R2' => 'fkey22',
         'F23' => 'fkey23',
         'R3' => 'fkey23',
         'F24' => 'fkey24',
         'R4' => 'fkey24',
         'F25' => 'fkey25',
         'R5' => 'fkey25',
         'F26' => 'fkey26',
         'R6' => 'fkey26',
         'F27' => 'fkey27',
         'R7' => 'fkey27',
         'F28' => 'fkey28',
         'R8' => 'fkey28',
         'F29' => 'fkey29',
         'R9' => 'fkey29',
         'F30' => 'fkey30',
         'R10' => 'fkey30',
         'F31' => 'fkey31',
         'R11' => 'fkey31',
         'F32' => 'fkey32',
         'R12' => 'fkey32',
         'F33' => 'fkey33',
         'R13' => 'fkey33',
         'F34' => 'fkey34',
         'R14' => 'fkey34',
         'F35' => 'fkey35',
         'R15' => 'fkey35',
         'Terminate_Server' => 'nop',
         'Pointer_EnableKeys' => 'nop',
         'XF86_Switch_VT_1' => 'scr01',
         'XF86_Switch_VT_2' => 'scr02',
         'XF86_Switch_VT_3' => 'scr03',
         'XF86_Switch_VT_4' => 'scr04',
         'XF86_Switch_VT_5' => 'scr05',
         'XF86_Switch_VT_6' => 'scr06',
         'XF86_Switch_VT_7' => 'scr07',
         'XF86_Switch_VT_8' => 'scr08',
         'XF86_Switch_VT_9' => 'scr09',
         'XF86_Switch_VT_10' => 'scr10',
         'XF86_Switch_VT_11' => 'scr11',
         'XF86_Switch_VT_12' => 'scr12',
         'XF86_ClearGrab' => 'nop',
         'XF86_Ungrab' => 'nop',
         'XF86_Next_VMode' => 'nop',
         'XF86_Prev_VMode' => 'nop',
         'XF86Copy' => 'nop',
         'XF86Cut' => 'nop',
         'XF86Paste' => 'nop',
         'XF86AudioLowerVolume' => 'nop',
         'XF86AudioRaiseVolume' => 'nop',
         'XF86AudioMute' => 'nop',
         'XF86PowerOff' => 'nop',
         'XF86AudioForward' => 'nop',
         'XF86AudioMedia' => 'nop',
         'XF86AudioNext' => 'nop',
         'XF86AudioPause' => 'nop',
         'XF86AudioPlay' => 'nop',
         'XF86AudioPrev' => 'nop',
         'XF86AudioRecord' => 'nop',
         'XF86AudioRewind' => 'nop',
         'XF86AudioStop' => 'nop',
         'XF86Back' => 'nop',
         'XF86Battery' => 'nop',
         'XF86Bluetooth' => 'nop',
         'XF86Calculator' => 'nop',
         'XF86Close' => 'nop',
         'XF86Display' => 'nop',
         'XF86Documents' => 'nop',
         'XF86DOS' => 'nop',
         'XF86Eject' => 'nop',
         'XF86Explorer' => 'nop',
         'XF86Favorites' => 'nop',
         'XF86Finance' => 'nop',
         'XF86Forward' => 'nop',
         'XF86HomePage' => 'nop',
         'XF86KbdBrightnessDown' => 'nop',
         'XF86KbdBrightnessUp' => 'nop',
         'XF86KbdLightOnOff' => 'nop',
         'XF86Launch1' => 'nop',
         'XF86Launch2' => 'nop',
         'XF86Launch3' => 'nop',
         'XF86Launch4' => 'nop',
         'XF86Mail' => 'nop',
         'XF86MailForward' => 'nop',
         'XF86MenuKB' => 'nop',
         'XF86MonBrightnessDown' => 'nop',
         'XF86MonBrightnessUp' => 'nop',
         'XF86MyComputer' => 'nop',
         'XF86New' => 'nop',
         'XF86Phone' => 'nop',
         'XF86Reload' => 'nop',
         'XF86Reply' => 'nop',
         'XF86RotateWindows' => 'nop',
         'XF86Save' => 'nop',
         'XF86ScreenSaver' => 'nop',
         'XF86ScrollDown' => 'nop',
         'XF86ScrollUp' => 'nop',
         'XF86Search' => 'nop',
         'XF86Send' => 'nop',
         'XF86Shop' => 'nop',
         'XF86Sleep' => 'nop',
         'XF86Suspend' => 'nop',
         'XF86Tools' => 'nop',
         'XF86TouchpadToggle' => 'nop',
         'XF86WakeUp' => 'nop',
         'XF86WebCam' => 'nop',
         'XF86WLAN' => 'nop',
         'XF86WWW' => 'nop',
         'XF86Xfer' => 'nop',
         'braille_blank' => '2800', # What does correspond to these?
         'braille_dot_1' => 'nop', 
         'braille_dot_2' => 'nop',
         'braille_dot_3' => 'nop',
         'braille_dot_4' => 'nop',
         'braille_dot_5' => 'nop',
         'braille_dot_6' => 'nop',
         'braille_dot_7' => 'nop',
         'braille_dot_8' => 'nop',
         'braille_dot_9' => 'nop',
         'braille_dot_10' => 'nop',
# I do not know the Unicodes of these
         '0x1000' => 'nop', # Special symbol for X or syntax error?
         '0x13a4' => 'nop', # Special symbol for X or syntax error?
         '0xfe11' => 'nop', # Special symbol for X or syntax error?
         'leftcaret' => 'nop', # Is this recognised by X ?
         'guj_rra' => 'nop', # Is this recognised by X ?
         'guj_nnna' => 'nop', # Is this recognised by X ?
         'guj_llla' => 'nop', # Is this recognised by X ?
         'gur_visarga' => 'nop', # Is this recognised by X ?
         'gur_v_r' => 'nop', # Is this recognised by X ?
         'gur_v_r_s' => 'nop', # Is this recognised by X ?
         'Eisu_toggle' => 'nop', # Is this recognised by X ?
         'Zenkaku_Hankaku' => 'nop', # Is this recognised by X ?
         'Kanji' => 'nop', # Is this recognised by X ?
         'Hangul' => 'nop', # Is this recognised by X ?
         'Hangul_Hanja' => 'nop', # Is this recognised by X ?
         'Henkan' => 'nop',
         'Hiragana' => 'nop',
         'Hiragana_Katakana' => 'nop',
         'Katakana' => 'nop',
         'Muhenkan' => 'nop',
# XFree86 does not recognise these
         'SunAudioLowerVolume' => 'nop',
         'SunAudioRaiseVolume' => 'nop',
         'SunAudioMute' => 'nop',
         'SunCopy' => 'nop',
         'SunCut' => 'nop',
         'SunPaste' => 'nop',
         'SunAgain' => 'nop',
         'SunUndo' => 'nop',
         'SunFind' => 'nop',
         'SunStop' => 'nop',
         'SunF36' => 'nop',
         'SunF37' => 'nop',
         'SunFront' => 'nop',
         'SunOpen' => 'nop',
         'SunPowerSwitch' => 'nop',
         'SunPowerSwitchShift' => 'nop',
         'SunProps' => 'nop',
         'SunSys_Req' => 'nop',
         'SunVideoDegauss' => 'nop',
         'SunVideoLowerBrightness' => 'nop',
         'SunVideoRaiseBrightness' => 'nop',
        );
    if ($backspace eq 'del') {
        $xkbsym_table{'BackSpace'} = 'del';
        $xkbsym_table{'Delete'} = 'fkey70';
        $xkbsym_table{'KP_Delete'} = 'fkey70';
    }
} else {
    %xkbsym_table = 
        (%xkbsym_table,
# Control symbols
         'BackSpace' => 'Delete',  # 0008
         'Tab' => 'Tab',           # 0009
         'Linefeed' => 'Linefeed', # 000a
         'Return' => 'Return',     # 000d
         'Escape' => 'Escape',     # 001b
# Keypad keys
         'KP_Multiply' => 'KP_Multiply',
         'KP_Add' => 'KP_Add',
         'KP_Seprator' => 'KP_Comma', # Is this recognised by X ?
         'KP_Separator' => 'KP_Comma',
         'KP_Subtract' => 'KP_Subtract',
         'KP_Decimal' => 'KP_Period',
         'KP_Divide' => 'KP_Divide',
         'KP_0' => 'KP_0',
         'KP_1' => 'KP_1',
         'KP_2' => 'KP_2',
         'KP_3' => 'KP_3',
         'KP_4' => 'KP_4',
         'KP_5' => 'KP_5',
         'KP_6' => 'KP_6',
         'KP_7' => 'KP_7',
         'KP_8' => 'KP_8',
         'KP_9' => 'KP_9',
         'KP_Enter' => 'KP_Enter',
# Keypad keys (alternate level)
         'KP_Home' => 'KP_7',
         'KP_Left' => 'KP_4',
         'KP_Up' => 'KP_8',
         'KP_Right' => 'KP_6',
         'KP_Down' => 'KP_2',
         'KP_Prior' => 'KP_9',
         'KP_Page_Up' => 'KP_9',
         'KP_Next' => 'KP_3',
         'KP_Page_Down' => 'KP_3',
         'KP_End' => 'KP_1',
         'KP_Begin' => 'VoidSymbol', # What does correspond to this?
         'KP_Insert' => 'KP_0',
         'KP_Delete' => 'VoidSymbol', # has to be 'KP_Period' or 'KP_Decimal'
# Keypad keys with missing support in the kernel
         'KP_Space' => 'space',
         'KP_Equal' => 'equal',
         'KP_Tab' => 'Tab',
         'KP_F1' => 'F1',
         'KP_F2' => 'F2',
         'KP_F3' => 'F3',
         'KP_F4' => 'F4',
# Dead symbols
         'dead_grave' => 'dead_grave',
         'SunFA_Grave' => 'dead_grave', # Is this recognised by X ?
         'dead_acute' => 'dead_acute',
         'SunFA_Acute' => 'dead_acute', # Is this recognised by X ?
         'dead_circumflex' => 'dead_circumflex',
         'SunFA_Circum' => 'dead_circumflex', # Is this recognised by X ?
         'dead_tilde' => 'dead_tilde',
         'SunFA_Tilde' => 'dead_tilde',
         'dead_breve' => 'dead_kbreve',
         'dead_diaeresis' => 'dead_diaeresis',
         'SunFA_Diaeresis' => 'dead_diaeresis', # Is this recognised by X ?
         'dead_doubleacute' => 'dead_kdoubleacute',
         'dead_caron' => 'dead_kcaron',
         'dead_V' => 'dead_caron', # Is this correct?
         'dead_cedilla' => 'dead_cedilla',
         'SunFA_Cedilla' => 'dead_cedilla', # Is this recognised by X ?
         'dead_ogonek' => 'dead_kogonek',
         'dead_macron' => 'dead_macron',
         'dead_abovedot' => 'dead_abovedot',
         'dead_abovering' => 'dead_abovering',
         'dead_stroke' => 'dead_stroke',
         'dead_belowdot' => 'dead_belowdot',
         'dead_hook' => 'dead_hook',
         'dead_belowcomma' => 'dead_belowcomma',
         'dead_currency' => 'dead_currency',
         'dead_doublegrave' => 'dead_doublegrave',
         'dead_invertedbreve' => 'dead_invertedbreve',
         'dead_iota' => 'dead_iota',
         'dead_horn' => 'dead_horn',
# Dead symbols with no support in the kernel
         'dead_psili' => 'VoidSymbol',    # ???? Greek
         'dead_dasia' => 'VoidSymbol',    # ???? Greek
# Modifiers
         'Multi_key' => 'Compose',
         'Mode_switch' => 'ShiftL',
         'script_switch' => 'VoidSymbol',
         'Shift_L' => 'Shift',
         'Shift_R' => 'Shift',
         'Control_L' => 'Control',
         'Control_R' => 'Control',
         'Caps_Lock' => 'Caps_Lock',
         'Shift_Lock' => 'Shift_Lock',
         'Meta_L' => 'Alt',
         'Meta_R' => 'Alt',
         'Alt_L' => 'Alt',
         'Alt_R' => 'Alt',
         'Super_L' => 'Alt',
         'Super_R' => 'Alt',
         'Hyper_L' => 'Alt',
         'Hyper_R' => 'Alt',
         'ISO_Lock' => 'Caps_Lock',
         'ISO_Level2_Latch' => 'Shift',
         'ISO_Level3_Shift' => 'AltGr',
         'ISO_Level3_Latch' => 'AltGr',
         'ISO_Level3_Lock' => 'AltGr_Lock',
         'ISO_Level5_Shift' => 'AltGr',
         'ISO_Level5_Latch' => 'AltGr',
         'ISO_Level5_Lock' => 'AltGr_Lock',
         'ISO_Group_Shift' => 'ShiftL',
         'ISO_Group_Latch' => 'ShiftL',
         'ISO_Group_Lock' => 'ShiftL_Lock',
         'ISO_Next_Group' => 'ShiftL_Lock',
         'ISO_Next_Group_Lock' => 'ShiftL_Lock',
         'ISO_Prev_Group' => 'ShiftL_Lock',
         'ISO_Prev_Group_Lock' => 'ShiftL_Lock',
         'ISO_First_Group' => 'ShiftL_Lock',
         'ISO_First_Group_Lock' => 'ShiftL_Lock',
         'ISO_Last_Group' => 'ShiftL_Lock',
         'ISO_Last_Group_Lock' => 'ShiftL_Lock',
# Other symbols
         'NoAction' => 'NoSymbol', # Is this recognised by X ?
         'nosymbol' => 'NoSymbol', # Is this recognised by X ?
         'Nosymbol' => 'NoSymbol', # Is this recognised by X ?
         'noSymbol' => 'NoSymbol', # Is this recognised by X ?
         'NoSymbol' => 'NoSymbol',
         'any' => 'NoSymbol', # Is this recognised by X ?
         'VoidSymbol' => 'VoidSymbol',
         'voidsymbol' => 'VoidSymbol', # Is this recognised by X ?
         'ISO_Left_Tab' => 'Meta_Tab',
         'Clear' => 'VoidSymbol',
         'Pause' => 'Pause',
         'Scroll_Lock' => 'Scroll_Lock',
         'Sys_Req' => 'Last_Console',
         'Delete' => 'Remove',
         'Codeinput' => 'VoidSymbol',
         'SingleCandidate' => 'VoidSymbol',
         'MultipleCandidate' => 'VoidSymbol',
         'PreviousCandidate' => 'VoidSymbol',
         'Home' => 'Home',
         'Left' => 'Left',
         'Up' => 'Up',
         'Right' => 'Right',
         'Down' => 'Down',
         'Prior' => 'Prior',
         'Page_Up' => 'PageUp',
         'Next' => 'Next',
         'Page_Down' => 'PageDown',
         'End' => 'End',
         'Begin' => 'VoidSymbol',
         'Select' => 'Select',
         'Print' => 'Control_backslash',
         'Execute' => 'VoidSymbol',
         'Insert' => 'Insert',
         'Undo' => 'VoidSymbol',
         'Redo' => 'VoidSymbol',
         'Menu' => 'VoidSymbol',
         'Find' => 'Find',
         'Cancel' => 'VoidSymbol',
         'Help' => 'Help',
         'Break' => 'Break',
         'Num_Lock' => 'Num_Lock',
         'F1' => 'F1',
         'F2' => 'F2',
         'F3' => 'F3',
         'F4' => 'F4',
         'F5' => 'F5',
         'F6' => 'F6',
         'F7' => 'F7',
         'F8' => 'F8',
         'F9' => 'F9',
         'F10' => 'F10',
         'F11' => 'F11',
         'L1' => 'F11',
         'F12' => 'F12',
         'L2' => 'F12',
         'F13' => 'F13',
         'L3' => 'F13',
         'F14' => 'F14',
         'L4' => 'F14',
         'F15' => 'F15',
         'L5' => 'F15',
         'F16' => 'F16',
         'L6' => 'F16',
         'F17' => 'F17',
         'L7' => 'F17',
         'F18' => 'F18',
         'L8' => 'F18',
         'F19' => 'F19',
         'L9' => 'F19',
         'F20' => 'F20',
         'L10' => 'F20',
         'F21' => 'F21',
         'R1' => 'F21',
         'F22' => 'F22',
         'R2' => 'F22',
         'F23' => 'F23',
         'R3' => 'F23',
         'F24' => 'F24',
         'R4' => 'F24',
         'F25' => 'F25',
         'R5' => 'F25',
         'F26' => 'F26',
         'R6' => 'F26',
         'F27' => 'F27',
         'R7' => 'F27',
         'F28' => 'F28',
         'R8' => 'F28',
         'F29' => 'F29',
         'R9' => 'F29',
         'F30' => 'F30',
         'R10' => 'F30',
         'F31' => 'F31',
         'R11' => 'F31',
         'F32' => 'F32',
         'R12' => 'F32',
         'F33' => 'F33',
         'R13' => 'F33',
         'F34' => 'F34',
         'R14' => 'F34',
         'F35' => 'F35',
         'R15' => 'F35',
         'Terminate_Server' => 'VoidSymbol',
         'Pointer_EnableKeys' => 'VoidSymbol',
         'XF86_Switch_VT_1' => 'Console_1',
         'XF86_Switch_VT_2' => 'Console_2',
         'XF86_Switch_VT_3' => 'Console_3',
         'XF86_Switch_VT_4' => 'Console_4',
         'XF86_Switch_VT_5' => 'Console_5',
         'XF86_Switch_VT_6' => 'Console_6',
         'XF86_Switch_VT_7' => 'Console_7',
         'XF86_Switch_VT_8' => 'Console_8',
         'XF86_Switch_VT_9' => 'Console_9',
         'XF86_Switch_VT_10' => 'Console_10',
         'XF86_Switch_VT_11' => 'Console_11',
         'XF86_Switch_VT_12' => 'Console_12',
         'XF86_ClearGrab' => 'VoidSymbol',
         'XF86_Ungrab' => 'VoidSymbol',
         'XF86_Next_VMode' => 'VoidSymbol',
         'XF86_Prev_VMode' => 'VoidSymbol',
         'XF86Copy' => 'VoidSymbol',
         'XF86Cut' => 'VoidSymbol',
         'XF86Paste' => 'VoidSymbol',
         'XF86AudioLowerVolume' => 'VoidSymbol',
         'XF86AudioRaiseVolume' => 'VoidSymbol',
         'XF86AudioMute' => 'VoidSymbol',
         'XF86PowerOff' => 'VoidSymbol',
         'XF86AudioForward' => 'VoidSymbol',
         'XF86AudioMedia' => 'VoidSymbol',
         'XF86AudioNext' => 'VoidSymbol',
         'XF86AudioPause' => 'VoidSymbol',
         'XF86AudioPlay' => 'VoidSymbol',
         'XF86AudioPrev' => 'VoidSymbol',
         'XF86AudioRecord' => 'VoidSymbol',
         'XF86AudioRewind' => 'VoidSymbol',
         'XF86AudioStop' => 'VoidSymbol',
         'XF86Back' => 'VoidSymbol',
         'XF86Battery' => 'VoidSymbol',
         'XF86Bluetooth' => 'VoidSymbol',
         'XF86Calculator' => 'VoidSymbol',
         'XF86Close' => 'VoidSymbol',
         'XF86Display' => 'VoidSymbol',
         'XF86Documents' => 'VoidSymbol',
         'XF86DOS' => 'VoidSymbol',
         'XF86Eject' => 'VoidSymbol',
         'XF86Explorer' => 'VoidSymbol',
         'XF86Favorites' => 'VoidSymbol',
         'XF86Finance' => 'VoidSymbol',
         'XF86Forward' => 'VoidSymbol',
         'XF86HomePage' => 'VoidSymbol',
         'XF86KbdBrightnessDown' => 'VoidSymbol',
         'XF86KbdBrightnessUp' => 'VoidSymbol',
         'XF86KbdLightOnOff' => 'VoidSymbol',
         'XF86Launch1' => 'VoidSymbol',
         'XF86Launch2' => 'VoidSymbol',
         'XF86Launch3' => 'VoidSymbol',
         'XF86Launch4' => 'VoidSymbol',
         'XF86Mail' => 'VoidSymbol',
         'XF86MailForward' => 'VoidSymbol',
         'XF86MenuKB' => 'VoidSymbol',
         'XF86MonBrightnessDown' => 'VoidSymbol',
         'XF86MonBrightnessUp' => 'VoidSymbol',
         'XF86MyComputer' => 'VoidSymbol',
         'XF86New' => 'VoidSymbol',
         'XF86Phone' => 'VoidSymbol',
         'XF86Reload' => 'VoidSymbol',
         'XF86Reply' => 'VoidSymbol',
         'XF86RotateWindows' => 'VoidSymbol',
         'XF86Save' => 'VoidSymbol',
         'XF86ScreenSaver' => 'VoidSymbol',
         'XF86ScrollDown' => 'VoidSymbol',
         'XF86ScrollUp' => 'VoidSymbol',
         'XF86Search' => 'VoidSymbol',
         'XF86Send' => 'VoidSymbol',
         'XF86Shop' => 'VoidSymbol',
         'XF86Sleep' => 'VoidSymbol',
         'XF86Suspend' => 'VoidSymbol',
         'XF86Tools' => 'VoidSymbol',
         'XF86TouchpadToggle' => 'VoidSymbol',
         'XF86WakeUp' => 'VoidSymbol',
         'XF86WebCam' => 'VoidSymbol',
         'XF86WLAN' => 'VoidSymbol',
         'XF86WWW' => 'VoidSymbol',
         'XF86Xfer' => 'VoidSymbol',
         'braille_blank' => 'Brl_blank',
         'braille_dot_1' => 'Brl_dot1',
         'braille_dot_2' => 'Brl_dot2',
         'braille_dot_3' => 'Brl_dot3',
         'braille_dot_4' => 'Brl_dot4',
         'braille_dot_5' => 'Brl_dot5',
         'braille_dot_6' => 'Brl_dot6',
         'braille_dot_7' => 'Brl_dot7',
         'braille_dot_8' => 'Brl_dot8',
         'braille_dot_9' => 'Brl_dot9',
         'braille_dot_10' => 'Brl_dot10',
# I do not know the Unicodes of these
         '0x1000' => 'VoidSymbol', # Special symbol for X or syntax error?
         '0x13a4' => 'VoidSymbol', # Special symbol for X or syntax error?
         '0xfe11' => 'VoidSymbol', # Special symbol for X or syntax error?
         'leftcaret' => 'VoidSymbol', # Is this recognised by X ?
         'guj_rra' => 'VoidSymbol', # Is this recognised by X ?
         'guj_nnna' => 'VoidSymbol', # Is this recognised by X ?
         'guj_llla' => 'VoidSymbol', # Is this recognised by X ?
         'gur_visarga' => 'VoidSymbol', # Is this recognised by X ?
         'gur_v_r' => 'VoidSymbol', # Is this recognised by X ?
         'gur_v_r_s' => 'VoidSymbol', # Is this recognised by X ?
         'Eisu_toggle' => 'VoidSymbol', # Is this recognised by X ?
         'Zenkaku_Hankaku' => 'VoidSymbol', # Is this recognised by X ?
         'Kanji' => 'VoidSymbol', # Is this recognised by X ?
         'Hangul' => 'VoidSymbol', # Is this recognised by X ?
         'Hangul_Hanja' => 'VoidSymbol', # Is this recognised by X ?
         'Henkan' => 'VoidSymbol',
         'Hiragana' => 'VoidSymbol',
         'Hiragana_Katakana' => 'VoidSymbol',
         'Katakana' => 'VoidSymbol',
         'Muhenkan' => 'VoidSymbol',
# XFree86 does not recognise these
         'SunAudioLowerVolume' => 'VoidSymbol',
         'SunAudioRaiseVolume' => 'VoidSymbol',
         'SunAudioMute' => 'VoidSymbol',
         'SunCopy' => 'VoidSymbol',
         'SunCut' => 'VoidSymbol',
         'SunPaste' => 'VoidSymbol',
         'SunAgain' => 'VoidSymbol',
         'SunUndo' => 'VoidSymbol',
         'SunFind' => 'VoidSymbol',
         'SunStop' => 'VoidSymbol',
         'SunF36' => 'VoidSymbol',
         'SunF37' => 'VoidSymbol',
         'SunFront' => 'VoidSymbol',
         'SunOpen' => 'VoidSymbol',
         'SunPowerSwitch' => 'VoidSymbol',
         'SunPowerSwitchShift' => 'VoidSymbol',
         'SunProps' => 'VoidSymbol',
         'SunSys_Req' => 'VoidSymbol',
         'SunVideoDegauss' => 'VoidSymbol',
         'SunVideoLowerBrightness' => 'VoidSymbol',
         'SunVideoRaiseBrightness' => 'VoidSymbol',
        );

    if ($compact) {
        $xkbsym_table{'Mode_switch'} = 'AltGr';
        $xkbsym_table{'ISO_Group_Shift'} = 'AltGr';
        $xkbsym_table{'ISO_Group_Latch'} = 'AltGr';
        $xkbsym_table{'ISO_Group_Lock'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Next_Group'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Next_Group_Lock'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Prev_Group'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Prev_Group_Lock'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_First_Group'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_First_Group_Lock'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Last_Group'} = 'AltGr_Lock';
        $xkbsym_table{'ISO_Last_Group_Lock'} = 'AltGr_Lock';
    }
    if ($backspace eq 'bs') {
        $xkbsym_table{'BackSpace'} = 'BackSpace';
        $xkbsym_table{'Delete'} = 'Delete';
    }
}

my $voidsymbol = $freebsd ? 'nop' : 'VoidSymbol';

my @controlsyms;
my @metasyms;
my @metacontrolsyms;
my %controlsyms_hash;

{
    if ($freebsd) {

        %controlsyms_hash = (
            'nul' => 0x00,
            'soh' => 0x01,
            'stx' => 0x02,
            'etx' => 0x03,
            'eot' => 0x04,
            'enq' => 0x05,
            'ack' => 0x06,
            'bel' => 0x07,
            'bs' => 0x08,
            'ht' => 0x09,
            'nl' => 0x0a,
            'vt' => 0x0b,
            'ff' => 0x0c,
            'cr' => 0x0d,
            'so' => 0x0e,
            'si' => 0x0f,
            'dle' => 0x10,
            'dc1' => 0x11,
            'dc2' => 0x12,
            'dc3' => 0x13,
            'dc4' => 0x14,
            'nak' => 0x15,
            'syn' => 0x16,
            'etb' => 0x17,
            'can' => 0x18,
            'em' => 0x19,
            'sub' => 0x1a,
            'esc' => 0x1b,
            'fs' => 0x1c,
            'gs' => 0x1d,
            'rs' => 0x1e,
            'us' => 0x1f,
            'del' => 0x7f,
            );
    } else {
        %controlsyms_hash = (
            'nul' => 0x00,
            'Control_a' => 0x01,
            'Control_b' => 0x02,
            'Control_c' => 0x03,
            'Control_d' => 0x04,
            'Control_e' => 0x05,
            'Control_f' => 0x06,
            'Control_g' => 0x07,
            'BackSpace' => 0x08,
            'Tab' => 0x09,
            'Linefeed' => 0x0a,
            'Control_k' => 0x0b,
            'Control_l' => 0x0c,
            'Return' => 0x0d,
            'Control_n' => 0x0e,
            'Control_o' => 0x0f,
            'Control_p' => 0x10,
            'Control_q' => 0x11,
            'Control_r' => 0x12,
            'Control_s' => 0x13,
            'Control_t' => 0x14,
            'Control_u' => 0x15,
            'Control_v' => 0x16,
            'Control_w' => 0x17,
            'Control_x' => 0x18,
            'Control_y' => 0x19,
            'Control_z' => 0x1a,
            'Escape' => 0x1b,
            'Control_backslash' => 0x1c,
            'Control_bracketright' => 0x1d,
            'Control_asciicircum' => 0x1e,
            'Control_underscore' => 0x1f,
            'Delete' => 0x7f,
            );
    }        
    for my $special (keys %controlsyms_hash) {
        $controlsyms[$controlsyms_hash{$special}] = $special;
    }
    for my $code (0 .. 255) {
        if (! defined $controlsyms[$code]) {
            if ($code >= 64 && $code <= 127
                && defined (my $special = $controlsyms[$code % 32])) {
                $controlsyms[$code] = $special;
            } else {
                $controlsyms[$code] = $voidsymbol;
            }
        }
    }
# Ctrl + BS = DEL, Ctrl + DEL = BS
    if ($freebsd) {
        $controlsyms[0x08] = 'del';
        $controlsyms[0x7f] = 'bs';
    } else {
        $controlsyms[0x08] = 'Delete';
        $controlsyms[0x7f] = 'BackSpace';
    }
# Some particularities of FreeBSD and Linux
    if ($freebsd) {
        $controlsyms[0x0d] = 'nl';                     # Ctrl+m = ^J
        $controlsyms[0x20] = 'nul';                    # Ctrl+space = ^@
        $controlsyms[0x3f] = 'del';                    # Ctrl+? = ^?
    } else {
        $controlsyms[0x0d] = 'Control_m';              # I don't know
        $controlsyms[0x20] = 'nul';                    # Ctrl+space = ^@
        $controlsyms[0x2e] = 'Compose';                # Ctrl+. = Compose
        $controlsyms[0x3f] = 'Delete';                 # Ctrl+? = ^?
# I suppose these are not necessary:
        # $controlsyms[0x27] = 'Control_g';              # Ctrl+' = ^G
        # $controlsyms[0x32] = 'nul';                    # 2
        # $controlsyms[0x33] = 'Escape';                 # 3
        # $controlsyms[0x34] = 'Control_backslash';      # 4
        # $controlsyms[0x35] = 'Control_bracketright';   # 5
        # $controlsyms[0x36] = 'Control_asciicircum';    # 6
        # $controlsyms[0x37] = 'Control_underscore';     # 7
        # $controlsyms[0x38] = 'Delete';                 # 8
    }

    my %metasyms_hash = (
	' ' => 'space',
	'`' => 'grave',
	'^' => 'asciicircum',
	'~' => 'asciitilde',
	'<' => 'less',
	'=' => 'equal',
	'>' => 'greater',
	'|' => 'bar',
	'_' => 'underscore',
	'-' => 'minus',
	',' => 'comma',
	';' => 'semicolon',
	':' => 'colon',
	'!' => 'exclam',
	'?' => 'question',
	'/' => 'slash',
	'.' => 'period',
	'\'' => 'apostrophe',
	'"' => 'quotedbl',
	'(' => 'parenleft',
	')' => 'parenright',
	'[' => 'bracketleft',
	']' => 'bracketright',
	'{' => 'braceleft',
	'}' => 'braceright',
	'@' => 'at',
	'$' => 'dollar',
	'*' => 'asterisk',
	'\\' => 'backslash',
	'&' => 'ampersand',
	'#' => 'numbersign',
	'%' => 'percent',
	'+' => 'plus',
	'0' => 'zero',
	'1' => 'one',
	'2' => 'two',
	'3' => 'three',
	'4' => 'four',
	'5' => 'five',
	'6' => 'six',
	'7' => 'seven',
	'8' => 'eight',
	'9' => 'nine',
	chr(0x08) => 'BackSpace',
	chr(0x09) => 'Tab',
	chr(0x0a) => 'Linefeed',
	chr(0x0d) => 'Control_m',
	chr(0x1b) => 'Escape',
        chr(0x1c) => 'Control_backslash',
	chr(0x7f) => 'Delete',
    );
    
    for my $code (0 .. 255) {
	my $sym = chr($code);
	if (defined (my $special = $metasyms_hash{$sym})) {
	    $sym = $special;
	}
	$metasyms[$code] = "Meta_". $sym;
    }

    for my $code (0 .. 255) {
	my $control = $controlsyms[$code];
	if ($control eq 'Compose') {
	    $metacontrolsyms[$code] = 'Compose';
	} elsif ($control eq 'Return') {
	    $metacontrolsyms[$code] = 'Meta_Control_m';
	} elsif ($control eq 'NoSymbol') {
	    $metacontrolsyms[$code] = 'NoSymbol';
	} elsif ($control eq 'VoidSymbol') {
	    $metacontrolsyms[$code] = 'VoidSymbol';
	} else {
	    $metacontrolsyms[$code] = 'Meta_'. $control;
	}
    }
}

############ GLOBAL FUNCTIONS #########################################

# Looks for $_[0] in the known directories and returns ready to use
# file name
sub xfilename {
    my $file = $_[0];
    (my $base = $file) =~ s/.*\/(.+)/$1/;
    for my $dir (@xdirs) {
	if (-f "$dir/$file") {
	    return "$dir/$file";
	}
	if (-f "$dir/$base") {
	    return "$dir/$base";
	}
    }
    die "$0: Can not find file \"$file\" in any known directory\n";
}

########### READ THE RULES FILE #######################################

# The string $_[0] matches the pattern $_[1]. 
# The pattern may be "*", a variable name, or a plain string.
# If the string is 'OPTIONS' then match the pattern against any of the
# options from @options.
sub matches_pattern {
    my ($string, $pattern) = @_;
    if ($string eq 'OPTIONS') {
	for my $option (@options) {
	    next if ($option eq '');
	    if ($pattern eq $option) {
		return 1;
	    }
	}
    } else {
	if ($pattern eq '*') {
	    return $string ne '';
	}
	if ($pattern =~ /^\$([a-zA-Z0-9_]+)$/) {
	    for my $member (@{$rules_variables{$1}}) {
		if ($string eq $member) {
		    return 1;
		}
	    }
	    return 0;
	}
	if ($string eq $pattern) {
	    return 1;
	}
    }
    return 0;
}

if (@layouts) {
    for my $i (0 .. $#layouts) {
	if (! defined $variants[$i]) {
	    $variants[$i] = '';
	}
    }
    my $rules_keycodes;
    my $rules_symbols;
    open (RULES, xfilename ("rules/$rules"))
	or die "$0: ". xfilename ("rules/$rules") .": $!\n";
    my $oldline = '';
    my @antecedents;
    my @consequents;
    my $match_found = 0;
    while (<RULES>) {
	next if (/^\s*\/\//);
	next if (/^\s*$/);
	chomp;
	s/^\s*//;
	s/\s+/ /g;
	if ($oldline) {
	    $_ = $oldline . $_;
	    $oldline = '';
	}
	if (s/\\$/ /) {
	    $oldline = $_;
	    next;
	}
	if (/^! ?\$([a-zA-Z0-9_]+) ?= ?(.+)$/) {
	    $rules_variables{$1} = [ split ' ', $2 ];
	    next;
	}
	if (/^! ?(.+)= ?(.+)$/) {
	    @antecedents = split ' ', $1;
	    @consequents = split ' ', $2;
	    foreach my $i (0 .. $#antecedents) {
		if ($antecedents[$i] eq 'model') {
		    $antecedents[$i] = $model;
		} elsif ($antecedents[$i] eq 'layout' && @layouts == 1) {
		    $antecedents[$i] = $layouts[0];
		} elsif ($antecedents[$i] =~ /layout\[([1-4])\]/) {
		    if (@layouts > 1) {
			$antecedents[$i] = $layouts[$1 - 1];
		    } else {
			$antecedents[$i] = '';
		    }
		} elsif ($antecedents[$i] eq 'variant' && @variants == 1) {
		    $antecedents[$i] = $variants[0];
		} elsif ($antecedents[$i] =~ /variant\[([1-4])\]/) {
		    if (@variants > 1) {
			$antecedents[$i] = $variants[$1 - 1];
		    } else {
			$antecedents[$i] = '';
		    }
		} elsif ($antecedents[$i] eq 'option') {
		    $antecedents[$i] = 'OPTIONS';
		} elsif ($antecedents[$i] eq 'layout'
			 || $antecedents[$i] eq 'variant') {
		    $antecedents[$i] = '';
		} else {
                    warning "Unknown name \"$antecedents[$i]\" in the following line in \"rules/$rules\":\n";
                    warning "$_\n";
		    $antecedents[$i] = '';
		}
		if (! defined $antecedents[$i]) {
		    $antecedents[$i] = '';
		}
	    }
	    $match_found = 0;
	    next;
	}
	if (/^(.+)= ?(.+)$/) {
	    next if ($match_found);
	    my @antecedent_patterns = split ' ', $1;
	    my $consequent_str = $2;
	    if (@antecedent_patterns != @antecedents ) {
		warning "Bad number of antecedents in the following line in \"rules/$rules\":\n";
                warning "$_\n";
                next;
            }
	    my $matches = 1;
	    for my $i (0 .. $#antecedents) {
		if (! matches_pattern ($antecedents[$i], 
				       $antecedent_patterns[$i])) {
		    $matches = 0;
		    last;
		}
	    }
	    if ($matches) {
		$match_found = $antecedents[0] ne 'OPTIONS';
		my @consequent_values = split ' ', $2;
                if (@consequent_values != @consequents) {
                    warning "Bad number of consequents in the following line in \"rules/$rules\":\n";
                    warning "$_\n";
                }
		for my $i (0 .. $#consequents) {
                    # The purpose of the semicolons is to make %(v) and %_v
                    # empty strings if %v is an empty string
		    $consequent_values[$i] =~ s/%\(/\(;%/g;
		    $consequent_values[$i] =~ s/%_/_;%/g;
		    $consequent_values[$i] =~ s/(%[lvm](\[[1-4]\])?)/$1;/g;
		    $consequent_values[$i] =~ s/%m/$model/g;
		    $consequent_values[$i] =~ s/%l\[1\]/$layouts[0]/g;
		    $consequent_values[$i] =~ s/%l\[2\]/$layouts[1]/g;
		    $consequent_values[$i] =~ s/%l\[3\]/$layouts[2]/g;
		    $consequent_values[$i] =~ s/%l\[4\]/$layouts[3]/g;
		    $consequent_values[$i] =~ s/%l/$layouts[0]/g;
		    $consequent_values[$i] =~ s/%v\[1\]/$variants[0]/g;
		    $consequent_values[$i] =~ s/%v\[2\]/$variants[1]/g;
		    $consequent_values[$i] =~ s/%v\[3\]/$variants[2]/g;
		    $consequent_values[$i] =~ s/%v\[4\]/$variants[3]/g;
		    $consequent_values[$i] =~ s/%v/$variants[0]/g;
		    $consequent_values[$i] =~ s/\(;;\)//g;
		    $consequent_values[$i] =~ s/_;;//g;
		    $consequent_values[$i] =~ s/;//g;
		    if ($consequent_values[$i] =~ /^\+/) {
			if ($consequents[$i] eq 'keycodes') {
			    $rules_keycodes = $rules_keycodes .
				$consequent_values[$i];
			} elsif ($consequents[$i] eq 'symbols') {
			    $rules_symbols = $rules_symbols .
				$consequent_values[$i];
			}
		    } else {
			if ($consequents[$i] eq 'keycodes') {
			    if (! $rules_keycodes) {
				$rules_keycodes = $consequent_values[$i];
			    }
			} elsif ($consequents[$i] eq 'symbols') {
			    if (! $rules_symbols) {
				$rules_symbols = $consequent_values[$i];
			    }
			}
		    }
		}
	    }
	    next;
	}    
	warning "Syntax error in the following line in \"rules/$rules\":\n";
        warning "$_\n";
        die;
    }
    close RULES;

    if ($verbosity >= 1) {
	print STDERR  "Acording to the rules file:\n"
	    ." keycodes = $rules_keycodes\n"
	    ." symbols = $rules_symbols\n";
    }

    if (! $keycodes) {
	$keycodes = $rules_keycodes;
    }
    if (! $symbols) {
	$symbols = $rules_symbols;
    }
}

if (! $keycodes) {
    die "$0: No keycodes, nor layout specified\n";
}
if (! $symbols) {
    die "$0: No symbols, nor layout specified\n";
}

########### COMPUTE ARCH ###########################################

if ($keycodes =~ /(^|\+|\|)ataritt(\([^\)]*\))?($|\+|\|)/) {
    $arch = 'ataritt';
} elsif ($keycodes =~ /(^|\+|\|)amiga(\([^\)]*\))?($|\+|\|)/) {
    $arch = 'amiga';
} elsif ($keycodes =~ /(^|\+|\|)sun(\(type[45][^\)]*\))?($|\+|\|)/) {
    $arch = 'sun';
} elsif ($keycodes =~ /(^|\+|\|)evdev(\([^\)]*\))?($|\+|\|)/) {
    $arch = 'evdev';
}

########### READ ACM ###############################################

if ($charmap) {
    for my $acmfile ("$installdir/share/consoletrans/${charmap}",
                     "$installdir/share/consoletrans/${charmap}.gz",
                     "$installdir/share/consoletrans/${charmap}.acm",
                     "$installdir/share/consoletrans/${charmap}.acm.gz",
                     "/usr/share/consoletrans/${charmap}",
                     "/usr/share/consoletrans/${charmap}.gz",
                     "/usr/share/consoletrans/${charmap}.acm",
                     "/usr/share/consoletrans/${charmap}.acm.gz",
                     "${charmap}") {
	if (-f $acmfile) {
	    $acm = $acmfile;
	    last;
	}
    }
    (-f $acm) or die "$0: no ACM for ${charmap} exists\n";
    if ($acm =~ /gz$/) {
	open (ACM, '-|:utf8', "zcat $acm") or die "$0: $acm: $!\n";
    } else {
	open (ACM, '<:utf8', $acm) or die "$0: $acm: $!\n";
    }
    while (<ACM>) {
	s/\#.*//;
	chomp;
	next unless (/[^\s]/);
	if (/^\s*0x([0-9a-fA-F]{1,2})\s+\'([^\']+)\'\s*$/) {
	    my $uni = ord ($2);
	    my $c = hex ($1);
	    $acmtable{$uni} = $c;
	} else {
	    die "$0: Syntax error in ACM file: $_\n";
	}
    }
    close ACM;
}

########### PARSING ###############################################

# Report a syntax error in $filename. $_[0] should describe what was
# expected at $stream.
sub syntax_error {
    die "$0: instead of \"". (substr ($stream, 0, 50))
	."\" in $filename expected $_[0].\n";
}

# Opens the text file $_[0], reads it and saves its contents in $stream
# The comments are removed, all new lines are replaced by spaces and
# all redundant spaces are removed.
sub file_to_string {
    my $file = $_[0];
    my $string = '';
    open (FILE, "$file") or die "$0: $file: $!\n";
    while (<FILE>) {
	chomp;
	s{//.*}{};
	s{\#.*}{};
	$string = $string . $_ .' ';
    }
    close FILE;
    
    my $normalized = '';
    my $final_letter = 0;
    while ($string) {
	if ($string =~ s/^\s+// && $final_letter && $string =~ /^[a-zA-Z0-9_]/) {
	    $normalized = $normalized .' ';
	    $final_letter = 0;
	}
	if ($string =~ s/^([^\"\s]+)//) {
	    $normalized = $normalized . $1;
	    $final_letter = ($1 =~ /[a-zA-Z0-9_]$/);
	    next;
	}
	if ($string =~ s/^(\"[^\"]*(\"|$))//) {
	    $normalized = $normalized . $1;
	    $final_letter = 0;
	    if ($2 ne '"') {
		die "$0: missing quote in ". (substr ($1, 0, 50)) ."...\n";
	    }
	    next;
	}
	(! $string ) or die "Internal error";
    }
    $stream = $normalized;
}

# removes from $stream initial sequence of xkb flags (default, partial,
# hidden, etc.) Returns true if the "default" flag was among them.
sub xkb_flags {
    my $default = 0;
    while ($stream =~ s/^(default|partial|hidden
			  |alphanumeric_keys|modifier_keys
			  |keypad_keys|function_keys
			  |alternate_group)\s?(.*)/$2/ix) {
	$default = 1 if ($1 =~ /default/i);
    }
    return $default;
}

# Removes and returns identifier from $stream. 
sub xkb_identifier {
    if ($stream =~ s/^([a-zA-Z0-1_]+) ?(.*)/$2/) {
	return $1;
    } else {
	syntax_error "identifier";
    }
}

# Removes and returns a string from $stream.
sub xkb_string {
    if ($stream =~ /^\"([^\"]*)\"(.*)/) {
	$stream = $2;
	return $1;
    } else {
	syntax_error "string";
    }
}

# Removes an include method name from $stream and returns $alternate_method,
# $augment_method, $replace_method, or $override_method.  If $stream
# does not start with a method name, return the default method (i.e. $method)
sub xkb_method {
    if ($stream =~ s/^alternate ?(.*)/$1/i) {
	return $alternate_method;
    } elsif ($stream =~ s/^augment ?(.*)/$1/i) {
	return $augment_method;
    } elsif ($stream =~ s/^replace ?(.*)/$1/i) {
	return $replace_method;
    } elsif ($stream =~ s/^override ?(.*)/$1/i) {
	return $override_method;
    } else {
	return $method;
    }
}

# If $stream starts with an include statement - process it and return true.
# Otherwise return false. $_[0] is the file type ("symbols" or "keycodes")
sub xkb_include {
    my $file_type = $_[0];
    if ($stream =~ s/^(include|replace|augment|override)\"([^\"]*)\";?
                        (.*)/$3/ix) {
	my $method_name = $1;
	my $include_request = $2;
	if ($method != $ignore_method) {
	    my $oldmethod = $method;
	    if ($method_name =~ /replace/i) {
		$method = $replace_method;
	    } elsif ($method_name =~ /augment/i) {
		$method = $augment_method;
	    } elsif ($method_name =~ /override/i) {
		$method = $override_method;
	    }
	    &include_xkb_file ($file_type, $include_request);
	    $method = $oldmethod;
	}
	return 1;
    } else {
	return 0;
    }
}

sub xkb_keycodes_definitions {
    my $oldmethod = $method;
    while ($stream) {
	$method = $oldmethod;

	if (xkb_include ('keycodes')) {
	    next;
	}

	$method = xkb_method ();
	
	if ($stream =~ (s/^(minimum|maximum|indicator|virtual\sindicator)
			[^;]*;(.*)/$2/ix)) {
	    next;
	}

	if ($stream =~ /^<([^>]*)>=/) {
	    $stream =~ s/^<([^>]+)>=([0-9]*);(.*)/$3/
		or syntax_error "keycode definition";
	    my $key = $1;
	    my $code = $2;
	    if ($method == $replace_method
		|| $method == $override_method
		|| ($method == $augment_method
		    && ! defined $keycodes_table{$key})) {
		$keycodes_table{$key} = [ $code ];
		delete $aliases{$key};
	    } elsif ($method == $alternate_method) {
		push @{$keycodes_table{$key}}, $code;
	    }
	    next;
	}
	if ($stream =~ /^alias/) {
	    $stream =~ s/^alias<([^>]+)>=<([^>]+)>;(.*)/$3/
		or syntax_error "alias definition";
	    my $alias = $1;
	    my $key = $2;
	    if ($method == $replace_method
		|| $method == $override_method
		|| ($method == $augment_method
		    && ! defined $keycodes_table{$alias})) {
		$keycodes_table{$alias} = [];
		$aliases{$alias} = $key;
	    }
	    next;
	}
	last;
    }
    $method = $oldmethod;
}

# Fill @{$symbols_table{$code}[$group]} with symbols
sub symbols_for_group {
    my $code = shift;
    my $group = shift;
    if ($method == $replace_method
	|| ($method == $override_method
	    && (@_ || ! defined $symbols_table{$code}[$group]))
	|| ($method == $augment_method &&
	    ! defined $symbols_table{$code})) {
	my $level = 0;
	for my $symbol (@_) {
	    if ($symbol !~ /\(/ && $symbol =~ /./
		&& (! defined $xkbsym_table{$symbol}
		    || $xkbsym_table{$symbol} ne 'NoSymbol'
		    || ! defined $symbols_table{$code}[$group][$level])) {
		$symbols_table{$code}[$group][$level] = $symbol;
	    }
	    $level++;
	}
    }
}

sub xkb_key {
    my $default_key_type = $_[0];
    if ($stream =~ /^key</i) {
	$stream =~ s/^key<([^>]+)>\{([^\}]*?)\};(.*)/$3/i
	    or syntax_error "key definition";
	my $key = $1;
	my $list = $2 .",";
	if ($verbosity >= 4 && ! defined $keycodes_table{$key}) {
	    warning "No scan code for <$key> is defined.\n";
	}
	for my $code (@{$keycodes_table{$key}}) {
	    if ($method == $replace_method) {
		$symbols_table{$code} = [];
	    }
	    my $group = $base_group;
	    while ($list =~ /[^ ]/) {
		# [ X1, X2, ... ]
		if ($list =~ s/^\[([^\]]*?)\],(.*)/$2/) {
		    (my $symbols = $1) =~ s/,/ /g;
		    my @groupsymbols = split ' ', $symbols;
		    symbols_for_group $code, $group, @groupsymbols;
		    $group++;
		    next;
		}
		# symbols[GroupN] = [ X1, X2, ... ]
		if ($list =~ (s/^symbols\[Group([1-4])\]
			      =\[([^\]]*?)\],(.*)/$3/x)) {
		    my $group = $1 - 1 + $base_group;
		    (my $symbols = $2) =~ s/,/ /g;
		    my @groupsymbols = split ' ', $symbols;
		    symbols_for_group $code, $group, @groupsymbols;
		    next;
		}
		# type = "...."
		if ($list =~ (s/^type(?:\[Group1\])?
                              =\"([^\"]+)\",(.*)/$2/x)) {
		    if ($method == $replace_method
			|| $method == $override_method
			|| ($method == $augment_method
			    && ! defined $types_table{$code})) {
			$types_table{$code} = $1;
		    }
		    next;
		}
                # virtualMods = AltGr
                # overlay1=<KO7>
		next if ($list =~ s/^[a-zA-Z0-9_]+(=[a-zA-Z0-9_<>]+)?,
                                   (.*)/$2/x);
		# type = "CTRL+ALT"
		next if ($list =~ s/^[a-zA-Z0-9_]+=\"[^\"]+\",(.*)/$1/);
		# type[...] = "..."
		next if ($list =~ s/^type\[[a-zA-Z0-9_]+\]=\"[^\"]+\",
                                    (.*)/$1/x);
		# actions[...] = [ ... ]
		next if ($list =~ s/^actions\[[a-zA-Z0-9_]+\]=\[[^\]]*?\],
                                    (.*)/$1/x);
		die "$0: garbage in a key definition: \"$list\""
		    ." in $filename.\n";
	    }
	    if (! defined $types_table{$code}
		|| $types_table{$code} eq 'DEFAULT') {
		$types_table{$code} = $default_key_type;
	    }
	}
	return 1;
    } else {
	return 0;
    }
}

sub xkb_symbols_definitions {
    my $oldmethod = $method;
    my $default_key_type = 'DEFAULT';
    while ($stream) {
	$method = $oldmethod;

	if (xkb_include ('symbols')) {
	    next;
	}

	$method = xkb_method ();

	if ($stream =~ /^name/i) {
	    $stream =~ s/^name\[[a-zA-Z0-9_]+\]=\"[^\"]*\";(.*)/$1/i
		or syntax_error "group name";
	    next;
	}

	if ($stream =~ (s/^key\.type(?:\[Group1\])?=\"([^\"]+)\";(.*)/$2/)) {
	    $default_key_type = $1;
	    next;
	}
	
	if ($stream =~ s/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+=.*?;(.*)/$1/i) {
	    next;
	}

	if ($stream =~ s/^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\[[a-zA-Z0-9_]+\]
                       =.*?;(.*)/$1/ix) {
	    next;
	}

	if (xkb_key $default_key_type) {
	    next;
	}

	if ($stream =~ /^(modifier_map|modmap|mod_map)/i) {
	    $stream =~ (s/^(modifier_map|modmap|mod_map)\s?[a-zA-Z0-9_]+
			\{[^\}]*\};(.*)/$2/ix)
		or syntax_error "modifier_map";
	    next;
	}

	if ($stream =~ /^virtual_modifiers/i) {
	    $stream =~ (s/^virtual_modifiers\s?[a-zA-Z0-9_,]+;(.*)/$1/ix)
		or syntax_error "virtual_modifiers";
	    next;
	}
	last;
    }
    $method = $oldmethod;
}

sub xkb_definitions {
    my $file_type = $_[0];
    if ($file_type eq 'symbols') {
	xkb_symbols_definitions();
    } elsif ($file_type eq 'keycodes') {
	xkb_keycodes_definitions();
    } else {
	die "$0: Bad xkb file type $file_type\n";
    }
}

# Remove from $stream the characters up to the first unmatched "}"
sub skip_to_brace {
    while ($stream && ($stream =~ s/^[^\}\{]*\{//)) {
	&skip_to_brace;
    }
    $stream =~ s/^[^\}\{]*(\}|$)//;
}

sub xkb_block_list {
    my $file_type = $_[0];
    my $block = $_[1];
    my $first = 1;
    my $ok = 0;
    my $mystream = $stream;
    while ($stream) {
	my $default = xkb_flags();
	xkb_identifier() eq "xkb_". $file_type
	    or syntax_error "xkb_". $file_type;
	my $name = xkb_string();
	my $structured;
	if ($stream =~ s/^\{//) {
	    $structured = 1;
	} else {
	    $structured = 0;
	}
	if ($name eq $block || ($first && ! $block)) {
	    xkb_definitions ($file_type);
	    if ($structured) {
		$stream =~ s/^\};.*// or syntax_error "};";
	    } else {
		$stream = '';
	    }
	    $ok = 1;
	} else {
	    if ($structured) {
		skip_to_brace;
		$stream =~ s/^;// or syntax_error ";";
	    } else {
		last;
	    }
	}
	$first = 0;
    }
    if (! $ok) {
	$stream = $mystream;
    }
    return $ok;
}

sub include_xkb_file {
    my $file_type = $_[0];
    my $include_list = '^'. $_[1];

    my $oldmethod = $method;
    my $oldbase_group = $base_group;
    while ($include_list) {
	my $file;
	my $block;
	if ($include_list =~ (s/^(\^|\+|\|)([^\(\|\+]+)\(([^\)]+)\)
			      :([1234])(.*)/$5/x)) {
	    if ($1 eq '+') {
		$method = $override_method;
	    } elsif ($1 eq '|') {
		$method = $augment_method;
	    }
	    $file = $2;
	    $block = $3;
	    $base_group = $4 - 1 + $base_group;
	} elsif ($include_list =~ (s/^(\^|\+|\|)([^\(\|\+]+)\(([^\)]+)\)
				   (.*)/$4/x)) {
	    if ($1 eq '+') {
		$method = $override_method;
	    } elsif ($1 eq '|') {
		$method = $augment_method;
	    }
	    $file = $2;
	    $block = $3;
	} elsif ($include_list =~ s/^(\^|\+|\|)([^\(\|\+]+):([1234])(.*)/$4/) {
	    if ($1 eq '+') {
		$method = $override_method;
	    } elsif ($1 eq '|') {
		$method = $augment_method;
	    }
	    $file = $2;
	    $block = '';
	    $base_group = $3 - 1 + $base_group;
	} elsif ($include_list =~ s/^(\^|\+|\|)([^\(\|\+]+)(.*)/$3/) {
	    if ($1 eq '+') {
		$method = $override_method;
	    } elsif ($1 eq '|') {
		$method = $augment_method;
	    }
	    $file = $2;
	    $block = '';
	} else {
	    die "$0: bad include list $include_list.\n";
	}
	
	my $oldstream = $stream;
	if ($file =~ /^\.?\//) {
	    $stream = file_to_string ("$file");
	} else {
	    $stream = file_to_string (xfilename "$file_type/$file");
	}
	my $oldfilename = $filename;
	$filename = $file;
	if (!xkb_block_list ($file_type, $block)) {
	    warning "Can not find \"$block\" in \"$file\".\n";
	    xkb_block_list ($file_type, '');
	}

	# Patch the Greek symbols. See Bug#1026986 and http://kbdlayout.info/kbdhe :
	# - xkb-data makes shift-w a SIGMA, which is not that useful.
	# - On the other hand, the kernel doesn't support double-dead-keys, and it
	# is common usage to make shift-w a dead-acute-diaeresis (here encoded
	# as dead_breve)
	if ($file eq "gr") {
		my $code = $keycodes_table{'AD02'}[0];
		if (defined $code) {
			my $symbol = $symbols_table{$code}[$base_group][1];
			if ($symbol eq "Greek_SIGMA") {
				$symbols_table{$code}[$base_group][1] = "dead_breve";
			}
		}
	}

	$stream = $oldstream;
	$filename = $oldfilename;
	$method = $oldmethod;
	$base_group = $oldbase_group;
    }
}

include_xkb_file 'keycodes', $keycodes;

foreach my $alias (keys %aliases) {
    if (! defined $keycodes_table{$aliases{$alias}}) {
	die "$0: undefined keyname $aliases{$alias} in ".
	    "an keycode alias definition in $filename.\n";
    }
    $keycodes_table{$alias} = [ @{$keycodes_table{$alias}},
				@{$keycodes_table{$aliases{$alias}}} ];
}

include_xkb_file 'symbols', $symbols;

if ($arch eq 'at' || $arch eq 'evdev') {
# Pause - 110, Break - 114, PrintScreen - 111, SysRq - 92
    for my $group (0 .. 3) {
        # no separate Break key on AT keyboards.  Break = Ctrl+Pause
        if (defined $symbols_table{110}[$group][1]) {
            $symbols_table{114}[$group] = [$symbols_table{110}[$group][1]];
        }
        # no separate SysRq key on AT keyboards.  SysRq = Alt+PrintScreen
        if (defined $symbols_table{111}[$group][1]) {
            $symbols_table{92}[$group] = [$symbols_table{111}[$group][1]];
        }
    }
}

foreach my $key (keys %symbols_table) {
    foreach my $group (0 .. $#{$symbols_table{$key}}) {
	if (! defined $symbols_table{$key}[$group]) {
	    $symbols_table{$key}[$group] = [];
	} else {
	    foreach my $level (0 .. $#{$symbols_table{$key}[$group]}) {
		if (! defined $symbols_table{$key}[$group][$level]) {
		    $symbols_table{$key}[$group][$level] = 'NoSymbol';
		}
	    }
	}
    }
    if (! defined $types_table{$key}) {
	$types_table{$key} = 'DEFAULT';
    }
}

sub uni_to_legacy {
    my $uni = $_[0];
    if ($acm) {
	if ($uni <= 0x7f) {
            if ($freebsd && $uni >= 0x20 && $uni <= 0x7e) {
                return sprintf "\'%c\'", $uni;
            } else {
                return sprintf "0x%02x", $uni;
            }
	} elsif (defined $acmtable{$uni}) {
            if ($freebsd) {
                return sprintf "%i", $acmtable{$uni};
            } else {
                return sprintf "0x%02x", $acmtable{$uni};
            }
	} else {
	    if ($verbosity >= 8) {
		warning sprintf ("Unicode U+%04x does not exist "
				 ."in the legacy encoding\n", $uni);
	    }
	    return $voidsymbol;
	}
    } else {
	return 'U+'. sprintf ("%04x", $uni);
    }
}

sub x_to_kernelsym {
    my $xkeysym = $_[0];
    my $kernelkeysym = $xkbsym_table{$xkeysym};
    if (defined $kernelkeysym) {
        if ($kernelkeysym !~ /^[0-9][0-9a-fA-F]{3}$/) {
	    return $kernelkeysym;
	}
    } else {
	$kernelkeysym = ($xkeysym =~ /^0x0*(100)?([0-9a-fA-F]{4})$/
			 ? $2
			 : ($xkeysym =~ /^U([0-9a-fA-F]+)$/
			    ? $1 
			    : undef));
    }
    if (defined $kernelkeysym) {
	my $uni = hex ($kernelkeysym);
	if ($uni > 0xFFFF || defined $forbidden{$uni}) {
            if ($verbosity >= 8) {
                warning "Forbidden Unicode \"U+$kernelkeysym\"\n";
            }
	    return $voidsymbol;
	} else {
	    if (pack("U", $uni) =~ /\p{IsAlpha}/) {
		my $legacy = uni_to_legacy ($uni);
		if ($legacy ne $voidsymbol) {
		    return '+'. $legacy; # further processed for FreeBSD
		} else {
		    return $legacy;
		}
	    } elsif ($uni <= 0x1f) {
		return $controlsyms[$uni];
	    } else {
		return uni_to_legacy ($uni);
	    }
	}
    } else {
	warning "Unknown X keysym \"$xkeysym\"\n";
	return $voidsymbol;
    }
}

sub x_to_ascii {
    my $xkeysym = $_[0];
    my $kernelkeysym = $xkbsym_table{$xkeysym};
    if (defined $kernelkeysym) {
        if (defined $controlsyms_hash{$kernelkeysym}) {
            return $controlsyms_hash{$kernelkeysym};
	} elsif ($kernelkeysym !~ /^[0-9][0-9a-fA-F]{3}$/) {
	    return undef;
	}
    } else {
	$kernelkeysym = ($xkeysym =~ /^0x0*(100)?([0-9a-fA-F]{4})$/
			 ? $2
			 : ($xkeysym =~ /^U([0-9a-fA-F]+)$/
			    ? $1 
			    : undef));
    }
    if (defined $kernelkeysym) {
	my $uni = hex ($kernelkeysym);
	if (0x00 <= $uni && 0x7f >= $uni) {
	    return $uni;
	}
    }
    return undef;
}

# A vector of symbol codes for a key
my @vector;
# $numlockable[group] -> whether the group is numlockable
my @numlockable;
# A vector with same length as @vector.  Measures how well each element of
# @vector represents the xkb symbol for the particular key.  Bigger values
# mean lower quality.
my @quality;

sub approximate {
    my ($coord, $new_sym, $new_quality) = @_;
    # $new_sym represents the xkb symbol for position $coord in @vector
    # with quality $new_quality
    if ((! defined $quality[$coord] || $quality[$coord] > $new_quality)
	&& $new_sym ne $voidsymbol) {
	$vector[$coord] = $new_sym;
	$quality[$coord] = $new_quality;
    }
}

# Fill @vector with data for key number $_[0]
sub flatten {
    #    Kernel         X
    # -----------------------------------------
    # 1  Shift          level 2 (Shift)
    # 2  AltGr          levels 3 and 4 (AltGr)
    # 4  Control        Control
    # 8  Alt            Alt
    # 0                 Group1
    # 16 ShiftL         Group2
    # 32 ShiftR         Group4
    # 48 ShiftL+ShiftR  Group3
    my $key = $_[0];
    @vector = ();
    @quality = ();
    @numlockable = (0,0,0,0);
    my @real_group_table = ([-1, -1, -1, -1],
			    [0, 0, 0, 0], # gr1 -> gr1 -> gr1 -> gr1
			    [0, 1, 1, 0], # gr1 -> gr2 -> gr1 -> gr2
			    [0, 1, 2, 0], # gr1 -> gr2 -> gr1 -> gr3
			    [0, 1, 3, 2]);# gr1 -> gr2 -> gr3 -> gr4
    for my $group (0..3) {
	my $real_group = $real_group_table[1+$#{$symbols_table{$key}}][$group];
        my $last_level;
        while ($real_group >= 0
               && ($last_level = $#{$symbols_table{$key}[$real_group]}) < 0) {
            $real_group = $real_group - 1;
        }
	next if ($real_group < 0);
	for my $level (0..3) {
	    my $real_level = $level;
	    if ($types_table{$key} eq 'ONE_LEVEL') {
		$real_level = 0;
	    } elsif ($types_table{$key} eq 'TWO_LEVEL') {
                $real_level = $real_level % 2;
	    } elsif ($types_table{$key} eq 'THREE_LEVEL') {
		if ($real_level > 2) {
		    $real_level = 2;
		}
	    }
            if ($last_level == -1) {
                next;
            } elsif ($last_level == 0) {
                $real_level = 0;
            } elsif ($last_level == 1) {
                $real_level = $real_level % 2;
            } elsif ($last_level == 2 && $real_level == 3) {
                $real_level = 2;
            } elsif ($real_level > $last_level) {
                $real_level = $last_level;
            }
	    my $coord;
	    for ($types_table{$key}) {
		if (/^(DEFAULT|ONE_LEVEL|TWO_LEVEL
                      |THREE_LEVEL|ALPHABETIC
                      |EIGHT_LEVEL|EIGHT_LEVEL_ALPHABETIC
                      |EIGHT_LEVEL_SEMIALPHABETIC
                      |FOUR_LEVEL|FOUR_LEVEL_ALPHABETIC
                      |FOUR_LEVEL_SEMIALPHABETIC
                      |SEPARATE_CAPS_AND_SHIFT_ALPHABETIC
		      |KEYPAD|FOUR_LEVEL_X|FOUR_LEVEL_MIXED_KEYPAD
		      |FOUR_LEVEL_KEYPAD|LOCAL_EIGHT_LEVEL
                      |FOUR_LEVEL_PLUS_LOCK
                      )$/x) {
		    # Level0: plain
		    # Level1: shift
		    # Level2: altgr
		    # Level3: shift+altgr
		    $coord = ($group << 4) + $level;
		} elsif (/^(PC_BREAK|PC_CONTROL_LEVEL2
                           |PC_LCONTROL_LEVEL2|PC_RCONTROL_LEVEL2)$/x) {
		    # Level0: plain
		    # Level1: control
		    if ($level == 0 || $level == 2) {
			$coord = ($group << 4) + $level;
		    } else {
			$coord = ($group << 4) + $level + 3;
		    }
		} elsif (/^(PC_SYSRQ|PC_ALT_LEVEL2
                           |PC_LALT_LEVEL2|PC_RALT_LEVEL2)$/x) {
		    # Level0: plain
		    # Level1: alt
		    if ($level == 0 || $level == 2) {
			$coord = ($group << 4) + $level;
		    } else {
			# notice that $level is 1 or 3
			$coord = ($group << 4) + $level + 7;
		    }
		} elsif (/^SHIFT\+ALT$/) {
		    # Level0: plain
		    # Level1: shift+alt
		    if ($level == 0 || $level == 2) {
			$coord = ($group << 4) + $level;
		    } else {
			$coord = ($group << 4) + $level + 8;
		    }
		} elsif (/^CTRL\+ALT$/) {
		    # Level0: plain
		    # Level1: control+alt
		    if ($level == 0 || $level == 2) {
			$coord = ($group << 4) + $level;
		    } else {
			$coord = ($group << 4) + $level + 11;
		    }
		} elsif (/^PC_FN_LEVEL2$/) {
		    # Level0: plain
		    # Level1: altgr
                    $coord = ($group << 4) + ($level << 1);
		} else {
		    warning "Unknown key type $types_table{$key}\n";
		    $coord = ($group << 4) + $level;
		}
	    }
	    my $xkeysym = $symbols_table{$key}[$real_group][$real_level];
	    if ($xkeysym =~ /^KP_/) {
                $numlockable[$group] = 1;
	    }
	    my $is_special = ($xkeysym !~ /^U[0-9a-fA-F]+$/
			      && defined $xkbsym_table{$xkeysym}
			      && ($xkbsym_table{$xkeysym}
				  !~ /^[0-9][0-9a-fA-F]{3}$/));
	    my $kernelkeysym = x_to_kernelsym ($xkeysym);
	    approximate ($coord, $kernelkeysym, 0);
            if (defined (my $ascii = x_to_ascii ($xkeysym))) {
                approximate (($coord | 0x08), $metasyms[$ascii], 1);
                approximate (($coord | 0x04), $controlsyms[$ascii], 1);
                approximate (($coord | 0x0c), $metacontrolsyms[$ascii], 1);
            }
	}
    }
    for my $x (0..1) {
        my $mask = 1 << $x;
        for my $coord (0..63) {
            next if (! defined $vector[$coord]);
            approximate($coord ^ $mask, $vector[$coord],
                        $quality[$coord] + $mask << 2);
        }
    }
    for my $x (2..3) {
        my $mask = 1 << $x;
        for my $coord (0..63) {
            next if (! defined $vector[$coord]);
            approximate($coord | $mask, $vector[$coord],
                        $quality[$coord] + $mask << 2);
        }
    }
    for my $coord (0..16) {
        next if (! defined $vector[$coord]);
        for my $mask (1<<4, 2<<4, 3<<4) {
            approximate($coord | $mask, $vector[$coord],
                        $quality[$coord] + 1 << 6);
        }
    }
    for my $coord (0 .. 63) {
	if (! defined $vector[$coord]) {
	    $vector[$coord] = $voidsymbol;
	}
    }

    for my $coord (0 .. 63) {
	next if ($coord & 0x0c); # next if Control and/or Alt
	my $mask = $kernel_modifiers{$vector[$coord]};
	next unless (defined $mask);
	for my $mod (4, 8, 12) {
	    if ($vector[$coord + $mod] eq $voidsymbol
		&& ($vector[($coord + $mod) ^ $mask] eq $voidsymbol)) {
		$vector[$coord + $mod] = $vector[$coord];
	    }
	}
    }
    
    # Without this it would be possible to lock permanently
    # a modifier key such as Control or Alt
    for my $coord (0 .. 63) {
	my $mask = $kernel_modifiers{$vector[$coord]};
	if (defined $mask) {
	    $vector[$coord ^ $mask] = $vector[$coord];
	    if ($compact && ! $freebsd) {
                # In non-Latin layouts AltGr=ShiftL
		# AltGr = 0x02,  ShiftL = 0x10
		if (($mask & 0x02) && ($mask & 0x10)) {
		    $vector[$coord ^ $mask ^ 0x02] = $vector[$coord];
		    $vector[$coord ^ $mask ^ 0x10] = $vector[$coord];
		} elsif ($mask & 0x02) {
		    $vector[$coord ^ $mask ^ 0x10] = $vector[$coord];
		    $vector[$coord ^ $mask ^ 0x10 ^ 0x02] = $vector[$coord];
		} elsif ($mask & 0x10) {
		    $vector[$coord ^ $mask ^ 0x02] = $vector[$coord];
		    $vector[$coord ^ $mask ^ 0x02 ^ 0x10] = $vector[$coord];
		}
	    }
	}
    }
    
    if ($freebsd || ! $compact) {
	for my $coord (16 .. 63) {
	    if ($vector[$coord] =~ /^(ShiftL|ShiftL_Lock|ashift|alock)$/) {
		$vector[$coord] = $voidsymbol;
	    }
	}
	for my $coord (0 .. 15) {
	    if ($vector[$coord] eq 'ShiftL_Lock') {   #  0 => 16
		$vector[$coord + 16] = 'ShiftR_Lock'; # 16 => 48
		$vector[$coord + 32] = 'ShiftR_Lock'; # 32 => 0
		$vector[$coord + 48] = 'ShiftL_Lock'; # 48 => 32
	    } elsif ($vector[$coord] =~ /^(ShiftL|ashift|alock)$/) {
		$vector[$coord + 16] = $vector[$coord];
		$vector[$coord + 32] = $vector[$coord];
		$vector[$coord + 48] = $vector[$coord];
	    }
	}
    } else {
	for my $coord (16 .. 63) {
	    if ($vector[$coord] =~ /^(AltGr|AltGr_Lock)$/) {
		$vector[$coord] = $voidsymbol;
	    }
	}
	for my $coord (0 .. 15) {
            if ($vector[$coord] =~ /^(AltGr_Lock|AltGr)$/) {
		$vector[$coord + 16] = $vector[$coord];
		$vector[$coord + 32] = $vector[$coord];
		$vector[$coord + 48] = $vector[$coord];
	    }
	}
    }

    for my $group (0 .. 3) {
	my $kp = undef;
	for my $x (0 .. 15) {
	    my $coord = 16 * $group + $x;
	    if ($vector[$coord] =~ /^KP_/) {
		$kp = $vector[$coord];
		last;
	    }
	}
	if ($types_table{$key} =~ /^(KEYPAD|FOUR_LEVEL_X
                                    |FOUR_LEVEL_MIXED_KEYPAD
		                    |FOUR_LEVEL_KEYPAD)$/x
	    && ! defined $kp) {
	    $kp = 'VoidSymbol';
            $numlockable[$group] = 1;
	}
	if ($kp && ! $freebsd) {
	    for my $x (0 .. 15) {
		my $coord = 16 * $group + $x;
		for ($vector[$coord]) {
		    if (/^VoidSymbol$/) {
			# KP_Begin and KP_Delete are mapped to VoidSymbol
			$vector[$coord] = $kp;
		    } elsif (/$xkbsym_table{'plus'}/) {# not anchored match!
			$vector[$coord] = 'KP_Add';
		    } elsif (/$xkbsym_table{'minus'}/) {
			$vector[$coord] = 'KP_Subtract';
		    } elsif (/$xkbsym_table{'asterisk'}/) {
			$vector[$coord] = 'KP_Multiply';
		    } elsif (/$xkbsym_table{'slash'}/) {
			$vector[$coord] = 'KP_Divide';
		    } elsif (/$xkbsym_table{'comma'}/) {
			$vector[$coord] = 'KP_Comma';
		    } elsif (/$xkbsym_table{'period'}/) {
			$vector[$coord] = 'KP_Period';
		    } elsif (/$xkbsym_table{'0'}/) {
			$vector[$coord] = 'KP_0';
		    } elsif (/$xkbsym_table{'1'}/) {
			$vector[$coord] = 'KP_1';
		    } elsif (/$xkbsym_table{'2'}/) {
			$vector[$coord] = 'KP_2';
		    } elsif (/$xkbsym_table{'3'}/) {
			$vector[$coord] = 'KP_3';
		    } elsif (/$xkbsym_table{'4'}/) {
			$vector[$coord] = 'KP_4';
		    } elsif (/$xkbsym_table{'5'}/) {
			$vector[$coord] = 'KP_5';
		    } elsif (/$xkbsym_table{'6'}/) {
			$vector[$coord] = 'KP_6';
		    } elsif (/$xkbsym_table{'7'}/) {
			$vector[$coord] = 'KP_7';
		    } elsif (/$xkbsym_table{'8'}/) {
			$vector[$coord] = 'KP_8';
		    } elsif (/$xkbsym_table{'9'}/) {
			$vector[$coord] = 'KP_9';
		    } elsif (/^(Return|Enter)$/) {
			$vector[$coord] = 'KP_Enter';
		    } elsif (/^Home$/) {
			$vector[$coord] = 'KP_7';
		    } elsif (/^Left$/) {
			$vector[$coord] = 'KP_4';
		    } elsif (/^Up$/) {
			$vector[$coord] = 'KP_8';
		    } elsif (/^Right$/) {
			$vector[$coord] = 'KP_6';
		    } elsif (/^Down$/) {
			$vector[$coord] = 'KP_2';
		    } elsif (/^Prior$/) {
			$vector[$coord] = 'KP_9';
		    } elsif (/^Next$/) {
			$vector[$coord] = 'KP_3';
		    } elsif (/^End$/) {
			$vector[$coord] = 'KP_1';
		    } elsif (/^Insert$/) {
			$vector[$coord] = 'KP_0';
		    }
		}
	    }
	}
    }

    for my $group (0 .. 3) {
	my $coord = $group << 4;
	my $mainsym = $vector[$coord];
	if ($mainsym =~ /^fkey([0-9]+)$/) {
	    my $num = $1;
            if (1 <= $num && $num <= 12) {
                $vector[$coord + 1] = 'fkey'. ($num+12); # shift
                $vector[$coord + 4] = 'fkey'. ($num+24); # control
                $vector[$coord + 5] = 'fkey'. ($num+36); # control + shift
                $vector[$coord + 2] = 'scr'. sprintf("%02i", $num); #altgr
                my $x = sprintf("%02i", ($num <= 6) ? $num+10 : $num);
                $vector[$coord + 3] = 'scr'. $x; # altgr + shift
                $vector[$coord + 6] = 'scr'. sprintf("%02i", $num); # altgr+ctrl
                $vector[$coord + 7] = 'scr'. $x; # altgr + control + shift
            } elsif ($num == 52 || $num == 56) {
                my $sym = $num == 52 ? '\'-\'' : '\'+\'';
                for my $i ($coord .. $coord+15) {
                    if ($vector[$i] eq $mainsym && $vector[$i^1] eq $mainsym) {
                        $vector[$i | 1] = $sym;
                    }
                }
            } elsif ($num == 60 && $vector[$coord + 1] eq 'fkey60') {
                $vector[$coord + 1] = 'paste';
            }
        } elsif ($mainsym =~ /^esc$/) {
            $vector[$coord + 6] = 'debug';
            $vector[$coord + 7] = 'debug';
        } elsif ($mainsym =~ /^saver$/) { # 'Pause' key
            $vector[$coord] = 'slock';
            $vector[$coord + 1] = 'saver'; # shift
            $vector[$coord + 2] = 'susp';  # altgr
            $vector[$coord + 3] = 'susp';  # altgr + shift
            $vector[$coord + 4] = 'slock'; # ctrl
            $vector[$coord + 5] = 'saver'; # ctrl + shift
            $vector[$coord + 6] = 'susp';  # ctrl + altgr
            $vector[$coord + 7] = 'susp';  # ctrl + altgr + shift
        } elsif ($freebsd && $mainsym =~ /^\' \'$/) {
            $vector[$coord + 6] = 'susp';
            $vector[$coord + 7] = 'susp';
        } elsif ($mainsym =~ /^ht$/) {
            for my $i ($coord .. $coord+15) {
                if ($vector[$i] eq 'ht' && $vector[$i ^ 1] eq 'ht') {
                    $vector[$i | 1] = 'btab';
                }
            }
        } elsif ($mainsym =~ /^nscr$/) {
            for my $i ($coord .. $coord+15) {
                if ($vector[$i] eq 'nscr' && $vector[$i ^ 1] eq 'nscr') {
                    $vector[$i | 1] = 'pscr';
                }
            }
            $vector[$coord + 4] = 'debug';
            $vector[$coord + 5] = 'debug';
	} elsif ($mainsym =~ /^F([0-9]+)$/) {
	    my $num = $1;
	    $vector[$coord + 1] = 'F'. ($num + 12); # shift
	    $vector[$coord + 2] = 'Console_'. ($num + 12); # altgr
	    $vector[$coord + 3] = 'Console_'. ($num + 24); # altgr + shift
	    $vector[$coord + 4] = 'F'. ($num + 24); # control
	    $vector[$coord + 5] = 'F'. ($num + 36); # control + shift
	    $vector[$coord + 6] = 'Console_'. ($num + 12); # control + altgr
	    $vector[$coord + 7] = 'Console_'. ($num + 24); # control+altgr+shift
	    $vector[$coord + 8] = 'Console_'. $num; # alt
	    $vector[$coord + 9] = 'Console_'. ($num + 12); # alt + shift
	    $vector[$coord + 12] = 'Console_'. $num; # control + alt
	    $vector[$coord + 13] = 'Console_'. ($num + 12); # control+alt+shift
	} elsif ($mainsym eq 'Scroll_Lock' || $mainsym eq 'Help') {
	    $vector[$coord + 1] = 'Show_Memory';
	    $vector[$coord + 2] = 'Show_Registers';
	    $vector[$coord + 4] = 'Show_State';
	    $vector[$coord + 8] = 'Show_Registers';
	} elsif ($mainsym =~ /^KP_([0-9])$/) {
	    my $num = $1;
	    $vector[$coord + 2] = 'Hex_'. $num;
	    $vector[$coord + 9] = 'Hex_'. $num;
	    $vector[$coord + 8] = 'Ascii_'. $num;
	} elsif ($mainsym eq 'Num_Lock') {
	    $vector[$coord + 2] = 'Hex_A';
	    $vector[$coord + 9] = 'Hex_A';
	} elsif ($mainsym eq 'KP_Divide') {
	    $vector[$coord + 2] = 'Hex_B';
	    $vector[$coord + 9] = 'Hex_B';
	} elsif ($mainsym eq 'KP_Multiply') {
	    $vector[$coord + 2] = 'Hex_C';
	    $vector[$coord + 9] = 'Hex_C';
	} elsif ($mainsym eq 'KP_Subtract') {
	    $vector[$coord + 2] = 'Hex_D';
	    $vector[$coord + 9] = 'Hex_D';
	} elsif ($mainsym eq 'KP_Add') {
	    $vector[$coord + 2] = 'Hex_E';
	    $vector[$coord + 9] = 'Hex_E';
	} elsif ($mainsym eq 'KP_Enter') {
	    $vector[$coord + 2] = 'Hex_F';
	    $vector[$coord + 9] = 'Hex_F';
	} elsif ($mainsym eq 'Prior' || $mainsym eq 'PageUp') {
	    $vector[$coord + 1] = 'Scroll_Backward';
	} elsif ($mainsym eq 'Next' || $mainsym eq 'PageDown') {
	    $vector[$coord + 1] = 'Scroll_Forward';
	} elsif ($mainsym eq 'Left') {
	    $vector[$coord + 8] = 'Decr_Console';
	} elsif ($mainsym eq 'Right') {
	    $vector[$coord + 8] = 'Incr_Console';
	} elsif ($mainsym eq 'Up') {
	    $vector[$coord + 8] = 'KeyboardSignal';
	}
    }
    return @vector;
}

sub print_vector {
    my $kernel_code = $_[0];
    my $only_VoidSymbol = 1;
    my $no_NoSymbol = 1;
    for my $mask (0 .. 63) {
	if ($vector[$mask] ne $voidsymbol && $vector[$mask] ne 'NoSymbol') {
	    $only_VoidSymbol = 0;
	    last;
	}
    }
    return if ($only_VoidSymbol && $compact);
    for my $mask (0 .. 63) {
	if ($vector[$mask] eq 'NoSymbol') {
	    $no_NoSymbol = 0;
	    last;
	}
    }
    if ($freebsd) {
        my @capslockable = (0,0,0,0);
	for my $group (0 .. 3) {
	    if ($vector[$group * 16] =~ /^\+/) {
                $capslockable[$group] = 1;
                last;
            }
        }
	for my $mask (0 .. 63) {
	    $vector[$mask] =~ s/^\+//;
	    $vector[$mask] =~ s/^NoSymbol$/nop/;
        }
        for my $group (0 .. 1) {
            next if ($group && $symbols !~ /:2/);
            my $lockstate = ($capslockable[$group] ? 
                             ($numlockable[$group] ? 'B' : 'C')
                             : ($numlockable[$group] ? 'N' : 'O'));
            $KEYMAP .= sprintf "  %03i   ", $kernel_code + 128*$group;
            for my $mask (0, 1, 4, 5, 2, 3, 6, 7) {
                $KEYMAP .= sprintf "%-6s ", $vector[$mask + 16*$group];
            }
            $KEYMAP .= " $lockstate\n";
        }
    } elsif ($compact) {
	my $line = ($symbols =~ /:2/ # true if the keymap is non-latin
		    ? "@vector[0, 1, 16, 17, 4, 20, 8, 24, 12, 28]"
		    : "@vector[0, 1, 2, 3, 4, 6, 8, 10, 12, 14]");
	$line =~ s/NoSymbol/VoidSymbol/g;
	$KEYMAP .= "keycode $kernel_code = $line\n";
    } else {
	my @capsvector = @vector;
	for my $mask (0 .. 63) {
	    if ($capsvector[$mask] =~ /^(\+?)U\+([0-9a-fA-F]+)$/) {
		my $v = hex ($2);
		my $l = ord (lc (pack ("U", $v)));
		my $u = ord (uc (pack ("U", $v)));
		my $c = ($v == $l ? $u : $l);
		$capsvector[$mask] = $1 ."U+". sprintf ("%04x", $c);
		if ($v != $c && $v > 0x7f) {
		    $broken_caps = 1;
		}
	    }
	}
	if ($no_NoSymbol) {
	    $KEYMAP .= "keycode $kernel_code = @vector @capsvector\n";
	} else {
	    for my $mask (0 .. 63) {
		if ($vector[$mask] ne 'NoSymbol') {
		    $KEYMAP .= "$modifier_combinations[$mask]"
			." keycode $kernel_code = $vector[$mask]\n";
		    if ($modifier_combinations[$mask] =~ /plain/) {
			$KEYMAP .= "ctrll"
			    ." keycode $kernel_code = $capsvector[$mask]\n";
		    } else {
			$KEYMAP .= "ctrll $modifier_combinations[$mask]"
			    ." keycode $kernel_code = $capsvector[$mask]\n";
		    }
		}
	    }
	}
    }
}

my %at_scancodes = (
    9 => 1,
    10 => 2,
    11 => 3,
    12 => 4,
    13 => 5,
    14 => 6,
    15 => 7,
    16 => 8,
    17 => 9,
    18 => 10,
    19 => 11,
    20 => 12,
    21 => 13,
    22 => 14,
    23 => 15,
    24 => 16,
    25 => 17,
    26 => 18,
    27 => 19,
    28 => 20,
    29 => 21,
    30 => 22,
    31 => 23,
    32 => 24,
    33 => 25,
    34 => 26,
    35 => 27,
    36 => 28,
    37 => 29,
    38 => 30,
    39 => 31,
    40 => 32,
    41 => 33,
    42 => 34,
    43 => 35,
    44 => 36,
    45 => 37,
    46 => 38,
    47 => 39,
    48 => 40,
    49 => 41,
    50 => 42,
    51 => 43,
    52 => 44,
    53 => 45,
    54 => 46,
    55 => 47,
    56 => 48,
    57 => 49,
    58 => 50,
    59 => 51,
    60 => 52,
    61 => 53,
    62 => 54,
    63 => 55,
    64 => 56,
    65 => 57,
    66 => 58,
    67 => 59,
    68 => 60,
    69 => 61,
    70 => 62,
    71 => 63,
    72 => 64,
    73 => 65,
    74 => 66,
    75 => 67,
    76 => 68,
    77 => 69,
    78 => 70,
    79 => 71,
    80 => 72,
    81 => 73,
    82 => 74,
    83 => 75,
    84 => 76,
    85 => 77,
    86 => 78,
    87 => 79,
    88 => 80,
    89 => 81,
    90 => 82,
    91 => 83,
    92 => 84,
    93 => -1, # fake key (KP_Equal)
    94 => 86,
    95 => 87,
    96 => 88,
    97 => 102,
    98 => 103,
    99 => 104,
    100 => 105,
    102 => 106,
    103 => 107,
    104 => 108,
    105 => 109,
    106 => 110,
    107 => 111,
    108 => 96,
    109 => 97,
    110 => 119,
    111 => 99,
    112 => 98,
    113 => 100,
    114 => 101,
    115 => 125,
    116 => 126,
    117 => 127,
    118 => -1,  # Japanese
    119 => -1,  # Japanese
    120 => -1,  # Japanese
    123 => -1,
    124 => -1,  # fake key
    125 => -1,  # fake key
    126 => -1,  # fake key
    127 => -1,  # fake key
    128 => -1,  # fake key
    129 => -1,  # Japanese
    131 => -1,  # Japanese
    133 => 124, # Japanese
    134 => 121, # Brasilian ABNT2
    144 => -1,  # Japanese
    156 => -1,  # fake key
    208 => -1,  # Japanese
    209 => -1,  # Korean
    210 => -1,  # Korean
    211 => 89,  # Brasilian ABNT2, Japanese
    214 => -1,  # alternate between internal and multimedia display
    215 => -1,  # turn light on/of
    216 => -1,  # brightness down
    217 => -1,  # brightness up
);

my %freebsd_scancodes = (
    9 => 1,
    10 => 2,
    11 => 3,
    12 => 4,
    13 => 5,
    14 => 6,
    15 => 7,
    16 => 8,
    17 => 9,
    18 => 10,
    19 => 11,
    20 => 12,
    21 => 13,
    22 => 14,
    23 => 15,
    24 => 16,
    25 => 17,
    26 => 18,
    27 => 19,
    28 => 20,
    29 => 21,
    30 => 22,
    31 => 23,
    32 => 24,
    33 => 25,
    34 => 26,
    35 => 27,
    36 => 28,
    37 => 29,
    38 => 30,
    39 => 31,
    40 => 32,
    41 => 33,
    42 => 34,
    43 => 35,
    44 => 36,
    45 => 37,
    46 => 38,
    47 => 39,
    48 => 40,
    49 => 41,
    50 => 42,
    51 => 43,
    52 => 44,
    53 => 45,
    54 => 46,
    55 => 47,
    56 => 48,
    57 => 49,
    58 => 50,
    59 => 51,
    60 => 52,
    61 => 53,
    62 => 54,
    63 => 55,
    64 => 56,
    65 => 57,
    66 => 58,
    67 => 59,
    68 => 60,
    69 => 61,
    70 => 62,
    71 => 63,
    72 => 64,
    73 => 65,
    74 => 66,
    75 => 67,
    76 => 68,
    77 => 69,
    78 => 70,
    79 => 71,
    80 => 72,
    81 => 73,
    82 => 74,
    83 => 75,
    84 => 76,
    85 => 77,
    86 => 78,
    87 => 79,
    88 => 80,
    89 => 81,
    90 => 82,
    91 => 83,
    92 => 84,
    93 => -1, # fake key (KP_Equal)
    94 => 86,
    95 => 87,
    96 => 88,
    97 => 94,
    98 => 95,
    99 => 96,
    100 => 97,
    102 => 98,
    103 => 99,
    104 => 100,
    105 => 101,
    106 => 102,
    107 => 103,
    108 => 89,
    109 => 90,
    110 => 104,
    111 => 92,
    112 => 91,
    113 => 93,
    114 => 108,
    115 => 105,
    116 => 106,
    117 => 107,
    118 => -1,  # Japanese
    119 => -1,  # Japanese
    120 => -1,  # Japanese
    123 => -1,
    124 => -1,  # fake key
    125 => -1,  # fake key
    126 => -1,  # fake key
    127 => -1,  # fake key
    128 => -1,  # fake key
    129 => -1,  # Japanese
    131 => -1,  # Japanese
    133 => 125, # Japanese
    134 => 126, # Brasilian ABNT2
    144 => -1,  # Japanese
    156 => -1,  # fake key
    208 => -1,  # Japanese
    209 => -1,  # Korean
    210 => -1,  # Korean
    211 => 115,  # Brasilian ABNT2, Japanese
    214 => -1,  # alternate between internal and multimedia display
    215 => -1,  # turn light on/of
    216 => -1,  # brightness down
    217 => -1,  # brightness up
);

if ($freebsd) {
    $KEYMAP .= 
"#                                                         alt\n".
"# scan                       cntrl          alt    alt   cntrl lock\n".
"# code  base   shift  cntrl  shift  alt    shift  cntrl  shift state\n".
"# ------------------------------------------------------------------\n";
#"  000   nop    nop    nop    nop    nop    nop    nop    nop     O\n";
} elsif ($compact) {
    $KEYMAP .= "keymaps 0-4,6,8,10,12,14\n";
} else {
    $KEYMAP .= "keymaps 0-127\n";
}

if ($freebsd) {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = $freebsd_scancodes{$key};
	next if (! defined $kernel_code || $kernel_code < 0);
	@vector = flatten ($key);
	if ($kernel_code == 83 || $kernel_code == 103) {
	    for my $coord (0+6, 0+7, 16+6, 16+7, 32+6, 32+7, 48+6, 48+7,) {
		$vector[$coord] = 'boot';
	    }
        }
	print_vector $kernel_code;
    }
} elsif ($arch eq 'at' || $arch eq 'evdev') {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = (($arch eq 'at') ? $at_scancodes{$key} : $key - 8);
	next if (! defined $kernel_code || $kernel_code < 0);
        @vector = flatten ($key);
        if ($kernel_code == 99) {
	    for my $coord (0, 1, 16, 17, 32, 33, 48, 49) {
		$vector[$coord] = 'VoidSymbol';
	    }
 	} elsif ($kernel_code == 83 || $kernel_code == 111) {
	    for my $coord (0+6, 0+12, 0+14, 
                           16+6, 16+12, 16+14,
                           32+6, 32+12, 32+14, 
                           48+6, 48+12, 48+14) {
		$vector[$coord] = 'Boot';
	    }
	}
	print_vector $kernel_code;
    }
} elsif ($arch eq 'macintosh') {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = $key - 8;
	@vector = flatten ($key);
	print_vector $kernel_code;
    }
    $KEYMAP .= '\
keycode 127 =
        shift   control keycode 127 = Boot
'
} elsif ($arch eq 'ataritt') {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = $key - 8;
	if ($kernel_code == 97) {
	    @vector = ('F246', 'Break', 'F246', 'F246',
		       'F246', 'F246', 'F246', 'F246', 
		       'Last_Console', 'F246', 'F246', 'F246', 
		       'F246', 'F246', 'F246', 'F246') x 4;
	} else {
	    @vector = flatten ($key);
	}
	if ($kernel_code == 83 || $kernel_code == 113) {
	    for my $coord (0+6, 0+12, 0+14, 
                           16+6, 16+12, 16+14,
                           32+6, 32+12, 32+14, 
                           48+6, 48+12, 48+14) {
		$vector[$coord] = 'Boot';
	    }
	}
	print_vector $kernel_code;
    }
} elsif ($arch eq 'amiga') {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = $key - 8;
	@vector = flatten ($key);
	if ($kernel_code == 60) {
	    for my $coord (0+6, 0+12, 0+14, 
                           16+6, 16+12, 16+14,
                           32+6, 32+12, 32+14, 
                           48+6, 48+12, 48+14) {
		$vector[$coord] = 'Boot';
	    }
	}
	print_vector $kernel_code;
    }
} elsif ($arch eq 'sun') {
    foreach my $key (sort {$a <=> $b} (keys %symbols_table)) {
	my $kernel_code = $key - 7;
	@vector = flatten ($key);
	if ($kernel_code == 50) {
	    for my $coord (0+6, 0+12, 0+14, 
                           16+6, 16+12, 16+14,
                           32+6, 32+12, 32+14, 
                           48+6, 48+12, 48+14) {
		$vector[$coord] = 'Boot';
	    }
	}
	print_vector $kernel_code;
    }
} else {
    die "$0: Unsupported keyboard type $arch\n";
}

if ($broken_caps) {
    $KEYMAP =~ s/Caps_Lock/CtrlL_Lock/g;
}

print $KEYMAP;

if (!$compose_charmap && $charmap) {
    $compose_charmap = $charmap;
}

if ($freebsd) {
    if ($compose_charmap) {
        my $file1 = "/etc/console-setup/dkey.${compose_charmap}.inc";
        my $file2 = "$installdir/etc/console-setup/dkey.${compose_charmap}.inc";
        if (-f $file1) {
            system("cat $file1");
        } elsif (-f $file2) {
            system("cat $file2");
        }
    }
} else {
    print "strings as usual\n";

    if ($compose_charmap) {
        my $file1 = "/etc/console-setup/compose.${compose_charmap}.inc";
        my $file2 = "$installdir/etc/console-setup/compose.${compose_charmap}.inc";
        if (-f $file1) {
            system("cat $file1");
        } elsif (-f $file2) {
            system("cat $file2");
        }
    }
}
my $file1 = "/etc/console-setup/remap.inc";
my $file2 = "$installdir/etc/console-setup/remap.inc";
if (-f $file1) {
    system("cat $file1");
} elsif (-f $file2) {
    system("cat $file2");
}

exit 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ELF          >                    h_         @     @ 1 0          GNU 94Ϟb	ޢ        Linux                Linux   6.1.0-35-amd64      	          	          1=     ux      D         D    fD      H  HH  HBH  HBH  HB    ff.         AWAVAUATUS  H	  H    #F   L  L}YILLuP    L    L   AEωڃEډڃ  EH       L    L1    H    AUHE E@E    L    1[]A\A]A^A_         AUATL  UHSHL	  L      H    u[L]A\A]    I}Y    I       E/    t UtM tM@tML[]A\A]        AUAATA   AUASH_PA	   H    H޿       H    DDH@ψ    H    H@ό    H    AsH޿   A   1    H    H޿       H    H       Hރ	    H    AuH1    H    []A\A]        H   H1H,r1    AVL  AUIATUSHH	  L      H       Iĉσ0IEHDHπ        H    LL    1[]A\A]A^    @     UHSHHX>H    QtPuH޿Q       H[]    []    H  HP  @tH  H  ff.     f    AWAAVLcAUATUSH	  ~@E4  A"I    tH4[]A\A]A^A_    []A\A]A^A_    AHZ!   H޿       H       H    H    uAAA   E	E	A  PDDHŅ   Ǆ       H    H    H    AsH1    H    H޿       H    H1    H    H޿       H[]A\A]A^A_    HkP   H    HsbA    H[1]A\A]A^A_        AWAVAUATUSHHH	  eH%(   HD$1H$    D     u%5    9     AA   AA   0   E
  A9  tL}DL    L    D  H]DHH    H    HD    HD$eH+%(      HH[]A\A]A^A_    %   ABL  L  H$    M9t{A   Iw(       M?D    	M9uD4$Dl$   H}D       HH    AH        E1
            ATL  USHL    HHH[L]A\    ff.         AUATUSH_xHC8taH	  HL      L    Hu<1I    Hu71HL    H    H1H      LL    [1]A\A]    ff.         USHH    H	  H    H	  HtH    H    H[]            USHH  HH    H      H    HzH[]        HH    HH    HPH    HPH    HPH    HP H    HP(H    HP0H    HP8H    HP@H    HPHH    HPPH    HPXH    HP`H    HPhH    HPpH    HPx    @     AWHGAVAUATIUSHXH_L  HD$ H$  Hǉt$0H\$HHD$@    H{>    Q  ID$A$  HD$8I$  HD$D  |$0IE8<  4  HD$8D$    HH7H8HL$HD$(   IǄ$      AG=    A?   
  DL    HH  t$H   DHD$HT$H    DH    HL    HT$Hf   I$  I$      Al/Ht$(D$\$}    H|$ IE89\$0    H|$      %  D$HL$DEAA   EwEEAD$tD  A  I$  H  HD$P    H    H9  D  IǄ$      DAD$@  IP    AtD  A"tI  AtI  AtI  H\$H    HމǉŁ       @H    Ht$8A$,  HD    AǄ$      D$   ULEH    H    H    DD$<    ^DD$4I`  ;DA     IP  A   D  I  zL$  D  I$   A$     L$09L$}2I$   H    t$LH    f  HH    H|$@    D$HX[]A\A]A^A_    I  H    LDD$H        DD$IǄ$      DL|$8I7    I8A    I:    DH    H    AVALH    S    AXAYD$0D$9Lt$8I~7    I~8A    I~:    H    ALAWAH    H    S    XZD  UH    HI$  AD$tD  I$0  H|$ MLd$H  I<L    L    wD$    9AD$@uIP  I$H  DLD$H    H    DD$    D$DD$DLH    H    DD$    DD$D$    >AD$@IP  aD:H    LH        ff.         ATL  UHSHL    HH  H    L    []A\    ff.          ATL  UHSHL    HH  H    L    1[]A\        HH      ff.     @     HH      ff.     @     U   HH~SHH        H{$   H        H	  H   HuH       HHd    HH    H tHH     HH[]        AVAUATUHSHG8HuHH0  H    HH  HE HP  HEHx  HEH  HE[]A\A]A^    L	  L  L    ILLI    L1H      LL    pD      AUATUSHG8tDL  HHAL    Hu1DHH      L    []A\A]    f    AUATUSVH	     N	   HHV   1    L  LmPL    L       L    H0  H8    HH    H0  Hx    H    L1    L    L    1[]A\A]             AWIAVAUL  ATLUSH(H	  eH%(   HD$ 1    Le>L    f  ftCIG8  E1 $  f  Q  "    u;   L    D  HD$ eH+%(     H([]A\A]A^A_    M    H    Ih  Mp  H$I9   HE@HD$GA	  tD  IX     @N  yI      tI  IL94$ttLH|      @t]   `u@t$A`  / w
   A`  I  Ix  %  II  Ix  L94$uIh  HL)H    Ip  L9tMp  I      L       ~I	  HHD$    QHE<.  HHD$    H|$    H|$    "L    QHt$   I  D$    L       D$~H    LD$H        D$FL    H    LH        1Hu<1    H}t    %   ALÉD$D  M    I    H    HuLHHt$    Ht$1I      E   $   A	     A   xA	  IH  1҃    %  D$   @tI  D$   I	  HT$   fD$      T$   I	      T$H    L    ]؃ "tIP  D$ @  tI  zI  mH    LH        1    D      USH	  H      H8[]    ff.     @     =     t    AUL  ATIUHSHLF       UH	  L    L[]A\A]             AWAVAUIATUSh  HDgpL	  A  "  A;w-Hֈ  1HyH    HHA4    H)<HHӈ  LL         L    L    I<   EA9M4ACL`      L    Hh  HPHHh  H;p  tTLL    	  tf[1]A\A]A^A_    ADHH    H        1[]A\A]A^A_    H  H    H      덾       Hh  1[]A\A]A^A_    D           t    H   S1HH      E1H  H  H    H  HGHG        Hc
        H5    H  [    fD      AVH    AUATUSH  HH	  H      HǠ	      	  tD  L  LuLL    Hu71I    Hu<1    L    L1H      LL    H	  Hދ      H	  E1  HX  H8  Hǃh      Hǃp      H       H	  E1   H  H  H       HuP   Hǃ8      Hǃ            H    u5[1]A\A]A^    H}>    H    HH        Hu[H       1[]A\A]A^    f.         AVLcAUATUSH	  ~4A~1[]A\A]A^    I    1tH<[]A\A]A^    AHZ!   H޿       H       H    H    uAA   E	A  DDH@π    H    H@ρ    H    AsA   1H1    H    H       H	    H    Au[]A\A]A^    f         AWAVIAUATIUSHeH%(   HD$11D$
    fD$H    M        M$   A|$<9  M                HH  Lp  LL	      Ņ  HRHcH   L	  H0  M    1   LE1=)  A1G|?uDLfDl
HHu   HT$
1H    @   H	  HHǃ       H    Hǃ      ǃ        H   
    H)H   H   H       H	   HD     H   IFL	  H    	     x
   	  E11ɺ    H  H    H   Hǃ      H  H  H  Hǃ      H       H`  H?      Hǃh      Hǃp      HP  fH    Ņ    HL    HD$eH+%(     H[]A\A]A^A_    H    L    ŅtWH7L    HHH    H        mED$HA    A|$@9E    L        HLL  MtIL+  D  ALLHHI  H#    L        I    1LL$    HH    L$H	  Hp[L}@R   Dx      L        L    1%  |AHHD;    tHH
uD  f1ɉ  D    LmR   D  L    L%       Lm7     L    Ƨ      >L    u-LD$    H    LH        D$]ALL$H    LH    HH        L$qDH    H    HL        H    H        L    AD    H       AHEP   HH$    AL    H4$1      H    L}ZL    AŨHEP   HH$    DL       H4$1    bH    LH    D$    D$DAADǃD8v.H    H        <    @     AWAVAUATUHS  L	  H      Me7     L    Ƨ      tL    uI]P   MuH    H    H0  L8    L    H0  Lx    LMu0    X  Lǅ@          L    L       IuD  ǅ        Iu@        x	  HH              D  H1I] E1    N<3Ju  IH+  L      L    IuIuL1L      L    HHwHLI]\    H    H%       L    t
L       [Iu<]  A\A]A^A_    H    HH        !MuYL    L%       Iu[R       ff.          SH_xHC8tgH  Hǃ@      Hǃh      H   H  H  H   H   Hǃp      H  H  /H    1[    ff.     @     AWAVAUATUSHH HopD%        HE8   CL   sȺ   HShu=  ^  DkL    :  A    A  AuPMnp    L    Ivxx    Iv|C8    L1        C        fCD  D  D  C tH5    IcHڿ        H []A\A]A^A_    HkpCHHHD$    H  H    H          D  IG7H$IG<HD$D  MoE1D  IIIuHCH<$      LsL{L    Ht$1    L    HC    LHǃx        H|$    HH      L    AC  AI~t    %   = p    = 0  t	=   ADkC C       tIR    IQA    EHH    H        NI>    I<A    EHH    H        Ih    H    HH        IX    AIG<HHD$    I>A    D$IG7HH$    EHH    AUDD$$H        XMntL    LE        C       JI~t    %   = p  L  C (уuƁ  @t
    v    HCI    I    LL9MD    DHH    AMH        UHxLCHH    H        #H4$       @HC΄   HSIv|H<        C       C<4{C"      Ivp        Ivxx    Iv|C8    C Iv|8    C       A   *Ivp1    HC;@     AVII   AU1H    ATUSH	  HL	  D  D    Ņt[]A\A]A^    H	  E1  H     H       E1  HX  H  H	    H       H   H8    H  H	      X  Hǃ`     ǃ@      Hǃh      Hǃp      	ЈX  H  H   H  H  H   H   H  H  iH  H    	   tf  ƃ      	    Hc
    H      H5    ރ       []A\A]A^    X  H    I}XI    LE    H	  EHH    H    L   AVH    P      XZƃ   Iƃ  JHD    H  Ht"H	  H  E1   H       H8  Ht"H	  HX  E1  H           H        H    H    H        A  H    H    H    H            A  H    H    H    H        H	      A`  H    H    H    H            H        H        A  H    H    H    H            LH    LI    Ip      A  H    H    H    H            A0  H    H    H    H            A2  H    H    H    H            A1  H    H    H    H            H    L    H        I$H  IFLHE$  L0  H    HH        D  	    E1E1   DH    =  t@$t9   DEt$H    $DHF#  DMcH        AA  EuH    H    ƃ     Hc
    H  u  D$    E~DX  A  D	  X  	򈓿  t	X      ~X  	ЈX  X  tH    H    X    t`AH    HH    HDDH     ҃⦃d    DD1  H߁    %   	      H        Iu[H           H                  H    HH    HH        ƃ   nE1AAIWH    L    =     u1        IWLH        H        H    IOLH        H    A  H    H    H    H            A  H    H    H    H            A  H    H    H    H            AL$>AT$<LH            A  H    H    H    H            KhChKAHH    H    HEH            ShuH    H        H                                                                                                                                                                                                                                                                                                                                     68139too: 8139too Fast Ethernet driver 0.9.28
 rtl8139_set_rx_mode(%04x) done -- Rx config %08x
       drivers/net/ethernet/realtek/8139too.c  38139too: Assertion failed! %s,%s,%s,line=%d
  In %s(), current %04x BufAddr %04x, free to %04x, Cmd %02x
     %s() status %04x, size %04x, cur %04x
  Ethernet frame had errors, status %08x
 Oversized Ethernet frame, status %04x!
 Done %s(), current %04x BufAddr %04x, free to %04x, Cmd %02x
   Abnormal interrupt, status %08x
        Transmit error, Tx status %08x
 Out-of-sync dirty pointer, %ld vs. %ld
 exiting interrupt, intr_status=%#4.4x
  Queued Tx packet size %u to slot %d
    Shutting down ethercard, status was 0x%04x
     This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip, use 8139cp
    68139too: OQO Model 2 detected. Forcing PIO
   region #%d not a %s resource, aborting
 Invalid PCI %s region size(s), aborting
        Chip not responding, ignoring board
    unknown chip version, assuming RTL-8139
        8139too: chipset id (%d) == index %d, '%s'
     8139too: about to register device named %s (%p)...
     Identified 8139 chip type '%s'
 MII transceiver %d status 0x%04x advertising %04x
      No MII transceivers found! Assuming SYM transceiver
    Media type forced to Full Duplex
         Forcing %dMbps %s-duplex operation
   Transmit timeout, status %02x %04x %04x media %02x
     Tx queue start entry %ld  dirty entry %ld
      Setting %s-duplex based on MII #%d link partner ability of %04x
        media is unconnected, link down, or incompatible connection
    Media selection tick, Link partner %04x
        Other registers are IntMask %04x IntStatus %04x
        %s() ioaddr %#llx IRQ %d GP Pins %02x %s-duplex
        about to register device named %s (%p)...
      chipset id (%d) == index %d, '%s'
 8139too dev != NULL tp->pci_dev != NULL hung FIFO. Reset
 fifo copy in progress
 0.9.28 tp != NULL ioaddr != NULL PCI Bus error %04x
 full half pdev != NULL ent != NULL %s region size = 0x%02lX
 cannot map %s
 TxConfig = 0x%x
 8139too: PCI PM wakeup
 8139too: Old chip wakeup
 %s at 0x%p, %pM, IRQ %d
 init buffer addresses
  (queue head)  Tx descriptor %d is %08x%s
 Chip config %02x %02x
 PIO MMIO Old chip wakeup
 PCI PM wakeup
 RTL-8139 RTL-8139 rev K RTL-8139A RTL-8139A rev G RTL-8139B RTL-8130 RTL-8139C RTL-8100 RTL-8100B/8139D RTL-8101 RealTek RTL8139 RealTek RTL8129                                                           rtl8139_init_board      rtl8139_open    rtl8139_close           rtl8139_start_xmit              rtl8139_tx_interrupt            rtl8139_weird_interrupt         rtl8139_interrupt       strnlen strscpy rtl8139_rx_err  rtl8139_rx              rtl8139_thread_iter             rtl8139_tx_timeout_task         rtl8139_init_one                __rtl8139_cleanup_dev           rtl8139_remove_one      __set_rx_mode           rtl8139_hw_start                                                                                                                                                                                                                C9    C9    8    C8    C9    C9    9    9    C9    C9    9    9    C9    C9    9    9    bd  fhj                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         debug   full_duplex                                                           media                                                         multicast_filter_limit use_io              @              `              p             p              x              |              t             x             @t             t   early_rx                        tx_buf_mapped                   tx_timeouts                     rx_lost_in_ring                   9                            8                                                         `                          3@  `                                                         @                                                      Y                            Y                                                                                      4                          2  0                                                                                  l                            C  9                            9                                                        )                         9    9                          9                               9                                                                                                                            parm=full_duplex:8139too: Force full duplex for board(s) (1) parm=media:8139too: Bits 4+9: force full duplex, bit 5: 100Mbps parm=multicast_filter_limit:8139too maximum number of filtered multicast addresses parm=debug:8139too bitmapped message enable number parmtype=debug:int parmtype=full_duplex:array of int parmtype=media:array of int parmtype=multicast_filter_limit:int parm=use_io:Force use of I/O access mode. 0=MMIO 1=PIO parmtype=use_io:bool version=0.9.28 license=GPL description=RealTek RTL-8139 Fast Ethernet driver author=Jeff Garzik <jgarzik@pobox.com> srcversion=1C71E064A8DE8A7C5C9A291 alias=pci:v*d00008139sv000013D1sd0000AB06bc*sc*i* alias=pci:v*d00008139sv00001186sd00001300bc*sc*i* alias=pci:v*d00008139sv000010ECsd00008139bc*sc*i* alias=pci:v000010ECd00008129sv*sd*bc*sc*i* alias=pci:v000016ECd0000AB06sv*sd*bc*sc*i* alias=pci:v0000021Bd00008139sv*sd*bc*sc*i* alias=pci:v00001743d00008139sv*sd*bc*sc*i* alias=pci:v0000126Cd00001211sv*sd*bc*sc*i* alias=pci:v0000018Ad00000106sv*sd*bc*sc*i* alias=pci:v000002ACd00001012sv*sd*bc*sc*i* alias=pci:v00001432d00009130sv*sd*bc*sc*i* alias=pci:v000011DBd00001234sv*sd*bc*sc*i* alias=pci:v000014EAd0000AB07sv*sd*bc*sc*i* alias=pci:v000014EAd0000AB06sv*sd*bc*sc*i* alias=pci:v00001259d0000A11Esv*sd*bc*sc*i* alias=pci:v00001259d0000A117sv*sd*bc*sc*i* alias=pci:v000013D1d0000AB06sv*sd*bc*sc*i* alias=pci:v00001186d00001340sv*sd*bc*sc*i* alias=pci:v00001186d00001300sv*sd*bc*sc*i* alias=pci:v00004033d00001360sv*sd*bc*sc*i* alias=pci:v00001500d00001360sv*sd*bc*sc*i* alias=pci:v00001113d00001211sv*sd*bc*sc*i* alias=pci:v000010ECd00008138sv*sd*bc*sc*i* alias=pci:v000010ECd00008139sv*sd*bc*sc*i* depends=mii retpoline=Y intree=Y name=8139too vermagic=6.1.0-35-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                                                                                                                                              (    0  8  0  (                     8                       (                 (                                      (                              (  0  (                                                                        (    0  8  0  (                     8  0  (                     8  0  (                     8  0  (                                  (    0  8  H  8  0  (                     H                                                    (                                                                                (    0  8        8  0  (                                                                                                                                            (  0  (                   0                       (                 (                       (                                        (    0  8  `  8  0  (                     `                                           (                                        (    0  8  0  (                     8  0  (                     8  0  (                                                              (  0  (                   0  (                                          (  0  (                   0  (                   0  (                                          (    0  8  P  8  0  (                     P                         (    0  8  0  (                     8                                           (    0  8  X  8  0  (                     X  `  X                         (  0  (                   0  (                   0  8  @  8  0                    `  P  X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  m    __fentry__                                              9[    __x86_return_thunk                                      ~    _printk                                                 %z    __pci_register_driver                                   {'    _raw_spin_lock_irq                                      E    ioread8                                                 .7    iowrite8                                                SuK    _raw_spin_unlock_irq                                    4    _raw_spin_lock_irqsave                                  S?EJ    iowrite32                                                   ioread32                                                p\    _raw_spin_unlock_irqrestore                             ,    ioread16                                                k    iowrite16                                               [;i    crc32_le                                                x    byte_rev_table                                          m    __dynamic_netdev_dbg                                    V
    __stack_chk_fail                                        [    netif_device_detach                                     0    pci_iounmap                                             K    pci_release_regions                                      j    free_netdev                                             J    cancel_delayed_work_sync                                P    unregister_netdev                                       &3    pci_disable_device                                      d    _raw_spin_lock                                          (!j    __napi_alloc_skb                                        8߬i    memcpy                                                  $1    skb_put                                                 u    eth_type_trans                                          a    netif_receive_skb                                       P    jiffies                                                 *    napi_complete_done                                      4K    _raw_spin_unlock                                        tu    mii_ethtool_set_link_ksettings                          o8    mii_ethtool_get_link_ksettings                          f    mii_link_ok                                             Σ[    mii_nway_restart                                        9d    strscpy                                                     strnlen                                                     fortify_panic                                           i;    netdev_stats_to_stats64                                     generic_mii_ioctl                                       x    dev_addr_mod                                            q    pci_unregister_driver                                   Sq    netif_tx_wake_queue                                     a'    napi_schedule_prep                                      {I    __napi_schedule                                         @    mii_check_media                                         A    pci_read_config_word                                    "    pci_write_config_word                                   ڪ9    netdev_err                                              !'    disable_irq_nosync                                      	    enable_irq                                              Db}    memcpy_fromio                                           a./    skb_copy_and_csum_dev                                    "%    __dev_kfree_skb_any                                     j    delayed_work_timer_fn                                   9c    init_timer_key                                          Ӆ3-    system_wq                                               m    queue_delayed_work_on                                   Dk    napi_disable                                            ;JQ    free_irq                                                }    dma_free_attrs                                          B    alloc_etherdev_mqs                                          pci_enable_device                                       6    netif_napi_add_weight                                   i    register_netdev                                         ֢    pci_request_regions                                     eb,    __dynamic_pr_debug                                      w    pci_set_master                                           5.    pci_iomap                                                   __const_udelay                                          4    __dynamic_dev_dbg                                       Ë    _dev_err                                                Ve    netdev_info                                             o    _dev_info                                                   netif_device_attach                                         rtnl_lock                                               rn    rtnl_unlock                                             y`    synchronize_rcu                                         6    _raw_spin_lock_bh                                       .    napi_enable                                             !`    _raw_spin_unlock_bh                                     Ւ    request_threaded_irq                                    ).rp    dma_alloc_attrs                                         ;z7l    eth_validate_addr                                       UT{    param_ops_int                                           y    param_array_ops                                         q    param_ops_bool                                          e:X    module_layout                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 	                                                                                                                                                               .                                                                                                                                                                                                                                                                                                                              7                                                     2                                                                                                                                                                                                                                                                                                                              E                                                     C                                                     A                                                                                                          N                                                                                                                                                               s                                                     `                                                     [                                                     W                                                     V                                                     &                                                                                                     8139too                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0         
  
           
t             :    [          
; ;      P        H       ;        ;    0   ; 
  0   P                Y    @   ;    `   ;      <      <      "  %     %<  
     /< @ @        
        %                              ?          :<    G<    U<             b<     j<                      r< *   @          
C            D              
E                           
G             w                 I       {< #     <     <    <    <     < 0   < 7   < 8   < :   < <   < >   < @   < D   < H   < L   < P   = Q   = R   = T    = X   ,= Y   4= Z   <= [   C= \   M= `   W= b   e= d   u= f   = h   = j   = p   = t   = x   =    = |   =    =      =    =    =    =      >    >    >    !>    ,> 
     ;>    B>  @  M> @   X>     c>    n>    t>    y>    >    > Q   >      >     >  @  >    >     >    @>    > 	     >    >  @  ?     ?     ?    #?    -?    6?    A?    L?      Y?     c?    n?    ~?    ?    ?    ?      ?    ?     ?    ?    ?    ?    ?    ?    ?    
@    @   |%@ 
     1@    @@    P@    Y@    c@    i@     z@ @   @    @    @    @      @    @    @    @    @    @     @ @   A    A      A     A      ,A    9A    FA    PA    aA    jA     sA @   |A      A    A    A    A   A   A      A     A        
     B     B    B    #B    .B    7B    ?B    HB    PB    _B 	   gB    Y nB      yB    B                      v  *   @     *   `          
\            ]    
          
^ B       B        B    @   B       B       B      * -       * -   @          B !    B k       B    @   #v      C *      z
 5c     "  %  
  ; c  
  C       C a @  C W     (C       0C    @  7C      @C a   zm ~O @  IC c  @  QC W     	 c   ]C 
     eC 
     oC 
     yC     C     C     '  *      *      Z @  C *   `   `   R  R    C > @  C      C                           C      C xC C8C C8                           
e        >        =        b            +E                 ֡         *  ?   @          
k            l              
m D       D    x   /D    R  >D    R  ND    S\  bD    S\  pD    R       
   "  %         D    v D    V       
    "  %  
  H5      D    y D    V       
    "  %  A  5  D k   D    | D    U\        
    "  %   *   E     E    R -E    R >E    U\        
   "  %   |5  QE           
   "  %   y5  lE           
    "  %  3  5  E           
   "  %    5  E           
    "  %    5  E     E    U\  E    W\  E    S\  E      F            
    O  i F     (F    nb        
    "  %  ;F    CF     VF      eF    S\  vF    U\        
    "  %  P        A     /<           
   "  %  P        %<           
   F k            F     F    D  F    [O        
   "  %      F     F    S\  mii_ioctl_data val_in val_out mii_if_info reg_num_mask full_duplex force_media supports_gmii mdio_read mdio_write HAS_MII_XCVR HAS_CHIP_XCVR HAS_LNK_CHNG RTL8139 RTL8129 hw_flags RTL8139_registers MAC0 MAR0 TxStatus0 TxAddr0 RxBuf ChipCmd RxBufPtr RxBufAddr IntrMask IntrStatus TxConfig RxConfig Timer RxMissed Cfg9346 Config0 Config1 TimerInt MediaStatus Config3 Config4 HltClk MultiIntr TxSummary BasicModeCtrl BasicModeStatus NWayAdvert NWayLPAR NWayExpansion FIFOTMS CSCR PARA78 FlashReg PARA7c Config5 ClearBitMasks MultiIntrClear ChipCmdClear Config1Clear ChipCmdBits CmdReset CmdRxEnb CmdTxEnb RxBufEmpty IntrStatusBits PCIErr PCSTimeout RxFIFOOver RxUnderrun RxOverflow TxErr TxOK RxErr RxOK RxAckBits TxStatusBits TxHostOwns TxUnderrun TxStatOK TxOutOfWindow TxAborted TxCarrierLost RxStatusBits RxMulticast RxPhysical RxBroadcast RxBadSymbol RxRunt RxTooLong RxCRCErr RxBadAlign RxStatusOK rx_mode_bits AcceptErr AcceptRunt AcceptBroadcast AcceptMulticast AcceptMyPhys AcceptAllPhys tx_config_bits TxIFGShift TxIFG84 TxIFG88 TxIFG92 TxIFG96 TxLoopBack TxCRC TxClearAbt TxDMAShift TxRetryShift TxVersionMask Config1Bits Cfg1_PM_Enable Cfg1_VPD_Enable Cfg1_PIO Cfg1_MMIO LWAKE Cfg1_Driver_Load Cfg1_LED0 Cfg1_LED1 SLEEP PWRDN Config3Bits Cfg3_FBtBEn Cfg3_FuncRegEn Cfg3_CLKRUN_En Cfg3_CardB_En Cfg3_LinkUp Cfg3_Magic Cfg3_PARM_En Cfg3_GNTSel Config4Bits LWPTN Config5Bits Cfg5_PME_STS Cfg5_LANWake Cfg5_LDPS Cfg5_FIFOAddrPtr Cfg5_UWF Cfg5_MWF Cfg5_BWF CSCRBits CSCR_LinkOKBit CSCR_LinkChangeBit CSCR_LinkStatusBits CSCR_LinkDownOffCmd CSCR_LinkDownCmd Cfg9346Bits Cfg9346_Lock Cfg9346_Unlock CH_8139 CH_8139_K CH_8139A CH_8139A_G CH_8139B CH_8130 CH_8139C CH_8100 CH_8100B_8139D CH_8101 chip_t chip_flags HasHltClk HasLWake rtl_extra_stats early_rx tx_buf_mapped tx_timeouts rx_lost_in_ring rtl8139_stats rtl8139_private mmio_addr drv_flags msg_enable cur_rx rx_stats rx_ring_dma tx_flag cur_tx dirty_tx tx_stats tx_bufs tx_bufs_dma twistie twist_row twist_col watchdog_fired default_port have_thread rx_config mii regs_len fifo_copy_timeout TwisterParamVals PARA78_default PARA7c_default PARA7c_xxx rtl8139_cleanup_module rtl8139_init_module rtl8139_resume rtl8139_suspend rtl8139_set_rx_mode __set_rx_mode rtl8139_get_stats64 netdev_ioctl rtl8139_get_strings rtl8139_get_ethtool_stats rtl8139_get_sset_count regbuf rtl8139_get_regs rtl8139_get_regs_len rtl8139_set_msglevel rtl8139_get_msglevel rtl8139_get_link rtl8139_nway_reset rtl8139_set_link_ksettings rtl8139_get_link_ksettings rtl8139_get_drvinfo rtl8139_set_wol rtl8139_get_wol rtl8139_close rtl8139_set_mac_address rtl8139_poll_controller rtl8139_interrupt rtl8139_poll rtl8139_isr_ack rtl8139_start_xmit txqueue rtl8139_tx_timeout rtl8139_thread rtl8139_hw_start rtl8139_open ioaddr read_eeprom rtl8139_remove_one rtl8139_init_one rtl8139_set_features __rtl8139_cleanup_dev    8139too.ko  ѹ                                                                                                   	                      
                                                                                        %                      )                      8      #            [      2       0           2       E           2       Z           +       o           +            G      +            r      +                  +                  +                  +                  +           I      +           t      +       ,          +       A          +       V          +       k           +           K      +           v      +                 +                 +                 +           "      +           M      +           x             *                  7                 P          	       f          
       z          <                                     $                                                                  )                    @                  `       5                   +       '            (      :                  J                 X                 h    @             t    @                       c           P                                                 %         8       E    P                       5                            p      I                   _       .    p             :          @       M    _       ,       e                 q     	                 	                 	               %       8          %       8          % P      8          %       8                            %        8       *   % 0      8       C   %       8       [          B       v    0      @           p                                                                                                         @                       ^           P             3   	                J                 \   % p       8       t   % h      8          %        8                                                                       1                  X           `      {         %       8       )                 <    &      L      K    H             U    p            c   % 8       8       {           7          `      \                             @                       0      M    L                                   %       8          %        8                              %       8       '   %       8       @   % x      8       Y   %       8       r   % @      8                          %       8       F                      `                                     P                 #      R         % (      8            &             	   %       8       $	   %       8       =	   %       8       V	   % H      8       o	   %       8       	   %       8       	                 	          S       	     ,            	   % `      8       	    8       
       	    H              	    `              
                  
                  
                 )
    0             5
                 A
                 M
   !                y
   #                
     
            
                 
            =       
    =       @       
    }       S                  3       ,                 E            (       S    0             e          "           (       (           8                 `                  8                 P       (                                              T      $       =    x       (       \                     x      7                                   (                                                                    2       
          '       0
                     6
                     I
                     R
                     [
                     g
                     y
                     
                     
                     
                     
   '               
     
            
                     
                     
                                                               /                     ;   	                =                     M                     a                     h                     s                     }                                                                                                                                                   
                                                      +                             -                     <                     L                     _                     g                     z                                                                                                                                                                                                                  '                     6                     ?                     O                     d                     m                     }                                                                                                                                                                                              
                                          &                     5                     H                     ]                     e                     m                     |                                                                                                                                                                                             %                     7                     M                     W                     j                     }                                                                                                                                                                         __UNIQUE_ID_srcversion218 __UNIQUE_ID_alias217 __UNIQUE_ID_alias216 __UNIQUE_ID_alias215 __UNIQUE_ID_alias214 __UNIQUE_ID_alias213 __UNIQUE_ID_alias212 __UNIQUE_ID_alias211 __UNIQUE_ID_alias210 __UNIQUE_ID_alias209 __UNIQUE_ID_alias208 __UNIQUE_ID_alias207 __UNIQUE_ID_alias206 __UNIQUE_ID_alias205 __UNIQUE_ID_alias204 __UNIQUE_ID_alias203 __UNIQUE_ID_alias202 __UNIQUE_ID_alias201 __UNIQUE_ID_alias200 __UNIQUE_ID_alias199 __UNIQUE_ID_alias198 __UNIQUE_ID_alias197 __UNIQUE_ID_alias196 __UNIQUE_ID_alias195 __UNIQUE_ID_alias194 __UNIQUE_ID_depends193 ____versions __UNIQUE_ID_retpoline192 __UNIQUE_ID_intree191 __UNIQUE_ID_name190 __UNIQUE_ID_vermagic189 _note_10 _note_9 rtl8139_get_msglevel rtl8139_set_msglevel rtl8139_get_regs_len rtl8139_get_sset_count rtl8139_get_ethtool_stats rtl8139_init_module rtl8139_pci_driver rtl8139_set_wol rtl_chip_info rtl8139_get_wol read_eeprom rtl8139_set_features rtl8139_isr_ack mdio_write mii_2_8139_map __set_rx_mode __UNIQUE_ID_ddebug451.0 rtl8139_set_rx_mode rtl8139_suspend __rtl8139_cleanup_dev __rtl8139_cleanup_dev.cold __func__.71 rtl8139_remove_one rtl8139_remove_one.cold __func__.70 rtl8139_get_strings ethtool_stats_keys rtl8139_poll __UNIQUE_ID_ddebug435.9 __UNIQUE_ID_ddebug437.8 __UNIQUE_ID_ddebug439.7 __UNIQUE_ID_ddebug433.10 __func__.77 __UNIQUE_ID_ddebug443.5 __UNIQUE_ID_ddebug431.11 __UNIQUE_ID_ddebug441.6 rtl8139_set_link_ksettings rtl8139_get_link_ksettings rtl8139_get_link rtl8139_nway_reset rtl8139_get_drvinfo rtl8139_get_drvinfo.cold __func__.80 __func__.79 rtl8139_get_stats64 netdev_ioctl rtl8139_set_mac_address rtl8139_cleanup_module rtl8139_interrupt __UNIQUE_ID_ddebug447.3 __UNIQUE_ID_ddebug429.12 __UNIQUE_ID_ddebug445.4 rtl8139_interrupt.cold __func__.83 __func__.82 rtl8139_poll_controller rtl8139_get_regs rtl8139_start_xmit __UNIQUE_ID_ddebug427.13 rtl8139_tx_timeout rtl8139_thread next_tick rtl8139_close __UNIQUE_ID_ddebug449.2 mdio_read rtl8139_init_one board_idx.73 rtl8139_netdev_ops rtl8139_ethtool_ops board_info __UNIQUE_ID_ddebug405.23 __UNIQUE_ID_ddebug393.29 res.89 __UNIQUE_ID_ddebug395.28 __UNIQUE_ID_ddebug397.27 __UNIQUE_ID_ddebug399.26 __UNIQUE_ID_ddebug403.24 __UNIQUE_ID_ddebug401.25 rtl8139_init_one.cold __UNIQUE_ID_ddebug407.22 __func__.88 __func__.72 rtl8139_hw_start __UNIQUE_ID_ddebug411.20 rtl8139_resume __UNIQUE_ID_ddebug413.19 __UNIQUE_ID_ddebug415.18 __UNIQUE_ID_ddebug417.17 __UNIQUE_ID_ddebug419.16 __UNIQUE_ID_ddebug421.15 __UNIQUE_ID_ddebug423.14 param rtl8139_thread.cold rtl8139_open __UNIQUE_ID_ddebug409.21 __func__.87 __func__.86 __func__.85 __func__.81 __func__.78 __func__.76 __func__.75 __func__.69 __func__.68 __UNIQUE_ID___addressable_cleanup_module454 __UNIQUE_ID___addressable_init_module453 rtl8139_pci_tbl rtl8139_pm_ops __UNIQUE_ID_full_duplex392 __UNIQUE_ID_media391 __UNIQUE_ID_multicast_filter_limit390 __UNIQUE_ID_debug389 __UNIQUE_ID_debugtype388 __param_debug __param_str_debug __UNIQUE_ID_full_duplextype387 __param_full_duplex __param_str_full_duplex __param_arr_full_duplex __UNIQUE_ID_mediatype386 __param_media __param_str_media __param_arr_media __UNIQUE_ID_multicast_filter_limittype385 __param_multicast_filter_limit __param_str_multicast_filter_limit __UNIQUE_ID_use_io384 __UNIQUE_ID_use_iotype383 __param_use_io __param_str_use_io __UNIQUE_ID_version382 __UNIQUE_ID_license381 __UNIQUE_ID_description380 __UNIQUE_ID_author379 .LC60 alloc_etherdev_mqs free_irq ioread32 rtnl_unlock pci_enable_device skb_put iowrite32 __napi_alloc_skb pci_iomap __this_module __mod_pci__rtl8139_pci_tbl_device_table netif_napi_add_weight mii_link_ok unregister_netdev ioread16 __pci_register_driver memcpy_fromio param_array_ops pci_request_regions memcpy enable_irq iowrite16 eth_validate_addr mii_ethtool_get_link_ksettings _raw_spin_lock_irqsave __dynamic_dev_dbg _raw_spin_lock pci_unregister_driver fortify_panic netdev_err __fentry__ dev_addr_mod eth_type_trans mii_check_media napi_complete_done _printk _raw_spin_lock_irq iowrite8 __stack_chk_fail queue_delayed_work_on _raw_spin_unlock_bh __napi_schedule strnlen netif_device_detach _dev_info netif_device_attach mii_ethtool_set_link_ksettings byte_rev_table _dev_err synchronize_rcu request_threaded_irq crc32_le dma_alloc_attrs pci_read_config_word napi_enable _raw_spin_unlock_irq netif_receive_skb free_netdev _raw_spin_unlock_irqrestore pci_iounmap mii_nway_restart netif_tx_wake_queue ioread8 pci_set_master __x86_return_thunk __dynamic_netdev_dbg jiffies strscpy dma_free_attrs cancel_delayed_work_sync init_timer_key param_ops_bool pci_release_regions __const_udelay __dev_kfree_skb_any __dynamic_pr_debug delayed_work_timer_fn generic_mii_ioctl _raw_spin_lock_bh skb_copy_and_csum_dev rtnl_lock pci_disable_device disable_irq_nosync napi_schedule_prep napi_disable param_ops_int netdev_stats_to_stats64 pci_write_config_word _raw_spin_unlock netdev_info system_wq                                                     !             )          
   7             A             V             a                                                                                    )            4            >            F            y                                                                                                                  ;            A            m            z                                                                                                                                                            '            /            <            A            Y            }                                                                                    
                                    Q                                                                                                       2            :            D            L            \            d            q            y                                                                                                            '            L                                                                              %            5                    c            s            0       }         	                                                                                   	                                    .            6            I            T            a            q                                    (                                                                  [                                          	            	            |	      	            	       	            	      +	            	      6	            	      A	            	      L	            	      W	            	      b	            	      m	            	      x	            	      	            	      	            	      	            	      	            	      	            	      	            	            
            
            
            
            
            
                        4            ^                        M            _            k                                                                       	                     a
            p
            
            
           
            
            (       
         	   P      
            
                        
                                                  .         	         4            X            d            o            v            x                                  	                                                          =            (      D         	   0      N            i            P      p         	         z                        :                	                                             	                                    1            J            Y            a            l            q            }                                                                                            Q                                                  /                   <            A            f                                                                                               ,           6            C            Q                                                                                                                                                            !            X            d                                                                                                                     6            O           m            w                                                                                       	   h                                          (               	   p                   ,            :            \                  i            q      r            E                                          (            >           J            r       R                                       	                                                       
                                   
               4            F            T            a                     
                                     "            L            h            x            P               	                                                                                            .                   A            &      F           M            D      Y           f            q            z                                                                                               !            `                                                                                          x               	   8                                           !            M            U                   l                                                                                                                                                3            ;            S            a                                                                                                      A            V                              @                  	                                                 H      %                  \                               &                                                P                                                                                 '             =            O                    V          	         [            p             1                                                
                                                                             _      !            !            7      6!            >!            G!                  O!            g!                  !            !            !            !           !            !            "                   
"         	         "            ."                   8"         	          C"                   H"            ]"                  d"         	   x      o"                  t"           "                   "         	         "           "            "                  "            "            "            "                  #            1#            B#            M#            Y#                  c#         	         l#            #                   #         	   @      #           #            #            #                  $            $           $            4$            <$            M$            U$            h$            t$            $            $            $            $            $            $            
%            2%            :%            R%            Z%            t%            |%            %            %            %            %            %            .      %         	   (      %            %            %            	&            !&            &            &            &            &            D      &           ('            @      ]'            k'            y'            '            '            '            @      '           '            '            '           (            (            ^(            v(         	  (            (            (            (            (            (            (            )            @      1)            =)            J)            p      S)         	         X)            f)            r)            )            8      )         	         )            )            )                  )         	         )            )            )            )            )            *                  *         	   H      *            )*            ?*            I*            @      [*            *                  *                  *            E      *            S      *            *            T      *         	         *            +            P      	+         	         +            !+            G+                  L+            V+            @      +            +            +            +            +            +            @      +            ,            ,                   =,            R,            y,            ,            ,            -            D      -           -            -            -                   -                   -            .            8       .         	   `      .            p      $.            Q.            .            .                                              
                                                       "                     '             	             p                   h                                               #             (                   5             p      <             h       C                    J                    O             [                   h                   o             h       v                    }                                                                                                                                                       h                    c                                                                                                                                               h                                                                           &                   -            h       4                   ;                   @            E            i      R                   Y            h       `            c       g                   l            q            r      ~                               h                   X                                                  i                  x                              l                  5                                                                         A                  `            X      e                                                                                  `      .                  6           Q                   [                   i                  |                       L                                                                                                               
                                 8               	         
                              B                   J            P         
   Y         
   _                   m            H      r            z            l                  5                   l                                                 l                                      h                                                                                       P                  h                                                                                        P                  h                           '                   ,            1                  L                  Q            V                  c            P      j            h       q            c       x                   }                        A                                                                                     '                                               '                                                                                                                    @                     `       (                     0                    8                   @             @      H             @      P                   X             P      `                   h                   p                   x             p                                       	                   	                                      0                   p                                                         @                                      P                                                                              `                                      p                                     `                  #                    &      (            &      0             ,                                                          (                   d-                                                                           &                                      &                                     &      P             ,      X            p      `            `                                    P                                                                          @                                     @                                                                (                  0                   8                    @                   H                  P            p                   	                  `                   @                   0                        p                   x            `                                                                                	                  	                   	                  0	                  @	                  P	                  `	                  p	                               !                  1                    0                                                             L      (             8      0                     8                     H             `      P                   X                     `                     p                   x                                                                         P                                                                            
                                                                 6                    U                                                           ;                   X                          $                   (                   ,             `      0             	      4             
      8                   <             k      @                   D             B      H                   L                   P                   T             g      X                   \                   `                   d                   h                   l             L      p             R      t                    x             &      |             Q,                   -                                         ;                    @                    Z                    `                                                                                        $                    (                    ,                    0                    4                   8                   <                   @                   D                   H                   L                   P                   T                   X                   \                   `                   d                   h                   l                   p                   t                   x                   |             5                   6                   8                   :                   ?                   @                   G                   N                   Y                   ]                   6                   7                   9                   ;                   _                   h                   m                   n                   o                                                                                                                                                                                                                                                                                                               C                  P                  W                  \                  a                  c                  d                   e      $                  (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P                  T                  X                  \                  `                  d                  h                  l                  p                  t                  x                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Y                  \                  ^                  `                  e                  p                  v                   w      $                  (                  ,                  0                  4                  8                  <                  @                  D            	      H            	      L            	      P            	      T            	      X            	      \            	      `            	      d            	      h                  l                  p            
      t            
      x            
      |            
                  
                  
                  
                  
                  %                  3                  :                  <                                                                                                                                                                                                                                          "                  0                  7                  ?                  C                  h                  i                  k                                                                                                                               :                  ;                  G                  I                  K                  L                   P      $                  (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P                  T            =      X            >      \            @      `            B      d            G      h            N      l            P      p            W      t            ^      x            _      |            `                                                                                                                               '                  ,                  .                  7                  ;                  <                  @                                                                                                                                                                                                                                                                                                                                                       "                   &                  N                  O                  Q                  S                  X                  `                  g                   i      $            k      (            p      ,            q      0            r      4            \      8            _      <            a      @            c      D            e      H            g      L            l      P                  T                  X                  \                  `                  d                  h                  l                  p                  t                  x                  |                                                                                    	                  e                  j                  p                  w                                                                                                                                                                                                      
                                    
                                                                                           '                  ,                  .                  /                  0                  E                  F                   H                  J                  L                  Q                  d                  e                  g                  i                   k      $            p      (            H      ,            L      0            N      4            P      8            R      <            W      @            `      D            g      H            i      L            n      P            p      T            t      X            u      \            y      `                   d                   h                   l                   p                   t                   x                   |                               #                  #                  #                  #                  #                  #                  #                  #                  %                  %                  %                  %                  %                  %                  %                  &                   &                  &&                  &                  &                  &                  &                  &                  &                  &                  &                  &                  &                  '                  '                  '                  '                   '                  '                  '                  '                  *                  *                  +                   ,                   ,      $            ,      (            ,      ,             ,      0            !,      4            H,      8            K,      <            M,      @            O,      D            Q,      H            V,      L            -      P            -      T            -      X            -      \            -      `            -      d            .      h            #.      l            0.      p            1.      t            .      x                    |            +                                                                                                                                                                            ^                	   *                    7
                   
                	                             $                   (          	         0                   4             
      8          	   z      @                   D             `      H          	   "      P             /
      T             N      X          	   
      `                   d             0      h          	   Z      p                   t                   x          	   B                                                      	                       :                                   	                      R                                   	                       Y                   l                	                                                         	   b                                       F                 	                                          !"                	   J                   w!                   V#                	                      |!                  !               	                     !                  U"               	                      !      $            }"      (         	   2      0            "      4            #      8         	   j      @                  D                  H         	         P            $      T            %      X         	   R      `            '      d            )      h         	         p            '      t            a)      x         	                     '                  ,)               	                     (                  )               	   r                  5(                  *               	   :                  A(                  *               	                     q-                  -               	         0                     8              
      @             `      H                                                                                                                                       h                    0       8                     @             H       H             h       P             x      p                     x                                 h                    (                                                            h                                                                                h                    x                                              (            h       0            :       P                    X                   `            h       h            (                                                          h                                                                             h                                                                              h                   P      0                    8                   @            h       H            (      h                    p                   x            h                                                         `                   h                   P                                      0                  h                   T                                      0                   h       (            P      H                    P            0      X            h       `                                                                    h                   p                                                        h                   8                                                         h                         (                    0                  8            h       @            .      `                    h            8       p            h       x            p                                      P                  h                   8                                      P                  h                                                                             h                          @                    H                    P            h       X                  x                                                    h                                                                             h                                                                              h                                               (                    0            h       8                   8                    P                     .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.init.text .rela.text.unlikely .rela.exit.text .rela__mcount_loc .rodata.str1.8 .rodata.str1.1 .rela.smp_locks .rela.rodata .modinfo .rela__param .rodata.cst2 .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__jump_table .rela.data .rela.exit.data .rela.init.data .rela__dyndbg .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                           @       $                              .                     d       <                              ?                            .                             :      @                     4      .                    J                     [/      +                              E      @                           .                    Z                     /                                   U      @               `           .                    n                     _5                                    i      @               P     0       .   	                 ~                     k5      8                             y      @                          .                          2               6                                        2               =      A                                                 ?                                          @               (     `       .                                          @                                           @                          .                                          N                                                        U                                          @                           .                                         U                                                        U                                          @                           .                                         VV      	                             
                    @`                                        @               "     '      .                                        f                                    ,                    }                                   '     @               I     (      .                    >                                                        9     @               Q     x       .                    I                                                         D     @               `R            .   !                 Y                    (                                    T     @               xR            .   #                 i                    0      X                             d     @               R     
      .   %                 w                                        @               r     @               p]     0       .   '                                     @                                         0               @      P                                                                                                                  !                                                                                                            Ȥ            /                    	                      ؾ                                                          ]                                  0	*H
01
0	`He0	*H
1a0]080 10UDebian Secure Boot CA2(oe:B&C0	`He0
	*H
  Qčܾ"Ty'	QmL?$~f<Rw-cxa
+LYpLղl*ǉ$%ͤ&熹+kMv
c,3%+wvfol8ݸnzntǆ4w|n+/-%	DՆDPv"ˆʢ9$fٿuYoo~&;IsEҸM/:q)G9ke         ~Module signature appended~
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ?      p                     x             ?      |                                  ?                                                                            	   Z                   <                   C                	   "                    	      $                   (          	   B      0             
&      4             e&      8          	          @             '      D             h(      H          	   *       P             (      T             0)      X          	   b       `             0      d             0      h          	         p             6      t             7      x          	                      B                   D                	   
                   E                   E                	                       ^                   ^                	   z                                                           p      (                     @             )                                                                                                                                                      8                    @                    H                   P                   p                    x                                                                                                                                                                                                                                                          (                  0                   P                   X            0      `            0       h                                                                   0                   '                                                       0                   @                                       P                  0                   @       0                   8            p      @            0       H                                  ,                           8                    P                     .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.init.text .rela.exit.text .rela.text.unlikely .rela__mcount_loc .rela.smp_locks .rodata.str1.8 .rodata.str1.1 .rela.rodata .modinfo .rela__param .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela__jump_table .rela.data .rela.exit.data .rela.init.data .rela__dyndbg .rela.static_call_sites .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF                                                                                        @       $                              .                     d       <                              ?                            _                             :      @                     4      2                    J                     @`                                    E      @                    @      2                    Z                     %a      =                              U      @               P            2                    j                     ba                                   e      @               @            2   	                 ~                     c                                   y      @               @"           2                                         e      D                                    @                '           2   
                       2               e      s                                  2               Cj                                                       @p      J                                    @               (     h      2                                         u                                                        w      P                                    @                -            2                                         w                                           @               -            2                                          x                                          @               .           2                                        x      v                                                 n      	                                  @               p4     9      2                    %                                                         5                                                        0     @               Hn     @      2                    F                    0                                    A     @               p           2                     X                          ,                              S     @               s            2   "                 c                                                        ^     @               0t            2   $                 s                                                        n     @               Ht            2   &                                            h                             ~     @               `t            2   (                                                                              @               x     0       2   *                                                         @                    @               x     0       2   ,                                     @                                         0               @      P                                                                                                                                                                                 3                    	                      x                                                         x                                  0	*H
01
0	`He0	*H
1o0k0F0.1,0*U#Build time autogenerated kernel keyz22Î]:0	`He0
	*H
  Z1r	,z~2Ib[Xi|p{>hӞ7=(G]
0pY)
3?y)Zi'M`yqqͬ|MEl[Z?ԾkӑgYr~4p*5sqQVR~F=GN'hfaJO:&mchA&wŻa^`xLe,ɰw,Bcp:boV"9Ԗ˹hV͈HGsrc(#Qb	L)~$SH;z7E+	qNY='iAi`(ڪV~Pa@*^ߴZ%>RΉHN6aan
0Ĥr칐I2 
T<,én#t]"d6fJ^]	l\y5p]q#Ş[<2unE捙_hwXG|R@b         ~Module signature appended~
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       rg, Indiana/Tell CIty, Indiana/Vevay, Indiana/Vincennes, Argentina/Winamac, Inuvik, Iqaluit, Jamaica, Juneau, Kentucky/Louisville, Kentucky/Monticello, Kralendijk, La Paz, Lima, Los Angeles, Lower Princes, Maceio, Managua, Manaus, Marigot, Martinik, Matamoros, Mazatlan, Menominee, Merida, Metlakatla, Mexico City, Miquelon, Moncton, Monterrey, Montevideo, Montreal, Montserrat, Nassau, New York, Nipigon, Noma, Noronha, Dakota Utara/Beulah, Dakota Utara/Pusat, Dakota Utara/Salem Baru, Nuuk, Ojinaga, Panama, Pangnirtung, Paramaribo, Phoenix, Port-au-Prince, Pelabuhan Spanyol, Porto Acre, Porto Velho, Puerto Rico, Punta_Arenas, Sungai Rainy, Rankin Inlet, Recife, Regina, Resolute, Rio Branco, Santa Isabel, Santarem, Santiago, Santo Domingo, Sao Paulo, Scoresbysund, Shiprock, Sitka, Saint Barthelemy, Saint John, Saint Kitt, Saint Lucia, Saint Thomas, Saint Vincent, Swift Current, Tegucigalpa, Thule, Pantai Thunder, Tijuana, Toronto, Tortoka, Vancouver, Virgin, Whitehorse, Winnipeg, Yakutat, Yellowknife
Choices-it.utf-8: Adak, Anchorage, Anguilla, Antigua, Araguaina, Argentina/Buenos Aires, Argentina/Catamarca, Argentina/Córdoba, Argentina/Jujuy, Argentina/La Rioja, Argentina/Mendoza, Argentina/Rio Gallego, Argentina/Salta, Argentina/San Juan, Argentina/San Luis, Argentina/Tucumán, Argentina/Ushuaia, Aruba, Asunción, Atikokan, Atka, Bahia, Bahía de Banderas, Barbados, Belém, Belize, Blanc-Sablon, Boa Vista, Bogotá, Boise, Cambrige Bay, Campo Grande, Cancún, Caracas, Caienna, Isole Cayman, Chicago, Chihuahua, Ciudad_Juarez, Coral Harbour, Costa Rica, Coyhaique, Creston, Cuiabá, Curaçao, Danmarks Havn, Dawson, Dawson Creek, Denver, Detroit, Dominìca, Edmonton, Eirunepé, El Salvador, Ensenada, Fort_Nelson, Fortaleza, Glace Bay, Nuuk, Goose Bay, Grand Turk, Grenada, Guadalupa, Guatemala, Guayaquil, Guyana, Halifax, L'Avana, Hermosillo, Indiana/Indianapolis, Indiana/Knox, Indiana/Marengo, Indiana/Petersburg, Indiana/Tell City, Indiana/Vevay, Indiana/Vincennes, Indiana/Winamac, Inuvik, Iqaluit, Giamaica, Juneau, Kentucky/Louisville, Kentucky/Monticello, Kralendijk, La Paz, Lima, Los Angeles, Lower Princes, Maceió, Managua, Manaus, Marigot, Martinica, Matamoros, Mazatlán, Menominee, Mérida, Metlakatla, Città del Messico, Miquelon, Moncton, Monterrey, Montevideo, Montréal, Montserrat, Nassau, New York, Nipigon, Nome, Noronha, Nord Dakota/Beulah, Nord Dakota/Center, Nord Dakota/New Salem, Nuuk, Ojinaga, Panama, Pangnirtung, Paramaribo, Phoenix, Port-au-Prince, Port of Spain, Porto Acre, Porto Velho, Porto Rico, Punta_Arenas, Rainy River, Rankin Inlet, Recife, Regina, Resolute, Rio Branco, Santa Isabel, Santarém, Santiago, Santo Domingo, San Paolo, Scoresbysund, Shiprock, Sitka, St Barthelemy, St Johns, St Kitts, St Lucia, St Thomas, St Vincent, Swift Current, Tegucigalpa, Thule, Thunder Bay, Tijuana, Toronto, Tortola, Vancouver, Virgin, Whitehorse, Winnipeg, Yakutat, Yellowknife
Choices-ja.utf-8: エイダック, アンカレジ, アングイラ, アンティグア, アラグアイナ, アルゼンチン/ブエノスアイレス, アルゼンチン/カタマルカ, アルゼンチン/コルドバ, アルゼンチン/フフイ, アルゼンチン/ラリオハ, アルゼンチン/メンドサ, アルゼンチン/リオガエゴス, アルゼンチン/サルタ, アルゼンチン/サンファン, アルゼンチン/サンルイス, アルゼンチン/トゥクマン, アルゼンチン/ウシュアイア, アルバ, アスンシオン, アティコカン, アトカ, バイア, バイアバンデラス, バルバドス, ベレン, ベリーズ, ブランサブロン, ボアヴィスタ, ボゴタ, ボイシ, ケンブリッジ湾, カンポグランデ, カンクン, カラカス, カイエンヌ, ケイマン, シカゴ, チワワ, Ciudad_Juarez, コーラルハーバー, コスタリカ, Coyhaique, クレストン, クヤバ, キュラソー, デンマークシャウン, ドーソン, ドーソン運河, デンヴァー, デトロイト, ドミニカ, エドモントン, エイルネペ, エルサルバドル, エンセナダ, フォートネルソン, フォルタレザ, グラッセ湾, ゴッドホープ, グース湾, グランドターク, グレナダ, グアドループ, グアテマラ, グアヤキル, ガイアナ, ハリファックス, ハバナ, エルモシヨ, インディアナ/インディアナポリス, インディアナ/ノックス, インディアナ/マレンゴ, インディアナ/ピーターズバーグ, インディアナ/テルシティ, インディアナ/ビベー, インディアナ/ヴィンセンズ, インディアナ/ウィナマック, イヌヴィック, イカルイット, ジャマイカ, ジュノー, ケンタッキー/ルーイヴィル, ケンタッキー/モンティセロ, クラレンディーク, ラパス, リマ, ロサンゼルス, ロワプリンセス, マセイオ, マナグア, マナウス, マリゴット, マルティニク, マタモロス, マサトラン, メノミニー, メリダ, メトラカトラ, メキシコシティ, ミクロン, マンクトン, モンテレー, モンテビデオ, モントリオール, モントセラト, ナッソー, ニューヨーク, ニピゴン, ノーム, ノロニャ, 北ダコタ/ベウラ, 北ダコタ/中央, 北ダコタ/ニューセイラム, ヌーク, オヒナガ, パナマ, パンナータング, パラマリボ, フェニックス, ポルトープランス, ポートオブスペイン, ポルトアクレ, ポルトヴェリエ, プエルトリコ, プンタアレナス, レイニーリバー, ランキン湾, レシフェ, レジャイナ, レソリュート, リオブランコ, サンタイサベル, サンタレン, サンチアゴ, セントドミニゴ, サンパウロ, スコレスビスン, シップロック, シトカ, セントバルテルミ, セントジョーンズ, セントキッツ, セントルチア, セントトーマス, セントビンセント, スイフトカレント, テグシガルパ, テューレ, サンダー湾, ティフアナ, トロント, トルトラ, バンクーバー, バージン, ホワイトホース, ウィニペグ, ヤクタト, イエローナイフ
Choices-ko.utf-8: 아닥, 앵커러지, 앵귈라, 앤티가 섬, 아라구아이나, 아르헨티나/부에노스아이레스, 아르헨티나/카타마르카, 아르헨티나/코르도바, 아르헨티나/후후이, 아르헨티나/라리오하, 아르헨티나/멘도사, 아르헨티나/리오가예고스, 아르헨티나/살타, 아르헨티나/산후안, 아르헨티나/산루이스, 아르헨티나/투쿠만, 아르헨티나/우수아이아, 아루바, 아순시온, 아티코칸, 애트카, 바이아, 바이아 데 반데라스, 바베이도스, 벨렘, 벨리즈, 블렁싸블롱, 보아비스타 섬, 보고타, 보이시, 캠브리지 베이, 캄푸그란데, 칸쿤, 카라카스, 카옌, 케이맨 제도, 시카고, 치와와, 시우다드 후아레스, 코랄 하버, 코스타리카, Coyhaique, 크레스턴, 쿠이아바, 퀴라소, 덴마크샤븐, 도슨, 도슨크릭, 덴버, 디트로이트, 도미니카, 에드먼턴, 에이루네페, 엘살바도르, 엔세나다, 포트 넬슨, 포르탈레자, 글레이스 베이, 고트호프, 구스 베이, 그랑 터크, 그레나다, 과들루프, 과테말라, 과야킬, 가이아나, 핼리팩스, 아바나, 에르모시요, 인디애나/인디애나폴리스, 인디애나/녹스, 인디애나/마렝고, 인디애나/페테스부르크, 인디애나/텔시티, 인디애나/베베이, 인디애나/빈센느, 인디애나/위나막, 이누빅, 이칼루이트, 자메이카, 주노, 켄터키/루이스빌, 켄터키/몬티첼로, 크랄렌데이크, 라파스, 리마, 로스앤젤레스, 로워 프린스, 마세이오, 마나과, 마나우스, 마리고, 마르티니크, 마타모로스, 마사틀란, 매노미니, 메리다, 메틀라카틀라, 멕시코시티, 미클롱, 멍크턴, 몬테레이, 몬테비데오, 몬트리올, 몬세라트, 나사우, 뉴욕, 니피곤, 놈, 노로냐, 노스다코타/뷰러, 노스다코타/중부, 노스다코타/뉴 살렘, 누크, 오지나가, 파ELF          >                    `         @     @ 5 4          GNU J60y4I݅
z        Linux                Linux   6.1.0-41-amd64                          
   D    fD        <v<t  F1    t측    ff.          ~u  1        ff.         F     F    fD      ATI     UH=    S    H    A4$h  A   A  j      LPHŁ΀      H   ] H|      `  9  w^\  !  w-   L  t:    \     [   ]A\       0\  t
 `  uy   []A\    0p     v#   t  t܁ t  u*[   ]A\    
   p  t p  u   몁 t  uU
   뛁 d  uF   댁 \  u7   z    H  i L  u   WH1    I$   H               (   	       USHGpHHXf[]    Hs0H    H        []    fD      t    H    HzH    HHH    H  H)H)ց   H        AWAAVIAUAATUSHLHt$      Ha  EI~EIA@  h        AUPDD$    AH   r`I$HKLHHID,HD+H)H)߃r1H4H49rL    HD[]A\A]A^A_    @   tA$@tAD,fD+Hs@uYt@tfD+HSHHD+HH)f1H4
9rOD+<A$AD,D+(A%         AVAUILATAԺ  US    HtLI}IEAD  h  DŹ@   S   P    L    H[]A\A]A^        ~ujAUATU*SH;vd9  t   u  1[]A\A]    Lp
  L	  L    L      L    L    뽸      @    ff.     f    FvtAUATUSH;  t   u  [1]A\A]    Lp
  L	  HL    L    EL      L    1[]A\A]        D      AUATUSH    tcHH   I    Ņx>Lp
  H	  L    HLH       L    H       []A\A]        Ht.wHt&HuH    1    Ht1    H    1    @     H      X  <	   <   <      A8A rf>    B9    )        fD9J
    fz&    fD9B    fz(    rH9    }f|B     H9       <vE1    X  w   Hxs 9u1uѹ   AHA +   AHA    E1A      AUATUSH   twHH   I    ÅxBLp
  H	  L    HH  L    Åt!L    H       []A\A]    H@
      ϻff.     f          H       f    UHSAtT  H  t#1{ t
H  z
tHè  9u߸9tsH        1[]        ATUHSH       Åx1Lp
  L    H@
      L    H       []A\    fD      U   HSHH~H        H}$	   H        H	  H}d    HPPL@HJH        H@  Ht@H= w8HH      H    HH     H}DH[]H    []    ff.             HH   f|
 u1   ``tNWpHH @  v
H  H!          HH+   9}H  H!      ff.     @     @wP@
    BJf9    9    )    B8<    B9<           @t    f.         AWAVAUATUSHHDL$   A   f   AA   MM   =     Ճ   HD	ʃ	ZxhfAtfAIfA   Dl$AEfA wNfA fA I   fA v3AM   DHyʃtwH[]A\A]A^A_    AAMDHxEEMD$f MHA   	f	xH[]A\A]A^A_    HC@zqf.         ATDUSHHeH%(   HD$1X  Hl$<t8!  <  D$    Hl$EI      H߾8  EI   3   (  HD$    EI      (  HD$    EI   3   ,  HD$    EI      ,  HD$    pEI   3   0  HD$    KEI      0  HD$    &EI   3   4  HD$    EI      4  HD$       p        EI      $  HD$    HD$eH+%(     H[]A\    Hl$qD$    Hl$f  E1I   3   H  HBE1I   3   8  HD$    E1I      8  HD$    E1I   3   <  HD$    E1I      <  HD$    E1I   3   @  HD$    E1I      @  HD$    dE1I   3   D  HD$    ?E1D$    I      H߾D  <Hl$E   3   IH  D$    EI   3   8  HD$    EI      8  HD$    EI   3   <  HD$    wEI      <  HD$    REI   3   @  HD$    -EI      @  HD$    EI   3   D  HD$    ED$    A            AVAUATUSHeH%(   HD$Ft.AHD$eH+%(     HD[]A\A]A^    NH	tHL	     H       AŅxLp
  HL    H1H       LA      LD$     D$   IL   A   ?      A      LLD$     D$    L    H       Lp
  HL    H1H       LA      LD$     D$   ;IL   A   ?      LA      LD$     D$    L    J    ff.     @     1@     HE1ɹ   3   eH%(   HD$1LD$@  D$}  HD$eH+%(   u1H             H    eH%(   HD$1E  AA   AEAA   @AEAA  @ AEAA   AHAAAEAAAEAA    AEAA   @AEEE  f   vNtnvq  	 DE1LD$   D$   H  9HD$eH+%(   uYH    t:u
   붉
      E
   뛁   
   E
   
   w    ff.         UHAWAVL  AUATSHH H  eH%(   HD$1H$    HD$    HD$    L;     L  IID$    LL$$Ld$    I  I9t>I  H$L`H$HHJA  D$M  M  Aǅ      L    H<$L9u@CD$D$HHGH    HG    HBH    H<$Hh  L9tHuHD$eH+%(   uHe[A\A]A^A_]             AWAVAUAATUHSHH  Hp  Ht     H=    @   DAHHL    AHH   DD       HC0H   H+    D1HHH    HC8    HC H   LcHL  H[LL  LcHk(Lc    L  LLH$L    tL  LkLsM&H4$L       HH[]A\A]A^A_    H{0D    H    1Ґ    SH   HǇ       HtyHC@uH      H(      Hh      Hx  HtH    H  HtH w    Hǃ      H  [    [    @     HG8t    	  H5    H  1ɿ        ff.         SHHHu>HtDʍ=  w4AIH(t[    HC@u[    [             AWAVAUATUH	  SHH eH%(   HD$1H  HD$    HD$    H    H         A   HL$H  D$       Dl$A            EAT$A   LD$         HD$HA      LD$     Dd$H      HD$eH+%(      H []A\A]A^A_    EA
t{   wurL  L  HD$    A   M9tfIw(   A    D    	TM?M9uƋT$D$tEA1    f    AT   UHSHHHeH%(   HD$@1ILHH          H	  A   L@     <H       H$HHD$HCHD$HCD$HCD$HC D$HC(D$ HC0D$$HC8HD$(HC@HD$0HCHD$8HCPD$<HCXD$>HC`HD$@eH+%(   u
HH[]A\        ff.     @     ATE1UHSh   HeH%(   HD$1tK           t2   E1HL$H  Dd$)HE T$t1HT$eH+%(   u
H[]A\        f    UHS  HeH%(   HD$1EA   HL$   HL  D$    D$u!           tHE tHD$eH+%(   uH[]        ff.          AUAATA  UHSHeH%(   HD$1*fD9          HE    A   fJ   t6A   LD$   H3   l  D$    fJ  A3  HL$   H   D$    \$fE^Cft
fUHD$eH+%(   uH[]A\A]                 UHSH       H   D   HX  H    HH  HH  H9ttH	  u/H	      H
  H  H
   sp1[]    	  @H5    H  1ɿ        1[]    1H    jh  9  sH  H    H          1[]    D      AWAVAUATUSHH   DoXH   H]H   L  E   E0I$8  E4I$H  L  L  L    L  LHH$L    tH  Lm LuI.H4$L    H      ID$8u1Ht*Hu#H  H9  tH(  H0   s0H[]A\A]A^A_            E0I$X  9H[]A\A]A^A_    ff.         SE1     HHeH%(   HD$1HL$D$    D$uFA   LD$   Hߺ3     D$  HD$eH+%(   u5H1[    E1LD$   Hߺ3   0  D$x      f         USH   HtH  HE8u	1[]    H  H    H      H(  8      D$ #H      H      H{    HE8uH  H    H`  H    H    1[]         SA3     H   HeH%(   HD$1HL$D$    AD$A      LD$3      H߃D$@HD$eH+%(   u
H[            SA      H     HeH%(   HD$H  LD$   D$A      HLD$"     D$   HD$eH+%(   u
H[        fD      SHHeH%(   HD$1A      HHL$  D$    	E1ɹ   HLD$     d$  HD$eH+%(   uH1[            SA      H3   l  HeH%(   HD$1LD$D$        A      fJ  LD$   H߾  D$L   vA     HHL$  D$    !f|$?HT$eH+%(   u
H[                 UA3      S  HHeH%(   HD$1HL$D$    D$   HLD$  %  @EE1ɺ3   D$HD$eH+%(   uH[]        @     UA3      S`  HHeH%(   HD$1HL$D$    D$   HLD$`  %  @EE1ɺ3   D$HD$eH+%(   uH[]        @     UA     SX  HHeH%(   HD$1HL$D$    nD$A   HLD$   X  @Eº   D$_HD$eH+%(   uH[]        ff.     @     UE1     SHHeH%(   HD$1HL$D$    \$E1HLD$           \$E1ɹ   HLD$     \$HD$eH+%(   uH[]            SA3      H  HeH%(   HD$1HL$D$    D$E1HLD$   3     D$E1ɹ   HLD$     D$&@E1ɹ   HLD$     D$ɬ@HD$eH+%(   uH1[        @     UHH~SHH    tHSHCHBHH     H{ HCH"HC    H{0HGutffO4tcH       H[]      uH   tHGHHPHEHH3u   H<$    H<$u    Hxff.          AVL  AUATUHLSL      IH  HI9t$HpHZHHCHHXHFL9uLL       u{H  L  H;H8    HC    H{    HC    HC    I9uH      HP  Hǅ          HǅP      []A\A]A^        AVAUL  ATUSHLL  HeH%(   HD$1HH,$Hl$    HH  I9t/H  H  H$HiH$HHPL  L  L    H$HHpLqH9u!hHIFIVLHH9tLIHF0HP   f@4H~     é  uH   tHPHHJHEL    HH  I9   H$H9t"H  H$HT$LaH  HHPLH      H  H9tBHt,      HHGH    HG    HBH    H  H9uHD$eH+%(   u!H[]A\A]A^    HBG    ff.     f    AUATL	  USHHǐ
      H
  
      D$ 	  H0      H      H	      H  H    H      H       ŅxhH	  uKLp
  L    LH
      L    uH       LB[]A\A]    L-LLLǐ    ATA3     IU   SHeH%(   HD$1HL$D$    ^l$A  LHL$      D$    4fD$LA  HL$  D$    D݉ڃ@Eډڃ Eں   ؃ D$EHD$eH+%(   uH[]A\        @     AUATUHSHH       x`H	  H  @ uHE    H   []A\A]    Lp
  L	  L    E/   LLE    []A\A]    @     UHAWAVAUATSHH   eH%(   H$   HuHIu*H$   eH+%(   
  He[A\A]A^A_]    HHP8uHHL$(HHL$HHHL$0H|$ HD$(I9tILt$I9oH|$0    HII9  ML    tIIFHBHM6H|$0HMv    MHD$`    HD$PHD$PHD$XIHHD$8    IHt$(H9tEIHT$PH|$PHxHD$PHHJAD$`IIAǅ    H|$8    Mf(H\$PIF0    D$D @   @  H  HL$PH9  t$`VT$`HSHHC    H    HQH
DKpAQ9  H      IIDTA   EA   E  D   H   II)DA;  IA       H      HHD$p    HD$x    HǄ$       H    H=   H  HL$pH|$pǄ$       HL$pHL$xHH     HL$xH8HHt$pHH     HL$xH0HHHD$xH$   $   HuHD$pHL$pH9t*HT$PHL$xHt$PHpHD$PHHJ$   D$`H    D$DH\$PC/HD$PH9  I    IH  H   tA   A9      Ix      IV(IA  IFI)Hp@ 
  HPHP`D   Hǀ       L   I~    n    A       HL$ AF0H|$0Hh      ML|$LHLL    tMM>MfM4$H$   eH+%(   p  H|$0HeH[A\A]A^A_]       `<`  ET$E$   t   fD	
   AD$D{pIT$1HHT$HD    HT$H  EE~4   HIH      D   fDAF0    IT$ @  H\$PHI+V()ЉD$DA      Kxf   f  f'  fh  L   C~t   L@ )  1E1   L\$      DT$HDL$@LIfWHw1H    DD$@DT$HL\$fAGA   A  E	A9AFAh   H   L
I)DA       Kxf   f  fJ  f     H   A   D<?  <  A   AE	11 
  HL\$DL$@DT$H    DT$HDL$@L\$     H   f|      `<`   IHh  х  ra  D~HDDAD$p    +WtD)  DHtmA9thRf t#ftHfA   E\WpH   AIH߾   Hh      D$DH\$PFHA       H    
HT$PHt$PD$DHHsHZL$`H\$PQT$`   HZх  rP  D~HDAD$p    D+OtE)A  DHtA9tPf tAft:Hf   H   A    D	<A   @DOpH   Az   HT$pDL\$DT$DD$@H|$HDL$    H|$HDD$@DT$L\$DL$HT$p"IxD$H    D$H{I@u	AH$   eH+%(   /  H|$ He[A\A]A^A_]    HD$PHt$PHHsHXD$`H\$PD$`H|$8    HD$PHt$PH9t.IHL$XH|$(HxIHHJD$`AH|$8       /   HT$pDL\$DT$DD$@H|$H    H|$HDD$@DT$L\$HD$pH    II7L   IT        UHSHeH%(   HD$,  uH       %    0  uH         8  LD$   H     A   D$cA      HLD$     \$=HD$eH+%(   uH[]        ff.     f    AWAVAUATUSHH  HH   H  H@8   H   Hv84  LCHE Hp`L@@xP   Hǀ       H   H}     Aă      HE L  L  Lǀ           L  LHH$L    tH  Lm LuI.H4$L      @    HH    t
H    E1HD[]A\A]A^A_    HC@uH               AWAVAUATUSHHHeH%(   HD$@1H  Ll$0HLl$0H$Ll$8    H  HH  H|$ H  HD$(H  H  H  HD$H  H  H9t1H  H  HD$0LiHL$0HHPH  H  H<$    HD$0HLpLyI9   E113E    LHAIGIWMHI9thIǃM6Mv
~H<$    H  HT$LHD$Ht$    tHD$Ht$L  IIvL6Ht$H<$    H<$    HH  H9D$    HD$0L9t(H  HL$0HT$8H|$ HyH  HHPH<$    HD$@eH+%(   uiHH[]A\A]A^A_    H<$    H  HT$(LHD$Ht$    EHD$(Ht$L  IIvL6%L        SA3      H4  HeH%(   HD$1HL$D$    D$E1HLD$   3   4  D$A3      HHL$  D$    D$E1HLD$   3     D$HD$eH+%(   uH1[        ff.     @     SE1     HHeH%(   HD$1HL$D$    D$E1HLD$   D     D$A3      HHL$  D$    D$E1HLD$   3     D$HD$eH+%(   uH1[        ff.     @     SA      H  HeH%(   HD$1HL$D$    E1ɹ   HLD$     d$  
A      HHL$  D$    E1ɹ   HLD$     d$  HD$eH+%(   u
H[        ff.     @     Ht    
f.         SA      H  HeH%(   HD$1HL$D$    E1ɹ   HLD$     d$  
A      HHL$  D$    E1ɹ   HLD$     d$  HD$eH+%(   u
H[        ff.     @     Ht    
f.         UA3      S   HHeH%(   HD$1HL$D$    D$   HLD$   %  @EE1ɺ3   D$A      HHL$0  D$    E1ɹ   HLD$   0  d$  HD$eH+%(   uH[]                 Hu	X  u       ff.         UA      HS     HeH%(   HD$H  LD$   H  HD$   HA   LD$"     D$   HA      HLD$3     D$   A      HLD$     \$fHD$eH+%(   uH[]        fD      SA      H     HeH%(   HD$H  LD$   D$A      HLD$"     D$   A      HLD$3     D$   H     ?  wDD$   A   LD$   Hߺ     ^HD$eH+%(   uH[    D$  p     D      UA      S  HHeH%(   HD$1HL$D$    D$A   HLD$     %   @Eº   D$A      HHL$  D$    \A      HLD$D     d$   bA3     HHL$  D$    
A      HLD$3     d$  HD$eH+%(   uH[]             ATIUSf HeH%(   HD$1f9J  t/A   LD$   3   l  D$fA$J  A3   ݁  ޺   LA   HL$fA D$    ED$    HT$eH+%(   u
H[]A\        ff.         H	  H	  u) u H            fD      AUIĥ  ATUHSHХ  AfAAAD DEDDED   DED    DED   @DETHҥ  fڃ EډڀEډځ   Eډځ    Eډځ   @Efу EщрEщс   Eщс    Eщс   @  EeED!AE1AEN  AUAE1[]A\A]    f    AWAVAUATUHSHH          Lp
  L	  L    L   4L  A$L
  ALA    H       fA tSDE   D!u$tfA uRfA u[]A\A]A^A_    E   E   []A\A]A^A_    HE    E    []A\A]A^A_    E   ff.         SHHeH%(   HD$1fJ   t3A   LD$   3   l  D$    fJ  A3  HL$   H߾  D$    D$fHT$eH+%(   u
H[        f    AVAUATIUS  H<vy<tyA|$    H       ŅxELp
  L	  L    AD$9  t  HC8u.L    H       []A\A]A^    tHC8uH  H    H      L	  L    H
  L    LH
      L	  HL    H      OY    UA3       SHHeH%(   HD$1HL$D$    l$A      LD$3     H߁  l$
A      HLD$3     l$A      HHL$  D$    D$A      LD$     H߃D$葽X  wlA  HL$   H߾X  D$    -A      HLD$   X  d$  3HD$eH+%(   u9H1[]    E1LD$   Hߺ   4  D$   h    D      SA      H3     HeH%(   HD$1LD$D$  蜼A     HHL$  D$    GD$A      LD$     H%   
  D$CHD$eH+%(   u
H[        @     UA      S     HHeH%(   HD$1LD$D$   ٻA3     HHL$   D$    D$A   HLD$      %  @Eº3   D$yA     HHL$   D$    $D$A   HLD$      @E@@E @Eº   D$A      HLD$     D$    պA     HHL$  D$    D$A   HLD$     @ Eº   D$s/t+HD$eH+%(   uCH{H   []HǨ       HD$eH+%(   uH{H1[]HǨ           fD      AVAUATUSH	  H  @ t{HFugHH       AąxALp
  L	  L    uLEL/      H       [D]A\A]A^    AAff.         AVAUATUSHeH%(   HD$HuHHH@8u%HD$eH+%(     H[]A\A]A^    H    xHu,HD$eH+%(   H  HH[]A\A]A^    H   LH    g  H   HrvHrAHs(HSHCH9tL L    tL    H    MHH@8uH  H    r    H<yLA3  HL$L     D$    L D$IE8      HH  L    I  H    H      L    L    LLL    I             H5    1Hڿ        4L    H  (      D$ L    HP  L    L    (     2    I  H     9C             ATUSHHeH%(   HD$1X  <	      Ld$A     HL  D$    D$MHA        $?@Eº   D$HD$eH+%(   u}H[]A\    <wLd$HA3     LT  D$    fD$MHA      T  %  @@Eº3   D$[s        AWAVAUATIUSHL   H       Ņx6Lp
  M1L	  L    A   u%L    H       []A\A]A^A_    A   t   LE1L9        SA3     H  HeH%(   HD$1HL$D$    AD$A3  HHL$     D$    tPD$D$A   LD$   Hߺ3     HD$eH+%(   uH[    d$      fD      Hu6SH  1H   H @  HH  H[    @     AVAUATUS  H<w{u{H       AąxTLp
  L	  L    HC8   tH(  HtL    HC8tAL    H       [D]A\A]A^    <uE1䉫   [D]A\A]A^    H  H    H      H	  H    H
  
      D$ H
  L    LH
      L
  H    HH      ,         USHHeH%(   HD$1X     Hl$A3       HD$    躿I   HA   3     d$   ±I   3   HA   (  D$   蚱I   HA   3     D$    rI   HA        D$    JHD$eH+%(   u:H[]    Hl$A         I込  D$   >    ff.         AUAATfA IUSHeH%(   HD$1fD9J  t0AA   LD$   3   l  D$萰fE$J  ո3   ff tff     T$A   LD$   L.HD$eH+%(   uH[]A\A]        f.         ATAUSHHeH%(   HD$1fJ   t3A   LD$   3   l  D$   詯 fJ  LD$   HA      4  l$tHD$eH+%(   uHAH߾8  []A\[    fD      H	   ut     Hǀ	  ff.         UHSft-fu	[]    H[   .  ]ft11H.  H.    H[1]     SH6  HeH%(   HD$1ffJ   t6A   LD$   Hߺ3   l  D$   ! fJ  A3  HL$   H߾8  D$    D$HT$eH+%(   u
H[        ff.         ATAUHS  @AH  H  H  H1Ҿ  p[]A\    D      AU   I   ATUHSpH   AfAAAD DEDDED   DED    DED   @DE<   
H   fڃ EډڀEډځ   Eډځ    Eډځ   @Eں=   fу EщрEщс   Eщс    Eщс   @  EeED!AE1AEN  AUAE1[]A\A]         AUA3     ATU@  SHHeH%(   HD$1HL$D$    z2  HDl$A@t{AAELD$   H߃A   3   @  Dl$WAԾ2  HV  	舃  HD$eH+%(   uH[]A\A]    A  A         AWAVAUATIUSHH       Ņ   Lp
  L	  L    AL$   AD$AT$AEuY  LAff 	f9tҾ  LwL    H       []A\A]A^A_      LEAff 뢾   L#X     ATUSH@u5  d    k  

  []A\    DŸ     tH  <o]    Hf@tf  ? @t  @f?@f  @t  ʀf?ɀf  @t  f?f  f9tD  HDD       H  u|1ɺ     Ƀ	Ȉ  H3sHf    H߽2   t          Hfx1[]A\       Hl1ԥ  H[@t  ʀf?fɀf  f9IҾԥ  H4  H@ t  f?f  f9Ҿ  H       E  f?	f    	ȹ       t-   @  뱀 !      E듸cfD      AVAUIATUHSH       Aą   H]@HU@Mp
  M	  L؃HU@E؉؃HU@E؉؃HU@E؉؃HU@E؉؃  EHE@H/@E    MULuAfAąt$L    I       [D]A\A]A^    EA  EfA  EA  A  벐    AWAVAUATUSHPeH%(   HD$HHt'HD$HeH+%(   i	  HP[]A\A]A^A_    HH8    xHH$H   HHD$    HX       H8HP  HP0H    HX      LcMM    HD$     HX  Lm LuI?    11H    HD$(    HD$0    HD$8    HD$@        IH= g  H@ PID$HD$     A<$  H    HHH  L AUIv HL$(HD$    H|$LcM    MuTHD$(I9   H8H    Hx0    Ht$L    AIIHX      Ht$LM    MxH8LX  LH    HP  Hx0    A    L4$H0  L        L  D  H|$    HD$HeH+%(   $  H8HP[]A\A]A^A_    HD$0I9FHD$8I9FHD$@I9FHt$LA@   A      HM @   H@   i            H8<  <
    AG    fA     fA
     AIcH9  L}IHH9;A  _Y     
?  -  HD$ H8    HD$     HD$      HD$ @    HD$     HD$     HD$     HD$       <  <
    A    fA    Hl$ 
AGHM 	p  
  HD$ H8    HD$     HD$     HD$       LР    Hl$ AGHM w    H8L蕠S    ?  u5HD$     H<$L1    Hl$  AGHM AaHD$ HD$     HD$     HD$     HD$      HD$ @    HD$     HD$     HD$     A    Hl$ AGHM cHD$ H8    HD$     HD$       Lb    Hl$ AGHM 	HD$ H8    HD$      HD$ @    HD$     HD$     HD$     HD$       LԞ    Hl$ AGHM {<L    HD$ H8      <w
I    AGAWf    9    )    fA     Hl$ 	AGHM HD$ H8    HD$ @    HD$     HD$     HD$     HD$        L՝    Hl$ AGHM |HD$     HD$     A    Hl$ AGHM C<    HD$ H8    HD$     HD$           AGf'    AW9    )        fA
    fA    fA    fA     fA     fA    HD$ H8    HD$     HD$     HD$     HD$ @      L\    Hl$ AGHM HD$     H<$L    Hl$ AGHM IAHZ2    Ht$LAII                AWIAVAUATUH	  SH  HH    f  I   D$H@H@HD$I(  Hp  Ht
  D$I8  
   M  IǇ      MH  M  M   MH  MP  I8  I@  IX  IX  I`  Ip  IǇh      Ip  Ix  IǇ      AǇ        H謦H[  uI8  Dt$ @    D    HH,  HPHH9t#    D  @      HH  1  H$    H$H  HS HHHHHS(LH[HkHCMP  L    tIP  L#LsIH8L9:  1    I0  Hm  H=             I  HG  HL$I	  A  I0     A  Hr@zPHB`ǂ      Hǂ       H   F         ǂ   I       Å   Mp
  L    I
  H    L    I  H    A	  I0        Å      A       L    I       H':ɸ   Nȸ   9Oȸ   %H    HH[]A\A]A^A_    H    HvI	      A
  L    I       I
  IǇ
          I(      ff.     @     AVAUATUSH	     HH   IA    Ņx3L	  AH  tSAI  t)AG  t5H       []A\A]A^           uHи    fAELp
  L    AuL6 pLfAE    Lp
  L    AuAUL6 6L    WYff.     @     ATA0  USHHeH%(   HD$1EtK0  H  AAD	  HD$eH+%(   u|H[]A\    ¾0  H߽     yHuº           A3     HHL$   D$    D$cuY    ff.     @     AUA   ATUSHHeH%(   HD$1E   E1о   H@                   fJ   t6A   LD$   Hߺ3   l  D$   T fJ  A3  HL$   H߾   D$    D$@fA9utHhEu/1HT$eH+%(   u3H[]A\A]    A@   
   H@u        ff.     @     AWA3     AAV@  AUATUSHHeH%(   HD$1HL$D$    %   HDt$S   H߉D   HA4AE   AfA fA Ef3A   LD$   Hߺ3   @  Dt$ғվ   HAԾ   HHD$eH+%(   u=HAH߾   []A\A]A^A_fA  fAÀpk    ff.     @     U     SHEHߺ<     3Hߺ@    !H߾  H1[  ]     X        SHHx  u< x tY@      H߾Ԧ  Ԧ  H߃@tZ   N  H߾Х  [xt@t    N  H[[    1H1[16H1ҾХ  [&1H߾Ԧ  H߾Ԧ    H1ҾХ  [             V EE   E    E@   VE@fN  @  @n1            AWAVAUATUSHL   DoXH<$Mt)Il$(HtHE uHE tL  IF8tH[]A\A]A^A_    L}    I  Ab  AH<$   An  AR  L  L  Ǉ       L    L  LLHL    tL  M<$Ml$Me HL    MH5    HH     [    ]A\A]A^A_    AE      ;wHLH 
  []A\A]A^A_ܿL  L  L    L  LLHL    tL  M<$Ml$Me LHH    H    HH[]A\A]A^A_        Z        H    HE@uM H  H[]A\A]A^A_         ATA       USHHeH%(   HD$1HL$D$    讜D$u!HD$eH+%(      H[]A\    A3   HL$   H߾  D$    aD$ uE1d   FA3   HL$   H߾  Dd$.D$u           cHtW    f         SHHeH%(   HD$1@   /   A      HLD$     D$   ƍA3     HHL$   D$    qD$D$A   LD$   Hߺ3      pA      HLD$     D$    FHD$eH+%(   uqH[      A      HLD$     D$   A3     HHL$   D$    袚d$  3        SH@t,   xH1~H1H߾   [f1O1HU   HHCxw[    H߾   [*f.         SHHeH%(   HD$1@tNE1ɾ  I   ?   H$    1HrHD$eH+%(   uvHH߾   [1X  w?E1I   ?     HH$蕋HD$eH+%(   uH[       H            AUE1A   AT  USHHeH%(   HD$1HL$D$    l$E   H褓8E1ɹ   @LD$D   H߾  l$׊E1   HHL$  D$    腘D$E1HLD$        D$臊HD$eH+%(   K  H[]A\A]    E1LD$   H߁   D     l$;E1   HHL$  D$    E1ɹ   HLD$     d$   A      HHL$  D$    蝗D$;E1         t4HA3  HL$   H߾  Dd$LD$tH  H    HD$eH+%(   u.Y  L  HZ  D  H[]A\A](         SH@t9   H1ޢH1tH߾   H߾   [y1r1H1HHCxw[    H߾   [逢    HH  eH%(   HD$   6+   X  <w[<	wP<wE<vWE1LD$      ,  D$2HD$eH+%(   u#H    <w<t<t    f.         USHH  eH%(   HD$1X  <   <
   <wE<v&  E1LD$   3   ,  l$脇HD$eH+%(   usH[]    <wD$   E1HLD$   3   ,  8E1ɹ   HLD$   0  l$<t<uD$P       ff.         SE1     HHeH%(   HD$1HL$D$    脔D$  A   LD$   Hߺ3     D$  A      HLD$3     D$   UA      HHL$  D$     D$E1HLD$        @D$E1   HHL$  D$    谓D$E1HLD$   D     D$诅HD$eH+%(   ugH1[    HA3  HL$   8  D$    >D$A      LD$3   8  H߃D$=         SE1     HHeH%(   HD$1HL$D$    ĒD$  A3   HL$   H߾4  D$    蔒D$E1HLD$   3   4  D$薄A3      HHL$  D$    AD$E1HLD$   3     D$CA3      HHL$  D$    D$E1HLD$   3     D$HD$eH+%(   ugH1[    HA3  HL$   8  D$    D$A      LD$3   8  H߃D$~    @     USHHeH%(   HD$1X  
  A   HL$     D$    A      HLD$     d$   A3      HHL$  D$    螐E1ɹ   HLD$3     d$  观A      HHL$  D$    RD$E1HLD$        D$TA      HHL$  D$    A      HLD$     d$   A3      HHL$  D$    谏D$E1HLD$   3     D$貁A      HHL$  D$    ]E1ɹ   HLD$     d$  fHD$eH+%(      H[]    A   LD$        D$     IA   HL$   H߾  D$    ĎD$t     d       jHt^    ff.     @     S   HHeH%(   HD$1詛HAA      HHL$  D$    ,A      HLD$     d$5HHA      HHL$L  D$    ЍA      HLD$   L  d$   A     HHL$  D$    聍A      HLD$     d$  H_A     HHL$  D$    *D$A      LD$     Hf
 D$(H H  HH   HH  A      LD$     Hߋ   D$~A      HLD$"     D$   ~A3     HHL$  D$    KD$A      LD$3     HD$K~HA      HLD$     D$  ~A      HLD$3     D$   }A      HLD$3     D$  }A      HLD$     D$  }HD$eH+%(   u
H[        ff.         SHeH%(   HD$HtHD$eH+%(      H[    H1	1H蟗1HH]E1ɹ   HLD$     D$  |A3     HHL$  D$    葊A      HLD$3     d$  |   HHCx+HD$eH+%(   uHH߾   [:    D      SHeH%(   HD$HtHD$eH+%(     H[    HE1LD$   ?     HD$    {1Ha1HHA      HHL$  D$    zD$A      LD$D     H߃D$v{A      HHL$  D$    !A      HLD$     d$   '{A      HHL$$  D$    ҈E1ɹ   HLD$   $  d$  z   HX  v
   H2E1LD$   Hߺ?     HD$zT        SHeH%(   HD$HtHD$eH+%(     H[         HA       A      HHL$  D$    ҇A      HLD$     d$y   HHA      HLD$     D$    yA      HLD$     D$    ryA      HHL$L  D$    A      HLD$   L  d$   #yA     HHL$  D$    ΆA      HLD$     d$  xH謊A     HHL$  D$    wD$A      LD$     Hf
 D$uxHMHA      HLD$     D$  ;xHC@  A   LD$   Hߺ     D$8   wD$H   A   LD$   Hߺ     wA      HLD$     D$  wE1ɹ   HLD$D     D$   wE1ɹ   HLD$     D$z\wE1ɹ   HLD$   4  D$  5wH  HH   HA      HLD$     D$  vA3     HHL$  D$    虄D$A      LD$3     HD$vHD$eH+%(   uNHHߺ     [A   LD$   Hߺ     D$`   HvD$x   E    fD      SHeH%(   HD$HtHD$eH+%(     H[    H1ɏ1H_1H   HHA      HHL$  D$    kA      HLD$     d$tuHH4A      HHL$L  D$    A      HLD$   L  d$   uA     HHL$  D$    A      HLD$     d$  tH螆A     HHL$  D$    iD$A      LD$     Hf
 D$gtH?H  HH   H½HHA      HLD$     D$   tA      HLD$D     D$   sA      HLD$3     D$   sA      HLD$3     D$  sE1ɹ   HLD$     D$  csA      HLD$     D$   9sA3     HHL$   D$    D$A      LD$3      H߀D$rA      HLD$     D$    rA3     HHL$  D$    d  HA   LD$   3   d$  jr   H]HD$eH+%(   uHH߾   [    fD      ATUSHHeH%(   HD$HQ  A   HL$     D$    H  L  A      HLD$     d$qH{H} H8    L9u   H߽  褌JA   HL$   H߾L  D$    -D$0<0t            tHt  EA3  HL$   H߾  D$    ~D$u            tHtHHD$eH+%(   u-HH[]A\FHD$eH+%(   u
H[]A\z    @     SHHeH%(   HD$H  A3  HL$     D$    ~D$A      LD$3     H߀@D$p1H1H胊H若1HA      HHL$L  D$    }A      HLD$   L  d$   oA      HLD$     D$   xoA      HLD$     D$  @ NoA      HLD$     D$   $oHHA      HLD$     D$  nA      HLD$"     D$ `  nA      HLD$3     D$   nA      HHL$L  D$    A|D$A      LD$   L  H߃ȀD$@nA     HHL$  D$    {D$A      LD$     H߀@D$m   H]1HA      HHL$  D$    ~{A      HLD$     L$mHD$eH+%(   u,HH߾   [eHD$eH+%(   u
H[w    fD      S1H0HHH߾   [f    SHHeH%(   HD$H  1s     H       A      HHL$L  D$    rzA      HLD$   L  d$   xlA      HLD$     D$ NlA      HLD$     D$J   $lA      HLD$     D$Z   kHH}A     HHL$  D$    yD$A      LD$     Hf
 D$kHk}A      HLD$     D$  ak   HԴA3     HHL$  D$    xD$A      LD$3     H߃D$jA      HHL$L  D$    xD$A      LD$   L  H߃ȁD$j1H辅A      HHL$  D$    IxA      HLD$     L$RjHD$eH+%(   u1HHߺ     [;HD$eH+%(   u
H[Qt    ff.         S     H       HHߺ  [   Ӹ     SA      H     HeH%(   HD$1LD$D$    |iA      HLD$     D$    Ri1HHHHHD$eH+%(   uHH߾   [        UA     S  HHeH%(   HD$1HL$D$    vD$%@t	   
   A   LD$        H߉D$hA     HHL$  D$    2vD$D$A   LD$   Hߺ     1hHD$eH+%(   uhH[]    
   A   LD$        H߉D$gA     HHL$  D$    ud$  f    @     USHeH%(   HD$H0  H  1H   H @  HH  谲HhHA3     HHL$  D$    tt$HX  <	t&<t"HD$eH+%(      HH[]mHA3   HL$     D$    tl$E1HLD$   3       l$f           E1ɹ   HLD$3     l$afMHD$eH+%(   uH[]                AWAVAUATUSHĀt$eH%(   HD$x1u-E1HD$xeH+%(   
  HD[]A\A]A^A_    H  L  HD$h    IHD$p    H  L|$HI9  |$	  E1LIDIdA  LA  HHFH    HF    HAHI  Dfp    H0  L@  9l$;  I  I9tHuLALII  H9  AeHD$hHD$hHD$pI  HHD$0    HI  H9t6I  HD$hHL$hI  H|$hHOHHPI  I  H|$0    Ld$hHD$hM<$I9/  IEDt$XHD$81Hl$`A,H|$8 
  L.AHL$hIMI9   IL    tI$ID$HBHMD$ M$$Md$AHXuA   ;   EtAǀ       I_LLH    tHL$hMgM<$I\$L#MII9sHD$hHl$`Dt$XL9tCH|$0    HHD$hL9t"I  HD$pH|$hHWH:H(I  H|$0    D9t$6DL    #I  H9L    L    H|$0LD$    I  LD$HI  H9HD$@H3H  HD$    HC0HHu1D  @4t0HHHH9t$@  HHC0HHtHA@4uH|$   A  
  H|$0HLD$    LD$A   Il$8  L|$P   LD$(Dt$\Ld$MII$  A$    HL$  A]   ;  9  H|$ ImAtE$  D9DF 
  DL    IH0  I$  1   t9AUAM        u   V       @ E  I   HA   	DA   HT$     DL    HT$ HD)  Ht$L    fA   AE   t!f   A   fA   fA   |$X9|$  I$  HL$HIIFM$  L0A$  A$  HL$LTILH+A8HL$(MՃ   9>ML|$PDt$\ILd$     zH   kHHHHyHEW1  @ ȃL|$DK?A؉A1LIW0A+O8    IG0HP  D  @4   N,H|$LD$XH0  AFpH@  L    HD$H`  ML|$PLD$(Dt$\Ld$H|$   H|$0LD$    LD$HID$0HP  D  @4   I  HT$@LH    tHD$@M  Il$I$Le Ld$MD$ H|$0HLD$    LD$  H   HPHHJHE  aH   RHPHHrHE>Ht$@H|$LD$I  H    LD$]HD$H|$@HEH(HxI  <LALIH  H9E1HLD$HT$    HT$LD$tH3HCHFH0HH|$8HHSLD$zH|$0H    LD$+A   Il$8HD$    "ID$0HP@  f@4B;HBs  uH   tHPHHrHEH|$0HLD$    H|$ LD$A  A;  XH|$8 
  LD$8hLD$Il$8HD$A   eQHHt$LD$HT$    HT$LD$Ht$tHHCHAHHH\$HSHD$hH|$0HLD$    LD$EHBI  E1H9 HB    fD      AUE1A   AT  USHHeH%(   HD$1HL$D$    lil$E   H$d8E1ɹ   @LD$D   H߾  l$W[E1   HHL$  D$    iD$E1HLD$        %   D$[HD$eH+%(     H[]A\A]    E1LD$   H߁   D     l$ZE1   HHL$  D$    dhE1ɹ   HLD$     d$   mZA      HHL$  D$    hD$   E1         t4HA3  HL$   H߾  Dd$gD$tHH      Y  L  HZ  D  软A   HLD$        D$   YHA3     HL$   D$    >gD$HA   LD$   3      D$=YA      HLD$     D$    Y    f         SH@t9   踓H1rH1TsH߾   H߾   [1H1xH1~H߾   [pr    ATUSL   oXMtsI$tkI$uc   H}[   }El   A$       
  H       tA$      []A\    tQuHW`I$     H@8tA$H5    1I$          I$      A$      []A\        SA$  D    ID$@uA$I$  []A\    HP8H  H    H      A$H5    1I$          f.         AVAUATUSHeH%(   HD$1H`
   5  HH   I    ŅxRLp
  L    H@
  L    ID$0/     uHH  uHL    H       HD$eH+%(      H[]A\A]A^    H  tL	  ԥ  LIT$@/   tiH֥  L IT$P /   tPHA3  HL$   L  D$    cD$f%f=;AD$	  -HH뮽+    ff.     f    SA      HL  HeH%(   HD$1HL$D$    cA      HLD$   L  d$   UA      HLD$     D$ TA      HLD$3     D$J   TA      HLD$3     D$Z   THQHIpHQfA     HHL$  D$    bD$A      LD$     Hf
 D$THeA      HLD$     D$  SA      HLD$"     D$ `  SX  <	  <  <wOA3  HL$   H߾  D$    KaA      HLD$3     d$  QS   HĜA3     HHL$  D$    `D$A      LD$3     H߃D$RA      HHL$L  D$    `D$A      LD$   L  H߃ȁD$RA     HHL$  D$    C`D$A      LD$     H߀@D$BR1HXmA      HHL$  D$    _A      HLD$     L$QHD$eH+%(   uAH[    <yA   LD$   Hߺ3     D$   QJ    fD      SHHeH%(   HD$H   A3  HL$     D$    _D$A      LD$3     H߀@D$Q1Hj1HkH苆1HHyHD$eH+%(   u,HH߾   [ǹHD$eH+%(   u
H[Z             SHHeH%(   HD$H   A   HL$     D$    (^A      HLD$D     d$   .PE1ɹ   HLD$?     HD$    P1H|jH脆1HHrHD$eH+%(   u,HH߾   [HD$eH+%(   u
H[Y        USHeH%(   HD$HtHD$eH+%(   [  H[]    H17i1Hi1HC   HVjHA      HHL$  D$    \A      HLD$     d$NHjHjA      HHL$L  D$    }\A      HLD$   L  d$   NA     HHL$  D$    .\A      HLD$     d$  4NH  HH   H藗H迆X  
  A  HL$   H߾  D$    [D$A      LD$     H%   
   D$MA3     HHL$  D$    N[A      HLD$3     d$  TMA      HHL$(  D$    ZE1ɹ   HLD$   (  d$  ME1H߹   LD$     D$ ` L  Ho9t         H蔐   H觵   HgHCxHD$eH+%(   ukHH߾   []IfHA3   HL$     D$    ZD$E1HLD$   3     D$L    ff.         SE1     HHeH%(   HD$1HL$D$    YE1ɹ   HLD$D     d$   KE1   HHL$  D$    KYE1ɹ   HLD$     d$   TKA      HHL$  D$    XD$tHH  H    HD$eH+%(   uCY  L  HZ  D  H[HD$eH+%(   u
H[            SHeH%(   HD$HtHD$eH+%(   @  H[       H膆       Hk       X    1HʁHA3     HL$L  D$    WD$A   HLD$   3   L  D$IHA      HL$  D$    WD$HA   LD$        %
OD$IA   H߹   LD$      D$   bIHA3     HL$   D$    
WD$A   HLD$   3      D$IHA      HL$  D$    VE1ɹ   HLD$     d$  oH¾   H߁  趗4HA  HL$     D$    LVA      HLD$     d$  RH	             AWAVAULnATUHSHH8L  eH%(   HD$01A$(  fHGLH          Uu/M	t'HT$0eH+%(   C  H8[]A\A]A^A_          1   H|$*D$*    fD$.    D$*1LHT$*   D$*    I$0  AƄ$\  U@fE      1YX    1D$*    HD$HD$     fT$.H  G  A   HL$   H߾  D$    TD$E1   D$    HL$f%f=     HiTD$  A   A   H    HL$11    LD$    AD9  E9x   Mp	   H    L$L    L$   A~#   Iv	   H|$*L$    L$'  T$*  L$.	
  UT$.fU  F  Lǉ$    $A   A   H          L    L      HA   4Sw  z          L    L      HA   R벾  HRD$r  rfkH  H    H        L      L    2  %fH  H    H                @     ATUSHH   eH%(   HD$1H$    HD$    Ht"HH   H  HE8u#HD$eH+%(      H1[]A\    HE8   LcL    8  H  Hø      H      HH9tL    tL    u    H  1H        H  HE8GeL  L    HHX      HtHhQL    :    fD      ATUSHHL  eH%(   HD$1HH$    HD$    xX  t,@HLHHD$eH+%(   u#H[]A\       HT$1L        f.         AWAVAUATIUSH0LpeH%(   HD$(1        I|$    E1HL$ HT$Ht$Ml$0HD$    HD$    HD$             HD$@<    HD$@<    HD$ @<    MXL          `      HH    Lp  ǀ    L	  H(  L   @  AX
    AX
     AX
   AX
    AX
@  @  P
   @     Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ         ƃ  f  @  @  Hǃ8      Hǃp      Hp
  H    H    H       E11ɺ    H  H  H  H    H  L
  H  Hǃ          E11ɺ    H  H  H
  H    H  Hǃ 
      H      H    L    
  L    D$ H   H    Hǃ       ǃ    HH   Hǃ   s  H	р  H   uHǃ    H(H
 H   IGA    A  =    =  f!fS!  	Ј  fA  0  Hǃ      ?  H      ǃ   D        #  Hx  u#?   ` u%   Hҁ;  H?      d   $  HX
  Hǃ`
      Hǃh
      HH
  ǃ@
      ƃ  f  ǃ     P
  t=  ?  H	  zozf$f	f    ƃ  H	  H   d   H  AL$(H	  H  @ 0  1HH
  H    H  1ɿ    H5    HH$    1HI$   H  H	  H    <ɀ@       H          $     L    $      HD$(eH+%(     H0[]A\A]A^A_    @_P
  @    @7  %  @V  A   ƃ  fD  Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ       Hǃ(      ǃ     @tG  @  @3Hǃ8      #@Hǃ8      Hǃh      Hǃp      1L    $zH]  frO  wjfT01f.4H@   @  HI@  H2H    H        H    H        fr  f/       7Hǃ8      Hǃh      Hǃp       @Hǃ8      Hǃp        A   Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ       Hǃ(      ǃ     ƃ  fD  Hǃ8      Hǃh      Hǃp      A   ƃ  fD    Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ       Hǃ(      ǃ     @	   "A   Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ       Hǃ(      ǃ     ƃ  fD  @	pHǃ8      Hǃh      Hǃp      t       @	   @
Hǃ
         Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ
      Hǃ       Hǃ      Hǃ      Hǃ      Hǃ       Hǃ(      At%    q@            USHeH%(   HD$HI  H  1H   H @  HH  谁A      HHL$  D$    DE1ɹ   HLD$     d$   6HHdA3     HHL$  D$    Cl$HA     HHL$  D$    {CD$A   HLD$     @   Eº   D$i5HCx   A3   HL$   H߾  D$    Cl$E1HLD$   3       l$5           E1ɹ   HLD$3     l$4HD$eH+%(      HH[]-vHHL$   `A   \  D$    UBD$   HLD$\  f`DE1ɺ   D$H4HD$eH+%(   uH[]        ff.          USHeH%(   HD$H`  HbH  1Hߋ   H @  HH  HHA3     HHL$  D$    SAl$HdA     HHL$  D$    AD$A   HLD$     @   Eº   D$
3@j        HCx   A3   HL$   H߾  D$    @l$E1HLD$   3       l$2           E1ɹ   HLD$3     l$]2HD$eH+%(      HH[]sD$=   A   LD$   Hߺ3   L  2HCxHHL$   `A   \  D$    ?D$   HLD$\  f`DE1ɺ   D$1D$   YHD$eH+%(   uH[]                ATUSHeH%(   HD$Ht!HD$eH+%(   y  H[]A\    1HE1  JA      HLD$     D$   0A     HHL$   D$    >A      HLD$      d$  0A3      HHL$  D$    =>D$E1HLD$   3     D$?0       Ht)A3  HL$   H߾  Dd$=D$t1HpB   Hk  H߾   MB1HCJE1ɹ   HLD$3     D$  /H$e1H1HPj1HVHA3     HL$  D$    !=l$HA3  HL$     D$    <  Hf
 D$A      LD$3     El$.   HHH{    HA     HL$  D$    }<D$A   HLD$        f
 D${.E1Hߺ   HL$  D$    )<E1ɹ   HLD$     d$   2.A   HL$   H߾  D$    ;E1ɹ   HLD$     d$  o-H*Eǃ  :  ¾   H߁  |    ff.         ATUSHeH%(   HD$Ht!HD$eH+%(     H[]A\    E1HL$   Hh  D$    E1  ;E1ɹ   HLD$   h  d$   -E1ɹ   HLD$   (  D$    ,A      HHL$  D$    :D$E1HLD$         D$,1HhF       Ht)A3  HL$   H߾  Dd$:D$t1H>f     H2hj     H>f  1HxFE1ɹ   HLD$3     D$  +E1ɹ   HLD$     D$  +H2aH1H`f1HfH{      HnHA3     HL$  D$    9A   H߹   LD$3     d$  +HA3     HL$  D$    8l$HA3  HL$     D$    8  Hf
 D$A      LD$3     El$*A   HL$   H߾  D$    58E1ɹ   HLD$     d$  o>*E1   HHL$  D$    7D$E1H߾  LD$      D$)  HefxGH$Aǃ  :  GH߾   CH{7¾   H߁  x|¾  H߁  xH߾h  eh  H߉  lx(N    ff.         ATUSHHH  eH%(   HD$1   HU8t+u;#HD$eH+%(      H1[]A\    tH  1    LgH  1    L    HE8tAL    #H  H  H9tL    uLH         bA3  HL$   H߾  D$    6D$tH}YL    H    H`  H      [             ATUSH   H  H    fJ  HtHvH    []A\    L  L    ID$8t7A$   t,Hh  H    L    H         1H    []A\    ff.     f    UHSH   #HfJ  HP      H5    1ɿ    Hh      H߾   H[]ff.     @     AVAUATUSHH   eH%(   HD$1L  L       H  tVH     HE8tH   1L    HD$eH+%(     H[]A\A]A^    H    HE8tHtHk#H      H(  8      D$ H    H      Hp  H    H    8  THE8   E1Ll$#H      H     H    HE8c  L     HH  A3  Hh8D$    3Dl$H      HDf@8u0u,@uH  H    uH  H9  HyLl$A      HL  D$    r2Dt$MH߹      A     DD$s$   H?L   HA   L  D$    2D$1HN?M   HA        Dt$	$#,HkH    HC1H?HM   A        Dt$#H    M    ff.         ATUSHeH%(   HD$Ht!HD$eH+%(     H[]A\    E1HL$   Hh  D$    E11E1ɹ   HLD$   h  d$   #E1ɹ   HLD$   (  D$    "A      HHL$  D$    0D$E1HLD$         D$"A3      HHL$`  D$    B0D$E1HLD$   3   `  D$D"1H<X  B           Ht)A3  HL$   H߾  Dd$/D$t1HT4f     H]     H'41H<E1ɹ   HLD$3     D$  v!E1ɹ   HLD$     D$  O!HVH?1H\1HH{      HA3     HL$  D$    .A   H߹   LD$3     d$   HA3     HL$T  D$    t.D$HA   LD$   3   T  D$s E1H߹   LD$3   @  D$K  L HA3      HL$4  D$    -l$HA  HL$   h  D$    -H߹   f|$ LD$3   I4  E1Ɂ  l$HA3      HL$  D$    r-D$E1HLD$   3     D$tHbHA3     HL$  D$    -A   H߹   LD$3     d$  HA3     HL$  D$    ,l$HA3  HL$     D$    ,  Hf
 D$A      LD$3     El$A   HL$   H߾  D$    6,E1ɾ  HLD$      d$  o?  HBZfxTHu5ǃ  :  H߾   7H{¾   H߁  l2H辎¾  H߁  lH߾h  YH߾h    lH߾f  Yf  H߉  l    @     AWAVAUATUSHHL  @t$eH%(   HD$@1M	  I 	  H  IiHHt
L$    L$I9@   E1LL$A@   D$   $@   fDl$4Hl$HD$LPAMՃR      <  D\$Et0f|$4 
  t$41HmT$1H߃oAE$HD$Lc$L;wHl$H  HtH    Lm     fJ  LH      HH     LHH    HD$@eH+%(   	  H  HHHH    []H0A\A]A^A_    
  vG3AAjEr
HfDJ   mfD9"  D  D$      Dd$EAfDJ  Aj8t)ARArH$ktAUAuH
kAUAm6  H)DAU
it+KD=UOt= H,PA8  HIiL9uAE9t;MuIlAVA6HIjL9uA}9 tAE4fj  D  Aj<Af(  HL$<E1     HHL$ D$<    'D$<A:E>  D  6  Hߺ  fJ  h8  HUfA;E
  D  Ml$AT$Aj   HEr
fl$4艃DHtj AHfDJ  EeAUDLiAUAuH:iAEEuHAU
6  A)HA&hEt&ELEIU 8  HH hI9uAUAuHhAEt1AmMMtED)AW Bt= HIhM9uAUDHhD  |$HfJ  AjnTAUf4    f  fAE
DHD:gD  HD$<HD$ AH߉ƉD$0X  u
fEB  AUAMHAu
DL$0)MD    AEAu3   f  DL$0LD$ t$<H   AUE}fN  MuLl$(MdUfl$6ELL|$ MDd$0F3       DT$<EM   HHAL9  DU fuD3   H  IM(H    H    Hp0    \D$   HE}AmDD覀/Dd$ Mt- 1A)E7  A   A3   HL$<HE9     l$<EF%$D$<E1HLD$<   3   E)D  D$<$AuE1MD   H	D   HA  l$<IE1HL$<h  #D$>A      LD$<   h  H߃D$<A  HL$<   H߾h  l$<]#D$>AA  uH  H    Dd$ Hx0    
  AƉH߉D$@eD  Ll$(l$6AEf  f   f    MH  IM?H    H    Hp0    bH  H    H    Hp0    D$    7H  H    H    Hp0    H  L$H    H    Hp0    AE>   ft
ɃLD$ E1ɹ   H߉D$<!Au3   ft    DL$0LD$ t$<H   H  IM:H    H    Hp0    @H  EH    H    Hp0    HD$@eH+%(     HH[]A\A]A^A_    ffA3E
Dd$ 1HfJ  D.}  HdfA;E
    fH  IMH    H    Hp0    yfEH    H    H    HEH  H    Hp0    @HL$ A     H߾  D$<    Z D$>L|$ HA      3     D$<   MRM   HA        D$<   *4fA#E
AU
!AU6Ha^    ff.         USHHeH%(   HD$1X  P   ~  <
        `  HM  H߉ŀ`  H߁  l`    HZ`    HH`N  H;MN  H߉  #`F  HMF  H߉  _A   HL$   H߾  D$    D$     1H0#f"  1H,   HL  1H|y1H}   H"f  A3  HL$   H߾L  D$    D$A      LD$3   L  H߃@D$X  <ti<   <

  $  HK$  H߃^      Hy  HD$eH+%(     H[]    F  HKF  H߉  ʐ|^0  HoK0  H߉  W^Hߺ  |  E^Hߺv  ~  3^Hߺ  |  !^Hߺ6  ~  ^Q  H߾|  ]H߾~  JH߾~  Ѐ]H߾   JH߾     Π]H߾F  JH߾F    ]Hߺ$  D  q^Hߺ$  J  _^Hߺ$  P  M^Hߺ$  V  ;^Hߺ$  \  )^Hߺ$  b  ^Hߺ$  h  ^Hߺ$  n  ]Hߺ$  t  ]$  H߾z  ]H߾  I  H߉  Π\A  HL$   H߾  D$    PD$A      LD$     H߃D$O
B  HRIB  H߉  :\  0  Hf%f  I0  H߉  \1   H߀  v  HH+6  [8  H@H  H߉f%f @D\  (  H߃	舃  H(  H߉  r[  HeH  H߉  P[  π   H     HufJ   t6A   LD$   Hߺ3   l  D$    fJ  A3  HL$Hߺ     D$    T$H߾  Z     H
& H߾   H߾f  zGH߾f    eZH߾h  XGh  H߉  CZ	|6%  E1LD$H߹        D$
=¾   H߁  YW  HF  H߃Y  H0\  HЀZڬ  HFڬ  Hf
 Yެ  HFެ  Hf
 kY    HYY  F  HGY  P  H5Y@  <  H#Y
  N  HY  Ƭ  HXӠ  Ȭ  HX     HX`  |  HX  ~  HXb  |  HX  ~  HXd  |  HX  ~  HoXf  |  H]X}  ~  HKXh  |  H9X}  ~  H'Xj  |  HX}  ~  HX  |  HW	  ~  HWր  |  HW(  ~  HW  |  HW(  ~  HW  |  HWw`  ~  HsW    HaW  |  HOW   ~  H=W  |  H+W(  ~  HW  |  HW   ~  HV  |  HV   ~  HV  |  HV   ~  HV  |  HV   ~  HV  |  HwV   ~  HeVď  |  HSV   ~  HAVƏ  |  H/V   ~  HVȏ  |  HV   ~  HUʏ  |  HU   ~  HȔ  |  HU   ~  HUΏ  |  HU   ~  HUЏ  |  H{U   ~  HiUҏ  |  HWU   ~  HEUԏ  |  H3U   ~  H!U֏  |  HU   ~  HT؏  |  HT   ~  HTA      HHL$P  D$    tD$A      LD$D   P  H߃D$p=  |  HnT9  ~  H\TO  |  HJTy  ~  H8T  |  H&T1  ~  HTL  HAL  H߃Sʼ  H@ʼ  H߀SA  |  HS2  ~  HSS  |  HSr  ~  HS)  |  HzS  ~  HhS2  H[@2  H߉  FS  l  H$T  p  HT  t  H T  x  HS  |  HS     HS    HS   J  HR3  |  HR|  ~  HR7  |  HR|  ~  HnR;  |  H\R2  ~  HJR?  |  H8R|  ~  H&RC  |  HR|  ~  HRG  |  HQ|  ~  HQE  |  HQ7  ~  HQW  |  HQw  ~  HQi  |  HQ

  ~  HrQ{  |  H`Q
  ~  HNQ  HS  HЀPR  HS  HЀPQ  ڀ  HQ܀  H_S܀  HЀQ    HQ     HQ  HS  HЀlQ	    HvQ  HR  HЀΟVQ  ǀ  HDQ  ݀  H2Q߀  HR߀  HЀQ   ˀ  H Q΀  HsR΀  HЀlP	  ɀ  HPр  HARр  HЀ΀P
     HP    HPs`    HxP     HfP  HQ  HЀFP      H4j|H߾  /<H߾    OH߾  
<H߾  NHߺ>    N1H߾  NHߺ@    NHߺ    NHߺB    NHߺ    NHߺD    NHߺ	    pNHߺF    ^NHߺ    LNHߺH    :NHߺ    (NHߺJ    N  H߾  NH߾  :H߾  M   1HhH߾j  :H߾j  MH߾  :H߾  MHߺ
    MHߺ A    qMHߺh    _MHߺY    MM<  H߾L  ;MH߾  .:H߾    MH߾}  |O}  H߀M   Hjp    fD      S1HHeH%(   HD$1f1Hj1HX    0  H~90  Hf
 jLB  H]9B  HKL0  H>90  H߃+L    H	MA3     HHL$L  D$    
D$A      LD$3   L  H߃@D$    HL     HL    H}L   un   Hge  Hj8  H߀WKX    v
   H HD$eH+%(   u@H[       H	iH߾2  72  H߉  JU    ff.         S1H@  Hh  H߾   JH߾  7  H߀J   [    ff.          UA        SHHeH%(   HD$1HL$D$    D$     1Hc1HgE1ɾ  HLD$      D$  1H<
fP  fF  1H.Hk  1ҾE  HJ"  M  HrJ"   ]  H`J  HK  Hf
 ?J    HK  H߀J,  H6,  H߃IA      HLD$      D$  }A     HHL$   D$    yl$   HA3  HL$   D$    O	D$   		ftҾ  H]H&  HP5f%?  A3  HL$   H߾L  D$    D$3   H߾L  A   LD$   @D$      Hb        H߾   aH߾  4  H߀G   HD$eH+%(     H[]       H   HX4   H߉  CGHHߺD$  E  HHߺD$  M  HD$  ]  HG%  E1LD$H߹        D$   HdH߾0  3H߾0  f
 F  H߾B  3H߾B  hvF1H߾  f  ^FHߺP     LF   1H߀  &a[1Ҹ $ HD$    A   HL$   @  %  D$E1HLD$      @  % 	D$|    ff.     f    SHB  [    D      AWA        AVAUATUSHHeH%(   HD$1HL$D$    D$   I  1Hf  1H1H_1Hc   Hjfh
  A3  HL$   H߾L  D$    D$A      LD$3   L  H߃@D$X  <  <d    Hv1  Hf
bD2  HU12  H߉  =D  H01  H߉  D  H1  H߉  C@  H0@  H߉  DC  H0  H߉  C  H0  H߉  C^  H0^  H߉  hC   L  HVC  \  HDC  H70  H߉  0CW  |  H
C~  H 0~  HЀBY  |  HB~  H/~  HЀB  |  HBS  ~  HB  |  HBS  ~  HsBA      HLD$3   X  D$V   9A     HHL$P  D$     D$A      LD$   P  H߃D$  W  HBCx    HB      H\  HD$eH+%(   	  H[]A\A]A^A_    @  H.@  H߉   ʄiAN  H\.N  H߃IA  H<.  H߉   $A2  H.2  H߉  @  H-  H߉  @  H-  H߉  p@  H-  H߀@  H-  Hf
w@  Hj-  Hf
V@  HB  HЀ&A  HB  H߉  A  HtB  HЀ@  HTB  HЀ0@  H4B  HЀΥ@  HB  HЀP@  HA  HЀ3a@   HA   HЀpA@  HA  HЀ!@  HA  HЀe@܀  HtA܀  HЀ?߀  HTA߀  H߀?  H4A  H߉  ?  H+  H߉  8>    Hh?UU  4  Hf>
  HY+
  H߉  
A>,  H4+,  H߉  >  6  HH+
>8  H*@  H߉f%f @D>  (  H߃	舃  *(  H߉  =  H*  H߉  =  π      H߾   QWH߾  T*H߾  A=     H oH߾   H߾h  
*h  H߉  <%  E1LD$H߹        D$   HZCA  HL$   H߾  D$    LD$   A   LD$     H߃D$KB  HN)B  H߉  6<  0  Hf%f  )0  H߉  ;1Ҿ  H߀  ;     H;   1H߀  Vh  H(h  H߀ ;  H>  H߉  o<L  Hr(L  HЀ_;T  HR(T  H߉  =;ԥ  H0(ԥ  H߃ ;N  H(N  H߉  :j  H'j  H߉  :A      HHL$@  D$    tD$ u,H߾$  '$  H߃:ih  Ht'tH߾h  c'H߾h  AǉAAEADE8:H߾j  +'DH߾h  A:H߾j  'DH߾h  A9DDHf% fj  fA	fA E	9DAH߾h  A	9EAH߾j  9DH߾h  9H߾j  y&H߾h  Ag9H߾j  Z&DH߾h  AG9DDHf%f j  fA 	fA9H߾h  9E	H߾j  A8H߾Z  %H߾\  %H߾Z  Aĉff%	DfAf% 	8Hff \  D		8H߾  r%H߾  c%H߾  Aĉff%	Df% 	38  HffAD	f 	8U    ff.     f    ATUSHeH%(   HD$Ht!HD$eH+%(   H  H[]A\    E1LD$   H?     E1  HD$    m       Hu.t)A3  HL$   H߾  Dd$D$t1HX  <     H$     Hm1HcX  <  <m  <?  E1HL$   H߾d  D$    rD$E1HLD$   D   d  D$qA3      HHL$<  D$    E1ɹ   HLD$3   <  d$  %A     HHL$  D$    A      HLD$     d$  X    > uHCx%    > E1LD$   HߺD     D$A3      HHL$$  D$    <D$E1HLD$   3   $  %  ̡D$=E1ɹ   HLD$3     D$   H1HWA     HHL$  D$    A      HLD$     d$  E1ɹ   HLD$?     HD$H{    A      HHL$  D$    /D$A      LD$D     H߃D$+A      HHL$  D$    A      HLD$     d$   A      HHL$  D$    D$   HLD$  $oH  EE1ɺ   D${HHC@t%L   ǃ   }¾   H߁  63'    H3HA3   HL$   (  D$    D$E1HLD$   3   (  %  D$E1Hߺ   HL$  D$    eD$E1HLD$   D     D$dHA   HL$     D$    
A   H߹   LD$     d$   E1Hߺ   HL$d  D$    l$HA3   HL$     D$          @f|$ HDLD$E1ɺ   d  D$E1HHL$   d  D$    3l$HA3   HL$     D$    
      @f|$ HDLD$E1ɺ   d  D$1HHA3     HL$  D$    l$HA3  HL$     D$    w  Hf
 D$A      LD$3     DŃD$g    ff.     f    ATUSHeH%(   HD$Ht!HD$eH+%(   Z  H[]A\    1HE1         Hu.t)A3  HL$   H߾  Dd$D$t1H0   H     H
1HE1ɹ   HLD$3     D$  \H1HT1H1HRA3     HHL$  D$    l$A3  HHL$     D$      Hf
 D$A      LD$3     El$H{9      A     HHL$  D$    @D$A      LD$     Hf
 D$>A3     HHL$  D$    A      HLD$3     d$  X  	   A   HL$   H߾  D$    E1ɹ   HLD$     d$  oHǃ  :  M¾   H߁  v-H߾   4H{A   HL$   H߾   D$    D$ 9HA3  HL$   L  D$    D$A      LD$3   L  H߃D$    1    H            H  H    H0        H  H    H0        H  H    H0        H  H    H0        H  H    H0        H  H    H0        H  H    H0        H  H    H0        H  H    H0        PH    H<$    H<$H   Z    SH   H            H        H0H        1    H0H        H0H        H0H        H    H        DH    L        H|$ H            IH            H            H  DHH            H    L        H    L               1	  Hڿ    ƃ   H5    HX          H0H            H8H    Hx0        H8H    Hx0        H8H    Hx0        H8H    Hx0    AGHM     Hz0H        H8Hz0H            Hz0H        H8H0H            H8H    Hx0    Ht$L        H8H    Hx0        Hy0H        H8Hy0H            Hy0H        H8Hy0H            H0H            H0H            Hy0H        H8wH8H    Hx0        H0H            H0H            Hz0H        H8Hz0H            Hz0H        H8H8H    Hx0        H8H    Hx0        H8H    Hx0        H8H    Hx0        H8H    Hx0        H8H    Hx0        H8Hx0H            M    H8H    Hx0        H8H    Hx0        H0H            H0H            H8H    Hx0        H0H            H0H            H8H    Hx0        H8H    Hx0        Hz0H            Hz0H            Hy0H        H8Hy0H            Hy0H        H8Hy0H        H8Hy0H        H8Hy0H        H8Hy0H        H8kHy0H        H8OHy0H        H83Hy0H        H8Hy0H            Hy0H            H    L        H  H    Hx0    11H        H    L        DH    L        I$  [H    ]A\    I$  H            I$  [H    ]A\    I$  H            H  H            H  AHH    L$    H<$        H  LH    D$L$    H<$    D$    H    L$    $    H  H    L$    H<$        LH    L        LH    L        H  HL$*H    L$    H<$        H    L        H    L    H߉$    $    H    L          H    H    H߉$    $    H    LD$    L    H<$    H
  L$Ht$H    $H@  Hud1I$   TH    L        H    L    	H    L    H    L    H w$    1ҋ$H@  zH    H        H        H  H    Hx0            SH    H        Åu,H    H    H        ÅtH        [    H        H                     ,trtl8152_get_version                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Unknown version 0x%04x
 Detected version 0x%04x
 r8152 Invalid rx copy break value
 fw_offset too small
 invalid fw_offset
 invalid block length
 invalid break point number
 unused bp%u is not zero
 Tx timeout
 v1.12.13 usb-%s-%s invalid pre_num %d
 invalid bp_num %d
 Promiscuous mode enabled
 Tx status %d
 drivers/net/usb/r8152.c include/linux/if_vlan.h failed tx_urb %d
 carrier on
 carrier off
 skip request firmware
 file too small
 sha256 digestsize incorrect (%u)
 checksum fail
 check PLA firmware failed
 check USB firmware failed
 check PHY_START fail
 Invalid length for PHY_START
 Check PHY_STOP fail
 Invalid length for PHY_STOP
 check PHY_NC fail
 multiple PHY NC encountered
 check PHY NC firmware failed
 PHY_UNION_NC out of order
 check PHY_UNION_NC failed
 PHY_UNION_NC1 out of order
 multiple PHY NC1 encountered
 check PHY_UNION_NC1 failed
 PHY_UNION_NC2 out of order
 multiple PHY NC2 encountered
 check PHY_UNION_NC2 failed
 PHY_UNION_UC2 out of order
 multiple PHY UC2 encountered
 check PHY_UNION_UC2 failed
 PHY_UNION_UC out of order
 multiple PHY UC encountered
 check PHY_UNION_UC failed
 invalid phy fixup
 check PHY fixup failed
 check PHY speed up failed
 invalid phy ver addr
 check PHY version failed
 Unknown type %u is found
 without PHY_STOP
 intr_urb submit failed: %d
 PHY patch request fail
 maybe reset is needed?
 Rx status %d
 intr status -EOVERFLOW
 intr status %d
 wol setting is changed
 \MACA \_SB.AMAC _AUXMAC_# Using pass-thru MAC addr %pM
 Get ether addr fail
 Invalid ether addr %pM
 Random ether addr %pM
 Invalid Rx endpoint address
 Invalid Tx endpoint address
 Out of memory
 Unknown Device
 rtl_nic/rtl8153a-2.fw rtl_nic/rtl8153a-3.fw rtl_nic/rtl8153a-4.fw rtl_nic/rtl8153b-2.fw rtl_nic/rtl8156a-2.fw rtl_nic/rtl8156b-2.fw rtl_nic/rtl8153c-1.fw &tp->control 000001000000 000002000000 couldn't register the device
 %s
 linking down
 PLA USB successfully applied %s
 PHY firmware version %x
 applied ocp %x %x
 ram code speedup mode fail
 load %s successfully
 r8152-cfgselector        invalid register to load firmware
      invalid base address register
  invalid enabled mask register
  invalid start register of break point
  Failed to set configuration %d
 Invalid transport offset 0x%x for TSO
  Invalid transport offset 0x%x
  Couldn't submit rx[%p], ret = %d
       multiple PLA firmware encountered       multiple USB firmware encountered       invalid patch mode enabled register
    invalid register to switch the mode
    multiple PHY_UNION_NC encountered
      check RTL_FW_PHY_UNION_MISC failed
     multiple PHY firmware encountered       Invalid order to set PHY version
       multiple PHY version encountered        unable to load firmware patch %s (%ld)
 Stop submitting intr, status %d
        can't resubmit intr, status %d
 No efuse for RTL8153-AD MAC pass through
       Invalid variant for MAC pass through
   Invalid buffer for pass-thru MAC addr: (%d, %d)
        Invalid header when reading pass-thru MAC addr
 Invalid MAC for pass-thru MAC addr: %d, %pM
    Expected endpoints are not found
       Invalid interrupt endpoint address
     Dell TB16 Dock, disable RX aggregation  %s firmware has been the newest
        PHY firmware has been the newest
       ram code speedup mode timeout
                                                                                                                                                                                                                                                                                                          rtl_ram_code_speed_up           rtl8152_fw_phy_fixup            rtl8152_fw_phy_union_apply      rtl8152_fw_phy_ver              rtl8152_fw_phy_nc_apply         rtl8152_fw_mac_apply    strnlen vendor_mac_passthru_addr_read   rtl8152_get_version              P                           S                           R                           S                           U                           V                           ^                           ^                           ^'	                           ^^                                                      O0                           T0                           b0                           i0                           0                           0                           r                           r                           r                           r                                                      A                            U		                           W#                                                       <A                           v                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         tx_packets                      rx_packets                      tx_errors                       rx_errors                       rx_missed                       align_errors                    tx_single_collisions            tx_multi_collisions             rx_unicast                      rx_broadcast                    rx_multicast                    tx_aborted                      tx_underrun                     version=v1.12.13 license=GPL description=Realtek RTL8152/RTL8153 Based USB Ethernet Adapters author=Realtek linux nic maintainers <nic_swsd@realtek.com> firmware=rtl_nic/rtl8156b-2.fw firmware=rtl_nic/rtl8156a-2.fw firmware=rtl_nic/rtl8153c-1.fw firmware=rtl_nic/rtl8153b-2.fw firmware=rtl_nic/rtl8153a-4.fw firmware=rtl_nic/rtl8153a-3.fw firmware=rtl_nic/rtl8153a-2.fw srcversion=5CD1B3984DF0092A24C0474 alias=usb:v0B05p1976d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v413CpB097d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v2001pB301d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v2357p0601d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0955p09FFd*dc*dsc*dp*ic*isc*ip*in* alias=usb:v13B1p0041d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFpA387d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp721Ed*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp7214d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp720Cd*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp7205d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp3098d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp3082d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp3069d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp3062d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp3054d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v17EFp304Fd*dc*dsc*dp*ic*isc*ip*in* alias=usb:v04E8pA101d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v045Ep0C5Ed*dc*dsc*dp*ic*isc*ip*in* alias=usb:v045Ep0927d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v045Ep07C6d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v045Ep07ABd*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8156d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8155d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8153d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8152d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8053d*dc*dsc*dp*ic*isc*ip*in* alias=usb:v0BDAp8050d*dc*dsc*dp*ic*isc*ip*in* depends=usbcore,mii retpoline=Y intree=Y name=r8152 vermagic=6.1.0-41-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       (  0  8                                                                                                   (    0  8  @  H  P  X  @  8  0  (                     @                         (  0  8  @  H  0  (                   0                       (                 (      (                       (                 (                                      (                 (                                           (                 (                                                                                                                          (    0  8  @  8  0  (                     @  8  0  (                     @                     0               0                         (  0  @  0  (                   @                                                                                                   (    0  8  @  8  0  (                     @                                                                                               (    0  8  X  8  0  (                     X                     h               h                     0               0                (          (                       (  8  (                 8                                                             (    0  8  @  8  0  (                     @  8  0  (                                                                                                                                                                                                                               (          (                (          (                (          (                (          (                                                                               (  0  (                   0                   (  0  H  0  (                   H                       (                 (                     0               0                       (                 (                                                               (          (                         (    0  8  @  8  0  (                     @                         (    0  8    8  0  (                                                                                                                                                                                   (          (                          (          (                                                (          (                     0               0                                 (                                        (    0  8  0  (                     8  0  (                     8  0  (                     8                                                         (  0  (                   0                (          (                                                (          (          (                         (  0  (                   0                         (  0  @  0  (                   @  0  (                   @                     0               0                         (    0  8  0  (                     8                                                                           (  0  (                   0  (                   0                (          (                       (  8  (                 8                     0               0                                                                                                                                  (                                      (  8  (                 8                         (    0  8  0  (                     8                                                                      (  0  (                   0                         (    0  8    8  0  (                       8  0  (                                              (    0  8  P  8  0  (                     P                         (  0  (                   0                     0               0                       (  8  (                 8                         (    0  8  H  8  0  (                     H                                                                                                       (    0  8  @  8  0  (                     @  8  0  (                     @  8  0  (                     @  8  0  (                     @  8  0  (                                        0               0                                                                                                                                (  8  (                 8  (                 8                                                              (          (                                                                                (          (                                                                                             (            (                                                                                                           0               0               0                                                                                                                                                                              (          (                (          (          (                         (    0  8    8  0  (                                            (  8  (                 8                                                                                                   (  0  @  0  (                   @                                                                                             (            (            (                  (          (          (                                                                                                      (    0  8  p  8  0  (                     p                     8               8                     8               8                         (    0  8  h  8  0  (                     h                (          (          (                (          (          (                     0               0                     0               0                     0               0                                                                                       (  0  @  0  (                   @                     0               0                         (    0  8    8  0  (                       8  0  (                                     (          (                                                                  (          (                                           (    0  8  H  8  0  (                     H                     8               8                     0               0           (                    X  @    @  @    P  8  @                               (  p  h  0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       m    __fentry__                                              9[    __x86_return_thunk                                      
    kmalloc_caches                                          R    kmalloc_trace                                           g*:    usb_control_msg                                         z    kfree                                                   K    _dev_info                                               `mEz    __dynamic_dev_dbg                                       g`    usb_register_device_driver                                  usb_register_driver                                     -     usb_deregister_device_driver                            E:#    __kmalloc                                               A̴f    kmemdup                                                 KM    mutex_lock                                              st    napi_disable                                            B    napi_enable                                             82    mutex_unlock                                            o    netdev_err                                              +G
    usb_autopm_get_interface                                pHe    __x86_indirect_thunk_rax                                j]Ԋ    usb_autopm_put_interface                                &<    _dev_err                                                %    mii_nway_restart                                        w    usb_queue_reset_device                                  k>    netdev_warn                                             D    usb_set_configuration                                   ?J    usb_deregister                                          9d    strscpy                                                 nJne    snprintf                                                    strnlen                                                     fortify_panic                                            ]    usleep_range_state                                      V
    __stack_chk_fail                                        'k    dev_addr_mod                                            6    _raw_spin_lock_bh                                       !`    _raw_spin_unlock_bh                                     s    consume_skb                                             讀    kmalloc_node_trace                                          alloc_pages                                             le    vmemmap_base                                            ^|    page_offset_base                                        d    usb_alloc_urb                                           4    _raw_spin_lock_irqsave                                  h    __list_add_valid                                        p\    _raw_spin_unlock_irqrestore                             
:    __free_pages                                            Ɖ    unregister_netdev                                       Nǣ    tasklet_kill                                            J    cancel_delayed_work_sync                                    release_firmware                                        9,D    free_netdev                                             Ӆ3-    system_wq                                               m    queue_delayed_work_on                                   P    jiffies                                                     netif_tx_wake_queue                                     [;i    crc32_le                                                x    byte_rev_table                                          >"    netdev_notice                                               msleep                                                      skb_clone_tx_timestamp                                  y_    skb_queue_tail                                          o6n    ktime_get_mono_fast_ns                                  8B?    skb_tstamp_tx                                           *    __tasklet_schedule                                      Q    usb_autopm_put_interface_async                          ;    net_ratelimit                                           l5    tasklet_unlock_wait                                     (I    usb_kill_urb                                            UrS    __list_del_entry_valid                                  $    usb_free_urb                                            o    hugetlb_optimize_vmemmap_key                            "X    devmap_managed_key                                      R    __put_devmap_managed_page_refs                          gf    __folio_put                                             lv    unregister_pm_notifier                                  d    _raw_spin_lock                                          4K    _raw_spin_unlock                                        ԧ    __skb_gso_segment                                       :u    netif_tx_lock                                           zĜ    netif_tx_unlock                                             usb_autopm_get_interface_async                          #<    usb_submit_urb                                          H    skb_copy_bits                                           !    __dev_kfree_skb_any                                     0|    csum_ipv6_magic                                         Λ    pskb_expand_head                                        {Z    skb_checksum_help                                       `    netif_device_detach                                     G     napi_schedule_prep                                      4    __napi_schedule                                         :    device_set_wakeup_enable                                Ӟ    mutex_trylock                                           R    netif_carrier_on                                            netif_carrier_off                                       3-    netdev_info                                             j[    request_firmware                                        rč    crypto_alloc_shash                                      $'    crypto_shash_digest                                     m    crypto_destroy_tfm                                      3
    _dev_warn                                               J    system_long_wq                                          X,    work_busy                                               'H    kmalloc_large_node                                      
Ĝ    register_pm_notifier                                        capable                                                 ۓ    napi_gro_receive                                        Q    napi_complete_done                                      2	    __napi_alloc_skb                                        8߬i    memcpy                                                      skb_put                                                 g    eth_type_trans                                          H    skb_add_rx_frag                                         cI    mii_ethtool_get_link_ksettings                          PS    eth_platform_get_mac_address                            	7A    get_random_bytes                                        k-    acpi_evaluate_object                                    Z    strncmp                                                 uP    hex2bin                                                     __dynamic_netdev_dbg                                        rtnl_lock                                               ]    dev_set_mac_address                                     rn    rtnl_unlock                                             Ǔ    usb_find_common_endpoints                               S    usb_reset_device                                        k'    alloc_etherdev_mqs                                          __mutex_init                                            j    delayed_work_timer_fn                                   9c    init_timer_key                                          <}    tasklet_setup                                           'y    netif_set_tso_max_size                                  J    netif_napi_add_weight                                   =2    register_netdev                                         Z%    strcmp                                                  f    usb_enable_lpm                                          U    netif_device_attach                                     ؤQ    eth_validate_addr                                       
}F    ethtool_op_get_link                                         module_layout                                                   	        	        	        }	        	        a	        a	        	        
	        =	        		        	         	        	        	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          %                                                                                                                                                                                                                    p                                                     P                                                     /                                                     )                                                                                                                                                               d                                                     \                                                                             r8152                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    GCC: (Debian 12.2.0-14+deb12u1) 12.2.0  GCC: (Debian 12.2.0-14+deb12u1) 12.2.0          "   "           
                           
 D      W        {       D        D    0   D 
  0   W                [    @   D    `   D      D      D      :"  (     D #
     E  @        
        (                               E 
      E        {               &E    0   3E    @   >    P   K    X   [    `       h       p       x   U       o ;
            
        
  @E      4  -        `   @   KE      u        WE      cE     V            @   .      	      j      r   @  )    nE    xE     >  @  ږ  (    3?    E    E    @ E    A E    B E    C       
       '                             
        '                
       '             k                 
       '                      
       '          E      V            @         .      j      r   @  ږ  (    E    >    E     E           
K       4                
       4                
        4                
       4                E      F     F    F    -F    <F    LF    [F    jF    zF    F 	   F 
   F 
     F    F    F    F @   F     F    F    F    G    G    G 	     'G     <G    PG    \G    mG    G    G    G    G    G 
  @    C%       C%  @    C%      B%     G A%     G A%     G B%     G B%     G C%  @  H C%    1 B%    H A%    H A%    +H      3H B%      9H B%      ?H B%  @   EH B%  `   KH B%     QH B%     WH      3H B%      9H B%      _H   @     `       h	 `      T F     5   @  '       ۴  k     fH 4  `  ]         lH 4  @    A\     { '   
  T9 (  @
  qH F  
  zH ƈ 
  H `     H `   @  H `     H `   @  H     H     v -  @  Es -  `  s U    H U  @  H      J    	 h     H   @!  H  "  H Ĉ %  H ň %  ڂ ]    (  H K    (  H    @(  H *   `(  I *   (  I *   (  | *   (   *   (  I *    )  "I *    )  m *   @)  /I *   `)  ;I *   )  HI    )  PI    )  YI    )  cI     *  pI     *  ~I *   @* I *   A* I *   B* I &   P*  R &   `*  I &   p*  I    *    $   *  X $   *   $   *          I   8     `       T F     5      ۴  k      %  k   @  I *      *     H   `            @        E     cH     I  @  I    I    I     I  @  	J È   J          
                       
                      
            4                
K                      
             K           H      #J *      *J *     5J *     AJ *     GJ *     QJ *      *   
  ^J *     gJ *     qJ *   
  J *     J *      *     / *     J *     H   H   /         x  @     #     J    J     K                        J      c  B%        B%      J   @   
          #     c"  Ɉ               ǈ        J      J     J    J    K    K    !K    .K    ;K    HK    TK 	   fK 
   sK      K     K    K    K    K        A%        A%     K      K ǈ     K A%  @     A%  P   K A%  `     A%  p   P        K      K ǈ     ۢ ̈ @     B%  `   K      K ǈ      ̈ @   L A%  `     A%  p   L 	  :   K ǈ     K A%  @   K A%  P   L ш `   @  ҈    $L ̈   *L $     2L $     P                  ̈                  ̈       9L   ?   K ǈ     K A%  @   K A%  P   @L A%  `   KL A%  p   WL A%     bL A%     nL A%     2L A%     @  Ԉ      B%    wL A%    L $     P                  A%        L      K ǈ     L A%  @   L A%  P     B%  `   L   (   K ǈ     K A%  @   K A%  P   L A%  `   L A%  p   L A%     L A%     L A%     L A%     L A%       A%     nL A%     2L A%     @  P     P     @  M      M     M    $M    /M    @M    PM    ^M    oM    M    M 	   M 
   M    M    M 
    N    N      N     +N    6N    AN    LN    WN    bN    mN    xN    N 	   N 
   N    N    N 
   N    N    N    N    N      N     O    O                              
ڈ                          
܈                                                 
         ň                        Ȉ        Ո        ǈ        ӈ        ֈ        Ј        ψ        Έ        ͈                                         O       2O    p         
   lH 4  FO           
    { '  `O           
   { '  x    sO           
$   { '  O           
$   lH 4  O           
    l   O     O     O     O           
   T9 (  B       O           
   T9 (  C 4  O           
    T9 (  C 4  P    
       
   T9 (  o.  4  #P 4   v	  /P           
    T9 (  o.  4  #P 4   v	  EP           
   T9 (  [P 4    l   cP           
   T9 (  [P 4    k   wP           
   T9 (  | 4  P 4   v	  P     P     P    e        
   J  (  P 4  P     P           
   l    4  Q     Q     Q     ,Q    +R       
    :"  (  0  4      @Q      ZQ    -R       
   :"  (   4  qQ    #       
   T9 (   4  Q    %       
    T9 (  P  4  Q    '       
    :"  (    *   Q    ) Q            
   :"  (  ۇ 4  Q    ,       
    :"  (  ۇ 4  Q    .       
   { '  R    0 R    0       
   { '  3   )R    3       
   l   9R    5 PR    0 cR    0 uR     R     R     R     R     R     R     R     R           
   T9 (  R    B R    B 	S    I  S      -S            
K   l   =S    H MS    H ]S     jS     uS     S     S     S     S     S     S     S     S           
   l    $   R *   X $    *   S    V T    5 T     $T    5 3T     FT     VT     fT     wT     T     T     T           
    l    K   T    c T    5 T    5 T    5 U    5 )U    5 ?U    5 UU    5 jU    5 U    5 U     U     U     U     U    c U    c V    c       
&   l   :"  &   T &   V    u       
    l   "V K   ,V    w       
K   l   3  CV    y       
    l   XV &   aV &   kV    {       
   l   =  K   %  K   }V    }       
    l   c  &   V     V     V     V    c V    c V    c W    c W    c 8W    c IW    c WW    c       
&   l   R &   eW     vW     W    c W    c       
    l   T *   W           
*   l   W           
   :"  (      W     W    c W    c W     X    5 X     (X     CX    5 RX    5       
    l   R &   ]X     iX    c wX     X           
	     T9 (  X     X    \       
    T9 (  X     X           
    T9 (  X    X     Y           
   l   Y  D X   Y     /Y     :Y    D  FY           
 l   SY X   ZY           
    l   Y  gY           
    T F  sY     Y     Y           
   l   H    Y           
   T9 (    k   Y           
   T9 (    k   Y K   Y           
    T9 (  W    T         Y           
   T9 (  W    T    Z           
&   l     &   Z    É       
    l     &     &   #Z    ŉ .Z    ŉ <Z    É       
   l   -  &     &     k   c  &   IZ    ɉ       
   l     &   -  &     &     k   ZZ    ˉ hZ    ˉ mii_ioctl_data val_in val_out mii_if_info reg_num_mask full_duplex force_media supports_gmii mdio_read mdio_write usb_device_id match_flags bcdDevice_lo bcdDevice_hi usb_dynids usbdrv_wrap for_devices usb_driver pre_reset post_reset drvwrap no_dynamic_id supports_autosuspend disable_hub_initiated_lpm soft_unbind usb_device_driver generic_subclass spd_duplex NWAY_10M_HALF NWAY_10M_FULL NWAY_100M_HALF NWAY_100M_FULL NWAY_1000M_FULL FORCE_10M_HALF FORCE_10M_FULL FORCE_100M_HALF FORCE_100M_FULL FORCE_1000M_FULL NWAY_2500M_FULL rtl_register_content _2500bps _1250bps _500bps _tx_flow _rx_flow _1000bps _100bps _10bps LINK_STATUS FULL_DUP rtl8152_flags RTL8152_INACCESSIBLE RTL8152_SET_RX_MODE WORK_ENABLE RTL8152_LINK_CHG SELECTIVE_SUSPEND PHY_RESET SCHEDULE_TASKLET GREEN_ETHERNET RX_EPROTO tally_counter rx_missed align_errors tx_one_collision tx_multi_collision rx_unicast rx_broadcast tx_aborted tx_underrun rx_desc opts1 opts2 opts3 opts4 opts5 opts6 tx_desc rx_agg r8152 udev intr_urb tx_info rx_info rx_used rx_done tx_free tx_queue rx_queue hw_phy_work mii tx_tl rtl_ops ups_info rtl_fw eee_en intr_interval saved_wolopts msg_enable tx_qlen rx_buf_sz rx_copybreak fc_pause_on fc_pause_off pipe_in pipe_out pipe_intr pipe_ctrl_in pipe_ctrl_out support_2500full lenovo_macpassthru dell_tb_rx_agg_bug ocp_base eee_adv intr_buff tx_agg skb_num unload eee_get eee_set in_nway hw_phy_cfg autosuspend_en change_mtu r_tune _10m_ckdiv _250m_ckdiv aldps lite_mode speed_duplex eee_lite eee_ckdiv eee_plloff_100 eee_plloff_giga eee_cmod_lv ctap_short_off pre_fw post_fw fw_block fw_header rtl8152_fw_flags FW_FLAGS_USB FW_FLAGS_PLA FW_FLAGS_START FW_FLAGS_STOP FW_FLAGS_NC FW_FLAGS_NC1 FW_FLAGS_NC2 FW_FLAGS_UC2 FW_FLAGS_UC FW_FLAGS_SPEED_UP FW_FLAGS_VER rtl8152_fw_fixup_cmd FW_FIXUP_AND FW_FIXUP_OR FW_FIXUP_NOT FW_FIXUP_XOR fw_phy_set fw_phy_speed_up blk_hdr fw_offset fw_reg fw_phy_ver fw_phy_fixup bit_cmd fw_phy_union pre_set bp_en pre_num bp_num fw_mac bp_ba_addr bp_ba_value bp_en_addr bp_en_value bp_start fw_ver_reg fw_ver_data fw_phy_patch_key key_reg key_data fw_phy_nc ba_reg ba_data patch_en_addr patch_en_value mode_reg mode_pre mode_post rtl_fw_type RTL_FW_END RTL_FW_PLA RTL_FW_USB RTL_FW_PHY_START RTL_FW_PHY_STOP RTL_FW_PHY_NC RTL_FW_PHY_FIXUP RTL_FW_PHY_UNION_NC RTL_FW_PHY_UNION_NC1 RTL_FW_PHY_UNION_NC2 RTL_FW_PHY_UNION_UC2 RTL_FW_PHY_UNION_UC RTL_FW_PHY_UNION_MISC RTL_FW_PHY_SPEED_UP RTL_FW_PHY_VER rtl_version RTL_VER_UNKNOWN RTL_VER_01 RTL_VER_02 RTL_VER_03 RTL_VER_04 RTL_VER_05 RTL_VER_06 RTL_VER_07 RTL_VER_08 RTL_VER_09 RTL_TEST_01 RTL_VER_10 RTL_VER_11 RTL_VER_12 RTL_VER_13 RTL_VER_14 RTL_VER_15 RTL_VER_MAX tx_csum_stat TX_CSUM_SUCCESS TX_CSUM_TSO TX_CSUM_NONE rtl8152_driver_exit rtl8152_driver_init rtl8152_cfgselector_probe rtl8152_disconnect rtl8152_probe rtl8152_get_version __rtl_get_hw_ver rtl8153b_unload rtl8153_unload rtl8152_unload rtl8152_change_mtu rtl8152_ioctl rtl8152_set_pauseparam rtl8152_get_pauseparam kernel_ring rtl8152_set_ringparam rtl8152_get_ringparam tunable rtl8152_set_tunable rtl8152_get_tunable kernel_coal rtl8152_set_coalesce rtl8152_get_coalesce rtl8152_nway_reset edata rtl_ethtool_set_eee rtl_ethtool_get_eee r8153_get_eee r8152_set_eee r8152_get_eee rtl8152_get_strings rtl8152_get_ethtool_stats rtl8152_get_sset_count rtl8152_set_link_ksettings rtl8152_get_link_ksettings rtl8152_get_drvinfo rtl8152_set_msglevel rtl8152_get_msglevel rtl8152_set_wol rtl8152_get_wol rtl8152_reset_resume rtl8152_resume rtl8152_suspend rtl8152_runtime_resume rtl8152_post_reset rtl8152_pre_reset r8156b_init r8156_init r8156b_hw_phy_cfg r8156_hw_phy_cfg r8153c_init r8153b_init r8153_init r8152b_init rtl_tally_reset rtl8152_close rtl8152_open rtl_notifier rtl_hw_phy_work_func_t rtl_work_func_t rtl8153_in_nway rtl8152_in_nway rtl8156_down rtl8156_up rtl8156_change_mtu rtl8153c_up rtl8153c_change_mtu rtl8153b_down rtl8153b_up rtl8153_down rtl8153_up rtl8152_down rtl8152_up rtl8152_set_speed rtl8156b_enable rtl8156_disable rtl8156_enable r8156_fc_parameter rtl8153_disable r8153_enter_oob r8153_first_init rtl8153_change_mtu r8153c_hw_phy_cfg r8153b_hw_phy_cfg r8153_hw_phy_cfg r8153_aldps_en r8156a_post_firmware_1 r8153c_post_firmware_1 r8153b_post_firmware_1 r8153b_pre_firmware_1 r8153_post_firmware_3 r8153_post_firmware_2 r8153_pre_firmware_2 r8153_post_firmware_1 r8153_pre_firmware_1 r8156b_wait_loading_flash wait_oob_link_list_ready r8152b_hw_phy_cfg rtl8152_disable rtl_eee_enable r8153_eee_en r8152_eee_en r8152_mmd_read power_cut rtl8152_apply_firmware rtl8152_is_fw_mac_ok key_addr patch_key rtl_patch_key_set rtl_phy_patch_request rtl_clear_bp rtl_reset_bmu r8153_teredo_off rtl8156_runtime_enable rtl8153c_runtime_enable rtl8153b_runtime_enable rtl8153_runtime_enable rtl_runtime_suspend_enable r8153_queue_wake r8153c_ups_en r8153b_ups_en r8153_phy_status r8153b_ups_flags r8153_u2p3en r8153b_u1u2en __rtl_set_wol __rtl_get_wol rtl8152_set_features rtl_rx_vlan_en r8152_power_cut_en rtl_disable rtl8153_enable r8153_set_rx_early_size r8153_set_rx_early_timeout rtl8152_enable rtl_enable rtl_set_ifg rxdy_gated_en rtl_set_eee_plus rtl8152_nic_reset rtl8152_start_xmit rtl8152_features_check _rtl8152_set_rx_mode rtl8152_set_rx_mode txqueue rtl8152_tx_timeout rtl_drop_queued_tx agg r8152_submit_rx r8152_poll bottom_half free_all_mem mflags alloc_rx_agg free_rx_agg intr_callback write_bulk_callback read_bulk_callback determine_ethernet_addr rtl8152_set_mac_address in_resume __rtl8152_set_mac_address write_mii_word read_mii_word sram_read sram_write ocp_reg_write ocp_reg_read generic_ocp_read set_registers get_registers                                                                                                    	                                                                                        $                      *                      .                      
                      r      #       5           .       J           .       _           .       t           .            M      .            {      .                  .                  .                  .            3      .           a      .                 .       1          .       F          .       [          .       p    G      .           u      .                 .                 .                 .           -      .           [      .                 .                 .       -          .       B          .       W    A      .       l    o      .                                    "                                 	                                  <                           	           $                            /                    O                     m                                                            @       2                  $                                                                *         8       ,            S       @   $                [   $              j          O       ~    	                @                                 p                                                                            L           p      M      $                  >                 R    `	             e          "       }    	      p           8                	                    	      Z           P
                 T             
                                   -          f       O    `      S       v                    
                P                @                 P      ]                           P      M                _                        "          4                 h       !    P            6                 P    @            j    P                                                                          4                           !                 "                 `#             !    #             4    $             I     %             Y    %             g    &             t    0'                 '                 (                 p)                 P*                 @+                0-                @.                 0/                 /      O      	          A       	    ;             /	     <      X      ?	    z      -      R	                 g	    `=      `      {	    ?             	    @             	    A             	    B             	    B             	    C             
    C             
    D      $       (
    D      
      ;
    E            O
    F      =      `
     H             m
     I      J       {
    PI      N      
    J            
    K             
    `L      /      
    M            
    0O             
    O      
      
     R                 R                =      (       1    U      /      @    V             U    `W             f    0X      L       u    X      H          Y      E           [                 \                 \      5           ]      }           ]                 P^      k           ^      ]           `                 a                 b            0    d            K     f      	      b    e            ~    o                                                 s                u                 v      Q          
      -           pw      A      
    x      `       "
     y            1
    @z      y       ?
    :      +       W
    |             q
    }      `      
    P      v       
                 
          =      
                 
    p             
                                   )                @                R    `      4      c                o                z          J                                                J          О      .                                  =           P                        \          `      y                J
      
    0                      p       3    e      h       F           s      a                q                     p                 p                                       ?          P      x                         * h      8          * 0      8                        3          Z      F                  _                m    P     b          .                                     `      0          p      ,          `                0                                p                p      U                                
          *                          0    0#           ;    P           L    	      P      _          M      v    '                                         a           P                               *       8          *        8       
   * p       8       %   *       8       >   *        8       V   *       8       n   * P      8          * 8       8          *       8           ;      (                                                 @                  `                                                                    &                  2                   I                  `           @       {    ]       <          &                   (                                                                     $                  <                  T                 l    4                 S                  5                   M                                                                                                                                                                 +                     8                     F                     N                     \                     m                                             ,                                                                                                                                                	                                     *                     1                     7                     V                     h                     {                                                                                                                                                                        
                                          2                     =            S       I                     Z                     b                     o                                                                                                         Y          J                                                                                           !                     5                     E                     d                     l                                                                                                                                                                                                                                                            '                     D                     Q                     b                     q                     z                                                                                                                                                                                                                                                                                 6                     J                     g                     t                                                                                                                                                                                                                  "                     )                     7                     L                     T                     g                     t                     |                                                                                                                                                                                                                                        2                     H                     Z                     k                                                                                                                                                                                                                                                             3                     D                     V                     m                     t                     ~                                                                                 __crc_rtl8152_get_version __UNIQUE_ID_srcversion224 __UNIQUE_ID_alias223 __UNIQUE_ID_alias222 __UNIQUE_ID_alias221 __UNIQUE_ID_alias220 __UNIQUE_ID_alias219 __UNIQUE_ID_alias218 __UNIQUE_ID_alias217 __UNIQUE_ID_alias216 __UNIQUE_ID_alias215 __UNIQUE_ID_alias214 __UNIQUE_ID_alias213 __UNIQUE_ID_alias212 __UNIQUE_ID_alias211 __UNIQUE_ID_alias210 __UNIQUE_ID_alias209 __UNIQUE_ID_alias208 __UNIQUE_ID_alias207 __UNIQUE_ID_alias206 __UNIQUE_ID_alias205 __UNIQUE_ID_alias204 __UNIQUE_ID_alias203 __UNIQUE_ID_alias202 __UNIQUE_ID_alias201 __UNIQUE_ID_alias200 __UNIQUE_ID_alias199 __UNIQUE_ID_alias198 __UNIQUE_ID_alias197 __UNIQUE_ID_alias196 __UNIQUE_ID_depends195 ____versions __UNIQUE_ID_retpoline194 __UNIQUE_ID_intree193 __UNIQUE_ID_name192 __UNIQUE_ID_vermagic191 _note_10 _note_9 __kstrtab_rtl8152_get_version __kstrtabns_rtl8152_get_version __ksymtab_rtl8152_get_version rtl8152_get_msglevel rtl8152_set_msglevel rtl8152_get_sset_count rtl8152_get_coalesce rtl8152_get_tunable rtl8152_get_ringparam __rtl_get_hw_ver __rtl_get_hw_ver.cold __UNIQUE_ID_ddebug679.0 rtl8152_driver_init rtl8152_cfgselector_driver rtl8152_driver rtl8152_get_strings rtl8152_gstrings get_registers set_registers rtl8152_set_tunable rtl8152_set_tunable.cold rtl8152_set_ringparam rtl_ethtool_get_eee rtl_notifier rtl8152_is_fw_mac_ok rtl8152_is_fw_mac_ok.cold rtl_ethtool_set_eee rtl8152_tx_timeout rtl8152_tx_timeout.cold rtl8152_cfgselector_probe rtl8152_cfgselector_probe.cold rtl8152_driver_exit rtl8152_nway_reset rtl8152_get_drvinfo rtl8152_get_drvinfo.cold __func__.80 rtl8152_features_check rtl8152_is_fw_phy_union_ok.isra.0 rtl8152_is_fw_phy_union_ok.isra.0.cold generic_ocp_write.isra.0 rtl_clear_bp __rtl8152_set_mac_address r8153b_pre_firmware_1 r8153b_ups_flags rtl_drop_queued_tx alloc_rx_agg rtl8152_disconnect generic_ocp_read _rtl8152_set_rx_mode _rtl8152_set_rx_mode.cold rtl8152_get_ethtool_stats r8153_pre_firmware_1 wait_oob_link_list_ready r8153_phy_status rtl8152_start_xmit write_bulk_callback write_bulk_callback.cold r8153_post_firmware_1 rtl8152_pre_reset rtl_tally_reset rtl8153_change_mtu r8153_pre_firmware_2 rtl8152_in_nway r8153b_u1u2en r8153_u2p3en rxdy_gated_en rtl_reset_bmu r8156a_post_firmware_1 free_rx_agg free_all_mem rtl_stop_rx.isra.0 rtl8152_close __rtl_get_wol rtl8152_get_wol bottom_half bottom_half.cold r8156_fc_parameter r8152_submit_rx read_bulk_callback r8152_submit_rx.cold rtl_start_rx.isra.0 r8153c_post_firmware_1 r8153_post_firmware_3 r8153b_power_cut_en.constprop.0 rtl8153b_unload r8153_power_cut_en.constprop.0 rtl8153_unload r8152_power_cut_en rtl8152_unload rtl8156_change_mtu rtl8153c_change_mtu r8153_queue_wake ocp_reg_read read_mii_word r8153_get_eee rtl8152_get_pauseparam rtl8153_in_nway rtl8152_set_coalesce rtl_enable r8156_mac_clk_spd.constprop.0 __rtl_set_wol rtl8152_set_wol rtl_work_func_t rtl_work_func_t.cold rtl_rx_vlan_en rtl8152_set_features rtl_set_eee_plus rtl8152_enable rtl8152_change_mtu r8153_teredo_off ocp_reg_write sram_write write_mii_word rtl_patch_key_set sram_read r8152_mmd_read r8152_get_eee r8153_eee_en rtl8152_set_pauseparam rtl8152_set_speed rtl8152_set_link_ksettings rtl_hw_phy_work_func_t rtl_hw_phy_work_func_t.cold rtl8152_open intr_callback rtl8152_open.cold rtl8152_ioctl r8153_aldps_en rtl_phy_patch_request rtl_phy_patch_request.cold r8152_eee_en r8152_mmd_write.constprop.0 rtl_eee_enable r8152_set_eee read_bulk_callback.cold r8156b_wait_loading_flash rtl_runtime_suspend_enable rtl8156_runtime_enable rtl8153_runtime_enable r8153b_ups_en rtl8153b_runtime_enable r8153_set_rx_early_size r8153_set_rx_early_timeout r8153_post_firmware_2 r8153b_post_firmware_1 rtl8152_nic_reset r8153_first_init rtl8153b_up rtl8153_up rtl8152_up rtl8153c_up rtl_disable rtl8156_down rtl8153_disable rtl8152_down rtl8152_disable rtl8156_disable rtl_set_ifg rtl8153_enable r8152_poll r8153c_ups_en rtl8153c_runtime_enable intr_callback.cold rtl8152_get_link_ksettings r8153_enter_oob rtl8153b_down rtl8153_down rtl8156_up rtl8156_up.cold r8156_ups_en.constprop.0 r8152b_init determine_ethernet_addr __UNIQUE_ID_ddebug629.14 __UNIQUE_ID_ddebug631.13 determine_ethernet_addr.cold rtl8152_post_reset set_ethernet_addr.isra.0 rtl8152_probe r8152b_hw_phy_cfg __key.76 rtl8152_netdev_ops r8156b_init rtl8156b_enable r8156b_hw_phy_cfg r8153c_init r8153c_hw_phy_cfg r8156_init rtl8156_enable r8156_hw_phy_cfg r8153b_init r8153b_hw_phy_cfg r8153_init r8153_hw_phy_cfg rtl8152_probe.cold rtl8152_runtime_resume rtl8152_runtime_resume.cold rtl8152_resume rtl8152_reset_resume rtl8152_suspend rtl8152_apply_firmware __UNIQUE_ID_ddebug640.8 __UNIQUE_ID_ddebug646.5 __UNIQUE_ID_ddebug650.3 __UNIQUE_ID_ddebug636.10 __UNIQUE_ID_ddebug648.4 __UNIQUE_ID_ddebug644.6 __UNIQUE_ID_ddebug642.7 __UNIQUE_ID_ddebug652.2 __UNIQUE_ID_ddebug638.9 rtl8152_apply_firmware.cold __func__.87 __func__.86 __func__.85 __func__.84 __func__.83 __func__.82 __func__.74 __func__.73 __UNIQUE_ID_version687 __UNIQUE_ID_license686 __UNIQUE_ID_description685 __UNIQUE_ID_author684 __UNIQUE_ID___addressable_cleanup_module683 __UNIQUE_ID___addressable_init_module682 rtl8152_table __UNIQUE_ID_firmware678 __UNIQUE_ID_firmware677 __UNIQUE_ID_firmware676 __UNIQUE_ID_firmware675 __UNIQUE_ID_firmware674 __UNIQUE_ID_firmware673 __UNIQUE_ID_firmware672 .LC30 .LC32 alloc_etherdev_mqs devmap_managed_key usb_alloc_urb device_set_wakeup_enable usb_autopm_put_interface rtnl_unlock release_firmware usb_free_urb skb_copy_bits skb_put skb_tstamp_tx __napi_alloc_skb ktime_get_mono_fast_ns consume_skb __this_module netif_napi_add_weight snprintf unregister_netdev request_firmware usb_register_driver unregister_pm_notifier cleanup_module skb_add_rx_frag memcpy kfree __put_devmap_managed_page_refs eth_validate_addr usleep_range_state netdev_warn mii_ethtool_get_link_ksettings net_ratelimit _raw_spin_lock_irqsave __dynamic_dev_dbg netif_tx_unlock _raw_spin_lock fortify_panic netdev_err usb_deregister_device_driver __fentry__ init_module pskb_expand_head hex2bin dev_addr_mod crypto_destroy_tfm usb_find_common_endpoints eth_type_trans __x86_indirect_thunk_rax napi_complete_done skb_checksum_help usb_reset_device __stack_chk_fail queue_delayed_work_on _raw_spin_unlock_bh __napi_schedule usb_autopm_get_interface_async strnlen kmalloc_node_trace netif_device_detach __free_pages usb_submit_urb _dev_info napi_gro_receive netif_device_attach capable skb_queue_tail usb_queue_reset_device page_offset_base work_busy hugetlb_optimize_vmemmap_key tasklet_kill __list_add_valid byte_rev_table _dev_err crc32_le mutex_lock usb_register_device_driver napi_enable strncmp usb_control_msg crypto_shash_digest __tasklet_schedule usb_autopm_put_interface_async free_netdev __list_del_entry_valid ethtool_op_get_link eth_platform_get_mac_address __mutex_init usb_deregister _raw_spin_unlock_irqrestore mii_nway_restart netif_tx_wake_queue dev_set_mac_address _dev_warn __x86_return_thunk netif_tx_lock csum_ipv6_magic system_long_wq strcmp mutex_trylock __dynamic_netdev_dbg jiffies kmalloc_large_node vmemmap_base strscpy usb_autopm_get_interface mutex_unlock cancel_delayed_work_sync init_timer_key __dev_kfree_skb_any acpi_evaluate_object alloc_pages kmemdup __folio_put usb_kill_urb netif_carrier_off delayed_work_timer_fn _raw_spin_lock_bh netif_carrier_on usb_set_configuration usb_enable_lpm rtnl_lock get_random_bytes netif_set_tso_max_size kmalloc_trace tasklet_setup napi_schedule_prep napi_disable netdev_notice tasklet_unlock_wait crypto_alloc_shash _raw_spin_unlock __skb_gso_segment skb_clone_tx_timestamp msleep __kmalloc kmalloc_caches netdev_info __mod_usb__rtl8152_table_device_table system_wq                  D            ~            D            ~  !          D  6          ~  A          D  `          ~  n          ~            D            ~            ~            D            ~            D                                              -         n  M         6           ~           ~           ~  c         6  t                    y         [  ~                     D           ~                              	                    >           ~           D           ~              	      
            	                  4      ;         ~  A         D  o                    n  	         6           ~           D             G         n  Q         6  d         ~  q         D           ~           i                      k                      ~                              D  F         ~  _         i  g           x         k                      ~           ~           D                      i           L                      "           ~  !         D  A         "  H         ~  U         ~  a           h         ~  q         D                                 0                   L                   L                   h                          	                                      $                   2                   D         ~  R         ~           D                      i  	         L  	           +	         "  8	         ~  D	         z  a	         D  n	                  z	         `  	         D  	           	            4      	         ~  	         D  
           
         i  %
         z  /
           ;
         "  F
         ~  Q
         D  i
            1       n
           ~
                   
           
                   
         .  
         V  
            P      
           
         ~           D  Z         ~           ~           D              l                  \                  \                                                      s               ~              l               D  
         ~  z
         ~  
         D  D         9           ~  I         Q  Q         D           ~                      i           H  q           }         "           i           H  #           -         Q  A         D  Q         D           ~           Q           D           ~  A         Q  Q         D             #         S  [         +           ~           Q           D             ,                W              4           H         a  Q                     =           e           y           ~           Y           6           D  4         /  @         d  L           `         L  z         $           s           ~           D           ~                      R           D           ~  9         ~  D         ~  Q         D                               e         {           ~           h           f          :         Q  A         D  y                    "  8         ~  =         Q  Q         D           9           ~           Q           D  Q         9  y         ~  ~         Q           D                      ~           Q           D                      _           *  "          ~  1            D          R  M          ~  W          (  x                      q            ~            D  !         =  %!         e  G!         y  S!         r  !         ~  !         <  !                  !         q  !         D  e"         ~  "         Q  "         D  "         ~  "           "           
#           #           "#           9#         i  H#         L  P#           Y#         ~  a#         D  #         ~  #         Q  #         D  $         ~  $         Q  $         D  %         ~  %         Q  !%         D  %         ~  %         Q  %         D  &         ~  &         Q  &         D  #'         ~  ('         Q  1'         D  '         ~  '         Q  '         D  (         ~  (         Q  (         D  c)         ~  h)         Q  q)         D  )         t  )         %  )         6  )         ~  '*         7  6*           Q*         D  r*         =  *         y  *         %  *         6  	+         %   +         6  8+         ~  A+         D  +         =  +         y  !,           N,         =  ,         y  ,         +  
-         ~  -         Q  1-         D  M-         2  `-           z-           -           -           -           -           -         i  -         L  -           .         "  .         ~  A.         D  #/         ~  (/         Q  1/         D  I/           {/         "  /         i  /           /         ~  /         D  -0         ~  0         =  0         t  0         y  1         @  {1           Z2            
      2           X3         +  3           3         ?  3         U  4                   4         Z  24                  L4         =  i4         e  4         y  5         &  P5            6           7         F  
8           :8                  B8         O  a9         &  9         r  9         X  :         @  e:           :         &  :         {  ;         Q  ;         D  ;         ~  ;         Q  <         D  t<            z      <         Z  <         =  <         e  <         y  =                  =           =         T  7=         ~  R=         X  a=         D  =         =  ->         y  >         =  >         e  >         y  >         =  >?         y  a?         ~  j?         =  ?         e  ?         Q  ?         D  @         ~  @         Q  @         D  A         ~  A         Q  A         D  hB         ~  mB         Q  B         D  B         ~  B         D  hC         ~  mC         Q  C         D  C         ~  C         D  D         ~  D         Q  D         D  D         ~  D         D  E         ~  E         Q  E         D  F         ~  F         Q  F         D  H         ~  H         Q  !H         D  H         ~  H         Q  I         D  2I         ~  <I         ~  FI         ~  QI         D  J         ~  J         D  J           J         i  K           K         "  ]K         ~  zK         ~  K         ~  K         D  UL         ~  ZL         Q  aL         D  L           L         i  L           L         "  L         ~  M           2M           AM         L  PM         L  pM         k  |M         {  M         D  N         ~  'O         Q  1O         D  O         ~  O         Q  O         D  Q         !  Q         !  Q         Q  R         D  8R           UR         i  tR           R         "  R         ~  R         D  
S         ~  S           TS         "  jS           S           S         T  S           T         q  nT         L  |T           T           T           T         k  T         {  T            M      T           T         R  U           U           %U           4U         L  <U         k  UU            9      U         {  U         Q  U         D  FV         ~  V         Q  V         D  V           W         i  W            W         "  1W         ~  aW         D  X         ~  &X         Q  1X         D  xX         ~  X         D  X           X         i  X         L  X           Y         "  Y         ~  1Y         ~  ?Y           ]Y           pY           Y         L  Y         L  Y         k  Y         {  Y         D  Z         ~  [         Q  ![         D  [         ~  \         Q  \         D  \         Q  \         D  \         ~  ]         D  +]         ~  ]         D  ;^         ~  @^         Q  Q^         D  ^         ~  ^         D  `         ~  !`         D  `         ~  	a         Q  a         D  -a           Ma         i  a           a         "  a         ~  b         D  Rb         ~  c           c         ~  d         D  e           e         i  e           e         "  e         ~  f         D  Of         ~  ^f           f         i  f                  f                  f         0  f                  f                  f                  g           Dg                  Vg           |g         p  g         6  g                  g         g  g         I  g         $  g         I  h                  "h         }  ,h            a      ?h         L  mh           h         "  h         I  8i            @      Ei            U      Ri            )      _i            )      i                  i                  i                  i                  j                  j                  j                  ,j                  Cj                  Nj                  [j                  j            7      j            7      j            7      j            "      j                  k                  /k            G      Ck            +      k                  k                  k                  k                  k                  k                  k                  k                  k                  l            n      l            n      +l                  Bl            g      jl            R      wl            R      l            R      l            R      l            R      l            R      l            =      l            !      l            @      m            
      m                  .m                  6m                  Am                  Nm            L      vm                  m                  m                  m                  m                  m                  m                  m                  m                  n                  )n                  =n                  Jn                  Wn                  jn                  yn                  n                  n            u      n            u      n            Y      n            @      n            '      n                  n                  n                  n                  	o                  o                  $o                  1o                  Ho            h      io                  }o            c      o         Q  o         I  o                  o         D  p         b  q           :q         6  Lq           hq            q         e  q            q                  q           Ur                  r           r         i  r         L  r           r         Z  	s                  s           s         "  Ts         6  vs         ~  ~s           s         k  s           s         "  s                   s         m  s         X  s         D  t           Vt         "  et         ~  ot         ^  t         i  t           t         i  t           u         D  u         ~  u         9  u         Q  v         D  v         9  4w         ~  Xw            	      ]w         Q  qw         D  x         Q  x         D  !y         D  y         ~  4z         ~  Az         D  z         ~  z         D  {         ~  ({         *  {{         =  {         e  {         y  {           {         R  6|         =  N|         e  u|         y  }|           |         T  |         <  |            6      |         <  |            J      |         X  |         D  V}         ~  }         9  }         Q  }         D  ~         ~  L         Q  Q         D           ~           D           ~           Q           D           ~  ^                    L           Q           D  ^         ~  q         D           ~           Q  !         D           ~           Q  !         D  y         ~  ن         Q           D  8         ~           Q           D  Ŋ         ~  3         9  M         Q  a         D           ~           Q           D  َ         ~           Q           D           ~           Q           D  ɑ         ~             ֕         Q           D           ~  ֙         Q           D  q           Ϛ         9  "         9  x         Q           D  ƞ         Q  ў         D           D  E                     Q           D  .           Q         D           Q           D           ~  X         Q  a         D           9  Х         ~  ե         Q           D  4         ~  ͦ         \  <         =           y           t  J         e           =  ɨ         y  ߨ         M                      T  #         =  Ω         y  t         )           5           '  %         K  S         4           \           =  6         e  o         y           e  \         t           y  +         y           t           y  &         Q  1         D  -         ~             +         L           Q           D           D  ޳                           Z                             ~  C           W         R  f         X  u            a      ~         ~           <              {      ´         X  ݴ                      
         R  !         D  ]           r         i           ;                      "  ܵ         ~           Q           D  :         ~  v         Q           D  d         Q  q         D  k         Q  q         D           ~  J                            Q           D           L  F         ~  K         Q  Q         D           ~                      Q           D           v  ^         ~  k            	                          H              y	                                                              l           G  X         6  s                              T	               6              :	                                 6  0                  7         	   h      <           N            	      V         6  }            (               	   0                          Q              
	               D           ~  7         k  Q         {  b         Z  r           ~         T                      |           #           i           L                      Q           D  w         ~           H           Q           D           N              	                  	               J  #            
      7            
      K            	      _            
      n         P                         
      J            P      U            0X      `                  k                  v                               D                  ^                  @z                   %                  P                 }                                    @               
                                      w  @                   `            R      e                                           f                             /                                                          `                 .             I      9            \               L                      R  I                  ^         -  f         o  n            O
               !              .
               ~               p      +            `      6            О      A            p      L                  W            C      b            PI      m            @z      x            K                  0                  P                  D                                    n                  P                  !      
         !  s                  {                       
                  "                             
                                    $                                                       (      8                  C            `      N            О      Y                  d                  o            C      z            PI                  @z                  K                  p                                   E                                    P                  ?                  p      "                   -            P      8            p      C                  N            C      Y            PI      d            @z      o            K      z                             P                  D                  *                 `                  О                                                      B                  PI      
            @z                  K      #                 .                  9            #      g                  r            P      }                           Q              0#                 `                  О                                    p                  C                  PI                  @z      
            K                  P     #                  .            #      V            	      [            	      a         D           9           ~           Q           D           9           ~           Q           D           ~             :           `         Q  q         D           ~                                 Q           D  0         ~  B         L  V         L  ^           r         k                      Z           T                      L              #               Q  !         D  ;         i  `           k         ~  z         ]           L                      Z                      ~           D           L             &         R  Q         D           i                      ~           X             (           6           B           Q         L  Y         k                      L           b           L             W         k  a         Q  q         D           ~                                 Q           D           L           L           V              7                 C                  V         [  ,            g      3         	          <         >                             g  &            g      -         	   8       6         >  I                  P         	         Y         >  t                  {         	                  >                             	   P               >  H            g      O         	          X         >  p                  w         	                  >           ~              C                  g               	                  >  /            _      6            c      =            `      O         	   p       X         >            Q  1         D  {         ~  F        Q  Q        D          ~  A        Q  Q        D          ~          D          ~  _        Q  q        D          ~          D          ~  #        Q  1#        D  o#        ~  #          &          *        Q  *        D  *        ~  +          w,          Q.        Q                     
             7                 B                     "             T       +          g  0             K      >             i       G          g  L             K      Z             |       c          g  h             K      v                               g               K                   (                 g               K                   H                 g               K                   h                 g               K                                    g               K                         
         g              K                         #         :  4         `  F                   K         g  P            	      W                   \         A  g            i       l         g  s         ~                              g                              g              |                g              
                                               '               :              !                  e               :              24                                   :  
            )7                                  :              )7      /                   4         B  9            =      @                  H           M            S      T            w      \           a            S      n            ,h                          R              ch                  %               g              g                  4               g              g                                 g              g                                  g              g                                 }  )            _i      4            ]      9         g  K            p      P         g  U            g      `            |       e         g  y            
      ~         g              g                                 g           I              g                                 g              g                  |                g                             g              g                  i                g                             g  "            g      -                  2         g  7            g      B                  G         g  L            g      W                    \         g  v                           g              g                  z               g              g                  ^               g              g                                 g                             g              g                  |                g              g      
         g              g                  R      &         g  +            g      9                  B         g  G            g      U            H      ^         g  c            g      q                  z         g              g                                  g              g                                 [              ,h                  g                                 g              g                  B               g              g                  $               g              g                                 g  !            g      /                  8         g  =            g      H                  M         g  R            g      ]                  b         g  g            g      u            B      ~         g              g                                 g              g                  `               g              g                  8               g              g                                  g                             g              g                   h                g                             g  2            p      7         g  K            (       P         g  d                    i         g              |                g              i                g              T                g                             g              g                                 g              g                                 :  	            	s                                  g  ,            v      6            w      =            3      E         :  J            |      T            K      \         :  a            |      s                  {                       Y                             ޳                                 B              q                             ޳                                 :              J                  P               :  	         6  
	                  	                  (	           1	         6  :	            '      A	                  L	         B  T	            7      b	                  k	         :  t	         6  y	                  	                  	           	                  	                  	         B  	            k      	                  	         :  	         6  	                  	            2      	         g  	                  	            ^      	         g  
         s  
                  
            8      "
         [  .
                  5
                   <
            M      G
           O
                  V
            /      b
         g  j
         d  s
           
         L  
            O      
         g  
                  
                  
         g  
                  
         g  
                  
         g           $  *            Q      2           7            j      >                   C         A  Q                  Z         g  _                            D  	          ,                                         j  "             1       )          ,          0                    5          1  B                     G          C  O          ~                                x                                 C             N                    1                     2                                                                                       @                            (                    0                    8                   @                     H                   P             @      X                   `             p      h                   p                   x                                 p                                      `	                   	                   	                   P
                                                                            
                   P                   @                   P                                      P                                                                                             P                   @      (            P      0                  8                  @                  H                   P            !      X            "      `            `#      h            #      p            $      x             %                  %                  &                  0'                  '                  (                  p)                  P*                  @+                  0-                  @.                  0/                  /                  ;                   <                  `=                  ?                   @                  A                  B                  B                   C      (            C      0            D      8            D      @            E      H            F      P             H      X             I      `            PI      h            J      p            K      x            `L                  M                  0O                  O                   R                  R                  U                  V                  `W                  0X                  X                  Y                   [                  \                  \                  ]                  ]                   P^                  ^                   `                  a                   b      (            d      0             f      8            o      @            s      H            u      P            v      X            pw      `            x      h             y      p            @z      x            z                  |                  }                  P                                                                        p                                                                                            `                                                                                                                               О                                            (            P      0                   8            `      @                  H            0      P                  X                  `                   h                  p                  x            p                  p                                    P                                                                                           `                                                       p                                                                         P                  p                                     0                  P                 P                       (            p     0                 8            0#     @            *                   
                                      (                                      .                                                          &                            $             !      (             "      ,             "      0             #      4             )      8             )      <             X-      @             j-      D             -      H             A0      L             9      P             F=      T             M      X             \M      \             vS      `             S      d             S      h             S      l             S      p             T      t             T      x             U      |             @U                   JY                   hY                   Y                   Wc                   r                   r                   s                   {                   |                                      m                   :                                                                                               ;                                                                            
                   b                   v                                                                            	                                       ]                   }                                                                                                                                               .-                 o                  0-                                                                        @               8                       s      (            X      8            `	      `            V      p            P
                  0/                   R                                                         	               u                      @                   `L                                                        J                  a                        (            @      P                                                                            	            p      	                    	            d                                       	                   _                   G#                   -                   @M                   OM                   mT                    3U      $             X      (             Y      ,             Y      0             >h      4             r      8                   <             *      @                   D                   H                   L             A      P             U      T                   X                   \                   `             P      d                   h                   l                   p                   t             
                                                            5                    _                    m                                                                                       $                   (                   ,                   0                   4                   8             :      <                   @             c      D                   H                   L             E      P                   T                   X                   \             G      `             T      d             g      h             C      l             Q      p             7	      t             	      x             E
      |             
                   Y                                                         
                   y
                                                                                                                                                                                              8                   C                                      7                                      x                                      !                    L                                        !                   d"                   "                   X#                   #                   $                   %                   %                   &                  "'                  '                  (                  b)                  )                  7+                  	-                   .      $            "/      (            /      ,            ,0      0            ;      4            6=      8            `?      <            @      @            A      D            gB      H            B      L            gC      P            C      T            ~D      X            D      \            E      `            F      d            H      h            H      l            1I      p            ;I      t            EI      x            J      |            \K                  yK                  K                  TL                  L                  N                  O                  R                  S                  EV                  0W                  X                  wX                  Y                  0Y                  Z                  [                  \                  *]                  :^                  ^                  `                  `                  a                  Qb                  c                  e                  Nf                  us                  dt                  u                  3w                  y                   3z                  z                  {                  U}                  ~                                                                         ]      $                  (                  ,            x      0            7      4            Ċ      8                  <            ؎      @                  D            ȑ      H                  L                  P            ϥ      T            3      X            ,      \                  `            }      d            ۵      h            9      l                  p            E      t                  x            ]      |                              v                                                                                                            /                  j                                                                                          z                                                                                                       n#                 *                 r                  N                                          :                    @                    r                                                                                                            $                    (                    ,                    0                   4                   8                    <             5      @                   D                   H                   L                   P                   T                   X                   \                   `                   d                   h                   l                   p                   t                   x                   |                                                                                                                                                  ?                   @                   G                   L                   Q                   V                   W                   [                   e                                                                                                                                                                                                                                    #                                                                                                                  
                                    6                  @                  F                  Y                  \                  ]                   _      $            a      (            c      ,            h      0            o      4            p      8            }      <                  @                  D                  H                  L                  P                  T                  X                  \                  `                  d                  h                  l                  p            !      t            "      x            #      |            >                  A                  C                  E                  J                                                                                                                                                                                                                                                                                                                                     l                  p                                                                                                                              2	                  3	                  5	                   7	                  <	                  S	                  `	                  ~	                  	                  	                  	                   	      $            	      (            	      ,            	      0            	      4            B
      8            C
      <            E
      @            J
      D            P
      H            V
      L            _
      P            
      T            
      X            
      \            
      `            
      d                  h                  l                  p                  t                  x                  |                                                                                                                        #                  
                  
                  

                  
                  
                  
                  
                  
                  o
                  p
                  q
                  s
                  u
                  w
                  y
                  ~
                  
                  
                  
                  
                  
                  
                                                                                                             M                  P                  W                  Y                  [                  \                  ]                   a      $                  (                  ,                  0                  4                  8                  <                  @            1      D            @      H            L      L            P      P            Y      T                  X                  \                  `                  d                  h                  l                  p            E      t            P      x            V      |            Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #                   8                  =                  C                  H                  P                  W                  Y                  [                   ]      $            ^      (            f      ,            m      0                  4                  8                  <                  @                  D                  H                  L                  P            >      T            @      X            G      \            M      `            Q      d            X      h            3      l            4      p            5      t            7      x            <      |            A                  P                  W                  [                  _                  h                                                                                                                                                                                                      v                  w                  x                  }                                                                                                                                                                                                                                                                                                                                                         !                   &                   K                    L       $            Q       (                   ,                   0                   4                   8                   <                   @                   D                   H                   L                   P                   T            !      X            !      \            !      `            !      d            !      h            !      l            !      p            !      t            !      x            !      |            !                  !                  !                  !                  !                  !                  !                  !                  !                  a"                  d"                  i"                  "                  "                  "                  "                  "                  "                  "                  W#                  X#                  ]#                  `#                  f#                  }#                  #                  #                  #                  #                  #                  #                  $                  $                   $                  $                  $                  $                  $                  $                  %                  %                   %      $            %      (             %      ,            &%      0            B%      4            %      8            %      <            %      @            %      D            %      H            %      L            &      P            &      T            &      X            &      \            &      `            &      d            &      h            &      l            &      p            &      t            &      x             '      |            !'                  "'                  ''                  ,'                  0'                  6'                  D'                  P'                  '                  '                  '                  '                  '                  '                  '                  '                  '                  (                  (                  (                  (                  (                  (                  (                  _)                  b)                  g)                  l)                  p)                  v)                  ~)                  )                  )                   )                  )                  )                  B*                  P*                  W*                  `*                  b*                   c*      $            j*      (            0+      ,            1+      0            3+      4            5+      8            7+      <            <+      @            @+      D            G+      H            I+      L            R+      P            S+      T            T+      X            e+      \            -      `            -      d            -      h            -      l            -      p            	-      t            -      x            #-      |            0-                  7-                  9-                  A-                  B-                  .                  .                  .                  .                  .                  ?.                  @.                  G.                  V.                  \.                  `.                  /                  /                   /                  "/                  '/                  ,/                  0/                  7/                  9/                  :/                  >/                  u/                  v/                  x/                  z/                  /                  /                   /                  /                  /                  /                  /                  /                  /                  ,0                   10      $            4      (            4      ,            9      0            9      4            ;      8            ;      <            ;      @            ;      D            ;      H            ;      L            ;      P            ;      T            ;      X            ;      \             <      `            <      d            	<      h            <      l            
<      p            <      t            <      x            <      |            )=                  -=                  .=                  0=                  2=                  4=                  6=                  ;=                  X=                  `=                  g=                  i=                  k=                  m=                  n=                  o=                  v=                  V?                  W?                  X?                  Z?                  \?                  ^?                  `?                  e?                  ?                  ?                  ?                  @                  @                  @                  @                  @       	            @      	            @      	            A      	            A      	            A      	            A      	            A      	            A       	            A      $	            fB      (	            gB      ,	            lB      0	            qB      4	            B      8	            B      <	            B      @	            B      D	            B      H	            fC      L	            gC      P	            lC      T	            qC      X	            C      \	            C      `	            C      d	            C      h	            C      l	            C      p	            |D      t	            }D      x	            ~D      |	            D      	            D      	            D      	            D      	            D      	            D      	            D      	            D      	            E      	            E      	            E      	            E      	            E      	            E      	            E      	            E      	            F      	            F      	            F      	            F      	            F      	            F      	            F      	             G      	            H      	            H      	            H      	            H      	            H      	             H      	            'H      	            +H      	            .H       
            9H      
            H      
            H      
            H      
            H      
            H      
            H      
             I       
            JI      $
            PI      (
            WI      ,
            aI      0
            bI      4
            fI      8
            J      <
            J      @
            J      D
            J      H
            J      L
            J      P
            J      T
            J      X
            J      \
            J      `
            J      d
            J      h
            SK      l
            TK      p
            VK      t
            XK      x
            ZK      |
            \K      
            aK      
            pK      
            qK      
            sK      
            uK      
            wK      
            yK      
            ~K      
            K      
            K      
            K      
            K      
            K      
            K      
            K      
            K      
            K      
            K      
            K      
            SL      
            TL      
            YL      
            ^L      
            `L      
            gL      
            iL      
            kL      
            oL      
            pL      
            L      
            L      
            L                   L                  L                  L                  M                  M                  M                  M                  M                   N      $            N      (            N      ,            N      0            +O      4            0O      8            6O      <            RO      @            O      D            O      H            O      L            O      P            O      T            O      X            P      \            P      `            Q      d            Q      h            Q      l            Q      p            Q      t            Q      x            Q      |            Q                  Q                   R                  R                  	R                  R                  R                  
R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  R                  S                  S                  S                  S                  
S                  S                  S                  KS                  LS                  MS                  OS                   QS                  SS                  XS                  U                  U                  U                  U                  U                   U      $            AV      (            BV      ,            CV      0            EV      4            JV      8            V      <            V      @            V      D            V      H            V      L            V      P            V      T            V      X            %W      \            (W      `            *W      d            ,W      h            .W      l            0W      p            5W      t            YW      x            `W      |            fW                  }W                  X                  X                  X                  *X                  0X                  =X                  mX                  |X                  X                  X                  X                  X                  X                  X                  	Y                  
Y                  Y                  Y                  Y                  Y                  &Y                  *Y                  ,Y                  .Y                  0Y                  5Y                  Y                  Y                  Y                  Y                  Y       
            Z      
            Z      
            Z      
            Z      
            [      
             [      
            '[      
            ,[       
            6[      $
            9[      (
            ?[      ,
            [      0
            [      4
            [      8
            [      <
            [      @
            \      D
            \      H
            \      L
            \      P
            \      T
            \      X
            %\      \
            \      `
            \      d
            \      h
            \      l
            \      p
            \      t
            \      x
            ]      |
            ]      
            ]      
            ]      
            )]      
            *]      
            /]      
            >]      
            I]      
            N]      
            ]      
            ]      
            ]      
            ]      
            ]      
            ]      
            9^      
            :^      
            ?^      
            D^      
            P^      
            W^      
            ^^      
            b^      
            ^      
            ^      
            ^      
            ^      
            ^      
            ^      
            ^      
            ^      
            ^      
            `                   `                  `                  `                  `                   `                  '`                  4`                  5`                   =`      $            D`      (            `      ,            `      0            `      4            `      8            `      <            `      @            
a      D            a      H            a      L            a      P            a      T            a      X            !a      \            "a      `            a      d            a      h            a      l            a      p            a      t            a      x            a      |            
b                  b                  b                  b                  b                  Nb                  Ob                  Qb                  Vb                  c                  c                  c                  c                  d                  d                  d                  d                  d                  d                  e                  e                  e                  e                  e                  e                  e                  e                   f                  f                  	f                  f                  
f                  f                   f                  f                  Df                  Ef                  Ff                  Hf                  Jf                  Lf                   Nf      $            Sf      (            h      ,            h      0            h      4            h      8            h      <            h      @            h      D            h      H            o      L            o      P            o      T            o      X            o      \            o      `            o      d            o      h            p      l            is      p            ls      t            ms      x            os      |            qs                  ss                  us                  zs                  s                  s                  s                  s                  s                  s                  s                  [t                  ^t                  `t                  bt                  dt                  it                  u                  u                  u                   u                  !u                  (u                  u                  u                  u                  u                  u                  v                  v                  v                  !v                  "v                   %v                  ,v                  -w                  .w                  /w                  1w                  3w                  8w                   aw      $            pw      (            ww      ,            w      0            w      4            w      8            w      <            w      @            w      D            sx      H            x      L            x      P            x      T            x      X            x      \            x      `            x      d            x      h            x      l            x      p            x      t            y      x            y      |            ;y                  y                  y                  y                  y                  y                  y                  y                  y                  y                  y                  .z                  8z                  @z                  z                  z                  z                  z                  z                  z                  z                  z                  z                  {                  {                  {                  {                  {                  {                  {                  #{                  {                  {                   {                  {                  {                  {                  {                  {                  
|                  |                   |      $            |      (            |      ,            |      0            |      4            $|      8            |      <            |      @            |      D            |      H            |      L            |      P            |      T            |      X            |      \            |      `            |      d            |      h            |      l            |      p            |      t            |      x            |      |            |                  }                  	}                  }                  Q}                  R}                  S}                  U}                  Z}                  }                  }                  }                  }                  ~                  ~                  ~                  P                  V                                                                                                                                                                                    2                  ;                  @                                                                                                                               Ā                  ʀ                  ˀ                  Ҁ                                           $                  (                  ,                  0                  4            ݂      8            ނ      <            ߂      @                  D                  H                  L                  P                  T                  X            2      \            7      `            ]      d            b      h            k      l            y      p                  t                  x                  |                               &                  '                  .                                                                                                                               &                  :                  u                  x                  }                  ݆                                                                        4                  7                  <                                                                                                                              Ê                  Ċ                  Ɋ                  Q                  `                   f                  r                                                                                                                                     $            ׎      (            ؎      ,            ݎ      0                  4                  8                  <                  @                  D            Ə      H            ʏ      L                  P                  T                  X                  \                  `                  d            Ǒ      h            ȑ      l            ͑      p                  t                  x                  |            ڕ                                                                                                                              Ǚ                  Й                  ՙ                  ڙ                                                                                                            N                  R                  S                  U                  Z                  n                  o                  p                  r                  w                  |                                                                                                                                                                   Ş                  ʞ                  О                  ֞                                                              $                  (            
      ,            ҡ      0                  4                  8                  <                  @                  D                  H                  L                  P            C      T            M      X            P      \            V      `            r      d                  h                  l                  p                  t                   x                  |                                                                                                                         \                  `                  f                  g                  k                                                                        #                  ȥ                  Υ                  ϥ                  ԥ                  ٥                                                                                                                                                                  &                  *                  +                  -                  /                   1                  3                  8                  *                  0                  7                  D                  J                   K      $            R      (            &      ,            '      0            (      4            *      8            ,      <            1      @                  D                  H                  L            R      P            W      T            {      X                  \                  `                  d                  h            
      l                  p                  t            z      x            {      |            }                                                                                          ƴ                                                       '                  )                  +                  ,                  -                  1                  ѵ                  Ե                  յ                  ׵                  ٵ                  ۵                                                                                                            8                  9                  >                  z                                                                        ;                   D                  I                  ]                  ^                  c                  h                  p                  v                   }      $            B      (            K      ,            P      0            d      4            e      8            j      <            o      @            p      D            v      H            w      L            {      P                  T                  X                  \                  `                  d                  h                  l                  p                  t                  x                  |            *                  *                  +                  0                  D                  E                  J                  O                  P                  V                  Z                                                                                                                                                                                                                                          S                  T                  U                  W                  Y                  [                  ]                  b                                                                                                                                                                                                              $                  (                   ,                  0                  4                  8                  <            r      @            s      D            t      H            v      L            {      P                  T                  X                  \                  `                  d                  h                  l                  p                  t                  x                  |                                                                                                                        _                  `                  f                  g                  k                  Y                  ]                  ^                  c                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               $                  (            d      ,            p      0            w      4            x      8            y      <            }      @                  D                  H                  L                  P                  T                  X                  \                  `                  d                  h                  l            )      p            ,      t            -      x            /      |            4                                                       '                  (                  )                  g                  h                  j                  o                                                                                                                                                ;                  <                  A                  P                  W                  Y                  [                  \                  _                  c                                                                                                                                                 e                  p                  w                  x                  y                  }                                           $                  (                  ,                  0                  4                  8                  <                  @                  D                  H                  L                  P                  T            =      X            H      \            I      `            O      d            Q      h            S      l            U      p            Z      t                  x                  |                                                                                                                        $                  0                  6                  7                  >                  x                  y                  z                                    J                 P                 V                 _                                                   
                 E                 P                 V                                                                                                                                                                                            c                 p                 v                                                                          $                 (                 ,                 0                 4                 8                 <                 @                 D                 H                 L                 P                 T                 X                 \            ##     `            0#     d            7#     h            8#     l            9#     p            =#     t            j#     x            k#     |            l#                 n#                 s#                 *                 *                 *                 *                 *                 *                 *                 *                 *                 *                 +                 U.                                                                                             3                  8                  `                                                                                          =                  e                                    
                  :                  e                  n                   x                  z                                                                                                                                     $            	      (            '      ,            ;      0            c      4                    8                   <            N       @            S       D                    H                                 <+                                       -                                       "8                          $             )8      (                    0             8      4                    <             :      @                    H             :      L                    T             ?      X                    `             &]      d                    l             
      p                    x                   |                                                                                                               >                                                                                                                 	   *                    )                   )                c                       )      $             *      (                   0             ,      4             ',      8          c         @             g      D                   H          c         P             h      T             }      X          c         `                   d                   h          c         p             ܮ      t                   x          c                                         &                	                      l                   s                	   Z                                      ?                	                                         :                	   
                   
                   (                	                       J                   j                	   "                                                      	                                          a                	   B                                                    	   z                                                   	   b                          $                  (         	                                          	                                       1                                                           P                                                       "                         (                              3                     E                        1                                        5                          8             1       @                    H             5      P             g      p             1       x                                 5                   `                   1                                        5                   g                   1                    @                    5                   g                  1                            (            5      0                  P            1       X            `       `            5      h                              1                   `                   5                                    1                                       5                  g                  1                                        5                        0            1       8                   @            5      H            (      h            1       p                   x            5                        8         E          P         3           .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.text.unlikely .rela.init.text .rela.exit.text .rela__ksymtab_gpl __kcrctab_gpl __ksymtab_strings .rela__mcount_loc .rodata.str1.1 .rodata.str1.8 .rela.smp_locks .rela.rodata .modinfo .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela__jump_table .rela.data .rela.exit.data .rela.init.data .rela__dyndbg .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF                                                                                          @       $                              .                     d       <                              ?                            U.                            :      @               R     0r      2                    J                     .     c                             E      @               (     @      2                    ^                     X:     S                              Y      @               h           2                    n                     :                                   i      @               p     `       2   	                 ~                     :                                   y      @                    H       2                                         :                                         2               :                                                       :     H                                   @                          2                          2               1@                                       2               (H                                                      L                                        @                          2                                          N     @                                    @                          2                                         `Y     
                                                 m`     x                                   @                          2                                        `                                       @               h            2                    +                    c     (                             <                         L                             7     @               x     ȣ      2                    K                          "                              [                                                       V     @               @           2                     l                    8     0                             g     @                    X      2   "                 ~                                                       y     @               h            2   $                                     p                                        @                           2   &                                     x                                        @                           2   (                                                                            @                          2   *                                     @                   @                    @               8     0       2   ,                                                                              0                    P                                                                                                                7                                                   
      (      3                   	                      (5                                                        h                                  0	*H
01
0	`He0	*H
1o0k0F0.1,0*U#Build time autogenerated kernel keyz22Î]:0	`He0
	*H
  'T4Ȉ," nhOa@
^iP}[i-t/ɜf&*^Y
b@fʛֱ-=EEͩc
-;6?;H4N	6a筵	6uH9}7}Y<7A[f@M0 CKWXsj̃~ɩ6S(if`HCF>fTn;\6w!KwD $P̓P({Oj1a/	:ñ7G*z\;bt>߽Klok 0l2m~F4{iF׭=)aR@?=w7%g˓=I% *hxDVD/	FEw.|eXV
cݳ/\u( z4ٜ=])gGhyӤu+av         ~Module signature appended~
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                  
                  
                  
                  
            A      
            E      
            F      
            H      
            J                   L                  N                  S                                                                                                                   $                  (                  ,            	      0            ;
      4            F      8            F      <             G      @            BG      D            PG      H            eG      L            pG      P            vG      T            wG      X            ~G      \            G      `            G      d            G      h            G      l            G      p             H      t            $H      x            0H      |            TH                  `H                  gH                  iH                  kH                  lH                  mH                  H                  H                  H                  H                  H                  H                  H                  H                  H                  H                  H                  EI                  FI                  HI                  MI                  VI                  `I                  gI                  lI                  tI                  uI                  I                  I                  I                  I                  I                   I                  I                  J                  J                  J                  J                  J                  rJ                   sJ      $            uJ      (            zJ      ,            J      0            J      4            J      8            J      <            J      @            J      D            J      H            J      L            J      P            J      T            	K      X            K      \             K      `            'K      d            0K      h            6K      l            K      p            K      t            K      x            K      |            K                  K                  K                  K                  K                  K                  K                  	L                  
L                  L                  L                  L                  L                  L                  L                  L                  L                  L                  L                  L                  M                  M                  M                  M                  M                  N                   N                  "N                  $N                  &N                  (N                  )N                  *N                   .N                  xO                  |O                  }O                  O                  O                  O                  O                   O      $            P      (            P      ,            P      0            P      4            P      8            P      <             P      @            WP      D            XP      H            ZP      L            \P      P            ^P      T            cP      X            GQ      \            HQ      `            JQ      d            LQ      h            NQ      l            SQ      p            S      t            S      x            S      |            S                  S                  S                  S                  S                  uT                  vT                  xT                  zT                  |T                  ~T                  T                  T                  T                  T                  T                  T                  T                  T                  T                  U                  U                  U                  U                  U                  V                  V                  V                  V                  V                  V                  V                  W                   W                  W                  W                  W                  !W                  "W                  #W                  W                   W      $            W      (            W      ,            W      0            W      4            W      8            X      <            X      @            X      D            X      H            X      L            X      P            X      T            X      X            X      \            X      `            X      d            X      h            X      l            Z      p            Z      t            Z      x            	Z      |            Z                  Z                  Z                  Z                  Z                  [                  [                  [                  ][                  ^[                  c[                  m[                  n[                  s[                  [                  [                  [                  [                  [                  [                  [                  [                  [                  [                  [                   \                  .\                  /\                  4\                  y\                  \                  \                  \                   \                  \                  \                  \                  \                  \                  0]                  1]                   6]      $            @]      (            A]      ,            F]      0            W]      4            `]      8            g]      <            i]      @            k]      D            m]      H            n]      L            o]      P            s]      T            P`      X            Q`      \            R`      `            T`      d            V`      h            X`      l            Z`      p            _`      t            `      x            `      |            `                  `                  `                  `                  `                  `                  `                  ea                  fa                  ga                  ia                  ka                  ma                  oa                  ta                  c                  c                  c                  c                  c                  c                  d                  d                  d                  d                  d                  e                  e                  e                  e                  e                  e                  e                   e                  e                  f                  f                  f                  f                  f                  f                   f      $            f      (            k      ,             k  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
<xkbConfigRegistry version="1.1">
  <modelList>
    <model>
      <configItem>
        <name>pc86</name>
        <description>Generic 86-key PC</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc101</name>
        <description>Generic 101-key PC</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc102</name>
        <description>Generic 102-key PC</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc104</name>
        <description>Generic 104-key PC</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc104alt</name>
        <description>Generic 104-key PC with L-shaped Enter key</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc105</name>
        <description>Generic 105-key PC</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dell101</name>
        <description>Dell 101-key PC</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>latitude</name>
        <description>Dell Latitude laptop</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dellm65</name>
        <description>Dell Precision M65 laptop</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>everex</name>
        <description>Everex STEPnote</description>
        <vendor>Everex</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>flexpro</name>
        <description>Keytronic FlexPro</description>
        <vendor>Keytronic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoft</name>
        <description>Microsoft Natural</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>omnikey101</name>
        <description>Northgate OmniKey 101</description>
        <vendor>Northgate</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>winbook</name>
        <description>Winbook Model XP5</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>pc98</name>
        <description>PC-98</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>a4techKB21</name>
        <description>A4Tech KB-21</description>
        <vendor>A4Tech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>a4techKBS8</name>
        <description>A4Tech KBS-8</description>
        <vendor>A4Tech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>a4_rfkb23</name>
        <description>A4Tech Wireless Desktop RFKB-23</description>
        <vendor>A4Tech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>airkey</name>
        <description>Acer AirKey V</description>
        <vendor>Acer</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>azonaRF2300</name>
        <description>Azona RF2300 Wireless Internet</description>
        <vendor>Azona</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>scorpius</name>
        <description>Advance Scorpius KI</description>
        <vendor>Scorpius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>brother</name>
        <description>Brother Internet</description>
        <vendor>Brother</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc5113rf</name>
        <description>BTC 5113RF Multimedia</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc5126t</name>
        <description>BTC 5126T</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc6301urf</name>
        <description>BTC 6301URF</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc9000</name>
        <description>BTC 9000</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc9000a</name>
        <description>BTC 9000A</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc9001ah</name>
        <description>BTC 9001AH</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc5090</name>
        <description>BTC 5090</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc9019u</name>
        <description>BTC 9019U</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>btc9116u</name>
        <description>BTC 9116U Mini Wireless Internet and Gaming</description>
        <vendor>BTC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherryblue</name>
        <description>Cherry Blue Line CyBo@rd</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherryblueb</name>
        <description>Cherry CyMotion Master XPress</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherrybluea</name>
        <description>Cherry Blue Line CyBo@rd (alt.)</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherrycyboard</name>
        <description>Cherry CyBo@rd USB-Hub</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherrycmexpert</name>
        <description>Cherry CyMotion Expert</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cherrybunlim</name>
        <description>Cherry B.UNLIMITED</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>chicony</name>
        <description>Chicony Internet</description>
        <vendor>Chicony</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>chicony0108</name>
        <description>Chicony KU-0108</description>
        <vendor>Chicony</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>chicony0420</name>
        <description>Chicony KU-0420</description>
        <vendor>Chicony</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>chicony9885</name>
        <description>Chicony KB-9885</description>
        <vendor>Chicony</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>compaqeak8</name>
        <description>Compaq Easy Access</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>compaqik7</name>
        <description>Compaq Internet (7 keys)</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>compaqik13</name>
        <description>Compaq Internet (13 keys)</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>compaqik18</name>
        <description>Compaq Internet (18 keys)</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>cymotionlinux</name>
        <description>Cherry CyMotion Master Linux</description>
        <vendor>Cherry</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>armada</name>
        <description>Compaq Armada laptop</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>presario</name>
        <description>Compaq Presario laptop</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>ipaq</name>
        <description>Compaq iPaq</description>
        <vendor>Compaq</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dell</name>
        <description>Dell</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dellsk8125</name>
        <description>Dell SK-8125</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dellsk8135</name>
        <description>Dell SK-8135</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dellusbmm</name>
        <description>Dell USB Multimedia</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>inspiron</name>
        <description>Dell Inspiron 6000/8000 laptop</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>precision_m</name>
        <description>Dell Precision M laptop</description>
        <vendor>Dell</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dexxa</name>
        <description>Dexxa Wireless Desktop</description>
        <vendor>Dexxa</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>diamond</name>
        <description>Diamond 9801/9802</description>
        <vendor>Diamond</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>dtk2000</name>
        <description>DTK2000</description>
        <vendor>DTK</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>ennyah_dkb1008</name>
        <description>Ennyah DKB-1008</description>
        <vendor>Ennyah</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>fscaa1667g</name>
        <description>Fujitsu-Siemens Amilo laptop</description>
        <vendor>Fujitsu-Siemens</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>genius</name>
        <description>Genius Comfy KB-16M/Multimedia KWD-910</description>
        <vendor>Genius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>geniuscomfy</name>
        <description>Genius Comfy KB-12e</description>
        <vendor>Genius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>geniuscomfy2</name>
        <description>Genius Comfy KB-21e-Scroll</description>
        <vendor>Genius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>geniuskb19e</name>
        <description>Genius KB-19e NB</description>
        <vendor>Genius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>geniuskkb2050hs</name>
        <description>Genius KKB-2050HS</description>
        <vendor>Genius</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>gyration</name>
        <description>Gyration</description>
        <vendor>Gyration</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>kinesis</name>
        <description>Kinesis</description>
        <vendor>Kinesis</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logitech_base</name>
        <description>Logitech</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logitech_g15</name>
        <description>Logitech G15 extra keys via G15daemon</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpi6</name>
        <description>Hewlett-Packard Internet</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hp250x</name>
        <description>Hewlett-Packard NEC SK-2500 Multimedia</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpxe3gc</name>
        <description>Hewlett-Packard Omnibook XE3 GC</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpxe3gf</name>
        <description>Hewlett-Packard Omnibook XE3 GF</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpxt1000</name>
        <description>Hewlett-Packard Omnibook XT1000</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpdv5</name>
        <description>Hewlett-Packard Pavilion dv5</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpzt11xx</name>
        <description>Hewlett-Packard Pavilion ZT1100</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hp500fa</name>
        <description>Hewlett-Packard Omnibook 500 FA</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hp5xx</name>
        <description>Hewlett-Packard Omnibook 500</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpnx9020</name>
        <description>Hewlett-Packard nx9020</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hp6000</name>
        <description>Hewlett-Packard Omnibook 6000/6100</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>honeywell_euroboard</name>
        <description>Honeywell Euroboard</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hpmini110</name>
        <description>Hewlett-Packard Mini 110 laptop</description>
        <vendor>Hewlett-Packard</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>rapidaccess</name>
        <description>IBM Rapid Access</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>rapidaccess2</name>
        <description>IBM Rapid Access II</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>thinkpad</name>
        <description>IBM ThinkPad 560Z/600/600E/A22E</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>thinkpad60</name>
        <description>IBM ThinkPad R60/T60/R61/T61</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>thinkpadz60</name>
        <description>IBM ThinkPad Z60m/Z60t/Z61m/Z61t</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>ibm_spacesaver</name>
        <description>IBM Space Saver</description>
        <vendor>Lenovo (previously IBM)</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiaccess</name>
        <description>Logitech Access</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiclx300</name>
        <description>Logitech Cordless Desktop LX-300</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logii350</name>
        <description>Logitech Internet 350</description>
        <vendor>Logitech</vendor>
        <hwList> <hwId>046d:c313</hwId></hwList>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logimel</name>
        <description>Logitech Internet 350</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicd</name>
        <description>Logitech Cordless Desktop</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicd_it</name>
        <description>Logitech Cordless Desktop iTouch</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicd_nav</name>
        <description>Logitech Cordless Desktop Navigator</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicd_opt</name>
        <description>Logitech Cordless Desktop Optical</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicda</name>
        <description>Logitech Cordless Desktop (alt.)</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicdpa2</name>
        <description>Logitech Cordless Desktop Pro (2nd alt.)</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicfn</name>
        <description>Logitech Cordless Freedom/Desktop Navigator</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicdn</name>
        <description>Logitech Cordless Desktop Navigator</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiitc</name>
        <description>Logitech iTouch Cordless Y-RB6</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiik</name>
        <description>Logitech Internet</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>itouch</name>
        <description>Logitech iTouch</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logicink</name>
        <description>Logitech Internet Navigator</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiex110</name>
        <description>Logitech Cordless Desktop EX110</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiinkse</name>
        <description>Logitech iTouch Internet Navigator SE</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiinkseusb</name>
        <description>Logitech iTouch Internet Navigator SE USB</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiultrax</name>
        <description>Logitech Ultra-X</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logiultraxc</name>
        <description>Logitech Ultra-X Cordless Media Desktop</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logidinovo</name>
        <description>Logitech diNovo</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>logidinovoedge</name>
        <description>Logitech diNovo Edge</description>
        <vendor>Logitech</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>mx1998</name>
        <description>Memorex MX1998</description>
        <vendor>Memorex</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>mx2500</name>
        <description>Memorex MX2500 EZ-Access</description>
        <vendor>Memorex</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>mx2750</name>
        <description>Memorex MX2750</description>
        <vendor>Memorex</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoft4000</name>
        <description>Microsoft Natural Ergonomic 4000</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoft7000</name>
        <description>Microsoft Natural Wireless Ergonomic 7000</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftinet</name>
        <description>Microsoft Internet</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftpro</name>
        <description>Microsoft Natural Pro/Internet Pro</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftprousb</name>
        <description>Microsoft Natural Pro USB/Internet Pro</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftprooem</name>
        <description>Microsoft Natural Pro OEM</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>vsonku306</name>
        <description>ViewSonic KU-306 Internet</description>
        <vendor>ViewSonic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftprose</name>
        <description>Microsoft Internet Pro (Swedish)</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftoffice</name>
        <description>Microsoft Office Keyboard</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftmult</name>
        <description>Microsoft Wireless Multimedia 1.0A</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftsurface</name>
        <description>Microsoft Surface</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftelite</name>
        <description>Microsoft Natural Elite</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>microsoftccurve2k</name>
        <description>Microsoft Comfort Curve 2000</description>
        <vendor>Microsoft</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>oretec</name>
        <description>Ortek Multimedia/Internet MCK-800</description>
        <vendor>Ortek</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>propeller</name>
        <description>Propeller Voyager KTEZ-1000</description>
        <vendor>KeyTronic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>qtronix</name>
        <description>QTronix Scorpius 98N+</description>
        <vendor>QTronix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>samsung4500</name>
        <description>Samsung SDM 4500P</description>
        <vendor>Samsung</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>samsung4510</name>
        <description>Samsung SDM 4510P</description>
        <vendor>Samsung</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sanwaskbkg3</name>
        <description>Sanwa Supply SKB-KG3</description>
        <vendor>Sanwa Supply Inc.</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sk1300</name>
        <description>NEC SK-1300</description>
        <vendor>NEC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sk2500</name>
        <description>NEC SK-2500</description>
        <vendor>NEC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sk6200</name>
        <description>NEC SK-6200</description>
        <vendor>NEC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sk7100</name>
        <description>NEC SK-7100</description>
        <vendor>NEC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sp_inet</name>
        <description>Super Power Multimedia</description>
        <vendor>Generic</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sven</name>
        <description>SVEN Ergonomic 2500</description>
        <vendor>SVEN</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sven303</name>
        <description>SVEN Slim 303</description>
        <vendor>SVEN</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>symplon</name>
        <description>Symplon PaceBook tablet</description>
        <vendor>Symplon</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>toshiba_s3000</name>
        <description>Toshiba Satellite S3000</description>
        <vendor>Toshiba</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>trust</name>
        <description>Trust Wireless Classic</description>
        <vendor>Trust</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>trustda</name>
        <description>Trust Direct Access</description>
        <vendor>Trust</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>trust_slimline</name>
        <description>Trust Slimline</description>
        <vendor>Trust</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>tm2020</name>
        <description>TypeMatrix EZ-Reach 2020</description>
        <vendor>TypeMatrix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>tm2030PS2</name>
        <description>TypeMatrix EZ-Reach 2030 PS2</description>
        <vendor>TypeMatrix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>tm2030USB</name>
        <description>TypeMatrix EZ-Reach 2030 USB</description>
        <vendor>TypeMatrix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>tm2030USB-102</name>
        <description>TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)</description>
        <vendor>TypeMatrix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>tm2030USB-106</name>
        <description>TypeMatrix EZ-Reach 2030 USB (106:JP mode)</description>
        <vendor>TypeMatrix</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>yahoo</name>
        <description>Yahoo! Internet</description>
        <vendor>Yahoo!</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>macbook78</name>
        <description>MacBook/MacBook Pro</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>macbook79</name>
        <description>MacBook/MacBook Pro (intl.)</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>macintosh</name>
        <description>Macintosh</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>macintosh_old</name>
        <description>Macintosh Old</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>macintosh_hhk</name>
        <description>Happy Hacking for Mac</description>
        <vendor>Fujitsu</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>acer_c300</name>
        <description>Acer C300</description>
        <vendor>Acer</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>acer_ferrari4k</name>
        <description>Acer Ferrari 4000</description>
        <vendor>Acer</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>acer_laptop</name>
        <description>Acer laptop</description>
        <vendor>Acer</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>asus_laptop</name>
        <description>Asus laptop</description>
        <vendor>Asus</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>apple</name>
        <description>Apple</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>apple_laptop</name>
        <description>Apple laptop</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>applealu_ansi</name>
        <description>Apple Aluminium (ANSI)</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>applealu_iso</name>
        <description>Apple Aluminium (ISO)</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>applealu_jis</name>
        <description>Apple Aluminium (JIS)</description>
        <vendor>Apple</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>silvercrest</name>
        <description>Silvercrest Multimedia Wireless</description>
        <vendor>Silvercrest</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>emachines</name>
        <description>eMachines m6800 laptop</description>
        <vendor>eMachines</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>benqx</name>
        <description>BenQ X-Touch</description>
        <vendor>BenQ</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>benqx730</name>
        <description>BenQ X-Touch 730</description>
        <vendor>BenQ</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>benqx800</name>
        <description>BenQ X-Touch 800</description>
        <vendor>BenQ</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>hhk</name>
        <description>Happy Hacking</description>
        <vendor>Fujitsu</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>classmate</name>
        <description>Classmate PC</description>
        <vendor>Intel</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>olpc</name>
        <description>OLPC</description>
        <vendor>OLPC</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type7_usb</name>
        <description>Sun Type 7 USB</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type7_euro_usb</name>
        <description>Sun Type 7 USB (European)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type7_unix_usb</name>
        <description>Sun Type 7 USB (Unix)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type7_jp_usb</name>
        <description>Sun Type 7 USB (Japanese)/Japanese 106-key</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type6_usb</name>
        <description>Sun Type 6/7 USB</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type6_euro_usb</name>
        <description>Sun Type 6/7 USB (European)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type6_unix_usb</name>
        <description>Sun Type 6 USB (Unix)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type6_jp_usb</name>
        <description>Sun Type 6 USB (Japanese)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>sun_type6_jp</name>
        <description>Sun Type 6 (Japanese)</description>
        <vendor>Sun Microsystems</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>targa_v811</name>
        <description>Targa Visionary 811</description>
        <vendor>Targa</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>unitekkb1925</name>
        <description>Unitek KB-1925</description>
        <vendor>Unitek Group</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>compalfl90</name>
        <description>FL90</description>
        <vendor>Compal Electronics</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
        <name>creativedw7000</name>
        <description>Creative Desktop Wireless 7000</description>
        <vendor>Creative</vendor>
      </configItem>
    </model>
    <model>
      <configItem>
       <name>teck227</name>
       <description>Truly Ergonomic 227</description>
       <vendor>Truly Ergonomic</vendor>
     </configItem>
    </model>
    <model>
      <configItem>
       <name>teck229</name>
       <description>Truly Ergonomic 229</description>
       <vendor>Truly Ergonomic</vendor>
     </configItem>
    </model>
    <model>
      <configItem>
       <name>apex300</name>
       <description>SteelSeries Apex 300 (Apex RAW)</description>
       <vendor>SteelSeries</vendor>
     </configItem>
    </model>
    <model>
      <configItem>
       <name>chromebook</name>
       <description>Chromebook</description>
       <vendor>Google</vendor>
     </configItem>
    </model>
  </modelList>
  <layoutList>
    <layout>
      <configItem>
        <name>us</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (US)</description>
        <countryList>
          <iso3166Id>US</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>chr</name>
            <!-- Keyboard indicator for Cherokee layouts -->
            <shortDescription>chr</shortDescription>
            <description>Cherokee</description>
            <languageList>
              <iso639Id>chr</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>haw</name>
            <shortDescription>haw</shortDescription>
            <description>Hawaiian</description>
            <languageList>
              <iso639Id>haw</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>euro</name>
            <description>English (US, euro on 5)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>intl</name>
            <description>English (US, intl., with dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>alt-intl</name>
            <description>English (US, alt. intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak</name>
            <description>English (Colemak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak_dh</name>
            <description>English (Colemak-DH)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak_dh_iso</name>
            <description>English (Colemak-DH ISO)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>English (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-intl</name>
            <description>English (Dvorak, intl., with dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-alt-intl</name>
            <description>English (Dvorak, alt. intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-l</name>
            <description>English (Dvorak, left-handed)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-r</name>
            <description>English (Dvorak, right-handed)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-classic</name>
            <description>English (classic Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvp</name>
            <description>English (programmer Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-mac</name>
            <description>English (Dvorak, Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>symbolic</name>
            <description>English (US, Symbolic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rus</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (US, phonetic)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>English (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>altgr-intl</name>
            <description>English (intl., with AltGr dead keys)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
              <iso639Id>fra</iso639Id>
              <iso639Id>deu</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>olpc2</name>
            <description>English (the divide/multiply toggle the layout)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>hbs</name>
            <description>Serbo-Croatian (US)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
              <iso639Id>bos</iso639Id>
              <iso639Id>hbs</iso639Id>
              <iso639Id>hrv</iso639Id>
              <iso639Id>srp</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>norman</name>
            <description>English (Norman)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>workman</name>
            <description>English (Workman)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>workman-intl</name>
            <description>English (Workman, intl., with dead keys)</description>
           </configItem>
         </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>af</name>
        <!-- Keyboard indicator for Persian layouts -->
        <shortDescription>fa</shortDescription>
        <description>Dari</description>
        <countryList>
          <iso3166Id>AF</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>drs</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>ps</name>
            <!-- Keyboard indicator for Pashto layouts -->
            <shortDescription>ps</shortDescription>
            <description>Pashto</description>
            <languageList>
              <iso639Id>pus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>uz</name>
            <!-- Keyboard indicator for Uzbek layouts -->
            <shortDescription>uz</shortDescription>
            <description>Uzbek (Afghanistan)</description>
            <languageList>
              <iso639Id>uzb</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ps-olpc</name>
            <!-- Keyboard indicator for Pashto layouts -->
            <shortDescription>ps</shortDescription>
            <description>Pashto (Afghanistan, OLPC)</description>
            <languageList>
              <iso639Id>pus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fa-olpc</name>
            <!-- Keyboard indicator for Persian layouts -->
            <shortDescription>fa</shortDescription>
            <description>Dari (Afghanistan, OLPC)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>uz-olpc</name>
            <!-- Keyboard indicator for Uzbek layouts -->
            <shortDescription>uz</shortDescription>
            <description>Uzbek (Afghanistan, OLPC)</description>
            <languageList>
              <iso639Id>uzb</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ara</name>
        <!-- Keyboard indicator for Arabic layouts -->
        <shortDescription>ar</shortDescription>
        <description>Arabic</description>
        <countryList>
          <iso3166Id>AE</iso3166Id>
          <iso3166Id>BH</iso3166Id>
          <iso3166Id>DZ</iso3166Id>
          <iso3166Id>EG</iso3166Id>
          <iso3166Id>EH</iso3166Id>
          <iso3166Id>JO</iso3166Id>
          <iso3166Id>KW</iso3166Id>
          <iso3166Id>LB</iso3166Id>
          <iso3166Id>LY</iso3166Id>
          <iso3166Id>MA</iso3166Id>
          <iso3166Id>MR</iso3166Id>
          <iso3166Id>OM</iso3166Id>
          <iso3166Id>PS</iso3166Id>
          <iso3166Id>QA</iso3166Id>
          <iso3166Id>SA</iso3166Id>
          <iso3166Id>SD</iso3166Id>
          <iso3166Id>SY</iso3166Id>
          <iso3166Id>TN</iso3166Id>
          <iso3166Id>YE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ara</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>azerty</name>
            <description>Arabic (AZERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>azerty_digits</name>
            <description>Arabic (AZERTY, Eastern Arabic numerals)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>digits</name>
            <description>Arabic (Eastern Arabic numerals)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>Arabic (QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty_digits</name>
            <description>Arabic (QWERTY, Eastern Arabic numerals)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>buckwalter</name>
            <description>Arabic (Buckwalter)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>olpc</name>
            <description>Arabic (OLPC)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Arabic (Macintosh)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>al</name>
        <!-- Keyboard indicator for Albanian layouts -->
        <shortDescription>sq</shortDescription>
        <description>Albanian</description>
        <countryList>
          <iso3166Id>AL</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>sqi</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>plisi</name>
            <description>Albanian (Plisi)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>veqilharxhi</name>
            <description>Albanian (Veqilharxhi)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>am</name>
        <!-- Keyboard indicator for Armenian layouts -->
        <shortDescription>hy</shortDescription>
        <description>Armenian</description>
        <countryList>
          <iso3166Id>AL</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>hye</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Armenian (phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic-alt</name>
            <description>Armenian (alt. phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>eastern</name>
            <description>Armenian (eastern)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>western</name>
            <description>Armenian (western)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>eastern-alt</name>
            <description>Armenian (alt. eastern)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>at</name>
        <!-- Keyboard indicator for German layouts -->
        <shortDescription>de</shortDescription>
        <description>German (Austria)</description>
        <countryList>
          <iso3166Id>AT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>deu</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>German (Austria, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>German (Austria, Macintosh)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>au</name>
        <!-- Keyboard indicator for Australian layouts -->
        <shortDescription>en</shortDescription>
        <description>English (Australian)</description>
        <countryList>
          <iso3166Id>AU</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>az</name>
        <!-- Keyboard indicator for Azerbaijani layouts -->
        <shortDescription>az</shortDescription>
        <description>Azerbaijani</description>
        <countryList>
          <iso3166Id>AZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>aze</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>cyrillic</name>
            <description>Azerbaijani (Cyrillic)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>by</name>
        <!-- Keyboard indicator for Belarusian layouts -->
        <shortDescription>by</shortDescription>
        <description>Belarusian</description>
        <countryList>
          <iso3166Id>BY</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>bel</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Belarusian (legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latin</name>
            <description>Belarusian (Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ru</name>
            <description>Russian (Belarus)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>intl</name>
            <description>Belarusian (intl.)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>be</name>
        <!-- Keyboard indicator for Belgian layouts -->
        <shortDescription>be</shortDescription>
        <description>Belgian</description>
        <countryList>
          <iso3166Id>BE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>deu</iso639Id>
          <iso639Id>nld</iso639Id>
          <iso639Id>fra</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>oss</name>
            <description>Belgian (alt.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>oss_latin9</name>
            <description>Belgian (Latin-9 only, alt.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>iso-alternate</name>
            <description>Belgian (ISO, alt.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Belgian (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>wang</name>
            <description>Belgian (Wang 724 AZERTY)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>bd</name>
        <!-- Keyboard indicator for Bangla layouts -->
        <shortDescription>bn</shortDescription>
        <description>Bangla</description>
        <countryList>
          <iso3166Id>BD</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ben</iso639Id>
          <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
          <iso639Id>sat</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>probhat</name>
            <description>Bangla (Probhat)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>in</name>
        <!-- Keyboard indicator for Indian layouts -->
        <shortDescription>in</shortDescription>
        <description>Indian</description>
        <countryList>
          <iso3166Id>IN</iso3166Id>
        </countryList>
        <!-- from https://github.com/unicode-org/cldr/blob/main/common/supplemental/supplementalData.xml scripts="Deva" -->
        <languageList>
          <iso639Id>hin</iso639Id>
          <iso639Id>anp</iso639Id>
          <iso639Id>awa</iso639Id>
          <iso639Id>bap</iso639Id>
          <iso639Id>bfy</iso639Id>
          <iso639Id>bgc</iso639Id>
          <iso639Id>bhb</iso639Id>
          <iso639Id>bhi</iso639Id>
          <iso639Id>bho</iso639Id>
          <iso639Id>bjj</iso639Id>
          <iso639Id>bra</iso639Id>
          <iso639Id>brx</iso639Id>
          <iso639Id>btv</iso639Id>
          <iso639Id>doi</iso639Id>
          <iso639Id>dty</iso639Id>
          <iso639Id>gbm</iso639Id>
          <iso639Id>gom</iso639Id>
          <iso639Id>gvr</iso639Id>
          <iso639Id>hne</iso639Id>
          <iso639Id>hoc</iso639Id>
          <iso639Id>hoj</iso639Id>
          <iso639Id>jml</iso639Id>
          <iso639Id>kfr</iso639Id>
          <iso639Id>kfy</iso639Id>
          <iso639Id>khn</iso639Id>
          <iso639Id>kok</iso639Id>
          <iso639Id>kru</iso639Id>
          <iso639Id>mag</iso639Id>
          <iso639Id>mai</iso639Id>
          <iso639Id>mar</iso639Id>
          <iso639Id>mgp</iso639Id>
          <iso639Id>mrd</iso639Id>
          <iso639Id>mtr</iso639Id>
          <iso639Id>mwr</iso639Id>
          <iso639Id>nep</iso639Id>
          <iso639Id>new</iso639Id>
          <iso639Id>noe</iso639Id>
          <iso639Id>raj</iso639Id>
          <iso639Id>rjs</iso639Id>
          <iso639Id>sck</iso639Id>
          <iso639Id>srx</iso639Id>
          <iso639Id>swv</iso639Id>
          <iso639Id>taj</iso639Id>
          <iso639Id>tdg</iso639Id>
          <iso639Id>tdh</iso639Id>
          <iso639Id>thl</iso639Id>
          <iso639Id>thq</iso639Id>
          <iso639Id>thr</iso639Id>
          <iso639Id>tkt</iso639Id>
          <iso639Id>wbr</iso639Id>
          <iso639Id>wtm</iso639Id>
          <iso639Id>xnr</iso639Id>
          <iso639Id>xsr</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>ben</name>
            <!-- Keyboard indicator for Bangla layouts -->
            <shortDescription>bn</shortDescription>
            <description>Bangla (India)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ben_probhat</name>
            <!-- Keyboard indicator for Bangla layouts -->
            <shortDescription>bn</shortDescription>
            <description>Bangla (India, Probhat)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ben_baishakhi</name>
            <description>Bangla (India, Baishakhi)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ben_bornona</name>
            <description>Bangla (India, Bornona)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
         <variant>
          <configItem>
            <name>ben_gitanjali</name>
            <description>Bangla (India, Gitanjali)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ben_inscript</name>
            <description>Bangla (India, Baishakhi InScript)</description>
            <languageList>
              <iso639Id>ben</iso639Id>
              <!-- sat-Beng: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>eeyek</name>
            <description>Manipuri (Eeyek)</description>
            <languageList>
              <iso639Id>mni</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>guj</name>
            <!-- Keyboard indicator for Gujarati layouts -->
            <shortDescription>gu</shortDescription>
            <description>Gujarati</description>
            <languageList>
              <iso639Id>guj</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>guru</name>
            <!-- Keyboard indicator for Punjabi layouts -->
            <shortDescription>pa</shortDescription>
            <description>Punjabi (Gurmukhi)</description>
            <languageList>
              <iso639Id>pan</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>jhelum</name>
            <!-- Keyboard indicator for Punjabi layouts -->
            <shortDescription>pa</shortDescription>
            <description>Punjabi (Gurmukhi Jhelum)</description>
            <languageList>
              <iso639Id>pan</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>kan</name>
            <!-- Keyboard indicator for Kannada layouts -->
            <shortDescription>kn</shortDescription>
            <description>Kannada</description>
            <languageList>
              <iso639Id>kan</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>kan-kagapa</name>
            <!-- Keyboard indicator for Kannada layouts -->
            <shortDescription>kn</shortDescription>
            <description>Kannada (KaGaPa, phonetic)</description>
            <languageList>
              <iso639Id>kan</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mal</name>
            <!-- Keyboard indicator for Malayalam layouts -->
            <shortDescription>ml</shortDescription>
            <description>Malayalam</description>
            <languageList>
              <iso639Id>mal</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mal_lalitha</name>
            <!-- Keyboard indicator for Malayalam layouts -->
            <shortDescription>ml</shortDescription>
            <description>Malayalam (Lalitha)</description>
            <languageList>
              <iso639Id>mal</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mal_enhanced</name>
            <!-- Keyboard indicator for Malayalam layouts -->
            <shortDescription>ml</shortDescription>
            <description>Malayalam (enhanced InScript, with rupee)</description>
            <languageList>
              <iso639Id>mal</iso639Id>
            </languageList>
          </configItem>
         </variant>
         <variant>
           <configItem>
            <name>ori</name>
            <!-- Keyboard indicator for Oriya layouts -->
            <shortDescription>or</shortDescription>
            <description>Oriya</description>
            <languageList>
              <iso639Id>ori</iso639Id>
              <!-- sat-Orya: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
           <configItem>
            <name>ori-bolnagri</name>
            <!-- Keyboard indicator for Oriya layouts -->
            <shortDescription>or</shortDescription>
            <description>Oriya (Bolnagri)</description>
            <languageList>
              <iso639Id>ori</iso639Id>
              <!-- sat-Orya: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ori-wx</name>
            <!-- Keyboard indicator for Oriya layouts -->
            <shortDescription>or</shortDescription>
            <description>Oriya (Wx)</description>
            <languageList>
              <iso639Id>ori</iso639Id>
              <!-- sat-Orya: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
           <configItem>
            <name>olck</name>
            <!-- Keyboard indicator for Ol Chiki layouts -->
            <shortDescription>sat</shortDescription>
            <description>Ol Chiki</description>
            <languageList>
              <!-- sat-Olck: http://www.ethnologue.com/language/sat -->
              <iso639Id>sat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam_tamilnet</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (TamilNet '99)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam_tamilnet_with_tam_nums</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (TamilNet '99 with Tamil numerals)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam_tamilnet_TAB</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (TamilNet '99, TAB encoding)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam_tamilnet_TSCII</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (TamilNet '99, TSCII encoding)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (InScript)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tel</name>
            <!-- Keyboard indicator for Telugu layouts -->
            <shortDescription>te</shortDescription>
            <description>Telugu</description>
            <languageList>
              <iso639Id>tel</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tel-kagapa</name>
            <!-- Keyboard indicator for Telugu layouts -->
            <shortDescription>te</shortDescription>
            <description>Telugu (KaGaPa, phonetic)</description>
            <languageList>
              <iso639Id>tel</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tel-sarala</name>
            <!-- Keyboard indicator for Telugu layouts -->
            <shortDescription>te</shortDescription>
            <description>Telugu (Sarala)</description>
            <languageList>
              <iso639Id>tel</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>urd-phonetic</name>
            <!-- Keyboard indicator for Urdu layouts -->
            <shortDescription>ur</shortDescription>
            <description>Urdu (phonetic)</description>
            <languageList>
              <iso639Id>urd</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>urd-phonetic3</name>
            <!-- Keyboard indicator for Urdu layouts -->
            <shortDescription>ur</shortDescription>
            <description>Urdu (alt. phonetic)</description>
            <languageList>
              <iso639Id>urd</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>urd-winkeys</name>
            <!-- Keyboard indicator for Urdu layouts -->
            <shortDescription>ur</shortDescription>
            <description>Urdu (Windows)</description>
            <languageList>
              <iso639Id>urd</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bolnagri</name>
            <!-- Keyboard indicator for Hindi layouts -->
            <shortDescription>hi</shortDescription>
            <description>Hindi (Bolnagri)</description>
            <languageList>
              <iso639Id>hin</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>hin-wx</name>
            <!-- Keyboard indicator for Hindi layouts -->
            <shortDescription>hi</shortDescription>
            <description>Hindi (Wx)</description>
            <languageList>
              <iso639Id>hin</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>hin-kagapa</name>
            <!-- Keyboard indicator for Hindi layouts -->
            <shortDescription>hi</shortDescription>
            <description>Hindi (KaGaPa, phonetic)</description>
            <languageList>
              <iso639Id>hin</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>san-kagapa</name>
            <!-- Keyboard indicator for Sanskrit layouts -->
            <shortDescription>sa</shortDescription>
            <description>Sanskrit (KaGaPa, phonetic)</description>
            <languageList>
              <iso639Id>san</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mar-kagapa</name>
            <!-- Keyboard indicator for Marathi layouts -->
            <shortDescription>mr</shortDescription>
            <description>Marathi (KaGaPa, phonetic)</description>
            <languageList>
              <iso639Id>mar</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>eng</name>
            <!-- Keyboard indicator for English layouts -->
            <shortDescription>en</shortDescription>
            <description>English (India, with rupee)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>iipa</name>
            <description>Indic IPA</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>marathi</name>
            <description>Marathi (enhanced InScript)</description>
            <languageList>
              <iso639Id>mar</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ba</name>
        <!-- Keyboard indicator for Bosnian layouts -->
        <shortDescription>bs</shortDescription>
        <description>Bosnian</description>
        <countryList>
          <iso3166Id>BA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>bos</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>alternatequotes</name>
            <description>Bosnian (with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>unicode</name>
            <description>Bosnian (with Bosnian digraphs)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>unicodeus</name>
            <description>Bosnian (US, with Bosnian digraphs)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Bosnian (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>br</name>
        <!-- Keyboard indicator for Portuguese layouts -->
        <shortDescription>pt</shortDescription>
        <description>Portuguese (Brazil)</description>
        <countryList>
          <iso3166Id>BR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>por</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Portuguese (Brazil, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Portuguese (Brazil, Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo</name>
            <description>Portuguese (Brazil, Nativo)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo-us</name>
            <description>Portuguese (Brazil, Nativo for US keyboards)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo-epo</name>
            <description>Esperanto (Brazil, Nativo)</description>
            <languageList>
              <iso639Id>epo</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>thinkpad</name>
            <description>Portuguese (Brazil, IBM/Lenovo ThinkPad)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>bg</name>
        <!-- Keyboard indicator for Bulgarian layouts -->
        <shortDescription>bg</shortDescription>
        <description>Bulgarian</description>
        <countryList>
          <iso3166Id>BG</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>bul</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Bulgarian (traditional phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bas_phonetic</name>
            <description>Bulgarian (new phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bekl</name>
            <description>Bulgarian (enhanced)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>dz</name>
        <shortDescription>kab</shortDescription>
        <description>Berber (Algeria, Latin)</description>
        <countryList>
          <iso3166Id>DZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tzm</iso639Id>
          <iso639Id>fra</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>azerty-deadkeys</name>
            <shortDescription>kab</shortDescription>
            <description>Kabyle (AZERTY, with dead keys)</description>
            <languageList>
              <iso639Id>kab</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty-gb-deadkeys</name>
            <shortDescription>kab</shortDescription>
            <description>Kabyle (QWERTY, UK, with dead keys)</description>
            <languageList>
              <iso639Id>kab</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty-us-deadkeys</name>
            <shortDescription>kab</shortDescription>
            <description>Kabyle (QWERTY, US, with dead keys)</description>
            <languageList>
              <iso639Id>kab</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ber</name>
            <shortDescription>kab</shortDescription>
            <description>Berber (Algeria, Tifinagh)</description>
            <languageList>
              <iso639Id>kab</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ar</name>
            <shortDescription>ar</shortDescription>
            <description>Arabic (Algeria)</description>
            <languageList>
              <iso639Id>ara</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ma</name>
        <!-- Keyboard indicator for Arabic layouts -->
        <shortDescription>ar</shortDescription>
        <description>Arabic (Morocco)</description>
        <countryList>
          <iso3166Id>MA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ary</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>french</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Morocco)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh-alt</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh alt.)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh-alt-phonetic</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh phonetic, alt.)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh-extended</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh extended)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh-phonetic</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh phonetic)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tifinagh-extended-phonetic</name>
            <!-- Keyboard indicator for Berber layouts -->
            <shortDescription>ber</shortDescription>
            <description>Berber (Morocco, Tifinagh extended phonetic)</description>
            <languageList>
              <iso639Id>ber</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rif</name>
            <!-- Keyboard indicator for Tarifit layouts -->
            <shortDescription>rif</shortDescription>
            <description>Tarifit</description>
            <languageList>
              <iso639Id>rif</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>cm</name>
        <!-- Keyboard indicator for Cameroon layouts -->
        <shortDescription>cm</shortDescription>
        <description>English (Cameroon)</description>
        <countryList>
          <iso3166Id>CM</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>french</name>
            <description>French (Cameroon)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>Cameroon Multilingual (QWERTY, intl.)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
              <iso639Id>bas</iso639Id>
              <iso639Id>nmg</iso639Id>
              <iso639Id>fub</iso639Id>
              <iso639Id>ewo</iso639Id>
              <iso639Id>xmd</iso639Id>
              <iso639Id>mfh</iso639Id>
              <iso639Id>bkm</iso639Id>
              <iso639Id>ozm</iso639Id>
              <iso639Id>lns</iso639Id>
              <iso639Id>sox</iso639Id>
              <iso639Id>pny</iso639Id>
              <iso639Id>wes</iso639Id>
              <iso639Id>lem</iso639Id>
              <iso639Id>nyj</iso639Id>
              <iso639Id>mfk</iso639Id>
              <iso639Id>mcp</iso639Id>
              <iso639Id>ass</iso639Id>
              <iso639Id>xed</iso639Id>
              <iso639Id>dua</iso639Id>
              <iso639Id>anv</iso639Id>
              <iso639Id>bum</iso639Id>
              <iso639Id>btb</iso639Id>
              <iso639Id>bfd</iso639Id>
              <iso639Id>azo</iso639Id>
              <iso639Id>ken</iso639Id>
              <iso639Id>yam</iso639Id>
              <iso639Id>yat</iso639Id>
              <iso639Id>yas</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>azerty</name>
            <description>Cameroon (AZERTY, intl.)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
              <iso639Id>bas</iso639Id>
              <iso639Id>nmg</iso639Id>
              <iso639Id>fub</iso639Id>
              <iso639Id>ewo</iso639Id>
              <iso639Id>xmd</iso639Id>
              <iso639Id>mfh</iso639Id>
              <iso639Id>bkm</iso639Id>
              <iso639Id>ozm</iso639Id>
              <iso639Id>lns</iso639Id>
              <iso639Id>sox</iso639Id>
              <iso639Id>pny</iso639Id>
              <iso639Id>wes</iso639Id>
              <iso639Id>lem</iso639Id>
              <iso639Id>nyj</iso639Id>
              <iso639Id>mfk</iso639Id>
              <iso639Id>mcp</iso639Id>
              <iso639Id>ass</iso639Id>
              <iso639Id>xed</iso639Id>
              <iso639Id>dua</iso639Id>
              <iso639Id>anv</iso639Id>
              <iso639Id>bum</iso639Id>
              <iso639Id>btb</iso639Id>
              <iso639Id>bfd</iso639Id>
              <iso639Id>azo</iso639Id>
              <iso639Id>ken</iso639Id>
              <iso639Id>yam</iso639Id>
              <iso639Id>yat</iso639Id>
              <iso639Id>yas</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Cameroon (Dvorak, intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mmuock</name>
            <description>Mmuock</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mm</name>
        <!-- Keyboard indicator for Burmese layouts -->
        <shortDescription>my</shortDescription>
        <description>Burmese</description>
        <countryList>
          <iso3166Id>MM</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>mya</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>zawgyi</name>
            <shortDescription>zg</shortDescription>
            <description>Burmese Zawgyi</description>
            <languageList>
              <iso639Id>mya</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <!-- Keyboard Layout for Shan -->
        <variant>
          <configItem>
            <name>shn</name>
            <shortDescription>shn</shortDescription>
            <description>Shan</description>
            <languageList>
              <iso639Id>shn</iso639Id>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>zgt</name>
            <shortDescription>zgt</shortDescription>
            <description>Shan (Zawgyi Tai)</description>
            <languageList>
              <iso639Id>shn</iso639Id>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <!-- Keyboard Layout for Mon -->
        <variant>
          <configItem>
            <name>mnw</name>
            <shortDescription>mon</shortDescription>
            <description>Mon</description>
            <languageList>
              <iso639Id>mnw</iso639Id>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mnw-a1</name>
            <shortDescription>mon-a1</shortDescription>
            <description>Mon (A1)</description>
            <languageList>
              <iso639Id>mnw</iso639Id>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ca</name>
        <!-- Keyboard indicator for French layouts -->
        <shortDescription>fr</shortDescription>
        <description>French (Canada)</description>
        <countryList>
          <iso3166Id>CA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fra</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>fr-dvorak</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Canada, Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fr-legacy</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Canada, legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>multix</name>
            <description>Canadian (intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>multi</name>
            <description>Canadian (intl., 1st part)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>multi-2gr</name>
            <description>Canadian (intl., 2nd part)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ike</name>
            <!-- Keyboard indicator for Inuktikut layouts -->
            <shortDescription>ike</shortDescription>
            <description>Inuktitut</description>
            <languageList>
              <iso639Id>iku</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>eng</name>
            <!-- Keyboard indicator for English layouts -->
            <shortDescription>en</shortDescription>
            <description>English (Canada)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>cd</name>
        <!-- Keyboard indicator for French layouts -->
        <shortDescription>fr</shortDescription>
        <description>French (Democratic Republic of the Congo)</description>
        <countryList>
          <iso3166Id>CD</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fra</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>cn</name>
        <!-- Keyboard indicator for Chinese layouts -->
        <shortDescription>zh</shortDescription>
        <description>Chinese</description>
        <countryList>
          <iso3166Id>CN</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>zho</iso639Id>
        </languageList>
      </configItem>
      <variantList>

        <variant>
          <configItem>
            <name>mon_trad</name>
            <description>Mongolian (Bichig)</description>
            <languageList>
              <iso639Id>mvf</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_trad_todo</name>
            <description>Mongolian (Todo)</description>
            <languageList>
              <iso639Id>mvf</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_trad_xibe</name>
            <description>Mongolian (Xibe)</description>
            <languageList>
              <iso639Id>sjo</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_trad_manchu</name>
            <description>Mongolian (Manchu)</description>
            <languageList>
              <iso639Id>mnc</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_trad_galik</name>
            <description>Mongolian (Galik)</description>
            <languageList>
              <iso639Id>mvf</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_todo_galik</name>
            <description>Mongolian (Todo Galik)</description>
            <languageList>
              <iso639Id>mvf</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mon_manchu_galik</name>
            <description>Mongolian (Manchu Galik)</description>
            <languageList>
              <iso639Id>mnc</iso639Id>
            </languageList>
          </configItem>
        </variant>

        <variant>
          <configItem>
            <name>tib</name>
            <description>Tibetan</description>
            <languageList>
              <iso639Id>bod</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tib_asciinum</name>
            <description>Tibetan (with ASCII numerals)</description>
            <languageList>
              <iso639Id>bod</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ug</name>
            <shortDescription>ug</shortDescription>
            <description>Uyghur</description>
            <languageList>
              <iso639Id>uig</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>altgr-pinyin</name>
            <description>Hanyu Pinyin Letters (with AltGr dead keys)</description>
            <languageList>
              <iso639Id>zho</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>hr</name>
        <!-- Keyboard indicator for Croatian layouts -->
        <shortDescription>hr</shortDescription>
        <description>Croatian</description>
        <countryList>
          <iso3166Id>HR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>hrv</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>alternatequotes</name>
            <description>Croatian (with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>unicode</name>
            <description>Croatian (with Croatian digraphs)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>unicodeus</name>
            <description>Croatian (US, with Croatian digraphs)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Croatian (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>cz</name>
        <!-- Keyboard indicator for Chech layouts -->
        <shortDescription>cs</shortDescription>
        <description>Czech</description>
        <countryList>
          <iso3166Id>CZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ces</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>bksl</name>
            <description>Czech (with &lt;\|&gt; key)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>Czech (QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty_bksl</name>
            <description>Czech (QWERTY, extended backslash)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty-mac</name>
            <description>Czech (QWERTY, Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ucw</name>
            <description>Czech (UCW, only accented letters)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-ucw</name>
            <description>Czech (US, Dvorak, UCW support)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rus</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Czech, phonetic)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>dk</name>
        <!-- Keyboard indicator for Danish layouts -->
        <shortDescription>da</shortDescription>
        <description>Danish</description>
        <countryList>
          <iso3166Id>DK</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>dan</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Danish (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Danish (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Danish (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac_nodeadkeys</name>
            <description>Danish (Macintosh, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Danish (Dvorak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>nl</name>
        <!-- Keyboard indicator for Dutch layouts -->
        <shortDescription>nl</shortDescription>
        <description>Dutch</description>
        <countryList>
          <iso3166Id>NL</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>nld</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>us</name>
            <description>Dutch (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Dutch (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>std</name>
            <description>Dutch (standard)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>bt</name>
        <!-- Keyboard indicator for Dzongkha layouts -->
        <shortDescription>dz</shortDescription>
        <description>Dzongkha</description>
        <countryList>
          <iso3166Id>BT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>dzo</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>ee</name>
        <!-- Keyboard indicator for Estonian layouts -->
        <shortDescription>et</shortDescription>
        <description>Estonian</description>
        <countryList>
          <iso3166Id>EE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>est</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Estonian (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Estonian (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Estonian (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ir</name>
        <!-- Keyboard indicator for Persian layouts -->
        <shortDescription>fa</shortDescription>
        <description>Persian</description>
        <countryList>
          <iso3166Id>IR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fas</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>pes_keypad</name>
            <description>Persian (with Persian keypad)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iran, Latin Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_f</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iran, F)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_alt</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iran, Latin Alt-Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_ara</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iran, Arabic-Latin)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>iq</name>
        <!-- Keyboard indicator for Iraqi layouts -->
        <shortDescription>ar</shortDescription>
        <description>Iraqi</description>
        <countryList>
          <iso3166Id>IQ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ara</iso639Id>
          <iso639Id>kur</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>ku</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iraq, Latin Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_f</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iraq, F)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_alt</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iraq, Latin Alt-Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_ara</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Iraq, Arabic-Latin)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>fo</name>
        <!-- Keyboard indicator for Faroese layouts -->
        <shortDescription>fo</shortDescription>
        <description>Faroese</description>
        <countryList>
          <iso3166Id>FO</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fao</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Faroese (no dead keys)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>fi</name>
        <!-- Keyboard indicator for Finnish layouts -->
        <shortDescription>fi</shortDescription>
        <description>Finnish</description>
        <countryList>
          <iso3166Id>FI</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fin</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Finnish (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>classic</name>
            <description>Finnish (classic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Finnish (classic, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>smi</name>
            <description>Northern Saami (Finland)</description>
            <languageList>
              <iso639Id>sme</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Finnish (Macintosh)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>fr</name>
        <!-- Keyboard indicator for French layouts -->
        <shortDescription>fr</shortDescription>
        <description>French</description>
        <countryList>
          <iso3166Id>FR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fra</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>French (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>oss</name>
            <description>French (alt.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>oss_latin9</name>
            <description>French (alt., Latin-9 only)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>oss_nodeadkeys</name>
            <description>French (alt., no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latin9</name>
            <description>French (legacy, alt.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latin9_nodeadkeys</name>
            <description>French (legacy, alt., no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bepo</name>
            <description>French (BEPO)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bepo_latin9</name>
            <description>French (BEPO, Latin-9 only)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bepo_afnor</name>
            <description>French (BEPO, AFNOR)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>French (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>French (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>azerty</name>
            <description>French (AZERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>afnor</name>
            <description>French (AZERTY, AFNOR)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bre</name>
            <description>French (Breton)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>oci</name>
            <description>Occitan</description>
            <languageList>
              <iso639Id>oci</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>geo</name>
            <description>Georgian (France, AZERTY Tskapo)</description>
            <languageList>
              <iso639Id>kat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>French (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>gh</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (Ghana)</description>
        <countryList>
          <iso3166Id>GH</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>generic</name>
            <description>English (Ghana, multilingual)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>akan</name>
            <!-- Keyboard indicator for Akan layouts -->
            <shortDescription>ak</shortDescription>
            <description>Akan</description>
            <languageList>
              <iso639Id>aka</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ewe</name>
            <!-- Keyboard indicator for Ewe layouts -->
            <shortDescription>ee</shortDescription>
            <description>Ewe</description>
            <languageList>
              <iso639Id>ewe</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fula</name>
            <!-- Keyboard indicator for Fula layouts -->
            <shortDescription>ff</shortDescription>
            <description>Fula</description>
            <languageList>
              <iso639Id>ful</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ga</name>
            <!-- Keyboard indicator for Ga layouts -->
            <shortDescription>gaa</shortDescription>
            <description>Ga</description>
            <languageList>
              <iso639Id>gaa</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>hausa</name>
            <!-- Keyboard indicator for Hausa layouts -->
            <shortDescription>ha</shortDescription>
            <description>Hausa (Ghana)</description>
            <languageList>
              <iso639Id>hau</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>avn</name>
            <!-- Keyboard indicator for Avatime layouts -->
            <shortDescription>avn</shortDescription>
            <description>Avatime</description>
            <languageList>
              <iso639Id>avn</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>gillbt</name>
            <description>English (Ghana, GILLBT)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>gn</name>
        <shortDescription>nqo</shortDescription>
        <description>N'Ko (AZERTY)</description>
        <countryList>
          <iso3166Id>GN</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>nqo</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>ge</name>
        <!-- Keyboard indicator for Georgian layouts -->
        <shortDescription>ka</shortDescription>
        <description>Georgian</description>
        <countryList>
          <iso3166Id>GE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>kat</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>ergonomic</name>
            <description>Georgian (ergonomic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mess</name>
            <description>Georgian (MESS)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ru</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Georgia)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>os</name>
            <description>Ossetian (Georgia)</description>
            <languageList>
              <iso639Id>oss</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>de</name>
        <!-- Keyboard indicator for German layouts -->
        <shortDescription>de</shortDescription>
        <description>German</description>
        <countryList>
          <iso3166Id>DE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>deu</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>deadacute</name>
            <description>German (dead acute)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>deadgraveacute</name>
            <description>German (dead grave acute)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>German (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>e1</name>
            <description>German (E1)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>e2</name>
            <description>German (E2)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>T3</name>
            <description>German (T3)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>German (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ro</name>
            <description>Romanian (Germany)</description>
            <languageList>
              <iso639Id>ron</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ro_nodeadkeys</name>
            <description>Romanian (Germany, no dead keys)</description>
            <languageList>
              <iso639Id>ron</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>German (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>neo</name>
            <description>German (Neo 2)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>German (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac_nodeadkeys</name>
            <description>German (Macintosh, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dsb</name>
            <description>Lower Sorbian</description>
            <languageList>
              <iso639Id>dsb</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dsb_qwertz</name>
            <description>Lower Sorbian (QWERTZ)</description>
            <languageList>
              <iso639Id>dsb</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>German (QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tr</name>
            <description>Turkish (Germany)</description>
            <languageList>
              <iso639Id>tur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ru</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Germany, phonetic)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>deadtilde</name>
            <description>German (dead tilde)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>gr</name>
        <!-- Keyboard indicator for Greek layouts -->
        <shortDescription>gr</shortDescription>
        <description>Greek</description>
        <countryList>
          <iso3166Id>GR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ell</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>simple</name>
            <description>Greek (simple)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>extended</name>
            <description>Greek (extended)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Greek (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>polytonic</name>
            <description>Greek (polytonic)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>hu</name>
        <!-- Keyboard indicator for Hungarian layouts -->
        <shortDescription>hu</shortDescription>
        <description>Hungarian</description>
        <countryList>
          <iso3166Id>HU</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>hun</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>standard</name>
            <description>Hungarian (standard)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Hungarian (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>Hungarian (QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwertz_comma_dead</name>
            <description>Hungarian (QWERTZ, 101-key, comma, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwertz_comma_nodead</name>
            <description>Hungarian (QWERTZ, 101-key, comma, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwertz_dot_dead</name>
            <description>Hungarian (QWERTZ, 101-key, dot, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwertz_dot_nodead</name>
            <description>Hungarian (QWERTZ, 101-key, dot, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwerty_comma_dead</name>
            <description>Hungarian (QWERTY, 101-key, comma, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwerty_comma_nodead</name>
            <description>Hungarian (QWERTY, 101-key, comma, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwerty_dot_dead</name>
            <description>Hungarian (QWERTY, 101-key, dot, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>101_qwerty_dot_nodead</name>
            <description>Hungarian (QWERTY, 101-key, dot, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwertz_comma_dead</name>
            <description>Hungarian (QWERTZ, 102-key, comma, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwertz_comma_nodead</name>
            <description>Hungarian (QWERTZ, 102-key, comma, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwertz_dot_dead</name>
            <description>Hungarian (QWERTZ, 102-key, dot, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwertz_dot_nodead</name>
            <description>Hungarian (QWERTZ, 102-key, dot, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwerty_comma_dead</name>
            <description>Hungarian (QWERTY, 102-key, comma, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwerty_comma_nodead</name>
            <description>Hungarian (QWERTY, 102-key, comma, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwerty_dot_dead</name>
            <description>Hungarian (QWERTY, 102-key, dot, dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>102_qwerty_dot_nodead</name>
            <description>Hungarian (QWERTY, 102-key, dot, no dead keys)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>is</name>
        <!-- Keyboard indicator for Icelandic layouts -->
        <shortDescription>is</shortDescription>
        <description>Icelandic</description>
        <countryList>
          <iso3166Id>IS</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>isl</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>mac_legacy</name>
            <description>Icelandic (Macintosh, legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Icelandic (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Icelandic (Dvorak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>il</name>
        <!-- Keyboard indicator for Hebrew layouts -->
        <shortDescription>he</shortDescription>
        <description>Hebrew</description>
        <countryList>
          <iso3166Id>IL</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>heb</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>lyx</name>
            <description>Hebrew (lyx)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Hebrew (phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>biblical</name>
            <description>Hebrew (Biblical, Tiro)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>it</name>
        <!-- Keyboard indicator for Italian layouts -->
        <shortDescription>it</shortDescription>
        <description>Italian</description>
        <countryList>
          <iso3166Id>IT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ita</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Italian (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Italian (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Italian (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Italian (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>geo</name>
            <description>Georgian (Italy)</description>
            <languageList>
              <iso639Id>kat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ibm</name>
            <description>Italian (IBM 142)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>intl</name>
            <description>Italian (intl., with dead keys)</description>
            <languageList>
              <iso639Id>deu</iso639Id>
              <iso639Id>fra</iso639Id>
              <iso639Id>ita</iso639Id>
              <iso639Id>slk</iso639Id>
              <iso639Id>srd</iso639Id>
              <iso639Id>nap</iso639Id>
              <iso639Id>scn</iso639Id>
              <iso639Id>fur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>scn</name>
            <description>Sicilian</description>
            <languageList>
              <iso639Id>ita</iso639Id>
              <iso639Id>scn</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fur</name>
            <description>Friulian (Italy)</description>
            <languageList>
              <iso639Id>fur</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>jp</name>
        <!-- Keyboard indicator for Japaneses -->
        <shortDescription>ja</shortDescription>
        <description>Japanese</description>
        <countryList>
          <iso3166Id>JP</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>jpn</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>kana</name>
            <description>Japanese (Kana)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>kana86</name>
            <description>Japanese (Kana 86)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>OADG109A</name>
            <description>Japanese (OADG 109A)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Japanese (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Japanese (Dvorak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>kg</name>
        <!-- Keyboard indicator for Kyrgyz layouts -->
        <shortDescription>ki</shortDescription>
        <description>Kyrgyz</description>
        <countryList>
          <iso3166Id>KG</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>kir</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Kyrgyz (phonetic)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>kh</name>
        <!-- Keyboard indicator for Khmer layouts -->
        <shortDescription>km</shortDescription>
        <description>Khmer (Cambodia)</description>
        <countryList>
          <iso3166Id>KH</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>khm</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>kz</name>
        <!-- Keyboard indicator for Kazakh layouts -->
        <shortDescription>kk</shortDescription>
        <description>Kazakh</description>
        <countryList>
          <iso3166Id>KZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>kaz</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>ruskaz</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Kazakhstan, with Kazakh)</description>
            <languageList>
              <iso639Id>kaz</iso639Id>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>kazrus</name>
            <description>Kazakh (with Russian)</description>
            <languageList>
              <iso639Id>kaz</iso639Id>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ext</name>
            <description>Kazakh (extended)</description>
            <languageList>
              <iso639Id>kaz</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latin</name>
            <description>Kazakh (Latin)</description>
            <languageList>
              <iso639Id>kaz</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>la</name>
        <!-- Keyboard indicator for Lao layouts -->
        <shortDescription>lo</shortDescription>
        <description>Lao</description>
        <countryList>
          <iso3166Id>LA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>lao</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>stea</name>
            <description>Lao (STEA)</description>
            <languageList>
              <iso639Id>lao</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>latam</name>
        <!-- Keyboard indicator for Spanish layouts -->
        <shortDescription>es</shortDescription>
        <description>Spanish (Latin American)</description>
        <countryList>
          <iso3166Id>AR</iso3166Id>
          <iso3166Id>BO</iso3166Id>
          <iso3166Id>CL</iso3166Id>
          <iso3166Id>CO</iso3166Id>
          <iso3166Id>CR</iso3166Id>
          <iso3166Id>CU</iso3166Id>
          <iso3166Id>DO</iso3166Id>
          <iso3166Id>EC</iso3166Id>
          <iso3166Id>GT</iso3166Id>
          <iso3166Id>HN</iso3166Id>
          <iso3166Id>HT</iso3166Id>
          <iso3166Id>MX</iso3166Id>
          <iso3166Id>NI</iso3166Id>
          <iso3166Id>PA</iso3166Id>
          <iso3166Id>PE</iso3166Id>
          <iso3166Id>PR</iso3166Id>
          <iso3166Id>PY</iso3166Id>
          <iso3166Id>SV</iso3166Id>
          <iso3166Id>US</iso3166Id>
          <iso3166Id>UY</iso3166Id>
          <iso3166Id>VE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>spa</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Spanish (Latin American, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>deadtilde</name>
            <description>Spanish (Latin American, dead tilde)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Spanish (Latin American, Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak</name>
            <description>Spanish (Latin American, Colemak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak-gaming</name>
            <description>Spanish (Latin American, Colemak for gaming)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>lt</name>
        <!-- Keyboard indicator for Lithuanian layouts -->
        <shortDescription>lt</shortDescription>
        <description>Lithuanian</description>
        <countryList>
          <iso3166Id>LT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>lit</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>std</name>
            <description>Lithuanian (standard)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Lithuanian (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ibm</name>
            <description>Lithuanian (IBM LST 1205-92)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>lekp</name>
            <description>Lithuanian (LEKP)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>lekpa</name>
            <description>Lithuanian (LEKPa)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>sgs</name>
            <description>Samogitian</description>
            <languageList>
              <iso639Id>sgs</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ratise</name>
            <description>Lithuanian (Ratise)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>lv</name>
        <!-- Keyboard indicator for Latvian layouts -->
        <shortDescription>lv</shortDescription>
        <description>Latvian</description>
        <countryList>
          <iso3166Id>LV</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>lav</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>apostrophe</name>
            <description>Latvian (apostrophe)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tilde</name>
            <description>Latvian (tilde)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fkey</name>
            <description>Latvian (F)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>modern</name>
            <description>Latvian (modern)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ergonomic</name>
            <description>Latvian (ergonomic, ŪGJRMV)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>adapted</name>
            <description>Latvian (adapted)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mao</name>
        <!-- Keyboard indicator for Maori layouts -->
        <shortDescription>mi</shortDescription>
        <description>Maori</description>
        <countryList>
          <iso3166Id>NZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>mri</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>me</name>
        <!-- Keyboard indicator for Montenegrin layouts -->
        <shortDescription>sr</shortDescription>
        <description>Montenegrin</description>
        <countryList>
          <iso3166Id>ME</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>srp</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>cyrillic</name>
            <description>Montenegrin (Cyrillic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>cyrillicyz</name>
            <description>Montenegrin (Cyrillic, ZE and ZHE swapped)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinunicode</name>
            <description>Montenegrin (Latin, Unicode)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinyz</name>
            <description>Montenegrin (Latin, QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinunicodeyz</name>
            <description>Montenegrin (Latin, Unicode, QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>cyrillicalternatequotes</name>
            <description>Montenegrin (Cyrillic, with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinalternatequotes</name>
            <description>Montenegrin (Latin, with guillemets)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mk</name>
        <!-- Keyboard indicator for Macedonian layouts -->
        <shortDescription>mk</shortDescription>
        <description>Macedonian</description>
        <countryList>
          <iso3166Id>MK</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>mkd</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Macedonian (no dead keys)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mt</name>
        <!-- Keyboard indicator for Maltese layouts -->
        <shortDescription>mt</shortDescription>
        <description>Maltese</description>
        <countryList>
          <iso3166Id>MT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>mlt</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>us</name>
            <description>Maltese (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>alt-us</name>
            <description>Maltese (US, with AltGr overrides)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>alt-gb</name>
            <description>Maltese (UK, with AltGr overrides)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mn</name>
        <!-- Keyboard indicator for Mongolian layouts -->
        <shortDescription>mn</shortDescription>
        <description>Mongolian</description>
        <countryList>
          <iso3166Id>MN</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>mon</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>no</name>
        <!-- Keyboard indicator for Norwegian layouts -->
        <shortDescription>no</shortDescription>
        <description>Norwegian</description>
        <countryList>
          <iso3166Id>NO</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>nor</iso639Id>
          <iso639Id>nob</iso639Id>
          <iso639Id>nno</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Norwegian (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Norwegian (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Norwegian (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>smi</name>
            <description>Northern Saami (Norway)</description>
            <languageList>
              <iso639Id>sme</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>smi_nodeadkeys</name>
            <description>Northern Saami (Norway, no dead keys)</description>
            <languageList>
              <iso639Id>sme</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Norwegian (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac_nodeadkeys</name>
            <description>Norwegian (Macintosh, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak</name>
            <description>Norwegian (Colemak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>pl</name>
        <!-- Keyboard indicator for Polish layouts -->
        <shortDescription>pl</shortDescription>
        <description>Polish</description>
        <countryList>
          <iso3166Id>PL</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>pol</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Polish (legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwertz</name>
            <description>Polish (QWERTZ)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Polish (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak_quotes</name>
            <description>Polish (Dvorak, with Polish quotes on quotemark key)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak_altquotes</name>
            <description>Polish (Dvorak, with Polish quotes on key 1)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>csb</name>
            <description>Kashubian</description>
            <languageList>
              <iso639Id>csb</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>szl</name>
            <description>Silesian</description>
            <languageList>
              <iso639Id>szl</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ru_phonetic_dvorak</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Poland, phonetic Dvorak)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvp</name>
            <description>Polish (programmer Dvorak)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>pt</name>
        <!-- Keyboard indicator for Portuguese layouts -->
        <shortDescription>pt</shortDescription>
        <description>Portuguese</description>
        <countryList>
          <iso3166Id>PT</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>por</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Portuguese (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Portuguese (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac_nodeadkeys</name>
            <description>Portuguese (Macintosh, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo</name>
            <description>Portuguese (Nativo)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo-us</name>
            <description>Portuguese (Nativo for US keyboards)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>nativo-epo</name>
            <description>Esperanto (Portugal, Nativo)</description>
            <languageList>
              <iso639Id>epo</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ro</name>
        <!-- Keyboard indicator for Romanian layouts -->
        <shortDescription>ro</shortDescription>
        <description>Romanian</description>
        <countryList>
          <iso3166Id>RO</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ron</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>std</name>
            <description>Romanian (standard)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Romanian (Windows)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ru</name>
        <!-- Keyboard indicator for Russian layouts -->
        <shortDescription>ru</shortDescription>
        <description>Russian</description>
        <countryList>
          <iso3166Id>RU</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>rus</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Russian (phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic_winkeys</name>
            <description>Russian (phonetic, Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic_YAZHERTY</name>
            <description>Russian (phonetic, YAZHERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>typewriter</name>
            <description>Russian (typewriter)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Russian (legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>typewriter-legacy</name>
            <description>Russian (typewriter, legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tt</name>
            <description>Tatar</description>
            <languageList>
              <iso639Id>tat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>os_legacy</name>
            <description>Ossetian (legacy)</description>
            <languageList>
              <iso639Id>oss</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>os_winkeys</name>
            <description>Ossetian (Windows)</description>
            <languageList>
              <iso639Id>oss</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>cv</name>
            <description>Chuvash</description>
            <languageList>
              <iso639Id>chv</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>cv_latin</name>
            <description>Chuvash (Latin)</description>
            <languageList>
              <iso639Id>chv</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>udm</name>
            <description>Udmurt</description>
            <languageList>
              <iso639Id>udm</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>kom</name>
            <description>Komi</description>
            <languageList>
              <iso639Id>kom</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>sah</name>
            <description>Yakut</description>
            <languageList>
              <iso639Id>sah</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>xal</name>
            <description>Kalmyk</description>
            <languageList>
              <iso639Id>xal</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dos</name>
            <description>Russian (DOS)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Russian (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>srp</name>
            <description>Serbian (Russia)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
              <iso639Id>srp</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>bak</name>
            <description>Bashkirian</description>
            <languageList>
              <iso639Id>bak</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>chm</name>
            <description>Mari</description>
            <languageList>
              <iso639Id>chm</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic_azerty</name>
            <description>Russian (phonetic, AZERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic_dvorak</name>
            <description>Russian (phonetic, Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>phonetic_fr</name>
            <description>Russian (phonetic, French)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>rs</name>
        <!-- Keyboard indicator for Serbian layouts -->
        <shortDescription>sr</shortDescription>
        <description>Serbian</description>
        <countryList>
          <iso3166Id>RS</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>srp</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>yz</name>
            <description>Serbian (Cyrillic, ZE and ZHE swapped)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latin</name>
            <description>Serbian (Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinunicode</name>
            <description>Serbian (Latin, Unicode)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinyz</name>
            <description>Serbian (Latin, QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinunicodeyz</name>
            <description>Serbian (Latin, Unicode, QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>alternatequotes</name>
            <description>Serbian (Cyrillic, with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>latinalternatequotes</name>
            <description>Serbian (Latin, with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rue</name>
            <description>Pannonian Rusyn</description>
            <languageList>
              <iso639Id>rue</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>si</name>
        <!-- Keyboard indicator for Slovenian layouts -->
        <shortDescription>sl</shortDescription>
        <description>Slovenian</description>
        <countryList>
          <iso3166Id>SI</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>slv</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>alternatequotes</name>
            <description>Slovenian (with guillemets)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Slovenian (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>sk</name>
        <!-- Keyboard indicator for Slovak layouts -->
        <shortDescription>sk</shortDescription>
        <description>Slovak</description>
        <countryList>
          <iso3166Id>SK</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>slk</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>bksl</name>
            <description>Slovak (extended backslash)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty</name>
            <description>Slovak (QWERTY)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>qwerty_bksl</name>
            <description>Slovak (QWERTY, extended backslash)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>es</name>
        <!-- Keyboard indicator for Spanish layouts -->
        <shortDescription>es</shortDescription>
        <description>Spanish</description>
        <countryList>
          <iso3166Id>ES</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>spa</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Spanish (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Spanish (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>deadtilde</name>
            <description>Spanish (dead tilde)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Spanish (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ast</name>
            <shortDescription>ast</shortDescription>
            <description>Asturian (Spain, with bottom-dot H and L)</description>
            <languageList>
              <iso639Id>ast</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>cat</name>
            <shortDescription>ca</shortDescription>
            <description>Catalan (Spain, with middle-dot L)</description>
            <languageList>
              <iso639Id>cat</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Spanish (Macintosh)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>se</name>
        <!-- Keyboard indicator for Swedish layouts -->
        <shortDescription>sv</shortDescription>
        <description>Swedish</description>
        <countryList>
          <iso3166Id>SE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>swe</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>nodeadkeys</name>
            <description>Swedish (no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Swedish (Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rus</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Sweden, phonetic)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rus_nodeadkeys</name>
            <!-- Keyboard indicator for Russian layouts -->
            <shortDescription>ru</shortDescription>
            <description>Russian (Sweden, phonetic, no dead keys)</description>
            <languageList>
              <iso639Id>rus</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>smi</name>
            <description>Northern Saami (Sweden)</description>
            <languageList>
              <iso639Id>sme</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>Swedish (Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>svdvorak</name>
            <description>Swedish (Svdvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us_dvorak</name>
            <description>Swedish (Dvorak, intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <description>Swedish (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>swl</name>
            <description>Swedish Sign Language</description>
            <languageList>
              <iso639Id>swl</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ch</name>
        <!-- Keyboard indicator for German layouts -->
        <shortDescription>de</shortDescription>
        <description>German (Switzerland)</description>
        <countryList>
          <iso3166Id>CH</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>deu</iso639Id>
          <iso639Id>gsw</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>German (Switzerland, legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>de_nodeadkeys</name>
            <!-- Keyboard indicator for German layouts -->
            <shortDescription>de</shortDescription>
            <description>German (Switzerland, no dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fr</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Switzerland)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fr_nodeadkeys</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Switzerland, no dead keys)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fr_mac</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Switzerland, Macintosh)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>de_mac</name>
            <!-- Keyboard indicator for German layouts -->
            <shortDescription>de</shortDescription>
            <description>German (Switzerland, Macintosh)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>sy</name>
        <!-- Keyboard indicator for Arabic layouts -->
        <shortDescription>ar</shortDescription>
        <description>Arabic (Syria)</description>
        <countryList>
          <iso3166Id>SY</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>syr</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>syc</name>
            <!-- Keyboard indicator for Syriac layouts -->
            <shortDescription>syc</shortDescription>
            <description>Syriac</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>syc_phonetic</name>
            <!-- Keyboard indicator for Syriac layouts -->
            <shortDescription>syc</shortDescription>
            <description>Syriac (phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Syria, Latin Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_f</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Syria, F)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_alt</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Syria, Latin Alt-Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>tj</name>
        <!-- Keyboard indicator for Tajik layouts -->
        <shortDescription>tg</shortDescription>
        <description>Tajik</description>
        <countryList>
          <iso3166Id>TJ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tgk</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Tajik (legacy)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>lk</name>
        <!-- Keyboard indicator for Sinhala layouts -->
        <shortDescription>si</shortDescription>
        <description>Sinhala (phonetic)</description>
        <countryList>
          <iso3166Id>LK</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>sin</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>tam_unicode</name>
            <!-- Keyboard indicator for Tamil layouts -->
            <shortDescription>ta</shortDescription>
            <description>Tamil (Sri Lanka, TamilNet '99)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>tam_TAB</name>
            <description>Tamil (Sri Lanka, TamilNet '99, TAB encoding)</description>
            <languageList>
              <iso639Id>tam</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us</name>
            <!-- Keyboard indicator for US layouts -->
            <shortDescription>us</shortDescription>
            <description>Sinhala (US)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>th</name>
        <!-- Keyboard indicator for Thai layouts -->
        <shortDescription>th</shortDescription>
        <description>Thai</description>
        <countryList>
          <iso3166Id>TH</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tha</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>tis</name>
            <description>Thai (TIS-820.2538)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>pat</name>
            <description>Thai (Pattachote)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>tr</name>
        <!-- Keyboard indicator for Turkish layouts -->
        <shortDescription>tr</shortDescription>
        <description>Turkish</description>
        <countryList>
          <iso3166Id>TR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tur</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>f</name>
            <description>Turkish (F)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>alt</name>
            <description>Turkish (Alt-Q)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Turkey, Latin Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_f</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Turkey, F)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ku_alt</name>
            <!-- Keyboard indicator for Kurdish layouts -->
            <shortDescription>ku</shortDescription>
            <description>Kurdish (Turkey, Latin Alt-Q)</description>
            <languageList>
              <iso639Id>kur</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>intl</name>
            <description>Turkish (intl., with dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ot</name>
            <description>Ottoman (Q)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>otf</name>
            <description>Ottoman (F)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>otk</name>
            <description>Old Turkic</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>otkf</name>
            <description>Old Turkic (F)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>tw</name>
        <!-- Keyboard indicator for Taiwanese layouts -->
        <shortDescription>zh</shortDescription>
        <description>Taiwanese</description>
        <countryList>
          <iso3166Id>TW</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fox</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>indigenous</name>
            <description>Taiwanese (indigenous)</description>
            <languageList>
              <iso639Id>ami</iso639Id>
              <iso639Id>tay</iso639Id>
              <iso639Id>bnn</iso639Id>
              <iso639Id>ckv</iso639Id>
              <iso639Id>pwn</iso639Id>
              <iso639Id>pyu</iso639Id>
              <iso639Id>dru</iso639Id>
              <iso639Id>ais</iso639Id>
              <iso639Id>ssf</iso639Id>
              <iso639Id>tao</iso639Id>
              <iso639Id>tsu</iso639Id>
              <iso639Id>trv</iso639Id>
              <iso639Id>xnb</iso639Id>
              <iso639Id>sxr</iso639Id>
              <iso639Id>uun</iso639Id>
              <iso639Id>fos</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>saisiyat</name>
            <!-- Keyboard indicator for Saisiyat layouts -->
            <shortDescription>xsy</shortDescription>
            <description>Saisiyat (Taiwan)</description>
            <languageList>
              <iso639Id>xsy</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ua</name>
        <!-- Keyboard indicator for Ukranian layouts -->
        <shortDescription>uk</shortDescription>
        <description>Ukrainian</description>
        <countryList>
          <iso3166Id>UA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ukr</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Ukrainian (phonetic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>typewriter</name>
            <description>Ukrainian (typewriter)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>winkeys</name>
            <description>Ukrainian (Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>macOS</name>
            <description>Ukrainian (macOS)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Ukrainian (legacy)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rstu</name>
            <description>Ukrainian (standard RSTU)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>rstu_ru</name>
            <description>Russian (Ukraine, standard RSTU)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>homophonic</name>
            <description>Ukrainian (homophonic)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>crh</name>
            <!-- Keyboard indicator for Crimean Tatar layouts -->
            <shortDescription>crh</shortDescription>
            <description>Crimean Tatar (Turkish Q)</description>
            <languageList>
              <iso639Id>crh</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>crh_f</name>
            <!-- Keyboard indicator for Crimean Tatar layouts -->
            <shortDescription>crh</shortDescription>
            <description>Crimean Tatar (Turkish F)</description>
            <languageList>
              <iso639Id>crh</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>crh_alt</name>
            <!-- Keyboard indicator for Crimean Tatar layouts -->
            <shortDescription>crh</shortDescription>
            <description>Crimean Tatar (Turkish Alt-Q)</description>
            <languageList>
              <iso639Id>crh</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>gb</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (UK)</description>
        <countryList>
          <iso3166Id>GB</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>extd</name>
            <description>English (UK, extended, Windows)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>intl</name>
            <description>English (UK, intl., with dead keys)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>English (UK, Dvorak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorakukp</name>
            <description>English (UK, Dvorak, with UK punctuation)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac</name>
            <description>English (UK, Macintosh)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>mac_intl</name>
            <description>English (UK, Macintosh, intl.)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak</name>
            <description>English (UK, Colemak)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak_dh</name>
            <description>English (UK, Colemak-DH)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>pl</name>
            <!-- Keyboard indicator for Polish layouts -->
            <shortDescription>pl</shortDescription>
            <description>Polish (British keyboard)</description>
            <languageList>
              <iso639Id>pol</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>gla</name>
            <shortDescription>gd</shortDescription>
            <description>Scottish Gaelic</description>
            <countryList>
              <iso3166Id>GB</iso3166Id>
              <iso3166Id>CA</iso3166Id>
            </countryList>
            <languageList>
              <iso639Id>eng</iso639Id>
              <iso639Id>gla</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>uz</name>
        <!-- Keyboard indicator for Uzbek layouts -->
        <shortDescription>uz</shortDescription>
        <description>Uzbek</description>
        <countryList>
          <iso3166Id>UZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>uzb</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>latin</name>
            <description>Uzbek (Latin)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>vn</name>
        <!-- Keyboard indicator for Vietnamese layouts -->
        <shortDescription>vi</shortDescription>
        <description>Vietnamese</description>
        <countryList>
          <iso3166Id>VN</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>vie</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>us</name>
            <description>Vietnamese (US)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>fr</name>
            <description>Vietnamese (French)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>kr</name>
        <!-- Keyboard indicator for Korean layouts -->
        <shortDescription>ko</shortDescription>
        <description>Korean</description>
        <countryList>
          <iso3166Id>KR</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>kor</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>kr104</name>
            <description>Korean (101/104-key compatible)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ie</name>
        <!-- Keyboard indicator for Irish layouts -->
        <shortDescription>ie</shortDescription>
        <description>Irish</description>
        <countryList>
          <iso3166Id>IE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>CloGaelach</name>
            <description>CloGaelach</description>
            <languageList>
              <iso639Id>gle</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>UnicodeExpert</name>
            <description>Irish (UnicodeExpert)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ogam</name>
            <description>Ogham</description>
            <languageList>
              <iso639Id>sga</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ogam_is434</name>
            <description>Ogham (IS434)</description>
            <languageList>
              <iso639Id>sga</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>pk</name>
        <!-- Keyboard indicator for Urdu layouts -->
        <shortDescription>ur</shortDescription>
        <description>Urdu (Pakistan)</description>
        <countryList>
          <iso3166Id>PK</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>urd</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>urd-crulp</name>
            <description>Urdu (Pakistan, CRULP)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>urd-nla</name>
            <description>Urdu (Pakistan, NLA)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>ara</name>
            <shortDescription>ar</shortDescription>
            <description>Arabic (Pakistan)</description>
            <languageList>
              <iso639Id>ara</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>snd</name>
            <!-- Keyboard indicator for Sindhi layouts -->
            <shortDescription>sd</shortDescription>
            <description>Sindhi</description>
            <languageList>
              <iso639Id>snd</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>mv</name>
        <!-- Keyboard indicator for Dhivehi layouts -->
        <shortDescription>dv</shortDescription>
        <description>Dhivehi</description>
        <countryList>
          <iso3166Id>MV</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>div</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>za</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (South Africa)</description>
        <countryList>
          <iso3166Id>ZA</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>epo</name>
        <!-- Keyboard indicator for Esperanto layouts -->
        <shortDescription>eo</shortDescription>
        <description>Esperanto</description>
        <languageList>
          <iso639Id>epo</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>legacy</name>
            <description>Esperanto (legacy)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>np</name>
        <!-- Keyboard indicator for Nepali layouts -->
        <shortDescription>ne</shortDescription>
        <description>Nepali</description>
        <countryList>
          <iso3166Id>NP</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>nep</iso639Id>
          <!-- sat-Deva used in Nepal: http://www.ethnologue.com/language/sat -->
          <iso639Id>sat</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>ng</name>
        <!-- Keyboard indicator for English layouts -->
        <shortDescription>en</shortDescription>
        <description>English (Nigeria)</description>
        <countryList>
          <iso3166Id>NG</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>igbo</name>
            <!-- Keyboard indicator for Igbo layouts -->
            <shortDescription>ig</shortDescription>
            <description>Igbo</description>
            <languageList>
              <iso639Id>ibo</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>yoruba</name>
            <!-- Keyboard indicator for Yoruba layouts -->
            <shortDescription>yo</shortDescription>
            <description>Yoruba</description>
            <languageList>
              <iso639Id>yor</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>hausa</name>
            <!-- Keyboard indicator for Hausa layouts -->
            <shortDescription>ha</shortDescription>
            <description>Hausa (Nigeria)</description>
            <languageList>
              <iso639Id>hau</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>et</name>
        <!-- Keyboard indicator for Amharic layouts -->
        <shortDescription>am</shortDescription>
        <description>Amharic</description>
        <countryList>
          <iso3166Id>ET</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>amh</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>sn</name>
        <!-- Keyboard indicator for Wolof layouts -->
        <shortDescription>wo</shortDescription>
        <description>Wolof</description>
        <countryList>
          <iso3166Id>SN</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>wol</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>brai</name>
        <!-- Keyboard indicator for Braille layouts -->
        <shortDescription>brl</shortDescription>
        <description>Braille</description>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>left_hand</name>
            <description>Braille (left-handed)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>left_hand_invert</name>
            <description>Braille (left-handed inverted thumb)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>right_hand</name>
            <description>Braille (right-handed)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>right_hand_invert</name>
            <description>Braille (right-handed inverted thumb)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>tm</name>
        <!-- Keyboard indicator for Turkmen layouts -->
        <shortDescription>tk</shortDescription>
        <description>Turkmen</description>
        <countryList>
          <iso3166Id>TM</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tuk</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>alt</name>
            <description>Turkmen (Alt-Q)</description>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>ml</name>
        <!-- Keyboard indicator for Bambara layouts -->
        <shortDescription>bm</shortDescription>
        <description>Bambara</description>
        <countryList>
          <iso3166Id>ML</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>bam</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>fr-oss</name>
            <!-- Keyboard indicator for French layouts -->
            <shortDescription>fr</shortDescription>
            <description>French (Mali, alt.)</description>
            <languageList>
              <iso639Id>fra</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us-mac</name>
            <!-- Keyboard indicator for English layouts -->
            <shortDescription>en</shortDescription>
            <description>English (Mali, US, Macintosh)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>us-intl</name>
            <!-- Keyboard indicator for English layouts -->
            <shortDescription>en</shortDescription>
            <description>English (Mali, US, intl.)</description>
            <languageList>
              <iso639Id>eng</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>tz</name>
        <!-- Keyboard indicator for Swahili layouts -->
        <shortDescription>sw</shortDescription>
        <description>Swahili (Tanzania)</description>
        <countryList>
          <iso3166Id>TZ</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>swa</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>tg</name>
        <shortDescription>fr-tg</shortDescription>
        <description>French (Togo)</description>
        <countryList>
          <iso3166Id>TG</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>fra</iso639Id>
          <iso639Id>ajg</iso639Id>
          <iso639Id>blo</iso639Id>
          <iso639Id>kpo</iso639Id>
          <iso639Id>ewe</iso639Id>
          <iso639Id>fon</iso639Id>
          <iso639Id>fue</iso639Id>
          <iso639Id>gej</iso639Id>
          <iso639Id>ife</iso639Id>
          <iso639Id>kbp</iso639Id>
          <iso639Id>las</iso639Id>
          <iso639Id>dop</iso639Id>
          <iso639Id>mfg</iso639Id>
          <iso639Id>nmz</iso639Id>
          <iso639Id>bud</iso639Id>
          <iso639Id>gng</iso639Id>
          <iso639Id>kdh</iso639Id>
          <iso639Id>soy</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>ke</name>
        <!-- Keyboard indicator for Swahili layouts -->
        <shortDescription>sw</shortDescription>
        <description>Swahili (Kenya)</description>
        <countryList>
          <iso3166Id>KE</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>swa</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>kik</name>
            <!-- Keyboard indicator for Kikuyu layouts -->
            <shortDescription>ki</shortDescription>
            <description>Kikuyu</description>
            <languageList>
              <iso639Id>kik</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>bw</name>
        <!-- Keyboard indicator for Tswana layouts -->
        <shortDescription>tn</shortDescription>
        <description>Tswana</description>
        <countryList>
          <iso3166Id>BW</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>tsn</iso639Id>
        </languageList>
      </configItem>
    </layout>
    <layout>
      <configItem>
        <name>ph</name>
        <!-- Keyboard indicator for Filipino layouts -->
        <shortDescription>ph</shortDescription>
        <description>Filipino</description>
        <countryList>
          <iso3166Id>PH</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>eng</iso639Id>
          <iso639Id>bik</iso639Id>
          <iso639Id>ceb</iso639Id>
          <iso639Id>fil</iso639Id>
          <iso639Id>hil</iso639Id>
          <iso639Id>ilo</iso639Id>
          <iso639Id>pam</iso639Id>
          <iso639Id>pag</iso639Id>
          <iso639Id>phi</iso639Id>
          <iso639Id>tgl</iso639Id>
          <iso639Id>war</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>qwerty-bay</name>
            <description>Filipino (QWERTY, Baybayin)</description>
            <languageList>
              <iso639Id>bik</iso639Id>
              <iso639Id>ceb</iso639Id>
              <iso639Id>fil</iso639Id>
              <iso639Id>hil</iso639Id>
              <iso639Id>ilo</iso639Id>
              <iso639Id>pam</iso639Id>
              <iso639Id>pag</iso639Id>
              <iso639Id>phi</iso639Id>
              <iso639Id>tgl</iso639Id>
              <iso639Id>war</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>capewell-dvorak</name>
            <description>Filipino (Capewell-Dvorak, Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>capewell-dvorak-bay</name>
            <description>Filipino (Capewell-Dvorak, Baybayin)</description>
            <languageList>
              <iso639Id>bik</iso639Id>
              <iso639Id>ceb</iso639Id>
              <iso639Id>fil</iso639Id>
              <iso639Id>hil</iso639Id>
              <iso639Id>ilo</iso639Id>
              <iso639Id>pam</iso639Id>
              <iso639Id>pag</iso639Id>
              <iso639Id>phi</iso639Id>
              <iso639Id>tgl</iso639Id>
              <iso639Id>war</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>capewell-qwerf2k6</name>
            <description>Filipino (Capewell-QWERF 2006, Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>capewell-qwerf2k6-bay</name>
            <description>Filipino (Capewell-QWERF 2006, Baybayin)</description>
            <languageList>
              <iso639Id>bik</iso639Id>
              <iso639Id>ceb</iso639Id>
              <iso639Id>fil</iso639Id>
              <iso639Id>hil</iso639Id>
              <iso639Id>ilo</iso639Id>
              <iso639Id>pam</iso639Id>
              <iso639Id>pag</iso639Id>
              <iso639Id>phi</iso639Id>
              <iso639Id>tgl</iso639Id>
              <iso639Id>war</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak</name>
            <description>Filipino (Colemak, Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>colemak-bay</name>
            <description>Filipino (Colemak, Baybayin)</description>
            <languageList>
              <iso639Id>bik</iso639Id>
              <iso639Id>ceb</iso639Id>
              <iso639Id>fil</iso639Id>
              <iso639Id>hil</iso639Id>
              <iso639Id>ilo</iso639Id>
              <iso639Id>pam</iso639Id>
              <iso639Id>pag</iso639Id>
              <iso639Id>phi</iso639Id>
              <iso639Id>tgl</iso639Id>
              <iso639Id>war</iso639Id>
            </languageList>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak</name>
            <description>Filipino (Dvorak, Latin)</description>
          </configItem>
        </variant>
        <variant>
          <configItem>
            <name>dvorak-bay</name>
            <description>Filipino (Dvorak, Baybayin)</description>
            <languageList>
              <iso639Id>bik</iso639Id>
              <iso639Id>ceb</iso639Id>
              <iso639Id>fil</iso639Id>
              <iso639Id>hil</iso639Id>
              <iso639Id>ilo</iso639Id>
              <iso639Id>pam</iso639Id>
              <iso639Id>pag</iso639Id>
              <iso639Id>phi</iso639Id>
              <iso639Id>tgl</iso639Id>
              <iso639Id>war</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>md</name>
        <shortDescription>md</shortDescription>
        <description>Moldavian</description>
        <countryList>
          <iso3166Id>MD</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ron</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>gag</name>
            <shortDescription>gag</shortDescription>
            <description>Moldavian (Gagauz)</description>
            <languageList>
              <iso639Id>gag</iso639Id>
            </languageList>
          </configItem>
        </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>id</name>
        <shortDescription>id</shortDescription>
        <description>Indonesian (Latin)</description>
        <countryList>
          <iso3166Id>ID</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ind</iso639Id>
          <iso639Id>msa</iso639Id>
          <iso639Id>min</iso639Id>
          <iso639Id>ace</iso639Id>
          <iso639Id>bjn</iso639Id>
          <iso639Id>tsg</iso639Id>
          <iso639Id>mfa</iso639Id>
        </languageList>
      </configItem>
      <variantList>
       <variant>
         <configItem>
          <name>phonetic</name>
            <description>Indonesian (Arab Pegon, phonetic)</description>
         </configItem>
       </variant>
       <variant>
         <configItem>
          <name>phoneticx</name>
            <description>Indonesian (Arab Pegon, extended phonetic)</description>
         </configItem>
       </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
        <name>jv</name>
        <shortDescription>jv</shortDescription>
        <description>Indonesian (Javanese)</description>
        <countryList>
          <iso3166Id>ID</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>jav</iso639Id>
        </languageList>
      </configItem>
      <variantList/>
    </layout>
    <layout>
      <configItem>
        <name>my</name>
        <shortDescription>ms</shortDescription>
        <description>Malay (Jawi, Arabic Keyboard)</description>
        <countryList>
          <iso3166Id>MY</iso3166Id>
        </countryList>
        <languageList>
          <iso639Id>ind</iso639Id>
          <iso639Id>msa</iso639Id>
          <iso639Id>min</iso639Id>
          <iso639Id>ace</iso639Id>
          <iso639Id>bjn</iso639Id>
          <iso639Id>tsg</iso639Id>
          <iso639Id>mfa</iso639Id>
        </languageList>
      </configItem>
      <variantList>
       <variant>
         <configItem>
          <name>phonetic</name>
            <description>Malay (Jawi, phonetic)</description>
         </configItem>
       </variant>
      </variantList>
    </layout>
    <layout>
      <configItem>
	<name>custom</name>
        <shortDescription>custom</shortDescription>
        <description>A user-defined custom Layout</description>
      </configItem>
      <variantList/>
    </layout>
  </layoutList>
  <optionList>
    <group allowMultipleSelection="true">
      <!-- The key combination used to switch between groups -->
      <configItem>
        <name>grp</name>
        <description>Switching to another layout</description>
      </configItem>
      <option>
        <configItem>
          <name>grp:switch</name>
          <description>Right Alt (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lswitch</name>
          <description>Left Alt (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lwin_switch</name>
          <description>Left Win (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rwin_switch</name>
          <description>Right Win (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:win_switch</name>
          <description>Any Win (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:menu_switch</name>
          <description>Menu (while pressed), Shift+Menu for Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:caps_switch</name>
          <description>Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rctrl_switch</name>
          <description>Right Ctrl (while pressed)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:toggle</name>
          <description>Right Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lalt_toggle</name>
          <description>Left Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:caps_toggle</name>
          <description>Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:shift_caps_toggle</name>
          <description>Shift+Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:shift_caps_switch</name>
          <description>Caps Lock to first layout; Shift+Caps Lock to last layout</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:win_menu_switch</name>
          <description>Left Win to first layout; Right Win/Menu to last layout</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lctrl_rctrl_switch</name>
          <description>Left Ctrl to first layout; Right Ctrl to last layout</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:alt_caps_toggle</name>
          <description>Alt+Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:shifts_toggle</name>
          <description>Both Shift together</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:alts_toggle</name>
          <description>Both Alt together</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:ctrls_toggle</name>
          <description>Both Ctrl together</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:ctrl_shift_toggle</name>
          <description>Ctrl+Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lctrl_lshift_toggle</name>
          <description>Left Ctrl+Left Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rctrl_rshift_toggle</name>
          <description>Right Ctrl+Right Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:ctrl_alt_toggle</name>
          <description>Alt+Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:alt_shift_toggle</name>
          <description>Alt+Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lalt_lshift_toggle</name>
          <description>Left Alt+Left Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:alt_space_toggle</name>
          <description>Alt+Space</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:menu_toggle</name>
          <description>Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lwin_toggle</name>
          <description>Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:win_space_toggle</name>
          <description>Win+Space</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rwin_toggle</name>
          <description>Right Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lshift_toggle</name>
          <description>Left Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rshift_toggle</name>
          <description>Right Shift</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lctrl_toggle</name>
          <description>Left Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:rctrl_toggle</name>
          <description>Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:sclk_toggle</name>
          <description>Scroll Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lctrl_lwin_rctrl_menu</name>
          <description>Left Ctrl+Left Win to first layout; Right Ctrl+Menu to second layout</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp:lctrl_lwin_toggle</name>
          <description>Left Ctrl+Left Win</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- The key combination used to choose the 2nd level of symbols -->
      <configItem>
        <name>lv2</name>
        <description>Key to choose the 2nd level</description>
      </configItem>
      <option>
        <configItem>
          <name>lv2:lsgt_switch</name>
          <description>The "&lt; &gt;" key</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- The key combination used to choose the 3rd (and 4th, together with Shift)
           level of symbols -->
      <configItem>
        <name>lv3</name>
        <description>Key to choose the 3rd level</description>
      </configItem>
      <option>
        <configItem>
          <name>lv3:switch</name>
          <description>Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:menu_switch</name>
          <description>Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:win_switch</name>
          <description>Any Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:lwin_switch</name>
          <description>Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:rwin_switch</name>
          <description>Right Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:alt_switch</name>
          <description>Any Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:lalt_switch</name>
          <description>Left Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:ralt_switch</name>
          <description>Right Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:ralt_switch_multikey</name>
          <description>Right Alt; Shift+Right Alt as Compose</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:ralt_alt</name>
          <description>Right Alt never chooses 3rd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:enter_switch</name>
          <description>Enter on keypad</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:caps_switch</name>
          <description>Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:bksl_switch</name>
          <description>Backslash</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:lsgt_switch</name>
          <description>The "&lt; &gt;" key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:caps_switch_latch</name>
          <description>Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:bksl_switch_latch</name>
          <description>Backslash; acts as onetime lock when pressed together with another 3rd level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv3:lsgt_switch_latch</name>
          <description>The "&lt; &gt;" key; acts as onetime lock when pressed together with another 3rd level chooser</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- Tweaking the position of the "Ctrl" key -->
      <configItem>
        <name>ctrl</name>
        <description>Ctrl position</description>
      </configItem>
      <option>
        <configItem>
          <name>ctrl:nocaps</name>
          <description>Caps Lock as Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:lctrl_meta</name>
          <description>Left Ctrl as Meta</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:swapcaps</name>
          <description>Swap Ctrl and Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:swapcaps_hyper</name>
          <description>Caps Lock as Ctrl, Ctrl as Hyper</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:ac_ctrl</name>
          <description>To the left of "A"</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:aa_ctrl</name>
          <description>At the bottom left</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:rctrl_ralt</name>
          <description>Right Ctrl as Right Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:menu_rctrl</name>
          <description>Menu as Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:swap_lalt_lctl</name>
          <description>Swap Left Alt with Left Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:swap_lwin_lctl</name>
          <description>Swap Left Win with Left Ctrl</description>
        </configItem>
      </option><option>
        <configItem>
          <name>ctrl:swap_rwin_rctl</name>
          <description>Swap Right Win with Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>ctrl:swap_lalt_lctl_lwin</name>
          <description>Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- Using startard LEDs to indicate the alternative (not first) group(s) -->
      <configItem>
        <name>grp_led</name>
        <description>Use keyboard LED to show alternative layout</description>
      </configItem>
      <option>
        <configItem>
          <name>grp_led:num</name>
          <description>Num Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp_led:caps</name>
          <description>Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grp_led:scroll</name>
          <description>Scroll Lock</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- Using LEDs to indicate modifiers -->
      <configItem>
        <name>mod_led</name>
        <description>Use keyboard LED to indicate modifiers</description>
      </configItem>
      <option>
        <configItem>
          <name>mod_led:compose</name>
          <description>Compose</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="false">
      <!-- Select a keypad type -->
      <configItem>
        <name>keypad</name>
        <description>Layout of numeric keypad</description>
      </configItem>
      <option>
        <configItem>
          <name>keypad:legacy</name>
          <description>Legacy</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:oss</name>
          <description>Unicode arrows and math operators</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:future</name>
          <description>Unicode arrows and math operators on default level</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:legacy_wang</name>
          <description>Legacy Wang 724</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:oss_wang</name>
          <description>Wang 724 keypad with Unicode arrows and math operators</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:future_wang</name>
          <description>Wang 724 keypad with Unicode arrows and math operators on default level</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:hex</name>
          <description>Hexadecimal</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:atm</name>
          <description>Phone and ATM style</description>
       </configItem>
      </option>
    </group>
    <!-- This option should override the KPDL key defined in keypad; I hope it's declared in the right place -->
    <group allowMultipleSelection="false">
      <!-- Select a keypad KPDL variant -->
      <configItem>
        <name>kpdl</name>
        <description>Numeric keypad Delete behavior</description>
      </configItem>
      <option>
        <configItem>
          <!-- Actually, with KP_DECIMAL, as the old keypad(dot) -->
          <name>kpdl:dot</name>
          <description>Legacy key with dot</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:comma</name>
          <!-- Actually, with KP_SEPARATOR, as the old keypad(comma) -->
          <description>Legacy key with comma</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:dotoss</name>
          <description>Four-level key with dot</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:dotoss_latin9</name>
          <description>Four-level key with dot, Latin-9 only</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:commaoss</name>
          <description>Four-level key with comma</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:momayyezoss</name>
          <description>Four-level key with momayyez</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:kposs</name>
          <!-- This assumes the KP_ abstract symbols are actually useful for some apps
               The description needs to be rewritten -->
          <description>Four-level key with abstract separators</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>kpdl:semi</name>
          <description>Semicolon on third level</description>
       </configItem>
      </option>
    </group>
    <group allowMultipleSelection="false">
      <!-- Caps Lock tweaks.
           "Internal" capitalization means capitalization using some internal tables.
           Otherwise "as Shift" - means using next group. -->
      <configItem>
        <name>caps</name>
        <description>Caps Lock behavior</description>
      </configItem>
      <option>
        <configItem>
          <name>caps:internal</name>
          <description>Caps Lock uses internal capitalization; Shift "pauses" Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:internal_nocancel</name>
          <description>Caps Lock uses internal capitalization; Shift does not affect Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:shift</name>
          <description>Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:shift_nocancel</name>
          <description>Caps Lock acts as Shift with locking; Shift does not affect Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:capslock</name>
          <description>Caps Lock toggles normal capitalization of alphabetic characters</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:shiftlock</name>
          <description>Caps Lock toggles Shift Lock (affects all keys)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:swapescape</name>
          <description>Swap Esc and Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:escape</name>
          <description>Make Caps Lock an additional Esc</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:escape_shifted_capslock</name>
          <description>Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:backspace</name>
          <description>Make Caps Lock an additional Backspace</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:super</name>
          <description>Make Caps Lock an additional Super</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:hyper</name>
          <description>Make Caps Lock an additional Hyper</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:menu</name>
          <description>Make Caps Lock an additional Menu key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:numlock</name>
          <description>Make Caps Lock an additional Num Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:ctrl_modifier</name>
          <description>Make Caps Lock an additional Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>caps:none</name>
          <description>Caps Lock is disabled</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="false">
      <!-- Using special PC keys (Win, Menu) to work as standard X keys (Super, Hyper, etc.) -->
      <configItem>
        <name>altwin</name>
        <description>Alt and Win behavior</description>
      </configItem>
      <option>
        <configItem>
          <name>altwin:menu</name>
          <description>Add the standard behavior to Menu key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:menu_win</name>
          <description>Menu is mapped to Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:meta_alt</name>
          <description>Alt and Meta are on Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:alt_win</name>
          <description>Alt is mapped to Win and the usual Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:ctrl_win</name>
          <description>Ctrl is mapped to Win and the usual Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:ctrl_rwin</name>
          <description>Ctrl is mapped to Right Win and the usual Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:ctrl_alt_win</name>
          <description>Ctrl is mapped to Alt, Alt to Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:meta_win</name>
          <description>Meta is mapped to Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:left_meta_win</name>
          <description>Meta is mapped to Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:hyper_win</name>
          <description>Hyper is mapped to Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:alt_super_win</name>
          <description>Alt is mapped to Right Win, Super to Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:swap_lalt_lwin</name>
          <description>Left Alt is swapped with Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:swap_alt_win</name>
          <description>Alt is swapped with Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>altwin:prtsc_rwin</name>
          <description>Win is mapped to PrtSc and the usual Win</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- Tweaking the position of the "Compose" key: mapping to existing PC keys -->
      <configItem>
        <name>Compose key</name>
        <description>Position of Compose key</description>
      </configItem>
      <option>
        <configItem>
          <name>compose:ralt</name>
          <description>Right Alt</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:lwin</name>
          <description>Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:lwin-altgr</name>
          <description>3rd level of Left Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:rwin</name>
          <description>Right Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:rwin-altgr</name>
          <description>3rd level of Right Win</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:menu</name>
          <description>Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:menu-altgr</name>
          <description>3rd level of Menu</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:lctrl</name>
          <description>Left Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:lctrl-altgr</name>
          <description>3rd level of Left Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:rctrl</name>
          <description>Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:rctrl-altgr</name>
          <description>3rd level of Right Ctrl</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:caps</name>
          <description>Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:caps-altgr</name>
          <description>3rd level of Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:102</name>
          <description>The "&lt; &gt;" key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:102-altgr</name>
          <description>3rd level of the "&lt; &gt;" key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:paus</name>
          <description>Pause</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:prsc</name>
          <description>PrtSc</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>compose:sclk</name>
          <description>Scroll Lock</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>compat</name>
        <description>Compatibility options</description>
      </configItem>
      <option>
        <configItem>
          <name>numpad:pc</name>
          <description>Default numeric keypad keys</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>numpad:mac</name>
          <description>Numeric keypad always enters digits (as in macOS)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>numpad:microsoft</name>
          <description>Num Lock on: digits; Shift for arrows. Num Lock off: arrows (as in Windows)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>numpad:shift3</name>
          <description>Shift does not cancel Num Lock, chooses 3rd level instead</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>srvrkeys:none</name>
          <description>Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>apple:alupckeys</name>
          <description>Apple Aluminium emulates Pause, PrtSc, Scroll Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>shift:breaks_caps</name>
          <description>Shift cancels Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>misc:typo</name>
          <description>Enable extra typographic characters</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>misc:apl</name>
          <description>Enable APL overlay characters</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>shift:both_capslock</name>
          <description>Both Shift together enable Caps Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>shift:both_capslock_cancel</name>
          <description>Both Shift together enable Caps Lock; one Shift key disables it</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>shift:both_shiftlock</name>
          <description>Both Shift together enable Shift Lock</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>keypad:pointerkeys</name>
          <description>Shift + Num Lock enables PointerKeys</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grab:break_actions</name>
          <description>Allow breaking grabs with keyboard actions (warning: security risk)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>grab:debug</name>
          <description>Allow grab and window tree logging</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <!-- Special shortcuts for the Euro character -->
      <configItem>
        <name>currencysign</name>
        <description>Currency signs</description>
      </configItem>
      <option>
        <configItem>
          <name>eurosign:e</name>
          <description>Euro on E</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>eurosign:2</name>
          <description>Euro on 2</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>eurosign:4</name>
          <description>Euro on 4</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>eurosign:5</name>
          <description>Euro on 5</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>rupeesign:4</name>
          <description>Rupee on 4</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>lv5</name>
        <description>Key to choose 5th level</description>
      </configItem>
      <option>
        <configItem>
          <name>lv5:lsgt_switch</name>
          <description>The "&lt; &gt;" key chooses 5th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:ralt_switch</name>
          <description>Right Alt chooses 5th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:menu_switch</name>
          <description>Menu chooses 5th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:lsgt_switch_lock</name>
          <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:ralt_switch_lock</name>
          <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:lwin_switch_lock</name>
          <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:rwin_switch_lock</name>
          <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
<!--
      <option>
        <configItem>
          <name>lv5:lsgt_switch_lock_cancel</name>
          <description>The "&lt; &gt;" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:ralt_switch_lock_cancel</name>
          <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:lwin_switch_lock_cancel</name>
          <description>Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:rwin_switch_lock_cancel</name>
          <description>Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:lsgt_switch_lock_cancel</name>
          <description>The "&lt; &gt;" key chooses 5th level; acts as onetime lock lock when pressed together with another 5th level chooser</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>lv5:ralt_switch_lock_cancel</name>
          <description>Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser</description>
        </configItem>
      </option>
-->
    </group>
    <group allowMultipleSelection="false">
      <!-- Let space output NBSP, NNBSP, ZWNJ, and ZWJ for the desired level -->
      <configItem>
        <name>nbsp</name>
        <description>Non-breaking space input</description>
      </configItem>
      <option>
        <configItem>
          <name>nbsp:none</name>
          <description>Usual space at any level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level2</name>
          <description>Non-breaking space at the 2nd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level3</name>
          <description>Non-breaking space at the 3rd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level3s</name>
          <description>Non-breaking space at the 3rd level, nothing at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level3n</name>
          <description>Non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level4</name>
          <description>Non-breaking space at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level4n</name>
          <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:level4nl</name>
          <description>Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2</name>
          <description>Zero-width non-joiner at the 2nd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2zwj3</name>
          <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2zwj3nb4</name>
          <description>Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2nb3</name>
          <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2nb3s</name>
          <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, nothing at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2nb3zwj4</name>
          <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj2nb3nnb4</name>
          <description>Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>nbsp:zwnj3zwj4</name>
          <description>Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>japan</name>
        <description>Japanese keyboard options</description>
      </configItem>
      <option>
        <configItem>
          <name>japan:kana_lock</name>
          <description>Kana Lock key is locking</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>japan:nicola_f_bs</name>
          <description>NICOLA-F style Backspace</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>japan:hztg_escape</name>
          <description>Make Zenkaku Hankaku an additional Esc</description>
       </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>korean</name>
        <description>Korean Hangul/Hanja keys</description>
      </configItem>
      <option>
        <configItem>
          <name>korean:ralt_hangul</name>
          <description>Make right Alt a Hangul key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>korean:rctrl_hangul</name>
          <description>Make right Ctrl a Hangul key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>korean:ralt_hanja</name>
          <description>Make right Alt a Hanja key</description>
        </configItem>
      </option>
      <option>
        <configItem>
          <name>korean:rctrl_hanja</name>
          <description>Make right Ctrl a Hanja key</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="false">
      <configItem>
        <name>esperanto</name>
        <description>Esperanto letters with superscripts</description>
      </configItem>
      <option>
        <configItem>
          <name>esperanto:qwerty</name>
          <description>At the corresponding key in a QWERTY layout</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>esperanto:dvorak</name>
          <description>At the corresponding key in a Dvorak layout</description>
       </configItem>
      </option>
      <option>
        <configItem>
          <name>esperanto:colemak</name>
          <description>At the corresponding key in a Colemak layout</description>
       </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>solaris</name>
        <description>Old Solaris keycodes compatibility</description>
      </configItem>
      <option>
        <configItem>
          <name>solaris:sun_compat</name>
          <description>Sun key compatibility</description>
        </configItem>
      </option>
    </group>
    <group allowMultipleSelection="true">
      <configItem>
        <name>terminate</name>
        <description>Key sequence to kill the X server</description>
      </configItem>
      <option>
        <configItem>
          <name>terminate:ctrl_alt_bksp</name>
          <description>Ctrl+Alt+Backspace</description>
        </configItem>
      </option>
    </group>
  </optionList>
</xkbConfigRegistry>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ى            ؉                   ͐    ې            	                 M  ^      ( c               S  ^      / c      6 3           VW    @   A    `                   F       N       DO       l       V    @  ^    `  f      uR      o      [      {        $          (      0  Y k   @            Ƒ      0P   @  PP     Б     '  *     
  0     W     @  ݑ    `      މ       ߉ `  #    @          @   I       F  @	  |    @
   ,  `
  | k   
  	M *      LN *      WN *   @  _N *   `  N *     ER *      *      *     # K      / *      =    @  I %  (    `       P  `              J  !  @  + k     V    [ F     [    @  [    H  ;          h ͉         @  a      f      v       *                       @      `      ǒ    ג           @          +     I  @  Z    n           @          :j k    	          ȓ 	     ړ                     %    7    H    Y    f 	     w                 Ȕ                    #      3        ;        B       @~ k       v k   @   R      Z &      h $      q 
                      Ε    ە                ! 	   3 
   E    V                    ɂ      c   0                    %:     @  p   (   w %      +`	 %  @   z @           B      uR                      @             @   '  *  `                                                      
                       
             ډ               
                         ։               
                                 
                                           
                                    
                       
                             
*            *                 
                             
                 
       $       [  $      Ȗ $      ̖ $      P *       P *   @   &  *   `   Ԗ *      Q *      #Q *          
               
                          	              r        Չ        ׉        F                                                                                                                                                               
                   G        $                                و                ׈                                }        ~                z        {        |                
    x        w        
   @~ k   W   8    9       
   @~ k    c  L Ĉ P    ;       
k   b  g    =       
    ג    ?       
   r  VW    v    {        A       
   r  VW            C       
     r        E       
   r      G       
    r  З    I     G       
              L     L     L     L       
    r     P *   .    Q D    L U    L e    L p    L     L     L     L     L       ژ    L       
   r          ]       
    @~ k      	    _ !    G       
*   r  Q *   2    b B    I Q    _ c    I       
    r      G r    g     g scsi_lun scsi_host_template queuecommand init_cmd_priv exit_cmd_priv eh_abort_handler eh_device_reset_handler eh_target_reset_handler eh_bus_reset_handler eh_host_reset_handler slave_alloc slave_configure slave_destroy target_alloc target_destroy scan_finished change_queue_depth mq_poll dma_need_drain bios_param show_info eh_timed_out eh_should_retry_cmd host_reset proc_name can_queue sg_prot_tablesize dma_boundary cmd_per_lun tag_alloc_policy track_queue_depth supported_mode emulated skip_settle_delay no_write_same host_tagset max_host_blocked shost_groups sdev_groups rpm_autosuspend_delay Scsi_Host __devices __targets starved_list default_lock host_lock scan_mutex eh_abort_list eh_cmd_q ehandler eh_action host_wait hostt transportt tagset_refcnt tagset_freed host_blocked host_failed host_eh_scheduled host_no eh_deadline last_reset max_channel max_id max_lun max_cmd_len opt_sectors active_mode host_self_blocked reverse_ordering tmf_in_progress async_scan eh_noresume short_inquiry no_scsi2_lun_in_cdb work_q_name work_q tmf_work_q prot_capabilities prot_guard_type n_io_port dma_channel shost_state shost_gendev shost_dev shost_data scsi_cmnd eh_entry abort_work eh_eflags budget_token jiffies_at_alloc prot_op prot_type prot_flags submitter cmd_len sc_data_direction cmnd sdb prot_sdb underflow transfersize resid_len sense_len sense_buffer extra_len host_scribble scsi_device same_target_siblings budget_map device_blocked restarts starved_entry max_queue_depth last_queue_full_depth last_queue_full_count last_queue_full_time queue_ramp_up_period last_queue_ramp_up scsi_level inq_periph_qual inquiry_mutex inquiry_len inquiry vpd_pg0 vpd_pg83 vpd_pg80 vpd_pg89 vpd_pgb0 vpd_pgb1 vpd_pgb2 sdev_target sdev_bflags eh_timeout manage_system_start_stop manage_runtime_start_stop manage_shutdown force_runtime_start_on_system_start lockable borken sdtr wdtr tagged_supported simple_tags was_reset expecting_cc_ua use_10_for_rw use_10_for_ms set_dbd_for_ms read_before_ms no_report_opcodes use_16_for_rw skip_ms_page_8 skip_ms_page_3f skip_vpd_pages try_vpd_pages use_192_bytes_for_3f no_start_on_add allow_restart no_start_on_resume start_stop_pwr_cond no_uld_attach select_no_atn fix_capacity guess_capacity retry_hwerror last_sector_bug no_read_disc_info no_read_capacity_16 try_rc_10_first security_supported wce_default_on no_dif broken_fua lun_in_cdb unmap_limit_for_ws rpm_autosuspend ignore_media_change silence_suspend no_vpd_size queue_stopped offline_already disk_events_disable_depth supported_events max_device_blocked iorequest_cnt iodone_cnt ioerr_cnt iotmo_cnt sdev_gendev sdev_dev dma_drain_len dma_drain_buf sg_timeout sg_reserved_size bsg_dev access_state state_mutex sdev_state quiesced_by sdev_data scsi_target starget_sdev_user reap_ref single_lun pdt_1f_for_no_lun no_report_luns expecting_lun_change target_busy target_blocked max_target_blocked starget_data scsi_host_state SHOST_CREATED SHOST_RUNNING SHOST_CANCEL SHOST_DEL SHOST_RECOVERY SHOST_CANCEL_RECOVERY SHOST_DEL_RECOVERY scsi_transport_template CPL_PASS_OPEN_REQ CPL_PASS_ACCEPT_RPL CPL_ACT_OPEN_REQ CPL_SET_TCB_FIELD CPL_GET_TCB CPL_CLOSE_CON_REQ CPL_CLOSE_LISTSRV_REQ CPL_ABORT_REQ CPL_ABORT_RPL CPL_TX_DATA CPL_RX_DATA_ACK CPL_TX_PKT CPL_L2T_WRITE_REQ CPL_SMT_WRITE_REQ CPL_TID_RELEASE CPL_SRQ_TABLE_REQ CPL_TX_DATA_ISO CPL_CLOSE_LISTSRV_RPL CPL_GET_TCB_RPL CPL_L2T_WRITE_RPL CPL_PASS_OPEN_RPL CPL_ACT_OPEN_RPL CPL_PEER_CLOSE CPL_ABORT_REQ_RSS CPL_ABORT_RPL_RSS CPL_SMT_WRITE_RPL CPL_RX_PHYS_ADDR CPL_CLOSE_CON_RPL CPL_ISCSI_HDR CPL_RDMA_CQE CPL_RDMA_CQE_READ_RSP CPL_RDMA_CQE_ERR CPL_RX_DATA CPL_SET_TCB_RPL CPL_RX_PKT CPL_RX_DDP_COMPLETE CPL_ACT_ESTABLISH CPL_PASS_ESTABLISH CPL_RX_DATA_DDP CPL_PASS_ACCEPT_REQ CPL_RX_ISCSI_CMP CPL_TRACE_PKT_T5 CPL_RX_ISCSI_DDP CPL_RX_TLS_CMP CPL_RDMA_READ_REQ CPL_PASS_OPEN_REQ6 CPL_ACT_OPEN_REQ6 CPL_TX_TLS_PDU CPL_TX_TLS_SFO CPL_TX_SEC_PDU CPL_TX_TLS_ACK CPL_RDMA_TERMINATE CPL_RDMA_WRITE CPL_SGE_EGR_UPDATE CPL_RX_MPS_PKT CPL_TRACE_PKT CPL_TLS_DATA CPL_ISCSI_DATA CPL_FW4_MSG CPL_FW4_PLD CPL_FW4_ACK CPL_SRQ_TABLE_RPL CPL_RX_PHYS_DSGL CPL_FW6_MSG CPL_FW6_PLD CPL_TX_TNL_LSO CPL_TX_PKT_LSO CPL_TX_PKT_XT NUM_CPL_CMDS CPL_error CPL_ERR_NONE CPL_ERR_TCAM_PARITY CPL_ERR_TCAM_MISS CPL_ERR_TCAM_FULL CPL_ERR_BAD_LENGTH CPL_ERR_BAD_ROUTE CPL_ERR_CONN_RESET CPL_ERR_CONN_EXIST_SYNRECV CPL_ERR_CONN_EXIST CPL_ERR_ARP_MISS CPL_ERR_BAD_SYN CPL_ERR_CONN_TIMEDOUT CPL_ERR_XMIT_TIMEDOUT CPL_ERR_PERSIST_TIMEDOUT CPL_ERR_FINWAIT2_TIMEDOUT CPL_ERR_KEEPALIVE_TIMEDOUT CPL_ERR_RTX_NEG_ADVICE CPL_ERR_PERSIST_NEG_ADVICE CPL_ERR_KEEPALV_NEG_ADVICE CPL_ERR_ABORT_FAILED CPL_ERR_IWARP_FLM CPL_CONTAINS_READ_RPL CPL_CONTAINS_WRITE_RPL ULP_MODE_NONE ULP_MODE_ISCSI ULP_MODE_RDMA ULP_MODE_TCPDDP ULP_MODE_FCOE ULP_MODE_TLS ULP_CRC_HEADER ULP_CRC_DATA CPL_ABORT_SEND_RST CPL_ABORT_NO_RST opcode_tid work_request_hdr wr_hi wr_mid wr_lo cpl_act_open_req ot peer_port peer_ip opt0 opt2 cpl_t5_act_open_req cpl_t6_act_open_req opt3 cpl_act_open_req6 local_ip_hi local_ip_lo peer_ip_hi peer_ip_lo cpl_t5_act_open_req6 cpl_t6_act_open_req6 cpl_act_open_rpl atid_status cpl_act_establish tos_atid mac_idx cpl_set_tcb_field reply_ctrl word_cookie cpl_set_tcb_rpl cpl_close_con_req cpl_close_con_rpl cpl_abort_req_rss cpl_abort_req cpl_abort_rpl_rss cpl_abort_rpl cpl_peer_close cpl_iscsi_hdr pdu_len_ddp nxt_seq ddp_report cpl_rx_data_ddp ulp_crc ddpvld cpl_rx_iscsi_cmp cpl_tx_data_iso op_to_scsi ahs_len mpdu burst_size reserved2_seglen_offset datasn_offset buffer_offset cpl_rx_data dack_mode heartbeat ddp_off cpl_rx_data_ack credit_dack FW_TYPE_CMD_RPL FW_TYPE_WR_RPL FW_TYPE_CQE FW_TYPE_OFLD_CONNECTION_WR_RPL FW_TYPE_RSSCPL cpl_fw4_ack credits seq_vld ULP_TX_MEM_READ ULP_TX_MEM_WRITE ULP_TX_PKT ULP_TX_SC_NOOP ULP_TX_SC_IMM ULP_TX_SC_DSGL ULP_TX_SC_ISGL ULP_TX_SC_MEMRD ulptx_idata cmd_more ulp_mem_io len16 NCHAN MAX_MTU EEPROMSIZE EEPROMVSIZE EEPROMPFSIZE RSS_NENTRIES T6_RSS_NENTRIES TCB_SIZE NMTUS NCCTRL_WIN NTX_SCHED PM_NSTATS T6_PM_NSTATS MBOX_LEN TRACE_LEN FILTER_OPT_LEN SF_PAGE_SIZE SF_SEC_SIZE SGE_MAX_WR_LEN SGE_CTXT_SIZE SGE_NTIMERS SGE_NCOUNTERS SGE_NDBQTIMERS SGE_MAX_IQ_SIZE SGE_TIMER_RSTRT_CNTR SGE_TIMER_UPD_CIDX SGE_EQ_IDXSIZE SGE_INTRDST_PCI SGE_INTRDST_IQ SGE_UPDATEDEL_NONE SGE_UPDATEDEL_INTR SGE_UPDATEDEL_STPG SGE_UPDATEDEL_BOTH SGE_HOSTFCMODE_NONE SGE_HOSTFCMODE_IQ SGE_HOSTFCMODE_STPG SGE_HOSTFCMODE_BOTH SGE_FETCHBURSTMIN_16B SGE_FETCHBURSTMIN_32B SGE_FETCHBURSTMIN_64B SGE_FETCHBURSTMIN_128B SGE_FETCHBURSTMAX_64B SGE_FETCHBURSTMAX_128B SGE_FETCHBURSTMAX_256B SGE_FETCHBURSTMAX_512B SGE_CIDXFLUSHTHRESH_1 SGE_CIDXFLUSHTHRESH_2 SGE_CIDXFLUSHTHRESH_4 SGE_CIDXFLUSHTHRESH_8 SGE_CIDXFLUSHTHRESH_16 SGE_CIDXFLUSHTHRESH_32 SGE_CIDXFLUSHTHRESH_64 SGE_CIDXFLUSHTHRESH_128 SGE_INGPADBOUNDARY_SHIFT pcie_memwin MEMWIN_NIC MEMWIN_RSVD1 MEMWIN_RSVD2 MEMWIN_RDMA MEMWIN_RSVD4 MEMWIN_FOISCSI MEMWIN_CSIOSTOR MEMWIN_RSVD7 sge_qstat cidx vmcoredd_data dump_name vmcoredd_callback chip_type T4_A1 T4_A2 T4_FIRST_REV T4_LAST_REV T5_A0 T5_A1 T5_FIRST_REV T5_LAST_REV T6_A0 T6_FIRST_REV T6_LAST_REV CPL_PRIORITY_DATA CPL_PRIORITY_SETUP CPL_PRIORITY_TEARDOWN CPL_PRIORITY_LISTEN CPL_PRIORITY_ACK CPL_PRIORITY_CONTROL serv_entry aopen_entry eotid_entry tid_info tid_tab tid_base ntids stid_tab stid_bmap nstids stid_base nhash hash_base atid_tab natids atid_base hpftid_tab hpftid_bmap nhpftids hpftid_base ftid_tab ftid_bmap nftids ftid_base aftid_base aftid_end sftid_base nsftids atid_lock afree atids_in_use stid_lock stids_in_use v6_stids_in_use sftids_in_use eotid_tab eotid_bmap eotid_base neotids tids_in_use hash_tids_in_use conns_in_use eotids_in_use ftid_lock tc_hash_tids_max_prio filter_entry l2t smt filter_ctx closure chcr_ktls ktls_refcount cxgb4_uld CXGB4_ULD_INIT CXGB4_ULD_RDMA CXGB4_ULD_ISCSI CXGB4_ULD_ISCSIT CXGB4_ULD_CRYPTO CXGB4_ULD_IPSEC CXGB4_ULD_TLS CXGB4_ULD_KTLS CXGB4_ULD_MAX cxgb4_state CXGB4_STATE_UP CXGB4_STATE_START_RECOVERY CXGB4_STATE_DOWN CXGB4_STATE_DETACH CXGB4_STATE_FATAL_ERROR cxgb4_control CXGB4_CONTROL_DB_FULL CXGB4_CONTROL_DB_EMPTY CXGB4_CONTROL_DB_DROP cxgb4_range cxgb4_virt_res ddp iscsi stag pbl ocq ncrypto_fc ppod_edram chcr_stats_debug cipher_rqst digest_rqst aead_rqst tls_pdu_tx tls_pdu_rx tls_key cxgb4_lld_info tids vr mtus rxq_ids ciq_ids nrxq ntxq nciq nchan default partial alphanumeric_keys
xkb_symbols "basic" {

    include "latin"

    name[Group1]="French";

    key <AE01>	{ [ ampersand,          1,  onesuperior,   exclamdown ]	};
    key <AE02>	{ [    eacute,          2,   asciitilde,    oneeighth ]	};
    key <AE03>	{ [  quotedbl,          3,   numbersign,     sterling ]	};
    key <AE04>	{ [apostrophe,          4,    braceleft,       dollar ]	};
    key <AE05>	{ [ parenleft,          5,  bracketleft, threeeighths ]	};
    key <AE06>	{ [     minus,          6,          bar,  fiveeighths ]	};
    key <AE07>	{ [    egrave,          7,        grave, seveneighths ]	};
    key <AE08>	{ [underscore,          8,    backslash,    trademark ]	};
    key <AE09>	{ [  ccedilla,          9,  asciicircum,    plusminus ]	};
    key <AE10>	{ [    agrave,          0,           at,       degree ]	};
    key <AE11>	{ [parenright,     degree, bracketright, questiondown ]	};
    key <AE12>	{ [     equal,       plus,   braceright,  dead_ogonek ]	};

    key <AD01>	{ [         a,          A,           ae,           AE ]	};
    key <AD02>	{ [         z,          Z, guillemotleft,        less ]	};
    key <AD03>	{ [         e,          E,     EuroSign,         cent ]	};
    key <AD11>	{ [dead_circumflex, dead_diaeresis, dead_diaeresis, dead_abovering ] };
    key <AD12>	{ [    dollar,   sterling,     currency,  dead_macron ]	};

    key <AC01>	{ [         q,          Q,           at,  Greek_OMEGA ]	};
    key <AC10>	{ [         m,          M,           mu,    masculine ]	};
    key <AC11>	{ [    ugrave,    percent, dead_circumflex, dead_caron]	};
    key <TLDE>	{ [twosuperior, asciitilde,     notsign,      notsign ]	};

    key <BKSL>	{ [  asterisk,         mu,   dead_grave,   dead_breve ]	};
    key <AB01>	{ [         w,          W,      lstroke,      Lstroke ]	};
    key <AB07>	{ [     comma,   question,   dead_acute, dead_doubleacute ] };
    key <AB08>	{ [ semicolon,     period,        U2022,     multiply ]	}; // bullet
    key <AB09>	{ [     colon,      slash, periodcentered,   division ]	};
    key <AB10>	{ [    exclam,    section, dead_belowdot, dead_abovedot ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "olpc" {

    // #HW-SPECIFIC

    // Contact: Sayamindu Dasgupta <sayamindu@laptop.org>
    include "fr(basic)"

    name[Group1]="French";

    key <I219>	{ [ less, greater ]	};
    key <AD11>	{ [ dead_circumflex, dead_diaeresis, notsign, dead_abovering ]	};
    key <AB08>	{ [ semicolon, period, underscore, multiply ]	};
    key <TLDE>	{ [ twosuperior, asciitilde, VoidSymbol, VoidSymbol ]	};

    // Some keys only have the Shift+AltGr character printed on them (alongside
    // the unmodified one). Make such keys shift-invariant so that the printed
    // value is achieved by pressing AltGr or Shift+AltGr.
    key <AB02>	{ [ x,  X,  guillemotright, guillemotright ]	};
    key <AC02>	{ [ s,  S,  ssharp, U1E9E ]	};
    key <AD02>	{ [ z,  Z,  guillemotleft, guillemotleft ]	};
};

partial alphanumeric_keys
xkb_symbols "nodeadkeys" {

    // Modifies the basic French layout to eliminate all dead keys

    include "fr(basic)"

    name[Group1]="French (no dead keys)";

    key <AE12>	{ [     equal,       plus,   braceright,       ogonek ]	};
    key <AD11>	{ [asciicircum,  diaeresis ]	};
    key <AD12>	{ [    dollar,   sterling,     currency,       macron ]	};
    key <AC11>	{ [    ugrave,    percent,  asciicircum,        caron ]	};
    key <BKSL>	{ [  asterisk,         mu,        grave,        breve ]	};
    key <AB07>	{ [     comma,   question,        acute,  doubleacute ]	};
    key <AB10>	{ [    exclam,    section, dead_belowdot,    abovedot ]	};
};


// Unicode French derivative
// Loose refactoring of the historic Linux French keyboard layout
//
// Copyright © 2006-2008 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
//
// Credits (fr-latin1, fr-latin0, fr-latin9)
//   © 199x-1996 René Cougnenc ✝
//   © 1997-2002 Guylhem Aznar <clavier @ externe.net>
//   © 2003-2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ ³ ¸ │ 1 ̨  │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃  arrière┃
// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
// ┃       ┃ A Æ │ Z Â │ E ¢ │ R Ê │ T Þ │ Y Ÿ │ U Û │ I Î │ O Œ │ P Ô │ ¨ ˚ │ £ Ø ┃Entrée ┃
// ┃Tab ↹  ┃ a æ │ z â │ e € │ r ê │ t þ │ y ÿ │ u û │ i î │ o œ │ p ô │ ^ ~ │ $ ø ┃   ⏎   ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
// ┃        ┃ Q Ä │ S „ │ D Ë │ F ‚ │ G ¥ │ H Ð │ J Ü │ K Ï │ L Ŀ │ M Ö │ % Ù │ µ ̄  ┃      ┃
// ┃Maj ⇬   ┃ q ä │ s ß │ d ë │ f ‘ │ g ’ │ h ð │ j ü │ k ï │ l ŀ │ m ö │ ù ' │ * ` ┃      ┃
// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
// ┃       ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N → │ ? … │ . . │ / ∕ │ § − ┃             ┃
// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v ⍽ │ b ↓ │ n ¬ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧      ┃
// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃       ┃       ┃       ┃ ␣         Espace fine insécable ⍽ ┃       ┃       ┃       ┃
// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣ Espace       Espace insécable ⍽ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "oss" {

    include "latin"
    include "level3(ralt_switch)"
    include "nbsp(level4n)"
    include "keypad(oss)"

    name[Group1]="French (alt.)";

    // First row
    key <TLDE>	{ [      twosuperior,    threesuperior,          onesuperior,          dead_cedilla ] }; // ² ³ ¹ ¸
    key <AE01>	{ [        ampersand,                1,           dead_caron,           dead_ogonek ] }; // & 1 ˇ ̨
    key <AE02>	{ [           eacute,                2,           asciitilde,                Eacute ] }; // é 2 ~ É
    key <AE03>	{ [         quotedbl,                3,           numbersign,            dead_breve ] }; // " 3 # ˘
    key <AE04>	{ [       apostrophe,                4,            braceleft,             0x1002014 ] }; // ' 4 { — (tiret cadratin)
    key <AE05>	{ [        parenleft,                5,          bracketleft,             0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin)
    key <AE06>	{ [            minus,                6,                  bar,             0x1002011 ] }; // - 6 | ‑ (tiret insécable)
    key <AE07>	{ [           egrave,                7,                grave,                Egrave ] }; // è 7 ` È
    key <AE08>	{ [       underscore,                8,            backslash,             trademark ] }; // _ 8 \ ™
    key <AE09>	{ [         ccedilla,                9,          asciicircum,              Ccedilla ] }; // ç 9 ^ Ç
    key <AE10>	{ [           agrave,                0,                   at,                Agrave ] }; // à 0 @ À
    key <AE11>	{ [       parenright,           degree,         bracketright,              notequal ] }; // ) ° ] ≠
    key <AE12>	{ [            equal,             plus,           braceright,             plusminus ] }; // = + } ±

    // Second row
    key <AD01>	{ [                a,                A,                   ae,                    AE ] }; // a A æ Æ
    key <AD02>	{ [                z,                Z,          acircumflex,           Acircumflex ] }; // z Z â Â
    key <AD03>	{ [                e,                E,             EuroSign,                  cent ] }; // e E € ¢
    key <AD04>	{ [                r,                R,          ecircumflex,           Ecircumflex ] }; // r R ê Ê
    key <AD05>	{ [                t,                T,                thorn,                 THORN ] }; // t T þ Þ
    key <AD06>	{ [                y,                Y,           ydiaeresis,            Ydiaeresis ] }; // y Y ÿ Ÿ
    key <AD07>	{ [                u,                U,          ucircumflex,           Ucircumflex ] }; // u U û Û
    key <AD08>	{ [                i,                I,          icircumflex,           Icircumflex ] }; // i I î Î
    key <AD09>	{ [                o,                O,                   oe,                    OE ] }; // o O œ Œ
    key <AD10>	{ [                p,                P,          ocircumflex,           Ocircumflex ] }; // p P ô Ô
    key <AD11>	{ [  dead_circumflex,   dead_diaeresis,           dead_tilde,        dead_abovering ] }; // ^ ̈ ̃ ˚
    key <AD12>	{ [           dollar,         sterling,               oslash,              Ooblique ] }; // $ £ ø Ø

    // Third row
    key <AC01>	{ [                q,                Q,           adiaeresis,            Adiaeresis ] }; // q Q ä Ä
    key <AC02>	{ [                s,                S,               ssharp,    doublelowquotemark ] }; // s S ß „
    key <AC03>	{ [                d,                D,           ediaeresis,            Ediaeresis ] }; // d D ë Ë
    key <AC04>	{ [                f,                F,  leftsinglequotemark,    singlelowquotemark ] }; // f F ‘ ‚
    key <AC05>	{ [                g,                G, rightsinglequotemark,                   yen ] }; // g G ’ ¥
    key <AC06>	{ [                h,                H,                  eth,                   ETH ] }; // h H ð Ð
    key <AC07>	{ [                j,                J,           udiaeresis,            Udiaeresis ] }; // j J ü Ü
    key <AC08>	{ [                k,                K,           idiaeresis,            Idiaeresis ] }; // k K ï Ï
    key <AC09>	{ [                l,                L,            0x1000140,             0x100013F ] }; // l L ŀ Ŀ
    key <AC10>	{ [                m,                M,           odiaeresis,            Odiaeresis ] }; // m M ö Ö
    key <AC11>	{ [           ugrave,          percent,           dead_acute,                Ugrave ] }; // ù % ' Ù
    key <BKSL>	{ [         asterisk,               mu,           dead_grave,           dead_macron ] }; // * µ ` ̄

    // Fourth row
    key <LSGT>  { [             less,          greater,        lessthanequal,      greaterthanequal ] }; // < > ≤ ≥
    key <AB01>  { [                w,                W,        guillemotleft,   leftdoublequotemark ] }; // w W « “
    key <AB02>  { [                x,                X,       guillemotright,  rightdoublequotemark ] }; // x X » ”
    key <AB03>  { [                c,                C,            copyright,            registered ] }; // c C © ®
    key <AB04>  { [                v,                V,            0x100202F,             leftarrow ] }; // v V ⍽ ← (espace fine insécable)
    key <AB05>  { [                b,                B,            downarrow,               uparrow ] }; // b B ↓ ↑
    key <AB06>  { [                n,                N,              notsign,            rightarrow ] }; // n N ¬ →
    key <AB07>  { [            comma,         question,         questiondown,             0x1002026 ] }; // , ? ¿ …
    key <AB08>  { [        semicolon,           period,             multiply,             0x10022C5 ] }; // ; . × ⋅
    key <AB09>  { [            colon,            slash,             division,             0x1002215 ] }; // : / ÷ ∕
    key <AB10>  { [           exclam,          section,           exclamdown,             0x1002212 ] }; // ! § ¡ −
};

partial alphanumeric_keys
xkb_symbols "oss_latin9" {

    // Restricts the fr(oss) layout to latin9 symbols

    include "fr(oss)"
    include "keypad(oss_latin9)"

    name[Group1]="French (alt., Latin-9 only)";

    // First row
    key <AE01>	{ [        ampersand,                1,           dead_caron,          dead_cedilla ] }; // & 1 ˇ ¸
    key <AE03>	{ [         quotedbl,                3,           numbersign,            dead_tilde ] }; // " 3 # ~
    key <AE04>	{ [       apostrophe,                4,            braceleft,            underscore ] }; // ' 4 { _
    key <AE05>	{ [        parenleft,                5,          bracketleft,                 minus ] }; // ( 5 [ -
    key <AE06>	{ [            minus,                6,                  bar,                 minus ] }; // - 6 | -
    key <AE08>	{ [       underscore,                8,            backslash,             backslash ] }; // _ 8 \ \
    key <AE11>	{ [       parenright,           degree,         bracketright,                 equal ] }; // ) ° ] =

    // Third row
    key <AC02>	{ [                s,                S,               ssharp,         guillemotleft ] }; // s S ß «
    key <AC04>	{ [                f,                F,           apostrophe,            apostrophe ] }; // f F ' '
    key <AC05>	{ [                g,                G,           apostrophe,                   yen ] }; // g G ' ¥
    key <AC09>	{ [                l,                L,       periodcentered,        periodcentered ] }; // l L · ·
    key <BKSL>	{ [         asterisk,               mu,           dead_grave,       dead_circumflex ] }; // * µ ` ^

    // Fourth row
    key <LSGT>  { [             less,          greater,                 less,               greater ] }; // < > < >
    key <AB01>  { [                w,                W,        guillemotleft,         guillemotleft ] }; // w W « «
    key <AB02>  { [                x,                X,       guillemotright,        guillemotright ] }; // x X » »
    key <AB04>  { [                v,                V,         nobreakspace,                  less ] }; // v V ⍽ < (espace insécable)
    key <AB05>  { [                b,                B,                minus,           asciicircum ] }; // b B - ^
    key <AB06>  { [                n,                N,              notsign,               greater ] }; // n N ¬ >
    key <AB07>  { [            comma,         question,         questiondown,                period ] }; // , ? ¿ .
    key <AB08>  { [        semicolon,           period,             multiply,        periodcentered ] }; // ; . × ·
    key <AB09>  { [            colon,            slash,             division,                 slash ] }; // : / ÷ /
    key <AB10>  { [           exclam,          section,           exclamdown,                 minus ] }; // ! § ¡ -
};

partial alphanumeric_keys
xkb_symbols "oss_nodeadkeys" {

    // Modifies the basic fr(oss) layout to eliminate all dead keys

    include "fr(oss)"

    name[Group1]="French (alt., no dead keys)";

    key <TLDE>	{ [      twosuperior,    threesuperior,          onesuperior,               cedilla ] }; // ² ³ ¹ ¸
    key <AE01>	{ [        ampersand,                1,                caron,                ogonek ] }; // & 1 ˇ ̨
    key <AE03>	{ [         quotedbl,                3,           numbersign,                 breve ] }; // " 3 # ˘

    key <AD11>	{ [      asciicircum,        diaeresis,           asciitilde,                 Aring ] }; // ^ ̈ ̃ Å
    key <AC11>	{ [           ugrave,          percent,                acute,                Ugrave ] }; // ù % ' Ù
    key <BKSL>	{ [         asterisk,               mu,                grave,                macron ] }; // * µ ` ̄
};


// Historic Linux French keyboard layout (fr-latin9)
// Copyright (c) 199x, 2002 Rene Cougnenc (original work)
//                          Guylhem Aznar <clavier @ externe.net> (maintainer)
//                          Nicolas Mailhot <Nicolas.Mailhot @ laposte.net>
//                              (XFree86 submission)
//
// This layout has long been distributed and refined outside official channels.
// To this day it remains more feature-rich and popular than the 'fr' layout.
//
// This layout is derived from an original version by Guylhem Aznar.
// The original version is always available from:
// http://en.tldp.org/HOWTO/Francophones-HOWTO.html
// and is distributed under a GPL license.
//
// The author has given permission for this derived version to be distributed
// under the standard XFree86 license. He would like all changes to this
// version to be sent to him at <clavier @ externe.net>, so he can sync
// the identically named linux console map (kbd, linux-console) and his
// out-of-tree GPL version.
//
// Now follows the keyboard design description in French.
// (If you can't read it you probably have no business changing this file anyway:)
//
// Les accents circonflexes des principales voyelles sont obtenus avec
// la touche Alt_Gr, les trémas sont obtenus par Alt_Gr + Shift.
//
//  ____                                     _________ _____________ _______
// | S A| S = Shift,  A = AltGr + Shift     | Imprime | Arrêt défil | Pause |
// | s a| s = normal, a = AltGr             |  Exec   |             | Halte |
//  ¯¯¯¯                                     ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯
//  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______
// | œ "| 1 ·| 2 É| 3 ,| 4 '| 5 "| 6 || 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + °| <--   |
// | Œ "| & '| é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }|       |
//  ========================================================================
// | |<-  | A ä| Z Å| E ¢| R Ç| T Þ| Y Ý| U ü| I ï| O ö| P '| " `| $ ë|   , |
// |  ->| | a â| z å| e €| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ê| <-' |
//  ===================================================================¬    |
// |       | Q Ä| S Ø| D Ë| F ª| G Æ| H Ð| J Ü| K Ï| L Ö| M º| % Ù| µ ¥|    |
// | MAJ   | q Â| s ø| d Ê| f ±| g æ| h ð| j Û| k Î| l Ô| m ¹| ù ²| * ³|    |
//  ========================================================================
// | ^   | >  | W  | X  | C  | V  | B  | N  | ?  | .  | /  | §  |     ^     |
// | |   | < || w «| x »| c ©| v ®| b ß| n ¬| , ¿| ; ×| : ÷| ! ¡|     |     |
//  ========================================================================
// |      |      |      |                       |       |      |     |      |
// | Ctrl | Super| Alt  | Space    Nobreakspace | AltGr | Super|Menu | Ctrl |
//  ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯
//
//
//		Si les touches mortes fonctionnent, utiliser les accents dits
//		« morts », i.e. fonctionnant comme l'accent circonflexe & le
//		tréma des machines à écrire ; sont disponibles :
//
// (^) : accent circonflexe,
// Shift+(^) : tréma,
// Shift+AltGr+(^) : tilde,
// AltGr+(1) : accent aigu,
// AltGr+(7) : accent grave
//
// Pour s'en servir, procéder comme avec l'accent circonflexe & le tréma
// sur les vielles machines à écrire :
//
// AltGr+(1) puis e : é
// AltGr+(1) puis E : É
//
partial alphanumeric_keys

xkb_symbols "latin9" {

    include "latin"
    include "nbsp(level3)"

    name[Group1]="French (legacy, alt.)";

    key <TLDE>	{ [              oe,              OE, leftdoublequotemark, rightdoublequotemark ] };
    key <AE01>	{ [       ampersand,               1,          dead_acute,       periodcentered ] };
    key <AE02>	{ [          eacute,               2,          asciitilde,               Eacute ] };
    key <AE03>	{ [        quotedbl,               3,          numbersign,              cedilla ] };
    key <AE04>	{ [      apostrophe,               4,           braceleft,                acute ] };
    key <AE05>	{ [       parenleft,               5,         bracketleft,            diaeresis ] };
    key <AE06>	{ [           minus,               6,                 bar,            brokenbar ] };
    key <AE07>	{ [          egrave,               7,          dead_grave,               Egrave ] };
    key <AE08>	{ [      underscore,               8,           backslash,               macron ] };
    key <AE09>	{ [        ccedilla,               9,         asciicircum,             Ccedilla ] };
    key <AE10>	{ [          agrave,               0,                  at,               Agrave ] };
    key <AE11>	{ [      parenright,          degree,        bracketright,           ydiaeresis ] };
    key <AE12>	{ [           equal,            plus,          braceright,       dead_abovering ] };

    key <AD01>	{ [               a,               A,         acircumflex,           adiaeresis ] };
    key <AD02>	{ [               z,               Z,               aring,                Aring ] };
    key <AD03>	{ [               e,               E,            EuroSign,                 cent ] };
    key <AD04>	{ [               r,               R,            ccedilla,             Ccedilla ] };
    key <AD05>	{ [               t,               T,               thorn,                THORN ] };
    key <AD06>	{ [               y,               Y,              yacute,               Yacute ] };
    key <AD07>	{ [               u,               U,         ucircumflex,           udiaeresis ] };
    key <AD08>	{ [               i,               I,         icircumflex,           idiaeresis ] };
    key <AD09>	{ [               o,               O,         ocircumflex,           odiaeresis ] };
    key <AD10>	{ [               p,               P,           paragraph,                grave ] };
    key <AD11>	{ [ dead_circumflex,  dead_diaeresis,          dead_tilde,           apostrophe ] };
    key <AD12>	{ [          dollar,	    sterling,         ecircumflex,           ediaeresis ] };

    key <AC01>	{ [               q,               Q,         Acircumflex,           Adiaeresis ] };
    key <AC02>	{ [               s,               S,              oslash,             Ooblique ] };
    key <AC03>	{ [               d,               D,         Ecircumflex,           Ediaeresis ] };
    key <AC04>	{ [               f,               F,           plusminus,          ordfeminine ] };
    key <AC05>	{ [               g,               G,                  ae,                   AE ] };
    key <AC06>	{ [               h,               H,                 eth,                  ETH ] };
    key <AC07>	{ [               j,               J,         Ucircumflex,           Udiaeresis ] };
    key <AC08>	{ [               k,               K,         Icircumflex,           Idiaeresis ] };
    key <AC09>	{ [               l,               L,         Ocircumflex,           Odiaeresis ] };
    key <AC10>	{ [               m,               M,         onesuperior,            masculine ] };
    key <AC11>	{ [          ugrave,         percent,         twosuperior,               Ugrave ] };
    key <BKSL>  { [        asterisk,              mu,       threesuperior,                  yen ] };

    key <LSGT>	{ [            less,         greater,                 bar                       ] };
    key <AB01>	{ [               w,               W,       guillemotleft	        	] };
    key <AB02>	{ [               x,               X,      guillemotright                       ] };
    key <AB03>	{ [               c,               C,           copyright                       ] };
    key <AB04>	{ [               v,               V,          registered		        ] };
    key <AB05>	{ [               b,               B,              ssharp,                U1E9E ] };
    key <AB06>	{ [               n,               N,             notsign                       ] };
    key <AB07>	{ [           comma,        question,        questiondown                       ] };
    key <AB08>	{ [       semicolon,          period,            multiply		        ] };
    key <AB09>	{ [           colon,           slash,            division                       ] };
    key <AB10>	{ [          exclam,         section,          exclamdown                       ] };

    // French uses a comma as decimal separator, but keyboards are labeled with a period
    // Will take effect when KP_Decimal is mapped to the locale decimal separator
    key <KPDL>  { [       KP_Delete,      KP_Decimal,           KP_Delete,           KP_Decimal ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "latin9_nodeadkeys" {

    // Modifies the basic fr-latin9 layout to eliminate all dead keys

    include "fr(latin9)"

    name[Group1]="French (legacy, alt., no dead keys)";

    key <AE01>	{ [       ampersand,               1,          apostrophe,       periodcentered ] };
    key <AE07>	{ [          egrave,               7,               grave,               Egrave ] };
    key <AE12>	{ [           equal,            plus,          braceright         	        ] };
    key <AD11>	{ [	asciicircum,  	   diaeresis,          asciitilde,           apostrophe ] };
};

// Bépo : Improved ergonomic french keymap using Dvorak method.
// Built by community on 'Dvorak Fr / Bépo' :
// see http://www.clavier-dvorak.org/wiki/ to join and help.
// XOrg integration (1.0rc2 version) in 2008
// by Frédéric Boiteux <fboiteux at free dot fr>
//
// Bépo layout (1.0rc2 version) for a pc105 keyboard (french) :
// ┌─────┐
// │ S A │   S = Shift,  A = AltGr + Shift
// │ s a │   s = normal, a = AltGr
// └─────┘
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ # ¶ │ 1 „ │ 2 “ │ 3 ” │ 4 ≤ │ 5 ≥ │ 6   │ 7 ¬ │ 8 ¼ │ 9 ½ │ 0 ¾ │ ° ′ │ ` ″ ┃ ⌫ Retour┃
// │ $ – │ " — │ « < │ » > │ ( [ │ ) ] │ @ ^ │ + ± │ - − │ / ÷ │ * × │ = ≠ │ % ‰ ┃  arrière┃
// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
// ┃       ┃ B ¦ │ É ˝ │ P § │ O Œ │ È ` │ !   │ V   │ D Ð │ L   │ J Ĳ │ Z Ə │ W   ┃Entrée ┃
// ┃Tab ↹  ┃ b | │ é ˊ │ p & │ o œ │ è ` │ ˆ ¡ │ v ˇ │ d ð │ l / │ j ĳ │ z ə │ w ̆  ┃   ⏎   ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
// ┃        ┃ A Æ │ U Ù │ I ˙ │ E ¤ │ ; ̛  │ C ſ │ T Þ │ S ẞ │ R ™ │ N   │ M º │ Ç , ┃      ┃
// ┃Maj ⇬   ┃ a æ │ u ù │ i ̈  │ e € │ , ’ │ c © │ t þ │ s ß │ r ® │ n ˜ │ m ¯ │ ç ¸ ┃      ┃
// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
// ┃       ┃ Ê   │ À   │ Y ‘ │ X ’ │ : · │ K   │ ? ̉  │ Q ̣  │ G   │ H ‡ │ F ª ┃             ┃
// ┃Shift ⇧┃ ê / │ à \ │ y { │ x } │ . … │ k ~ │ ' ¿ │ q ˚ │ g µ │ h † │ f ˛ ┃Shift ⇧      ┃
// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃       ┃       ┃       ┃ Espace inséc.   Espace inséc. fin ┃       ┃       ┃       ┃
// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣ (Espace)      _               ␣ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "bepo" {

    include "level3(ralt_switch)"
    include "keypad(oss)"

    name[Group1]= "French (BEPO)";

    // First row
    key <TLDE> { [          dollar,   numbersign,        endash,       paragraph ] }; // $ # – ¶
    key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [        quotedbl,            1,         emdash, doublelowquotemark ] }; // " 1 — „
    key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [   guillemotleft,            2,           less,  leftdoublequotemark ] }; // « 2 < “
    key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [  guillemotright,            3,        greater, rightdoublequotemark ] }; // » 3 > ”
    key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [       parenleft,            4,    bracketleft,      lessthanequal ] }; // ( 4 [ ≤
    key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [      parenright,            5,   bracketright,   greaterthanequal ] }; // ) 5 ] ≥
    key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [              at,            6,    asciicircum                 ] }; // @ 6 ^
    key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [            plus,            7,      plusminus,        notsign ] }; // + 7 ± ¬
    key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [           minus,            8,          U2212,     onequarter ] }; // - 8 − ¼
    key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [           slash,            9,       division,        onehalf ] }; // / 9 ÷ ½
    key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [        asterisk,            0,       multiply,  threequarters ] }; // * 0 × ¾
    key <AE11> { [           equal,       degree,       notequal,        minutes ] }; // = ° ≠ ′
    key <AE12> { [         percent,        grave,       permille,        seconds ] }; // % ` ‰ ″

    // Second row
    key <AD01> { [               b,            B,            bar,      brokenbar ] }; // b B | ¦
    key <AD02> { [          eacute,       Eacute,     dead_acute, dead_doubleacute ] }; // é É ˊ ˝
    key <AD03> { [               p,            P,      ampersand,        section ] }; // p P & §
    key <AD04> { [               o,            O,             oe,             OE ] }; // o O œ Œ
    key <AD05> { [          egrave,       Egrave,     dead_grave,          grave ] }; // è È ` `
    key <AD06> { [ dead_circumflex,       exclam,     exclamdown                 ] }; // ^ ! ¡
    key <AD07> { [               v,            V,     dead_caron                 ] }; // v V ˇ
    key <AD08> { [               d,            D,            eth,            ETH ] }; // d D ð Ð
    key <AD09> { [               l,            L,    dead_stroke                 ] }; // l L /
    key <AD10> { [               j,            J,          U0133,          U0132 ] }; // j J ĳ Ĳ
    key <AD11> { [               z,            Z,          schwa,          SCHWA ] }; // z Z ə Ə
    key <AD12> { [               w,            W,     dead_breve                 ] }; // w W ̆

    // Third row
    key <AC01> { [               a,            A,             ae,             AE ] }; // a A æ Æ
    key <AC02> { [               u,            U,         ugrave,         Ugrave ] }; // u U ù Ù
    key <AC03> { [               i,            I, dead_diaeresis,  dead_abovedot ] }; // i I ̈ ˙
    key <AC04> { [               e,            E,       EuroSign,  dead_currency ] }; // e E € ¤
    key <AC05> { [           comma,    semicolon, rightsinglequotemark, dead_horn ] }; // , ; ’ ̛
    key <AC06> { [               c,            C,      copyright,          U017F ] }; // c C © ſ
    key <AC07> { [               t,            T,          thorn,          THORN ] }; // t T þ Þ
    key <AC08> { [               s,            S,         ssharp,          U1E9E ] }; // s S ß ẞ
    key <AC09> { [               r,            R,     registered,      trademark ] }; // r R ® ™
    key <AC10> { [               n,            N,     dead_tilde                 ] }; // n N ~
    key <AC11> { [               m,            M,    dead_macron,      masculine ] }; // m M ̄ º
    key <BKSL> { [        ccedilla,     Ccedilla,   dead_cedilla, dead_belowcomma ] }; // ç Ç ¸ ,

    // Fourth row
    key <LSGT> { [     ecircumflex,  Ecircumflex,          slash                 ] }; // ê Ê /
    key <AB01> { [          agrave,       Agrave,      backslash                 ] }; // à À \
    key <AB02> { [               y,            Y,      braceleft, leftsinglequotemark  ] }; // y Y { ‘
    key <AB03> { [               x,            X,     braceright, rightsinglequotemark ] }; // x X } ’
    key <AB04> { [          period,        colon,       ellipsis, periodcentered ] }; // . : … ·
    key <AB05> { [               k,            K,     asciitilde                 ] }; // k K ~
    key <AB06> { [      apostrophe,     question,   questiondown,      dead_hook ] }; // ' ? ¿ ̉
    key <AB07> { [               q,            Q, dead_abovering,  dead_belowdot ] }; // q Q ˚ ̣
    key <AB08> { [               g,            G,     dead_greek                 ] }; // g G µ
    key <AB09> { [               h,            H,         dagger,   doubledagger ] }; // h H † ‡
    key <AB10> { [               f,            F,    dead_ogonek,    ordfeminine ] }; // f F ̨ ª

    key <SPCE> { [           space, nobreakspace,     underscore,          U202F ] }; // ␣ (espace insécable) _ (espace insécable fin)
};

partial alphanumeric_keys
xkb_symbols "bepo_latin9" {

    // Restricts the fr(bepo) layout to latin9 symbols

    include "fr(bepo)"
    include "keypad(oss_latin9)"

    name[Group1]="French (BEPO, Latin-9 only)";

    key <TLDE> { [          dollar,   numbersign,        dollar,       paragraph ] }; // $ # $ ¶

    key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [        quotedbl,            1                                 ] }; // " 1
    key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [   guillemotleft,            2,           less                 ] }; // « 2 <
    key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [  guillemotright,            3,        greater                 ] }; // » 3 >
    key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [       parenleft,            4,    bracketleft                 ] }; // ( 4 [
    key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [      parenright,            5,   bracketright                 ] }; // ) 5 ]
    key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [           minus,            8,          minus,     onequarter ] }; // - 8 - ¼
    key <AE11> { [           equal,       degree                                 ] }; // = °
    key <AE12> { [         percent,        grave                                 ] }; // % `

    key <AD01> { [               b,            B,            bar                 ] }; // b B |
    key <AD02> { [          eacute,       Eacute,     dead_acute                 ] }; // é É ˊ
    key <AD10> { [               j,            J                                 ] }; // j J
    key <AD11> { [               z,            Z                                 ] }; // z Z
    key <AD12> { [               w,            W                                 ] }; // w W

    key <AC03> { [               i,            I, dead_diaeresis                 ] }; // i I ̈
    key <AC05> { [           comma,    semicolon,          comma,      dead_horn ] }; // , ; , ̛
    key <AC06> { [               c,            C,      copyright                 ] }; // c C ©
    key <AC08> { [               s,            S,         ssharp,          U1E9E ] }; // s S ß ẞ
    key <AC09> { [               r,            R,     registered                 ] }; // r R ®
    key <AC11> { [               m,            M,         macron,      masculine ] }; // m M ̄ º

    key <AB02> { [               y,            Y,      braceleft                 ] }; // y Y {
    key <AB03> { [               x,            X,     braceright                 ] }; // x X }
    key <AB04> { [          period,        colon                                 ] }; // . :
    key <AB09> { [               h,            H                                 ] }; // h H
    key <AB10> { [               f,            F,              f,    ordfeminine ] }; // f F   ª

    // Note : on a besoin de redéfinir les niveaux 3 et 4,
    // donc nbsp(level2) ne suffit pas !
    key <SPCE> { [           space,  nobreakspace,    underscore,   nobreakspace ] }; // ␣ (espace insécable) _ (espace insécable)
};

// Version 1.1rc2 of the Bépo keyboard layout, 
// normalized by the AFNOR NF Z71‐300 norm.
// 
// Layout: https://bepo.fr/wiki/Version_1.1rc2
// Normalization: https://normalisation.afnor.org/actualites/faq-clavier-francais/
// 
// ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────╔═════════╗
// │ # ¶│ 1 „│ 2 “│ 3 ”│ 4 ⩽│ 5 ⩾║ 6  │ 7 ¬│ 8 ¼│ 9 ½│ 0 ¾│ ° ′│ ` ″║         ║
// │ $ –│ " —│ « <│ » >│ ( [│ ) ]║ @ ^│ + ±│ - −│ / ÷│ * ×│ = ≠│ % ‰║ <--     ║
// ╔════╧══╗─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─╚══╦══════╣
// ║  |<-  ║ B _│ É  │ P §│ O Œ│ È `║ !  │ V  │ D  │ L £│ J  │ Z  │ W  ║   |  ║
// ║  ->|  ║ b |│ é ´│ p &│ o œ│ è `║ ˆ ¡│ v ˇ│ d ∞│ l /│ j  │ z ―│ w  ║ <-'  ║
// ╠═══════╩╗───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───╚╗     ║
// ║        ║ A Æ│ U Ù│ I ˙│ E ¤│ ; ,║ C ©│ T ™│ S ſ│ R ®│ N  │ M  │ Ç ©║     ║
// ║  CAPS  ║ a æ│ u ù│ i ¨│ e €│ , '║ c ¸│ t ᵉ│ s ß│ r ˘│ n ~│ m ¯│ ç  ║     ║
// ╠══════╦═╝──┬─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴─══─┴──┬─┴──┬─┴──┬─┴──╔═╧════╩═════╣
// ║   ^  ║ Ê ^│ À ‚│ Y ‘│ X ’│ : ·│ K ‑║ ? ̉ │ Q ̛│ G †│ H ‡│ F  ║     ^      ║
// ║   |  ║ ê /│ à \│ y {│ x }│ . …│ k ~║ ’ ¿│ q °│ g µ│ h ̣ │ f ˛║     |      ║
// ╠══════╩╦═══╧══╦═╧═══╦╧════╧════╧════╧════╧════╧═╦══╧══╦═╧════╬═════╦══════╣
// ║       ║      ║     ║ Fine insécable  Insécable ║     ║      ║     ║      ║
// ║ Ctrl  ║ WinG ║ Alt ║ Espace                  _ ║AltGr║ WinD ║WinM ║ Ctrl ║
// ╚═══════╩══════╩═════╩═══════════════════════════╩═════╩══════╩═════╩══════╝
partial alphanumeric_keys
xkb_symbols "bepo_afnor" {

	name[Group1]= "French (BEPO, AFNOR)";

	include "pc(pc105)"

	key <TLDE> { type[group1] = "FOUR_LEVEL", [ dollar, numbersign, endash, paragraph ] }; // $ # – ¶
	key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 1, emdash, doublelowquotemark ] }; // " 1 — „
	key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less, leftdoublequotemark ] }; // « 2 < “
	key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater, rightdoublequotemark ] }; // » 3 > ”
	key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 4, bracketleft, U2A7D ] }; // ( 4 [ ⩽
	key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 5, bracketright, U2A7E ] }; // ) 5 ] ⩾
	key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ at, 6, asciicircum, U262D ] }; // @ 6 ^ ☭
	key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ plus, 7, plusminus, notsign ] }; // + 7 ± ¬
	key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 8, U2212, onequarter ] }; // - 8 − ¼
	key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash, 9, division, onehalf ] }; // / 9 ÷ ½
	key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ asterisk, 0, multiply, threequarters ] }; // * 0 × ¾
	key <AE11> { type[group1] = "FOUR_LEVEL", [ equal, degree, notequal, minutes ] }; // = ° ≠ ′
	key <AE12> { type[group1] = "FOUR_LEVEL", [ percent, grave, U2030, seconds ] }; // % ` ‰ ″

	key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ b, B, bar, underscore ] }; // b B | _
	key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ eacute, Eacute, dead_acute, heart ] }; // é É ´ ♥
	key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ p, P, ampersand, section ] }; // p P & §
	key <AD04> { type[group1] = "FOUR_LEVEL_ALPHABETIC", [ o, O, oe, OE ] }; // o O œ Œ
	key <AD05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ egrave, Egrave, dead_grave, grave ] }; // è È ` `
	key <AD06> { type[group1] = "FOUR_LEVEL", [ dead_circumflex, exclam, exclamdown, U2620 ] }; // ^ ! ¡ ☠
	key <AD07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ v, V, dead_caron, U2622 ] }; // v V ˇ ☢
	key <AD08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ d, D, UFDD7, U2623 ] }; // d D ∞ ☣
	key <AD09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ l, L, dead_stroke, sterling ] }; // l L / £
	key <AD10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ j, J, U262E, U262F ] }; // j J ☮ ☯
	key <AD11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ z, Z, UFDD8, U2619 ] }; // z Z ― ☙
	key <AD12> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ w, W, U269C, U267F ] }; // w W ⚜ ♿

	key <AC01> { type[group1] = "FOUR_LEVEL_ALPHABETIC", [ a, A, ae, AE ] }; // a A æ Æ
	key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC", [ u, U, ugrave, Ugrave ] }; // u U ù Ù
	key <AC03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ i, I, dead_diaeresis, dead_abovedot ] }; // i I ¨ ˙
	key <AC04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ e, E, EuroSign, dead_currency ] }; // e E € ¤
	key <AC05> { type[group1] = "FOUR_LEVEL", [ comma, semicolon, apostrophe, dead_belowcomma ] }; // , ; ' ,
	key <AC06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ c, C, dead_cedilla, copyright ] }; // c C ¸ ©
	key <AC07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ t, T, UFDD5, trademark ] }; // t T ᵉ ™
	key <AC08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ s, S, UFDD4, U017F ] }; // s S ß ſ
	key <AC09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ r, R, dead_breve, registered ] }; // r R ˘ ®
	key <AC10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ n, N, dead_tilde, U2693 ] }; // n N ~ ⚓
	key <AC11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ m, M, dead_macron, U26FD ] }; // m M ¯ ⛽
	key <BKSL> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ccedilla, Ccedilla, U2708, U1F12F ] }; // ç Ç ✈ 🄯

	key <LSGT> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ecircumflex, Ecircumflex, slash, asciicircum ] }; // ê Ê / ^
	key <AB01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ agrave, Agrave, backslash, singlelowquotemark ] }; // à À \ ‚
	key <AB02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ y, Y, braceleft, leftsinglequotemark ] }; // y Y { ‘
	key <AB03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ x, X, braceright, rightsinglequotemark ] }; // x X } ’
	key <AB04> { type[group1] = "FOUR_LEVEL", [ period, colon, ellipsis, periodcentered ] }; // . : … ·
	key <AB05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ k, K, asciitilde, U2011 ] }; // k K ~ ‑
	key <AB06> { type[group1] = "FOUR_LEVEL", [ rightsinglequotemark, question, questiondown, dead_hook ] }; // ’ ? ¿ ̉
	key <AB07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ q, Q, dead_abovering, dead_horn ] }; // q Q ˚ ̛
	key <AB08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ g, G, dead_greek, dagger ] }; // g G µ †
	key <AB09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ h, H, dead_belowdot, doubledagger ] }; // h H ̣ ‡
	key <AB10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ f, F, dead_ogonek, U26C4 ] }; // f F ˛ ⛄
	key <SPCE> { type[group1] = "FOUR_LEVEL", [ space, U202F, underscore, nobreakspace ] }; //     _  


	include "level3(ralt_switch)"
};

// Author   : Francis Leboutte, http://www.algo.be/ergo/dvorak-fr.html
//            thanks to Fabien Cazenave for his help
// Licence  : X11
// Version  : 0.3

// Base layer + dead AltGr key (`):
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
// │ *   │ 1   │ 2   │ 3   │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 0   │ +   │ %   ┃          ┃
// │ _   │ =   │ / ± │ - ¼ │ è ½ │ \ ¾ │ ^   │ (   │ ` ` │ )   │ "   │ [   │ ]   ┃ ⌫        ┃
// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
// ┃        ┃ ? Æ │ <   │ >   │ G   │ !   │ H   │ V   │ C Ç │ M   │ K   │ Z   │ &   ┃       ┃
// ┃ ↹      ┃ : æ │ ' $ │ é É │ g € │ . ° │ h   │ v   │ c ç │ m µ │ k   │ z   │ ¨   ┃       ┃
// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓  ⏎   ┃
// ┃         ┃ O Ò │ A À │ U Ù │ E È │ B   │ F   │ S   │ T   │ N   │ D   │ W   │ #   ┃      ┃
// ┃ ⇬       ┃ o ò │ a à │ u ù │ e è │ b   │ f   │ s « │ t   │ n » │ d   │ w   │ ~   ┃      ┃
// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
// ┃      ┃ ç Ç │ | Œ │ Q   │ @   │ I Ì │ Y   │ X   │ R   │ L   │ P   │ J   ┃               ┃
// ┃ ⇧    ┃ à À │ ; œ │ q { │ , } │ i ì │ y £ │ x   │ r º │ l   │ p § │ j   ┃ ⇧             ┃
// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
// ┃       ┃       ┃       ┃ ␣                            ⍽ ┃       ┃       ┃       ┃       ┃
// ┃ ctrl  ┃ super ┃ alt   ┃ ␣ Espace    Espace insécable ⍽ ┃ alt   ┃ super ┃ menu  ┃ ctrl  ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛

// Notice the specific Caps_Lock layer:
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
// │ *   │ 1   │ 2   │ 3   │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 0   │ +   │ %   ┃          ┃
// │     │     │     │     │     │     │     │     │     │     │     │     │     ┃ ⌫        ┃
// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
// ┃        ┃     │ <   │ >   │     │     │     │     │     │     │     │     │     ┃       ┃
// ┃ ↹      ┃     │     │     │     │     │     │     │     │     │     │     │     ┃       ┃
// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓  ⏎   ┃
// ┃         ┃     │     │     │     │     │     │     │     │     │     │     │     ┃      ┃
// ┃ ⇬       ┃     │     │     │     │     │     │     │     │     │     │     │     ┃      ┃
// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
// ┃      ┃ /   │ -   │     │     │     │     │     │     │     │     │     ┃               ┃
// ┃ ⇧    ┃     │     │     │     │     │     │     │     │     │     │     ┃ ⇧             ┃
// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
// ┃       ┃       ┃       ┃ ␣                            ⍽ ┃       ┃       ┃       ┃       ┃
// ┃ ctrl  ┃ super ┃ alt   ┃ ␣ Espace    Espace insécable ⍽ ┃ alt   ┃ super ┃ menu  ┃ ctrl  ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛

partial alphanumeric_keys modifier_keys
xkb_symbols "dvorak" {
  name[Group1]="French (Dvorak)";

  // First row
  key <TLDE> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [       underscore,   asterisk                  ] };
  key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [            equal,          1                  ] };
  key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [            slash,          2,       plusminus ] };
  key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [            minus,          3,      onequarter ] };
  key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [           egrave,          4,         onehalf ] };
  key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [        backslash,          5,   threequarters ] };
  key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [  dead_circumflex,          6                  ] };
  key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [        parenleft,          7                  ] };
  key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ISO_Level3_Latch,          8,           grave ] };
  key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [       parenright,          9                  ] };
  key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [         quotedbl,          0                  ] };
  key <AE11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [      bracketleft,       plus                  ] };
  key <AE12> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [     bracketright,    percent                  ] };

  // Second row
  key <AD01> { [            colon,         question,              ae,               AE ] };
  key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [       apostrophe,       less,          dollar ] };
  key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [           eacute,    greater,          Eacute ] };
  key <AD04> { [                g,                G,        EuroSign                   ] };
  key <AD05> { [           period,           exclam,          degree                   ] };
  key <AD06> { [                h,                H                                    ] };
  key <AD07> { [                v,                V                                    ] };
  key <AD08> { [                c,                C,        ccedilla,         Ccedilla ] };
  key <AD09> { [                m,                M,              mu                   ] };
  key <AD10> { [                k,                K                                    ] };
  key <AD11> { [                z,                Z                                    ] };
  key <AD12> { [   dead_diaeresis,        ampersand                                    ] };

  // Third row
  key <AC01> { [                o,                O,          ograve,           Ograve ] };
  key <AC02> { [                a,                A,          agrave,           Agrave ] };
  key <AC03> { [                u,                U,          ugrave,           Ugrave ] };
  key <AC04> { [                e,                E,          egrave,           Egrave ] };
  key <AC05> { [                b,                B                                    ] };
  key <AC06> { [                f,                F                                    ] };
  key <AC07> { [                s,                S,   guillemotleft                   ] };
  key <AC08> { [                t,                T                                    ] };
  key <AC09> { [                n,                N,  guillemotright                   ] };
  key <AC10> { [                d,                D                                    ] };
  key <AC11> { [                w,                W                                    ] };
  key <BKSL> { [       asciitilde,       numbersign                                    ] };

  // Fourth row
  key <LSGT> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [       agrave, ccedilla,  Agrave, Ccedilla,   slash ] };
  key <AB01> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [    semicolon,      bar,      oe,       OE,   minus ] };
  key <AB02> { [                q,                Q,       braceleft                   ] };
  key <AB03> { [            comma,               at,      braceright                   ] };
  key <AB04> { [                i,                I,          igrave,           Igrave ] };
  key <AB05> { [                y,                Y,        sterling                   ] };
  key <AB06> { [                x,                X                                    ] };
  key <AB07> { [                r,                R,       masculine                   ] };
  key <AB08> { [                l,                L                                    ] };
  key <AB09> { [                p,                P,         section                   ] };
  key <AB10> { [                j,                J                                    ] };

  key <SPCE> { [            space,            space,    nobreakspace,     nobreakspace ] };
};

// C'WHERTY: Breton keyboard. Ar c'hlavier brezhoneg.
// Copyright © 2009 Dominique Pellé <dominique.pelle@gmail.com>
// Version: 0.1
//
// ┌─────┐
// │ S A │   S = Reol = Shift,  A = ArErl + Pennlizherenn = AltGr + Shift
// │ s a │   s = normal,        a = ArErl = AltGr
// └─────┘
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ $ Γ │ 1 Δ │ 2 Θ │ 3 Λ │ 4 Ξ │ 5 Π │ 6 Σ │ 7 Φ │ 8 Ψ │ 9 Ç │ 0 Ω │ ° ß │ + ¬ ┃ ⌫ Souzañ┃
// │ ² ˙ │ & ¯ │ é ´ │ " # │ ' { │ ( [ │ - | │ è ` │ - \ │ ç ± │ à @ │ ) ] │ = } ┃         ┃
// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
// ┃Toalenn┃ C'h │ W ω │ E ε │ R ρ │ T τ │ Y ψ │ U υ │ I ι │ O OE│ P π │ ¨ ¥ │ * £ ┃Enankañ┃
// ┃     ↹ ┃ c'h │ w   │ e € │ r   │ t   │ y   │ u   │ i ı │ o oe│ p   │ ^ « │ / » ┃   ⏎   ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
// ┃Prenn   ┃ A Æ │ S σ │ D δ │ F φ │ G γ │ H η │ J ς │ K κ │ L λ │ M μ │ Ù ® │ ! ¡ ┃      ┃
// ┃Pennli ⇬┃ a æ │ s   │ d $ │ f   │ g   │ h   │ j   │ k   │ l   │ m   │ ù ŭ │ ? ¿ ┃      ┃
// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
// ┃       ┃ Q θ │ Z ζ │ X ξ │ C χ │ V   │ B β │ N ν │ CH  │ Ñ   │ : © │ ;   ┃             ┃
// ┃Shift ⇧┃ q < │ z > │ x   │ c ¢ │ v   │ b   │ n   │ ch  │ ñ   │ .   │ ,   ┃Shift ⇧      ┃
// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃       ┃       ┃       ┃ ⍽ Espace insécable              ␣ ┃       ┃       ┃       ┃
// ┃Reol   ┃Meta   ┃Erl    ┃ ␣ Espace                        ␣ ┃ArErl ⇮┃Menu   ┃Reol   ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "bre" {

    include "keypad(oss)"

    name[Group1]= "French (Breton)";

    // First row
    key <TLDE> { [     twosuperior,     dead_tilde,   dead_abovedot,    Greek_GAMMA ] };
    key <AE01> { [       ampersand,              1,     dead_macron,    Greek_DELTA ] };
    key <AE02> { [          eacute,              2,      dead_acute,    Greek_THETA ] };
    key <AE03> { [        quotedbl,              3,      numbersign,    Greek_LAMDA ] };
    key <AE04> { [      apostrophe,              4,       braceleft,       Greek_XI ] };
    key <AE05> { [       parenleft,              5,     bracketleft,       Greek_PI ] };
    key <AE06> { [           minus,              6,             bar,    Greek_SIGMA ] };
    key <AE07> { [          egrave,              7,      dead_grave,      Greek_PHI ] };
    key <AE08> { [      underscore,              8,       backslash,      Greek_PSI ] };
    key <AE09> { [        ccedilla,              9,       plusminus,       Ccedilla ] };
    key <AE10> { [          agrave,              0,              at,    Greek_OMEGA ] };
    key <AE11> { [      parenright, dead_abovering,    bracketright,         ssharp ] };
    key <AE12> { [           equal,           plus,      braceright,        notsign ] };

    // Second row
    // Handling the C'H key correctly requires an inputmethod (XIM)
    // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
 // key <AD01> { [    trigraph_c_h,   trigraph_C_h,    trigraph_C_H,    Greek_alpha ] };
    key <AD01> { [           UF8FD,          UF8FE,           UF8FF,    Greek_alpha ] };
    key <AD02> { [               w,              W,     Greek_omega,    Greek_omega ] };
    key <AD03> { [               e,              E,        EuroSign,  Greek_epsilon ] };
    key <AD04> { [               r,              R,       Greek_rho,      Greek_rho ] };
    key <AD05> { [               t,              T,       Greek_tau,      Greek_tau ] };
    key <AD06> { [               y,              Y,       Greek_psi,      Greek_psi ] };
    key <AD07> { [               u,              U,   Greek_upsilon,  Greek_upsilon ] };
    key <AD08> { [               i,              I,        idotless,     Greek_iota ] };
    key <AD09> { [               o,              O,              oe,             OE ] };
    key <AD10> { [               p,              P,        Greek_pi,       Greek_pi ] };
    key <AD11> { [ dead_circumflex, dead_diaeresis,   guillemotleft,            yen ] };
    key <AD12> { [           slash,       asterisk,  guillemotright,       sterling ] };

    // Third row
    key <AC01> { [               a,              A,              ae,             AE ] };
    key <AC02> { [               s,              S,     Greek_sigma,    Greek_sigma ] };
    key <AC03> { [               d,              D,          dollar,    Greek_delta ] };
    key <AC04> { [               f,              F,       Greek_phi,      Greek_phi ] };
    key <AC05> { [               g,              G,     Greek_gamma,    Greek_gamma ] };
    key <AC06> { [               h,              H,       Greek_eta,      Greek_eta ] };
    key <AC07> { [               j,              J, Greek_finalsmallsigma, Greek_finalsmallsigma ] };
    key <AC08> { [               k,              K,       Greek_kappa,  Greek_kappa ] };
    key <AC09> { [               l,              L,       Greek_lamda, Greek_lambda ] };
    key <AC10> { [               m,              M,          Greek_mu,     Greek_mu ] };
    key <AC11> { [          ugrave,         Ugrave,            ubreve,   registered ] };
    key <BKSL> { [        question,         exclam,      questiondown,   exclamdown ] };

    // Fourth row
    key <LSGT> { [               q,              Q,            less,    Greek_theta ] };
    key <AB01> { [               z,              Z,         greater,     Greek_zeta ] };
    key <AB02> { [               x,              X,        Greek_xi,       Greek_xi ] };
    key <AB03> { [               c,              C,            cent,      Greek_chi ] };
    key <AB04> { [               v,              V                                  ] };
    key <AB05> { [               b,              B,      Greek_beta,     Greek_beta ] };
    key <AB06> { [               n,              N,        Greek_nu,       Greek_nu ] };
    // Handling the CH key correctly requires an inputmethod (XIM)
    // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
 // key <AB07> { [      digraph_ch,     digraph_Ch,      digraph_CH,  Greek_omicron ] };
    key <AB07> { [           UF8FA,          UF8FB,           UF8FC,  Greek_omicron ] };
    key <AB08> { [          ntilde,         Ntilde                                  ] };
    key <AB09> { [          period,          colon,         section,      copyright ] };
    key <AB10> { [           comma,      semicolon,         percent                 ] };

    key <SPCE> { [           space,   nobreakspace,           space,   nobreakspace ] };

    include "level3(ralt_switch)"
};

// Occitan layout
// Author : 2009 Thomas Metz <tmetz @ free.fr>
// Derived from the layout defined at http://www.panoccitan.org
// Version: 0.1
// Differences from OSS French keyboard :
// - add á, í, ò, ó et ú, Á, Í, Ò, Ó, Ú, ñ, Ñ
// - change position of æ, ü, î, û, œ, ô, ö, ï, â, ë
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ ³ ¸ │ 1 ̨  │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃  arrière┃
// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
// ┃       ┃ A Á │ Z Æ │ E ¢ │ R Ê │ T Ë │ Y Û │ U Ú │ I Í │ O Ó │ P Ò │ ¨ Œ │ £ Ø ┃Entrée ┃
// ┃Tab ↹  ┃ a á │ z æ │ e € │ r ê │ t ë │ y û │ u ú │ i í │ o ó │ p ò │ ^ œ │ $ ø ┃   ⏎   ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
// ┃        ┃ Q Ä │ S „ │ D Â │ F ‚ │ G ¥ │ H Ü │ J Î │ K Ï │ L Ô │ M Ö │ % Ù │ µ ̄  ┃      ┃
// ┃Maj ⇬   ┃ q ä │ s ß │ d â │ f ‘ │ g ’ │ h ü │ j î │ k ï │ l ô │ m ö │ ù ' │ * ` ┃      ┃
// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
// ┃       ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N Ñ │ ? … │ . . │ / ∕ │ § − ┃             ┃
// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v → │ b ↓ │ n ñ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧      ┃
// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃       ┃       ┃       ┃ ␣         Espace fine insécable ⍽ ┃       ┃       ┃       ┃
// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣ Espace       Espace insécable ⍽ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "oci" {

    include "fr(oss)"

    name[Group1]= "Occitan";

    key <AD01>	{ [                a,                A,               aacute,                Aacute ] }; // a A á Á
    key <AD02>	{ [                z,                Z,                   ae,                    AE ] }; // z Z æ Æ
    key <AD05>	{ [                t,                T,           ediaeresis,            Ediaeresis ] }; // t T ë Ë
    key <AD06>	{ [                y,                Y,          ucircumflex,           Ucircumflex ] }; // y Y û Û
    key <AD07>	{ [                u,                U,               uacute,                Uacute ] }; // u U ú Ú
    key <AD08>	{ [                i,                I,               iacute,                Iacute ] }; // i I í Í
    key <AD09>	{ [                o,                O,               oacute,                Oacute ] }; // o O ó Ó
    key <AD10>	{ [                p,                P,               ograve,                Ograve ] }; // p P ò Ò
    key <AD11>	{ [  dead_circumflex,   dead_diaeresis,                   oe,                    OE ] }; // ^ ̈ ̃ œ Œ

    key <AC03>	{ [                d,                D,          acircumflex,           Acircumflex ] }; // d D â Â
    key <AC06>	{ [                h,                H,           udiaeresis,            Udiaeresis ] }; // h H ü Ü
    key <AC07>	{ [                j,                J,          icircumflex,           Icircumflex ] }; // j J î Î
    key <AC08>	{ [                k,                K,           idiaeresis,            Idiaeresis ] }; // k K ï Ï
    key <AC09>	{ [                l,                L,          ocircumflex,           Ocircumflex ] }; // l L ô Ô

    key <AB04>  { [                v,                V,           rightarrow,             leftarrow ] }; // v V → ←
    key <AB06>  { [                n,                N,               ntilde,                Ntilde ] }; // n N ñ Ñ
};

// Marc.Shapiro@inria.fr 19-sep-1998
// modifications : Etienne Herlent <eherlent@linux-france.org> june 2000
// adapted to the new input layer :
//        Martin Costabel <costabel@wanadoo.fr> 3-jan-2001
// adapted for Latin9 alphabet (ISO-8859-15):
//        Etienne Herlent <eherlent@linux-france.org> march 2005

// This map is an almost-complete mapping of the standard French
// MacIntosh keyboard under Xwindows.  I tried to remain as faithful
// as possible to the Mac meaning of each key.	I did this entirely by
// hand and by intuition, relying on the Clavier (Keyboard?) Desktop
// Accessory for the Mac meaning of keys, and on reading keysymdef.h
// to intuit the corresponding X names.	 Lacking proper documentation,
// I may have made some mistakes.

// Entries marked CHECK are particularly uncertain

// Entries marked MISSING mark Mac characters for which I was unable
// to find a corresponding keysym.  (Some for sure don't: e.g. the
// Apple mark and the oe/OE character; others I may have simply not
// found.)

// Copied from macintosh_vndr/fr
partial alphanumeric_keys
xkb_symbols "mac" {

    name[Group1]= "French (Macintosh)";

    key <TLDE> {	[          at, numbersign, periodcentered,  Ydiaeresis	]	}; // MISSING: Ydiaeresis; eherlent : ok in Latin9
    key <AE01> {	[   ampersand,    1,   VoidSymbol,    dead_acute	]	}; // MISSING: Apple
    key <AE02> {	[      eacute,    2,   ediaeresis,        Eacute	]	};
    key <AE03> {	[    quotedbl,    3,   VoidSymbol,    VoidSymbol	] 	}; // CHECK all quotemarks
    key <AE04> {	[  apostrophe,    4,   VoidSymbol,    VoidSymbol	] 	};
    key <AE05> {	[   parenleft,    5,    braceleft,   bracketleft	]	};
 // CHECK section
    key <AE06> {	[     section,    6,    paragraph,         aring	]	};
    key <AE07> {	[      egrave,    7, guillemotleft, guillemotright	]	};
    key <AE08> {	[      exclam,    8,   exclamdown,   Ucircumflex	]	};
    key <AE09> {	[    ccedilla,    9,     Ccedilla,        Aacute	]	};
    key <AE10> {	[      agrave,    0,       oslash,    VoidSymbol	]	}; // MISSING: Oslash
    key <AE11> {	[  parenright, degree, braceright,  bracketright	]	};
    key <AE12> {	[       minus, underscore, emdash,        endash	]	}; // CHECK dashes

    key <AD01> {	[           a,  A,           ae,          AE	]	};
    key <AD02> {	[           z,  Z,  Acircumflex,       Aring	]	};
    key <AD03> {	[           e,  E,  ecircumflex, Ecircumflex	]	};
    key <AD04> {	[           r,  R,   registered,    currency	]	};
    key <AD05> {	[           t,  T,   VoidSymbol,  VoidSymbol	]	};
    key <AD06> {	[           y,  Y,       Uacute,  Ydiaeresis	]	}; // MISSING: Ydiaeresis; eherlent : ok in Latin9
    key <AD07> {	[           u,  U,   VoidSymbol, ordfeminine	]	}; // MISSING: ordmasculine?
    key <AD08> {	[           i,  I,  icircumflex,  idiaeresis	]	};
    key <AD09> {	[           o,  O,           oe,          OE	]	}; // MISSING: oe, OE lacking in Latin1; eherlent ok in Latin9
    key <AD10> {	[           p,  P,   VoidSymbol,  VoidSymbol	]	};
    key <AD11> {	[dead_circumflex,dead_diaeresis, ocircumflex, Ocircumflex	]	};
    key <AD12> {	[      dollar, asterisk,   EuroSign, yen	]	}; // eherlent : EuroSign in Latin9

    key <AC01> {	[         q, Q, acircumflex,         Agrave	]	};
    key <AC02> {	[         s, S,      Ograve,     VoidSymbol	]	};
    key <AC03> {	[         d, D,  VoidSymbol,     VoidSymbol	]	};
    key <AC04> {	[         f, F,  VoidSymbol, periodcentered	]	}; // MISSING: oblong script f??
    key <AC05> {	[         g, G,  VoidSymbol,     VoidSymbol	]	}; // MISSING: kerned fi, fl
    key <AC06> {	[         h, H,      Igrave,    Icircumflex	]	};
    key <AC07> {	[         j, J,  Idiaeresis,         Iacute	]	};
    key <AC08> {	[         k, K,      Egrave,     Ediaeresis	]	};
    key <AC09> {	[         l, L,     notsign,            bar	]	};
    key <AC10> {	[         m, M,          mu,         Oacute	]	};
    key <AC11> {	[    ugrave,percent, Ugrave,    ucircumflex	]	}; // MISSING: per-mille
    key <BKSL> {	[ dead_grave, sterling,  at,     numbersign	]	};

    key <LSGT> {	[      less, greater, VoidSymbol, VoidSymbol	]	};
    key <AB01> {	[         w, W, VoidSymbol,   VoidSymbol	]	}; // MISSING: half-guillemot (single angle bracket)
    key <AB02> {	[         x, X, VoidSymbol,   VoidSymbol	]	}; // CHECK similarequal; MISSING: extra-slanted slash
    key <AB03> {	[         c, C,  copyright,         cent	]	};
    key <AB04> {	[         v, V,    diamond,  leftradical	]	}; // CHECK diamond, leftradical
    key <AB05> {	[         b, B,     ssharp,        U1E9E	]	}; // CHECK: Greek_beta or ssharp?; MISSING: oblong script s
    key <AB06> {	[         n, N,  dead_tilde,  asciitilde	]	};
    key <AB07> {	[     comma,  question, VoidSymbol,  questiondown	]	};
    key <AB08> {	[ semicolon,  period, VoidSymbol,  periodcentered	]	};
    key <AB09> {	[     colon,  slash,   division,        backslash	]	};
    key <AB10> {	[     equal,   plus, VoidSymbol,        plusminus	]	};

    key <SPCE> {	[     space,  space, nobreakspace,   nobreakspace	]	};

    key <KPDL> {	[  comma,KP_Decimal	]	};

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "geo" {
    include "ge(basic)"

    name[Group1]= "Georgian (France, AZERTY Tskapo)";

    key <TLDE> { [ exclam, noSymbol ] };
    key <AE01> { [ 0x0100201e, 1 ] };
    key <AE02> { [ 0x01002116, 2 ] };
    key <AE03> { [ percent, 3    ] };
    key <AE04> { [ parenleft, 4  ] };
    key <AE05> { [ colon, 5      ] };
    key <AE06> { [ semicolon, 6  ] };
    key <AE07> { [ question, 7   ] };
    key <AE08> { [ 0x01002116, 8 ] };
    key <AE09> { [ degree, 9     ] };
    key <AE10> { [ parenright, 0 ] };
    key <AE11> { [ minus, underscore, 0x01002014 ] };
    key <AE12> { [ less, greater ] };

    key <AD01> { [ Georgian_an,    0x010010fa     ] };
    key <AD02> { [ Georgian_zen,   Z              ] };
    key <AD03> { [ Georgian_en,    E, Georgian_he ] };
    key <AD04> { [ Georgian_rae,   0x010000ae     ] };
    key <AD05> { [ Georgian_tar,   T              ] };
    key <AD06> { [ Georgian_qar,   0x010010f8     ] };
    key <AD07> { [ Georgian_un,    U              ] };
    key <AD08> { [ Georgian_in,    Georgian_hie   ] };
    key <AD09> { [ Georgian_on,    O              ] };
    key <AD10> { [ Georgian_par,   P              ] };
    key <AD11> { [ Georgian_tan,   T              ] };
    key <AD12> { [ Georgian_jil,   Z              ] };

    key <AC01> { [ Georgian_khar,  Q              ] };
    key <AC02> { [ Georgian_san,   S              ] };
    key <AC03> { [ Georgian_don,   D              ] };
    key <AC04> { [ Georgian_phar,  Georgian_fi    ] };
    key <AC05> { [ Georgian_gan,   0x010010f9     ] };
    key <AC06> { [ Georgian_hae,   Georgian_hoe   ] };
    key <AC07> { [ Georgian_jhan,  0x010010f7     ] };
    key <AC08> { [ Georgian_kan,   K              ] };
    key <AC09> { [ Georgian_las,   L              ] };
    key <AC10> { [ Georgian_man,   M              ] };
    key <AC11> { [ Georgian_zhar,  J              ] };
    key <BKSL> { [ Georgian_chin,  0x010000a9     ] };

    key <LSGT> { [ guillemotleft,  guillemotright ] };
    key <AB01> { [ Georgian_cil,   W              ] };
    key <AB02> { [ Georgian_xan,   Georgian_har   ] };
    key <AB03> { [ Georgian_can,   0x010000a9     ] };
    key <AB04> { [ Georgian_vin,   Georgian_we    ] };
    key <AB05> { [ Georgian_ban,   B              ] };
    key <AB06> { [ Georgian_nar,   0x010010fc     ] };
    key <AB07> { [ comma,          0x01002014     ] };
    key <AB08> { [ Georgian_shin,  S              ] };
    key <AB09> { [ Georgian_ghan,  noSymbol       ] };
    key <AB10> { [ Georgian_char,  noSymbol       ] };
};

// US keyboard made French
//
// Copyright (C) 2018, Florent Gallaire <f@gallai.re>
partial alphanumeric_keys
xkb_symbols "us" {

    include "us(basic)"
    name[Group1]= "French (US)";


    key <TLDE> { [     grave, asciitilde,    dead_grave                   ] };
    key <AE06> { [         6,asciicircum,dead_circumflex                  ] };

    key <AB01> { [	   z,          Z,   acircumflex,      Acircumflex ] }; // â Â
    key <AB03> { [	   c,          C,      ccedilla,         Ccedilla ] }; // ç Ç

    key <AC01> { [	   a,          A,        agrave,           Agrave ] }; // à À
    key <AC02> { [	   s,          S,            ae,               AE ] }; // æ Æ
    key <AC03> { [	   d,          D,   ecircumflex,      Ecircumflex ] }; // ê Ê
    key <AC04> { [	   f,          F,    ediaeresis,       Ediaeresis ] }; // ë Ë
    key <AC06> { [	   h,          H,    udiaeresis,       Udiaeresis ] }; // ü Ü
    key <AC07> { [	   j,          J,   ucircumflex,      Ucircumflex ] }; // û Û
    key <AC08> { [	   k,          K,   icircumflex,      Icircumflex ] }; // î Î
    key <AC11> { [apostrophe,   quotedbl,dead_diaeresis,           degree ] };

    key <AD03> { [	   e,          E,        eacute,           Eacute ] }; // é É
    key <AD04> { [	   r,          R,        egrave,           Egrave ] }; // è È
    key <AD06> { [	   y,          Y,    ydiaeresis,       Ydiaeresis ] }; // ÿ Ÿ
    key <AD07> { [	   u,          U,        ugrave,           Ugrave ] }; // ù Ù
    key <AD08> { [	   i,          I,    idiaeresis,       Idiaeresis ] }; // ï Ï
    key <AD09> { [	   o,          O,   ocircumflex,      Ocircumflex ] }; // ô Ô
    key <AD10> { [	   p,          P,            oe,               OE ] }; // œ Œ
    key <AD11> { [ bracketleft,  braceleft,  guillemotleft,  leftdoublequotemark ] }; // « “
    key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; // » ”

    key <AE04> { [        4,     dollar,      EuroSign,         currency ] }; // € ¤

    include "level3(ralt_switch)"
    include "eurosign(5)"
};

// EXTRAS:

partial alphanumeric_keys
	xkb_symbols "sun_type6" {
	include "sun_vndr/fr(sun_type6)"
};


partial alphanumeric_keys
xkb_symbols "azerty" {
    name[Group1]="French (AZERTY)";

    include "level3(ralt_switch)"

// French AZERTY-Keyboard layout
// Author : 2015, Mats Blakstad <mats @ globalbility.org>
// Based on the layout at https://en.wikipedia.org/wiki/File:KB_France.svg

// LAYOUT OVERVIEW                              
//  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______
// |    | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 0  | °  | +  | <--   |
// | ²  | &  | é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }|       |
//  ========================================================================
// | |<-  | A  | Z  | E  | R  | T  | Y  | U  | I  | O  | P  | ¨  | $  |   , |
// |  ->| | a  | z  | e €| r  | t  | y  | u  | i  | o  | p  | ^  | £ ¤| <-' |
//  ===================================================================¬    |
// |       | Q  | S  | D  | F  | G  | H  | J  | K  | L  | M  | %  | µ  |    |
// | MAJ   | q  | s  | d  | f  | g  | h  | j  | k  | l  | m  | ù  | *  |    |
//  ========================================================================
// | ^   | >  | W  | X  | C  | V  | B  | N  | ?  | .  | /  | §  |     ^     |
// | |   | <  | w  | x  | c  | v  | b  | n  | ,  | ;  | :  | !  |     |     |
//  ========================================================================
// |      |      |      |                       |       |      |     |      |
// | Ctrl | Super| Alt  | Space    Nobreakspace | AltGr | Super|Menu | Ctrl |
//  ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯

    // First row
    key <TLDE>	{ [	twosuperior 						] };
    key <AE01>	{ [	ampersand,	1 					] };
    key <AE02> { [	eacute,		2,		asciitilde	 	] };
    key <AE03>	{ [	quotedbl,	3,		numbersign		] };
    key <AE04>	{ [	apostrophe,	4,		braceleft		] };
    key <AE05>	{ [	parenleft,	5,		bracketleft		] };
    key <AE06>	{ [	minus,		6,		bar			] };
    key <AE07>	{ [	egrave,		7,		grave			] };
    key <AE08>	{ [	underscore, 	8,		backslash		] };
    key <AE09>	{ [	ccedilla, 	9,		asciicircum		] };
    key <AE10>	{ [	agrave,		0,		at			] };
    key <AE11>	{ [	parenright,	degree,		bracketright		] };
    key <AE12>	{ [	equal,		plus,		braceright		] };

    // Second row
    key <AD01>	{ [	a,		A					] };
    key <AD02>	{ [	z,		Z				 	] };
    key <AD03>	{ [	e,		E,		EuroSign		] };	
    key <AD04>	{ [	r,		R				 	] };
    key <AD05>	{ [	t,		T					] };
    key <AD06>	{ [	y,		Y					] };	
    key <AD07>	{ [	u,		U					] };	
    key <AD08>	{ [	i,		I					] };	
    key <AD09>	{ [	o,		O					] };	
    key <AD10>	{ [	p,		P					] };
    key <AD11>	{ [	dead_circumflex,dead_diaeresis				] };
    key <AD12>	{ [	dollar,		sterling,	currency		] };	

    // Third row
    key <AC01>	{ [	q,		Q					] };
    key <AC02>	{ [	s,		S				 	] };
    key <AC03>	{ [	d,		D					] };	
    key <AC04>	{ [	f,		F					] };
    key <AC05>	{ [	g,		G					] };	
    key <AC06>	{ [	h,		H				 	] };
    key <AC07>	{ [	j,		J					] };
    key <AC08>	{ [	k,		K					] };
    key <AC09>	{ [	l,		L					] };
    key <AC10>	{ [	m,		M					] };	
    key <AC11>	{ [	ugrave,		percent					] };
    key <BKSL>  { [	asterisk,	mu					] };

    // Fourth row
    key <LSGT>	{ [	less,		greater					] };
    key <AB01>	{ [	w,		W					] };
    key <AB02>	{ [	x,		X					] };
    key <AB03>	{ [	c,		C					] };
    key <AB04>	{ [	v,		V					] };	
    key <AB05>  { [	b,		B				 	] };
    key <AB06>	{ [	n,		N				 	] };
    key <AB07>	{ [	comma,		question				] };
    key <AB08>	{ [ 	semicolon,	period					] };
    key <AB09>	{ [ 	colon,		slash					] };
    key <AB10>	{ [	exclam,		section					] };
};

// US keyboard made French (with dead keys, alternative)
//
// Copyright (C) 2018, Florent Gallaire <f@gallai.re>

partial alphanumeric_keys
xkb_symbols "us-alt" {

    include "us(basic)"
    name[Group1]= "French (US with dead keys, alt.)";

    key <AB03> { [         c,          C,      ccedilla,         Ccedilla ] }; // ç Ç

    key <AC01> { [         a,          A,            ae,               AE ] }; // æ Æ
    key <AC11> { [dead_diaeresis, quotedbl,  apostrophe ] };

    key <AD03> { [         e,          E,        eacute,           Eacute ] }; // é É
    key <AD09> { [         o,          O,            oe,               OE ] }; // œ Œ
    key <AD11> { [ bracketleft,  braceleft,  guillemotleft,  leftdoublequotemark ] }; // « “
    key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; // » ”

    key <TLDE> { [dead_grave, asciitilde,         grave ] };
    key <AE06> { [dead_circumflex, asciicircum,       6 ] };
    key <AE04> { [         4,     dollar,      EuroSign,         currency ] }; // € ¤

    include "level3(ralt_switch)"
    include "eurosign(5)"
};

// For physically modified US keyboard (Q <-> A, W <-> Z and ; <-> M)
//
// Copyright (C) 2018, Florent Gallaire <f@gallai.re>

partial alphanumeric_keys
xkb_symbols "us-azerty" {

    include "us"
    name[Group1]= "French (US, AZERTY)";

    key <AB01> { [         w,          W, guillemotleft, leftdoublequotemark ] }; // « “
    key <AB02> { [         x,          X,guillemotright,rightdoublequotemark ] }; // » ”
    key <AB07> { [ semicolon,      colon                                  ] };

    key <AC01> { [         q,          Q                                  ] };
    key <AC10> { [         m,          M                                  ] };
    key <AC11> { [apostrophe,   quotedbl,        ugrave,           Ugrave ] }; // ù Ù

    key <AD01> { [         a,          A,            ae,               AE ] }; // æ Æ
    key <AD02> { [         z,          Z                                  ] };
    key <AD09> { [         o,          O,            oe,               OE ] }; // œ Œ
    key <AD11> { [bracketleft, braceleft,dead_circumflex,  dead_diaeresis ] };

    key <TLDE> { [     grave, asciitilde,    dead_grave                   ] };
    key <AE02> { [         2,         at,        eacute,           Eacute ] }; // é É
    key <AE04> { [         4,     dollar,      currency                   ] }; // ¤
    key <AE06> { [         6,asciicircum,dead_circumflex                  ] };
    key <AE07> { [         7,  ampersand,        egrave,           Egrave ] }; // è È
    key <AE09> { [         9,  parenleft,      ccedilla,         Ccedilla ] }; // ç Ç
    key <AE10> { [         0, parenright,        agrave,           Agrave ] }; // à À

    include "eurosign(e)"
    include "level3(ralt_switch)"
};

// Unicode French standardized new azerty
// Defined by the French national organization for standardization (AFNOR) in norm NF Z71-300 (http://norme-azerty.fr/)
//
// Credits
//   © 2019 Cimbali <me @ cimba.li>
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ # ̑  │ 1 À │ 2 É │ 3 È │ 4 Ê │ 5 ̋  │ 6 ̏  │ 7   │ 8 — │ 9 ‹ │ 0 › │ " ˚ │ ¨   ┃ ⌫ Retour┃
// │ @ ̆̆̆  ̆│ à § │ é  ́ │ è  ̀ │ ê & │ ( [ │ ) ] │ ‘ ̄̄  │ ’ _ │ « “ │ » ” │ ' ° │ ̂  ̌̌̌  ┃  arrière┃
// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
// ┃       ┃ A Æ │ Z   │ E   │ R   │ T ™ │ Y   │ U Ù │ I  ̣ │ O Œ │ P ‰ │ – ‑ │ ± ‡ ┃Entrée ┃
// ┃Tab ↹  ┃ a æ │ z £ │ e € │ r ® │ t { │ y } │ u ù │ i ̇  │ o œ │ p % │ - − │ + † ┃   ⏎   ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
// ┃        ┃ Q   │ S ẞ │ D   │ F   │ G   │ H ̱  │ J   │ K   │ L   │ M   │ \ √ │ ½ ¼ ┃      ┃
// ┃Maj ⇬   ┃ q θ │ s ß │ d $ │ f ¤ │ g µ │ h   │ j   │ k ̷  │ l | │ m ∞ │ / ÷ │ * × ┃      ┃
// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
// ┃       ┃ > ≥ │ W Ʒ │ X   │ C Ç │ V ˛ │ B   │ N   │ ?   │ !  ̦ │ …   │ = ≠ ┃             ┃
// ┃Shift ⇧┃ < ≤ │ w ʒ │ x © │ c ç │ v ¸ │ b  ̵ │ n ~ │ . ¿ │ , ¡ │ : · │ ; ≃ ┃Shift ⇧      ┃
// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃       ┃       ┃       ┃ ␣         Espace fine insécable ⍽ ┃       ┃       ┃       ┃
// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣ Espace       Espace insécable ⍽ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
partial alphanumeric_keys
xkb_symbols "afnor" {

    include "latin"
    include "level3(ralt_switch)"
    include "nbsp(level3n)"
    include "keypad(oss)"

    name[Group1]="French (AZERTY, AFNOR)";

     // First row
     key <TLDE> { [                  at,      numbersign,               dead_breve,   dead_invertedbreve ] }; // @ # ̑  ̆̆̆  //
     key <AE01> { [              agrave,               1,                  section,               Agrave ] }; // à 1 § À
     key <AE02> { [              eacute,               2,               dead_acute,               Eacute ] }; // é 2  ́ É
     key <AE03> { [              egrave,               3,               dead_grave,               Egrave ] }; // è 3  ̀ È
     key <AE04> { [         ecircumflex,               4,                ampersand,          Ecircumflex ] }; // ê 4 & Ê
     key <AE05> { [           parenleft,               5,              bracketleft,     dead_doubleacute ] }; // ( 5 [
     key <AE06> { [          parenright,               6,             bracketright,     dead_doublegrave ] }; // ) 6 ]
     key <AE07> { [ leftsinglequotemark,               7,              dead_macron,           VoidSymbol ] }; // ‘ 7
     key <AE08> { [rightsinglequotemark,               8,               underscore,               emdash ] }; // ’ 8 _ —
     key <AE09> { [       guillemotleft,               9,      leftdoublequotemark,           VoidSymbol ] }; // « 9 “ ‹
     key <AE10> { [      guillemotright,               0,     rightdoublequotemark,           VoidSymbol ] }; // » 0 ” ›
     key <AE11> { [          apostrophe,        quotedbl,                   degree,       dead_abovering ] }; // ' " °
     key <AE12> { [     dead_circumflex,  dead_diaeresis,               dead_caron,           VoidSymbol ] }; // ̂  ¨ ̌̌̌    //

     // Second row
     key <AD01> { [                   a,               A,                       ae,                   AE ] }; // a A æ Æ
     key <AD02> { [                   z,               Z,                 sterling,           VoidSymbol ] }; // z Z £
     key <AD03> { [                   e,               E,                 EuroSign,           VoidSymbol ] }; // e E €
     key <AD04> { [                   r,               R,               registered,           VoidSymbol ] }; // r R ®
     key <AD05> { [                   t,               T,                braceleft,            trademark ] }; // t T { ™
     key <AD06> { [                   y,               Y,               braceright,           VoidSymbol ] }; // y Y }
     key <AD07> { [                   u,               U,                   ugrave,               Ugrave ] }; // u U ù Ù
     key <AD08> { [                   i,               I,            dead_abovedot,        dead_belowdot ] }; // i I ̇   ̣ //
     key <AD09> { [                   o,               O,                       oe,                   OE ] }; // o O œ Œ
     key <AD10> { [                   p,               P,                  percent,             permille ] }; // p P % ‰
     key <AD11> { [               minus,          endash,                0x1002212,            0x1002011 ] }; // - – − ‑ // signe moins (minus sign), trait d'union insécable (non-breaking hyphen)
     key <AD12> { [                plus,       plusminus,                   dagger,         doubledagger ] }; // + ± † ‡

     // Third row
     key <AC01> { [                   q,               Q,              Greek_theta,           VoidSymbol ] }; // q Q θ
     key <AC02> { [                   s,               S,                   ssharp,            0x1001E9E ] }; // s S ß ẞ // lettre majuscule latine S dur (latin capital letter sharp s)
     key <AC03> { [                   d,               D,                   dollar,           VoidSymbol ] }; // d D $
     key <AC04> { [                   f,               F,            dead_currency,           VoidSymbol ] }; // f F ¤
     key <AC05> { [                   g,               G,               dead_greek,           VoidSymbol ] }; // g G µ
     key <AC06> { [                   h,               H,               VoidSymbol,     dead_belowmacron ] }; // h H   ̱  // Missing dead key for other european keys (ªəƏþÞıİºſðÐƞȠĳĲ)
     key <AC07> { [                   j,               J,               VoidSymbol,           VoidSymbol ] }; // j J
     key <AC08> { [                   k,               K,  dead_longsolidusoverlay,           VoidSymbol ] }; // k K ̷    //
     key <AC09> { [                   l,               L,                      bar,           VoidSymbol ] }; // l L |
     key <AC10> { [                   m,               M,                 infinity,           VoidSymbol ] }; // m M ∞
     key <AC11> { [               slash,       backslash,                 division,              radical ] }; // / \ ÷ √
     key <BKSL> { [            asterisk,         onehalf,                 multiply,           onequarter ] }; // * ½ × ¼

     // Fourth row
     key <LSGT> { [                less,         greater,            lessthanequal,    greaterthanequal ] }; // < > ≤ ≥
     key <AB01> { [                   w,               W,                      ezh,                 EZH ] }; // w W ʒ Ʒ
     key <AB02> { [                   x,               X,                copyright,          VoidSymbol ] }; // x X ©
     key <AB03> { [                   c,               C,                 ccedilla,            Ccedilla ] }; // c C ç Ç
     key <AB04> { [                   v,               V,             dead_cedilla,         dead_ogonek ] }; // v V ̧  ̨  //
     key <AB05> { [                   b,               B,              dead_stroke,          VoidSymbol ] }; // b B ̵    //
     key <AB06> { [                   n,               N,               dead_tilde,          VoidSymbol ] }; // n N ~
     key <AB07> { [              period,        question,             questiondown,          VoidSymbol ] }; // . ? ¿
     key <AB08> { [               comma,          exclam,               exclamdown,     dead_belowcomma ] }; // , ! ¡ ̦  //
     key <AB09> { [               colon,        ellipsis,           periodcentered,          VoidSymbol ] }; // : … ·
     key <AB10> { [           semicolon,           equal,             similarequal,            notequal ] }; // ; = ≃ ≠
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          OPHH    H        X    HHH    H            HHH    H            HHH    H            OIHH    H            OIH4$HH    H    LD$    L$LD$    AHE(L$HH    H    N8    H}P    H    H        HE(L$MHH    H    N8        HE(L$HH    H    AN    럹   QEH    PLH        XZ        Ћ̸ ŋKpHH    H            E1HMPSMHH    H        H[]A\A]A^A_    DGI$x  HH    H            EHLH    H    H$    L$    IAHH    H            HH    H            QMIRH    H    P    H    HHH    H            H    H            HH    H            I$x  HL$H    H        D$    I$x  H    H            HP  H    H            RHx  HASH    H        XZ    Hx  LH    H            Hx  AHH    H            HP  H    H            LLH    H            HOHH    H            HH    H               LGHAH    H        HH    H               LX  HH    LGH            HSHH    H            HSHH    H            DD$D\$H    H        L$DT$    uwH[]A\A]A^A_    SD$H    EHH    PA    ^_    \$\$   H    H        L$DT$)AADDH    H    PDD$E      AXYH    H            DHH    H            HH    H            HH    H            DKtDCpHH    AWAUH        X    E1IOPRMLH    H    A    [    LH    H            IOPELH    H            HH    H            DMLEHH    H        H<$        LH    H            DMLEP   HH    H        H|$    A[    jHH    H        H|$    AZ!H    HH        H<$    A    DKtDCpAUHLH    H        Y    DMLEV   RH    HH    P    H|$    H    H    IV%   Ep  H    H    ADBPLA    X    H    뿋$AALH    H        A    $ALH    H    DL$    DL$    H        H3H    H    H    A    $ALH    H    DL$    DL$    MD$HLHH    H          H    A    LJHDBpHH    HH            AVLL$IHHT$H    H        X       LGHA   H    H              H    H        1       E1E1HH    H        1           HHH    H            HH    H        H    넋KpLH    H            KpLH    H            A$   PLH    AUEL$H    MD$    ZY    A$   PLH    AD$@H    PAD$<PUEL$MD$    )   H     AD$@A$   LH    H    PAD$<PUEL$MD$    H       AVRG@HPG<PVDOH    LGH        H(    s4IU(A   L@LH    D/H                D   HH    H    H               LCHH    H               LCHH    H               H       DOHH    LGH            D   HH    H    H               LCE1HH    H            s4IU(E1H    L@LH            LHH    H            D   HH    H    H               H       LCHH    H            KIHH    H            GIt%HW(LHH    H            I        UL   HS   HV   H    PH   P   PLGH        H     t&   LCA   HH    H        ǃ      H߉H  []       LCHH    H               DKHH    LCH                D   HH    H    H            D   HH    H    H            H        1H%    D   HH    H    H               LCA   HH    H               DKHH    LCH               LCHH    H            D   HH    H    H            LCA      HH    H               DOHH    LGH                D   HH    H    H            D   HH    H    H               LCHH    H            DKLCHH    H            LCA      HH    H               DOHH    LGH                D   HH    H    H            LCA      HH    H            D   HH    H    H            DKLCHH    H               LCHH    H            LCA      HH    H            s   HIMLH    H    P    XZ    D   HH    H    H            DKLCHH    H               LCHH    H            LCA      HH    H               H?    DD$8DL$`DL\$@H    H    DT$8H    DT$8L\$@    E؉AH    H    D\$0    D\$0    A`   1HH    H            HH$HH    Lx  H    @DIxL$PA  PAU    H    DH    H                  E  EDH    H    D\$0    D\$0    QEHH    RHD$ LH      PDK        H    L\$PH    DH    PDL$hHDD$@DT$P    XDT$HL\$P    HD$(E  HH    E  H    DT$H HP    DT$    H|$ tDHD$H,DL$`DD$8H    H    HT$L\$@DT$0    DT$0L\$@       LD$(HHD$H    H        D$    $   H    HHH    PAULD$8DL$@    _AXDL$0    L$`H    L\$0H    DT$    DT$L\$0    HT$@H    L\$0H    DT$    DT$L\$0    E   LH    H    H            LLH    H            A   MGLH    H            E   LH    H    H               H  LH    H    L`AX    L`A       AMARH    LDtH    L`f    L`_    AMLH    H    f    IǛ    H    H    Iǟ        E   LH    H    H    Lh    Lh    Aw4IL$(LhH    A$   A$   L@H    PF*L        LhZ    A   MGA   LH    H    Lh    Lh    IT$(AH    H    LL        fH    H    IĞ        HH    H    I        A2MMHH    H        X    H    H    I        LH    H        I    AMARMH    DxLH    L`f    L`^    AMLH    H    f    HIǛE1    LH    H    Iǜ    HE1    AMLH    H    f    L    XE   LH    H    H            LH    H    L`X    LcXL`L    LPMLH    H    A      AMLMH    H    f        AMAUH    H    IǛf        HhIHH    H        Lh    A   MGLH    H            LLH    H        4LH    H    Iǜ            H    H            HI$   MPD	GL$A?QVH    RHH    PHL$     H     E1t$HL$IHH    H        AAX    AB  H    H    DM
PABLT$PT$DD$    XZD$LT$    LKPHMPPIHH    H    D$D$$Pt$     DT$H       L    H    H    HH      H    A    LJHDBpHH    HH            HHH    H          H    AE11HH    H            E11HH    H    A        H    A    Hu H    H    H        AE11HH    H            HKHHH    H               DLH    H            A|  A   H    H    RStRAh  RLPEOMG    H     EALLH    H        L  H[]A\A]A^A_    LKHDCpPHLH    H        AY    HLH    H        M       I$            M$   ED$pHLLH    [H    ]A\A]A^A_    ACpLKHHLDCpH    H    PASC,L\$P    H|$    H        H    C,LKHHLDCpH    H    P    H        ^             A   A   0C,LKHHLDCpH    H    P    H        Y    C,DCpHLLKHH    H    P    H        AX    C,LKHHLDCpH    H    P    H        _    E            H    H    H        1
      HH        S       H    HCuf  uHsHCHtHXfK4u)H[    HH3u   H    t[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         f4z40x F)H#\d|/7[6gAQ0u!}-
J4|FH#R	u4ju(Q`(<zߝHY
F֢B7"TQ֮Lq5Ë>-p5ڎ7@|,OmX4*dB	Զ`-EStr-}b;rZcxgbi_device_portmap_create  cxgbi_device_portmap_cleanup  cxgbi_device_register  cxgbi_device_unregister  cxgbi_device_unregister_all  cxgbi_device_find_by_lldev  cxgbi_device_find_by_netdev  cxgbi_device_find_by_netdev_rcu  cxgbi_hbas_remove  cxgbi_hbas_add  cxgbi_sock_free_cpl_skbs  cxgbi_sock_established  cxgbi_sock_closed  cxgbi_sock_fail_act_open  cxgbi_sock_act_open_req_arp_failure  cxgbi_sock_rcv_abort_rpl  cxgbi_sock_rcv_peer_close  cxgbi_sock_rcv_close_conn_rpl  cxgbi_sock_rcv_wr_ack  cxgbi_sock_select_mss  cxgbi_sock_skb_entail  cxgbi_sock_purge_wr_queue  cxgbi_sock_check_wr_invariants  cxgbi_ddp_set_one_ppod  cxgbi_ddp_ppm_setup  cxgbi_parse_pdu_itt  cxgbi_conn_tx_open  cxgbi_conn_pdu_ready  cxgbi_conn_alloc_pdu  cxgbi_conn_init_pdu  cxgbi_conn_xmit_pdu  cxgbi_cleanup_task  cxgbi_get_conn_stats  cxgbi_set_conn_param  cxgbi_get_ep_param  cxgbi_create_conn  cxgbi_bind_conn  cxgbi_create_session  cxgbi_destroy_session  cxgbi_set_host_param  cxgbi_get_host_param  cxgbi_ep_connect  cxgbi_ep_poll  cxgbi_ep_disconnect  cxgbi_iscsi_init  cxgbi_iscsi_cleanup  cxgbi_attr_is_visible                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3libcxgbi:%s: MaxRecvDataSegmentLength %u > %u.
       3libcxgbi:%s: csk 0x%p, tid %u, credit %u + %u != %u.
 6libcxgbi:%s: vlan dev %s -> %s.
      6libcxgbi:%s: ndev 0x%p, %s, NO match found.
  6libcxgbi:%s: cdev 0x%p, p#%u.
        6libcxgbi:%s: 0x%p, p%d, %s, host alloc failed.
       6libcxgbi:%s: cdev 0x%p, p#%d %s: chba 0x%p.
  6libcxgbi:%s: cdev 0x%p, p#%d %s, host add failed.
    6libcxgbi:%s: cdev 0x%p, tag 0x%x/0x%x, -> 0x%x(0x%x,0x%x).
   6libcxgbi:%s: csk 0x%p, cid %d.
       6libcxgbi:%s: task 0x%p,0x%p, tcp_task 0x%p, tdata 0x%p/0x%p.
 6libcxgbi:%s: task 0x%p, skb 0x%p, itt 0x%x.
  6libcxgbi:%s: cdev 0x%p, task 0x%p, release tag 0x%x.
 6libcxgbi:%s: cls_conn 0x%p, param %d, buf(%d) %s.
    6libcxgbi:%s: cls_conn 0x%p, param %d.
        6libcxgbi:%s: cid %u(0x%x), cls 0x%p,0x%p, conn 0x%p,0x%p,0x%p.
       3libcxgbi:%s: missing endpoint.
       6libcxgbi:%s: ep 0x%p, cls sess 0x%p.
 6libcxgbi:%s: cls sess 0x%p.
  Could not get host param. netdev for host not set.
     6libcxgbi:%s: shost 0x%p, hba 0x%p,%s, param %d, buf(%d) %s.
  6libcxgbi:%s: hba %s, req. ipv4 %pI4.
 6libcxgbi:%s: set iscsi ipv4 NOT supported, using %s ipv4.
    6libcxgbi:%s: shost 0x%p, hba 0x%p,%s, param %d.
      6libcxgbi:%s: hba %s, addr %s.
        6libcxgbi:%s: ndev 0x%p, %s, NO match mac found.
      6libcxgbi:%s: de-register transport 0x%p, %s, stt 0x%p.
       4libcxgbi:%s: cdev 0x%p, portmap OOM %u.
      6libcxgbi:%s: csk 0x%p,%u,0x%lx, bit %d.
      6libcxgbi:%s: lldev 0x%p, NO match found.
     6libcxgbi:%s: csk 0x%p, state %u, flags 0x%lx, conn 0x%p.
     3libcxgbi:%s: unable to register %s transport 0x%p.
   6libcxgbi:%s: %s, registered iscsi transport 0x%p.
    4libcxgbi:%s: tpdu max, sgl %u, bad offset %u/%u.
     4libcxgbi:%s: sg %d NULL, len %u/%u.
  4libcxgbi:%s: too many pages %u, dlen %u.
     6libcxgbi:%s: sgl max limit, sgl %u, offset %u, %u/%u, dlimit %u.
     6libcxgbi:%s: %s: offset %u, count %u,
err %u, total_count %u, total_offset %u
        4libcxgbi:%s: nport %d, OOM.
  6libcxgbi:%s: cdev 0x%p, p# %u.
       3libcxgbi:%s: task 0x%p,0x%p, tcp_task 0x%p, tdata 0x%p/0x%p.
 6libcxgbi:%s: task 0x%p, skb NULL.
    6libcxgbi:%s: task 0x%p, csk gone.
    3libcxgbi:%s: task 0x%p, ppod writing using ofldq failed.
     6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, EAGAIN.
   6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, EPIPE %d.
 6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, FULL %u-%u >= %u.
 3libcxgbi:%s: csk 0x%p, skb head %u < %u.
     3libcxgbi:%s: csk 0x%p, frags %u, %u,%u >%lu.
 6libcxgbi:%s: task 0x%p,0x%p, rv %d.
  6libcxgbi:%s: enable iso: csk 0x%p
    6libcxgbi:%s: task 0x%p, skb 0x%p, len %u/%u, %d EAGAIN.
      6libcxgbi:%s: disable iso:csk 0x%p, ts:%lu
    6libcxgbi:%s: itt 0x%x, skb 0x%p, len %u/%u, xmit err %d.
     6libcxgbi:%s: conn 0x%p, skb 0x%p, len %u, flag 0x%lx.
        6libcxgbi:%s: conn 0x%p, skb 0x%p, dcrc 0x%lx.
        6libcxgbi:%s: skb 0x%p, op 0x%x, itt 0x%x, %u %s ddp'ed.
      6libcxgbi:%s: skb 0x%p, off %u, %d, TCP_ERR.
  6libcxgbi:%s: skb 0x%p, off %u, %d, TCP_SUSPEND, rc %d.
       6libcxgbi:%s: skb 0x%p, off %u, %d, TCP_SKB_DONE.
     6libcxgbi:%s: skb 0x%p, off %u, %d, TCP_SEG_DONE, rc %d.
      6libcxgbi:%s: skb 0x%p, off %u, %d, invalid status %d.
        6libcxgbi:%s: cls 0x%p,0x%p, ep 0x%p, cconn 0x%p, csk 0x%p.
   6libcxgbi:%s: csk 0x%p,%u,0x%lx, state -> %u.
 6libcxgbi:%s: alloc csk %zu failed.
   6libcxgbi:%s: csk 0x%p, alloc cpls failed.
    6libcxgbi:%s: cdev 0x%p, new csk 0x%p.
        6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, cr %u,%u+%u, snd_una %u,%d.
       3libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, cr %u,%u+%u, empty.
       4libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, cr %u,%u+%u, < %u.
        4libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, snd_una %u/%u.     6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u.
   3libcxgbi:%s: cdev 0x%p, p#%u %s, port %u OOR.
        6libcxgbi:%s: cdev 0x%p, p#%u %s, release %u.
 6libcxgbi:%s: %s, put csk 0x%p, ref %u-1.
     6libcxgbi:%s: free csk 0x%p, state %u, flags 0x%lx
    6libcxgbi:%s: csk 0x%p, cdev 0x%p, offload down.
      6libcxgbi:%s: cdev 0x%p, p# %u,%s.
    6libcxgbi:%s: csk 0x%p,%u,%lx, %pI4:%u-%pI4:%u, err %d.
       6libcxgbi:%s: %s, get csk 0x%p, ref %u+1.
     3libcxgbi:%s: csk 0x%p,%u,0x%lx,%u,ABT_RPL_RSS.
       3libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, bad state.
        6libcxgbi:%s: ep 0x%p, cep 0x%p, cconn 0x%p, csk 0x%p,%u,0x%lx.
       3libcxgbi:%s: task 0x%p, tcp_task 0x%p, tdata 0x%p.
   3libcxgbi:%s: task 0x%p, csk gone.
    6libcxgbi:%s: tdata->dlen %u, remaining to send %u conn->max_xmit_dlength %u, tdata->max_xmit_dlength %u
      6libcxgbi:%s: max_pdu_size %u, max_num_pdu %u, max_txdata %u, num_pdu %u
      6libcxgbi:%s: task 0x%p, tcp_task 0x%p, tdata 0x%p, sgl err %d, count %u, dlimit %u
   3libcxgbi:%s: task 0x%p, tcp_task 0x%p, tdata 0x%p, sgl err %d
        6libcxgbi:%s: cdev 0x%p DDP off.
      6libcxgbi:%s: ppm 0x%p, pgidx %u, xfer %u, sgcnt %u, NO ddp.
  6libcxgbi:%s: sg %u/%u, %u,%u, not aligned.
   6libcxgbi:%s: %s: 0x%x, xfer %u, sgl %u dma mapping err.
      6libcxgbi:%s: %s: sw tag 0x%x, xfer %u, sgl %u, dma count %d.
 6libcxgbi:%s: csk 0x%p, R task 0x%p, %u,%u, no ddp.
   6libcxgbi:%s: sw_tag 0x%x NOT usable.
 6libcxgbi:%s: cdev 0x%p, task 0x%p, 0x%x(0x%x,0x%x)->0x%x/0x%x.
       6libcxgbi:%s: task 0x%p, op 0x%x, skb 0x%p,%u+%u/%u, itt 0x%x.
        6libcxgbi:%s: shost 0x%p, non_blocking %d, dst_addr 0x%p.
     6libcxgbi:%s: shost 0x%p, priv NULL.
  6libcxgbi:%s: no route to ipv4 0x%x, port %u.
 6libcxgbi:%s: multi-cast route %pI4, port %u, dev %s.
 6libcxgbi:%s: rt dev %s, loopback -> %s, mtu %u.
      6libcxgbi:%s: %s interface not up.
    6libcxgbi:%s: dst %pI4, %s, NOT cxgbi device.
 6libcxgbi:%s: route to %pI4 :%u, ndev p#%d,%s, cdev 0x%p.
     6libcxgbi:%s: no route to ipv6 %pI6 port %u
   6libcxgbi:%s: %pI6, port %u, dst no neighbour.
        6libcxgbi:%s: multi-cast route %pI6 port %u, dev %s.
  6libcxgbi:%s: dst %pI6 %s, NOT cxgbi device.
  6libcxgbi:%s: route to %pI6 :%u, ndev p#%d,%s, cdev 0x%p.
     6libcxgbi:%s: failed to get source address to reach %pI6
      6libcxgbi:%s: address family 0x%x NOT supported.
      6libcxgbi:%s: Could not connect through requested host %uhba 0x%p != 0x%p (%u).
       3libcxgbi:%s: cdev 0x%p, p#%u %s, NO port map.
        3libcxgbi:%s: source port NON-ZERO %u.
        6libcxgbi:%s: cdev 0x%p, p#%u %s, ALL ports used.
     6libcxgbi:%s: cdev 0x%p, p#%u %s, p %u, %u.
   4libcxgbi:%s: cdev 0x%p, p#%u %s, next %u?
    6libcxgbi:%s: csk 0x%p is closing.
    6libcxgbi:%s: iscsi alloc ep, OOM.
    6libcxgbi:%s: ep 0x%p, cep 0x%p, csk 0x%p, hba 0x%p,%s.
       6libcxgbi:%s: task 0x%p,0x%p, skb 0x%p, 0x%x,0x%x,0x%x, %u+%u.
        6libcxgbi:%s: data->total_count %u, tdata->total_offset %u
    3libcxgbi:%s: task 0x%p,0x%p, tcp_task 0x%p, tdata 0x%p/0x%p dlimit %u, sgl err %d.
   6libcxgbi:%s: count %u, tdata->count %u, num_pdu %u,task->hdr_len %u, r2t->data_length %u, r2t->sent %u
       6libcxgbi:%s: conn 0x%p, skb 0x%p, not hdr.
   6libcxgbi:%s: conn 0x%p, skb 0x%p, hcrc.
      6libcxgbi:%s: csk 0x%p, conn 0x%p.
    6libcxgbi:%s: csk 0x%p, conn 0x%p, id %d, conn flags 0x%lx!
   6libcxgbi:%s: skb 0x%p, NOT ready 0x%lx.
      6libcxgbi:%s: csk 0x%p, skb 0x%p,%u,f 0x%lx, pdu len %u.
      3libcxgbi:%s: coalesced bhs, csk 0x%p, skb 0x%p,%u, f 0x%lx, plen %u.
 3libcxgbi:%s: coalesced data, csk 0x%p, skb 0x%p,%u, f 0x%lx, plen %u.
        3libcxgbi:%s: bhs, csk 0x%p, skb 0x%p,%u, f 0x%lx, plen %u.
   3libcxgbi:%s: csk 0x%p, skb 0x%p,%u, f 0x%lx, plen %u, NO data.
       3libcxgbi:%s: data, csk 0x%p, skb 0x%p,%u, f 0x%lx, plen %u, dskb 0x%p,%u.
    6libcxgbi:%s: csk 0x%p, read %u.
      6libcxgbi:%s: csk 0x%p,%u,0x%lx,%u, seq %u, wup %u, thre %u, %u.
      6libcxgbi:%s: csk 0x%p, 0x%p, rx failed %d, read %u.
 drivers/scsi/cxgbi/libcxgbi.c 3 %s
 %pIS 6libcxgbi:%s: %s xmit err %d.
 is not Invalid pdu or skb. &x->wait                                                                                                                            libcxgbi_init_module            cxgbi_iscsi_cleanup             cxgbi_iscsi_init                need_active_close               cxgbi_ep_disconnect     sock_get_port           cxgbi_check_route6              cxgbi_sock_create               cxgbi_device_find_by_mac        cxgbi_check_route               cxgbi_ep_connect                cxgbi_get_host_param            cxgbi_set_iscsi_ipv4            cxgbi_set_host_param            cxgbi_destroy_session           cxgbi_create_session            cxgbi_bind_conn cxgbi_create_conn               cxgbi_get_ep_param              cxgbi_conn_max_recv_dlength     cxgbi_set_conn_param            task_release_itt                cxgbi_cleanup_task              cxgbi_sock_tx_queue_up          cxgbi_conn_xmit_pdu             cxgbi_prep_iso_info             cxgbi_conn_init_pdu             cxgbi_ppm_make_non_ddp_tag      cxgbi_ddp_sgl_check             cxgbi_ddp_reserve               task_reserve_itt                sgl_read_to_frags               cxgbi_task_data_sgl_read        cxgbi_conn_alloc_pdu            csk_return_rx_credits           skb_read_pdu_data       read_pdu_skb            skb_read_pdu_bhs                cxgbi_conn_pdu_ready            cxgbi_conn_tx_open              cxgbi_parse_pdu_itt             cxgbi_sock_check_wr_invariants  cxgbi_sock_rcv_wr_ack           cxgbi_sock_rcv_close_conn_rpl   cxgbi_sock_rcv_peer_close       cxgbi_sock_clear_flag           cxgbi_sock_rcv_abort_rpl        __cxgbi_sock_get                                cxgbi_sock_act_open_req_arp_failure             cxgbi_sock_fail_act_open                        cxgbi_inform_iscsi_conn_closing sock_put_port   cxgbi_sock_closed               cxgbi_sock_set_state    cxgbi_hbas_add          cxgbi_hbas_remove               cxgbi_device_find_by_netdev_rcu cxgbi_device_find_by_netdev     cxgbi_device_find_by_lldev      cxgbi_device_destroy            cxgbi_device_unregister         cxgbi_device_register           cxgbi_sock_free __cxgbi_sock_put                cxgbi_sock_set_flag             cxgbi_device_portmap_cleanup    cxgbi_device_portmap_create     dbg_level                    parm=dbg_level:libiscsi debug level (default=0) parmtype=dbg_level:uint license=GPL version=0.9.1-ko description=Chelsio iSCSI driver library author=Chelsio Communications, Inc. srcversion=200D7146B0D40229A0B526F depends=libiscsi,scsi_mod,libcxgb,libiscsi_tcp,scsi_transport_iscsi retpoline=Y intree=Y name=libcxgbi vermagic=6.1.0-35-amd64 SMP preempt mod_unload modversions                                                                                                                                                                                                                                                                                                                                                                                                                                                                      (  0  (                   0  (                                          (  0  (                   0  (                   0                                            (    0  8  X  8  0  (                                                                      (    0  8  @  8  0  (                     @                   (  0  8  @                                       (                 (                 (                                                   (    0  8  @  8  0  (                     @                         (    0  8  0  (                     8  0  (                     8  0  (                     8  0  (                     8  0  (                                                                                                                                                                         (  8  (                 8  (                 8                         (    0  8  0  (                     8  0  (                     8  0  (                     8  0  (                     8                         (  0  (                   0  (                   0                                                                                                                                   h        h                           (    0  8  H                                             (                                        (    0  8  X  8  0  (                     X                         (    0  8  P  8  0  (                     P                         (    0  8  X  8  0  (                     X                                                         (    0  8  0  (                     8                         (  0  (                   0  (                   0  (                   0                         (  0  (                   0      0                                                                                (  0  (                   0                       (                 (                 (                 (                       (                 (                 (                 (                                                                                   (  0  (                   0  (                   0  (                   0                         (    0  8    8  0  (                                          F   H     F            H                        (    0  8  `  8  0  (                     `                       (  8  (                 8                         (    0  8  H  8  0  (                     H  8  0  (                     H                    0     X  (  0  8  0  (      @  H  8  0  (                     @  8     (  0  8           8  @  H  @  8  8  0             H  8  0  (                     H  P  X  P  H  P  H  (  X  `  X  `  X  `  X  `  X  `  X  `  h  p  X  P  X  P  X  `  X        8  @  H  @  8  @  H  P  X  8  @  H  P  8  @  H  P  X  `  8  0                 (  0  8          0  (     0  8  @  8  0                                  H `  h  p  x    `  h  `  h  p  h  `  h  p  x  `  8  H  P  X  `  h  H  8  0  (                     H  P  H  8  0  (                     H  P  X  `  H  P  H  P  H  P  H  P  H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      m    __fentry__                                              9[    __x86_return_thunk                                      ~    _printk                                                 KM    mutex_lock                                              82    mutex_unlock                                            ȸ    vlan_dev_real_dev                                       'R    __rcu_read_lock                                         i$    __rcu_read_unlock                                       Er    iscsi_host_remove                                       `    pci_dev_put                                             J    iscsi_host_free                                         cuJ    iscsi_host_alloc                                        4Q    pci_dev_get                                             ϛ5    iscsi_host_add                                          rP    scsi_host_put                                           	n    kfree_skb_reason                                        y    sg_next                                                 *    cxgbi_ppm_init                                          pHe    __x86_indirect_thunk_rax                                )0    iscsi_conn_queue_xmit                                   E0    __kfree_skb                                             
    iscsi_tcp_cleanup_task                                  Ȩ{7    cxgbi_ppm_ppod_release                                  2"    dma_unmap_sg_attrs                                      z    kfree                                                       iscsi_tcp_set_max_r2t                                   p    iscsi_set_param                                         ˹    iscsi_conn_get_addr_param                               U    iscsi_tcp_conn_setup                                    v#    iscsi_session_setup                                     B    iscsi_tcp_r2tpool_alloc                                 	D    iscsi_session_teardown                                  }X.    iscsi_tcp_r2tpool_free                                  N}    iscsi_host_set_param                                    c    in_a// This layout includes all Indian layouts, including:
//     - Hindi
//     - Marathi
//     - Sanskrit
//     - Bangla
//     - Gujarati
//     - Kannada
//     - Malayalam
//     - Ol Chiki
//     - Oriya
//     - Tamil
//     - Telugu
//     - Urdu

// Links:
// - Indic INSCRIPT keyboard layout diagrams:
//     http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html
// - Bangla Baishakhi (Bangla layouts):
// - Bangla Baishakhi InScript (Bangla layouts):
// - Bangla Bornona (Bangla layouts):
// - Uni Gitanjali (Bangla layouts):
//     http://nltr.org
// - Ekusheyr Shadhinota (Bangla layouts):
//     http://ekushey.org/projects/shadhinota/index.html
// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction:
//     http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx
// - Ol Chiki:
//    http://www.unicode.org/L2/L2005/05243r-n2984-ol-chiki.pdf (fig. 9)

// Devangari is the default. Kill me if I am wrong:)
default partial alphanumeric_keys
xkb_symbols "deva" {
	// March 2004 -- David Holl <smyrph+dev_xkb@ece.wpi.edu>
	name[Group1]="Indian";

	key.type[group1]="FOUR_LEVEL";

	key <TLDE> { [ U094a, U0912,   grave, asciitilde  ] };
	key <AE01> { [ U0967, U090d,       1, exclam      ] };
	key <AE02> { [ U0968, U0945,       2, at          ] };
	// Shift+AE0[3-8] really need to return a macro of keys defined by
	// INSCRIPT in place of the symbols that are here for now.  But this
	// requires XKB to map 1 key into two to three other key presses.
	key <AE03> { [ U0969, numbersign,  3, numbersign  ] };
	key <AE04> { [ U096a, dollar,      4, U20b9       ] }; // Rupee
	key <AE05> { [ U096b, percent,     5, percent     ] };
	key <AE06> { [ U096c, asciicircum, 6, asciicircum ] };
	key <AE07> { [ U096d, ampersand,   7, ampersand   ] };
	key <AE08> { [ U096e, asterisk,    8, asterisk    ] };
	key <AE09> { [ U096f, parenleft,   9, parenleft   ] };
	key <AE10> { [ U0966, parenright,  0, parenright  ] };
	key <AE11> { [ minus, U0903, minus, underscore    ] };
	key <AE12> { [ U0943, U090b, U0944, U0960 ] };

	key <AD01> { [ U094c, U0914 ] };
	key <AD02> { [ U0948, U0910 ] };
	key <AD03> { [ U093e, U0906 ] };
	key <AD04> { [ U0940, U0908, U0963, U0961 ] };
	key <AD05> { [ U0942, U090a ] };
	key <AD06> { [ U092c, U092d ] };
	key <AD07> { [ U0939, U0919 ] };
	key <AD08> { [ U0917, U0918, U095a ] };
	key <AD09> { [ U0926, U0927 ] };
	key <AD10> { [ U091c, U091d, U095b ] };
	key <AD11> { [ U0921, U0922, U095c, U095d ] };
	key <AD12> { [ U093c, U091e ] };
	// I added \ / ? | for shell-convenience (file names and piping)
	key <BKSL> { [ U0949, U0911, U005C, U007C ] };

	key <AC01> { [ U094b, U0913 ] };
	key <AC02> { [ U0947, U090f ] };
	key <AC03> { [ U094d, U0905 ] };
	key <AC04> { [ U093f, U0907, U0962, U090c ] };
	key <AC05> { [ U0941, U0909 ] };
	key <AC06> { [ U092a, U092b, NoSymbol, U095e ] };
	key <AC07> { [ U0930, U0931 ] };
	key <AC08> { [ U0915, U0916, U0958, U0959 ] };
	key <AC09> { [ U0924, U0925 ] };
	key <AC10> { [ U091a, U091b, U0952 ] };
	key <AC11> { [ U091f, U0920, NoSymbol, U0951 ] };

	key <AB01> { [ U0946, U090e, U0953 ] };
	key <AB02> { [ U0902, U0901, NoSymbol, U0950 ] };
	key <AB03> { [ U092e, U0923, U0954 ] };
	key <AB04> { [ U0928, U0929 ] };
	key <AB05> { [ U0935, U0934 ] };
	key <AB06> { [ U0932, U0933 ] };
	key <AB07> { [ U0938, U0936 ] };
	key <AB08> { [ comma, U0937, U0970 ] };
	key <AB09> { [ period, U0964, U0965, U093d ] };
	// I added \ / ? | for shell-convenience (file names and piping)
	key <AB10> { [ U092f, U095f, slash, question ] };

	// space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
	include "nbsp(zwnj3zwj4)"
        include "level3(ralt_switch)"
};

//Name		:	Bolnagri (Combined)
//Description	:	A phonetic keyboard layout for Devnagari(Hindi)
//			http://www.indlinux.org/wiki/index.php/BolNagri
//NOTE		: 	This is a combined map of bolnagri_matras and bolnagri_vowels.
//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman"
//Original Author :	Noah Levitt<nlevitt at columbia.edu>
//Past Authors  : Pramod.R <pramodr at gmail.com> and Ravikant <ravikant at sarai.net>
//Current Main. : G Karunakar <karunakar@indlinux.org>

partial alphanumeric_keys
xkb_symbols "bolnagri" {
     name[Group1] = "Hindi (Bolnagri)";
     key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   U0902,	U0901,		grave, 	asciitilde ] }; // grave: anusvara, candrabindu
    key <AE01>  { [   1,	exclam,		U0967,		exclam	   ] };
    key <AE02>  { [   2,	at,		U0968,		at	   ] };
    key <AE03>  { [   3,    	numbersign, 	U0969,		numbersign ] };
    key <AE04>  { [   4,	dollar,		U096A,		U20B9      ] }; // Rupee
    key <AE05>  { [   5,	percent,	U096B,		percent    ] };
    key <AE06>  { [   6,	asciicircum,	U096C,		asciicircum ] };
    key <AE07>  { [   7,	ampersand,	U096D,		ampersand  ] };
    key <AE08>  { [   8,	asterisk,	U096E,		asterisk   ] };
    key <AE09>  { [   9,	parenleft,	U096F,		parenleft  ] };
    key <AE10>  { [   0,	parenright,	U0966,		parenright ] };
    key <AE11>	{ [   minus,	underscore	     ] };
    key <AE12>	{ [   equal,	plus		     ] };
    key <BKSL>  { [   U0964,	U0965,		U007C,		U005C   ] }; //pipe : danda, double danda

    //Q Row	
    key <AD01>   { [   U200C, 	U200D   ] };  // Q: ZWNJ, ZWJ
    key <AD02>   { [   U0935,  	U950	] };  // W: wa, OM
    key <AD03>   { [   U0947,   U0948,	U090F,	U0910   ] };  // E: e, ai matras
    key <AD04>   { [   U0930,	U0943,	U0931,  U090B  	] };  // R: ra, vocalic Ri
    key <AD05>   { [   U0924,   U0925   ] };  // T: ta, tha
    key <AD06>   { [   U092f,	U091E   ] };  // Y: ya, nya
    key <AD07>   { [   U0941,   U0942,	U0909,	U090A   ] };  // U: u, uu matras
    key <AD08>   { [   U093F,   U0940,	U0907,	U0908   ] };  // I: i, ii matras
    key <AD09>   { [   U094B,   U094C,	U0913,	U0914   ] };  // O: o, au matras
    key <AD10>   { [   U092A,   U092B   ] };  // P: pa, pha
    key <AD11>   { [   bracketleft,   braceleft   ] };
    key <AD12>	 { [   bracketright, braceright   ] };

    //A Row
    key <AC01>   { [   U093E,	 U0906,	U0905,	U0906  ] };   // A: aa, full A, AA
    key <AC02>   { [   U0938,    U0937   ] };  // S: sa, ssa
    key <AC03>   { [   U0926,    U0927   ] };  // D: da, dha
    key <AC04>   { [   U091F,    U0920   ] };  // F: TA, THA
    key <AC05>   { [   U0917,    U0918   ] };  // G: ga, gha
    key <AC06>   { [   U0939,    U0903   ] };  // H: ha, visarg 
    key <AC07>   { [   U091C,    U091D   ] };  // J: ja, jha
    key <AC08>   { [   U0915,    U0916   ] };  // K: ka, kha
    key <AC09>   { [   U0932,	 U0933,	U0962,   U090C   ] };  // L: la, vocalic L or lru matra
    key <AC10>   { [   semicolon, colon  ] };
    key <AC11>   { [apostrophe, quotedbl ] };

    //Z Row
    key <AB01>   { [   U0936,	 U0945, U0936, U090D 	 ] };  // Z: sha, akaar candra
    key <AB02>   { [   U094D,    U0949, U094D, U0911	 ] };  // X: halant, aakaar candra, chandra A
    key <AB03>   { [   U091A,    U091B   ] };  // C: ca, cha
    key <AB04>   { [   U0921,    U0922   ] };  // V: da, dha
    key <AB05>   { [   U092C,    U092D   ] };  // B: ba, bha
    key <AB06>   { [   U0928,    U0923   ] };  // N: na, nna
    key <AB07>   { [   U092E,    U0919,	U092E,	U093D   ] };  // M: ma, nga, avagraha
    key <AB08>   { [   comma,    U0970	 ] };// comma: comma, dev abbreviation sign
    key <AB09>   { [   period,   U093C 	 ] };  // period: period, nukta
    key <AB10>	 { [   slash,   question ] };

//    modifier_map Shift  { Shift_L };
//    modifier_map Lock   { Caps_Lock };
//    modifier_map Control{ Control_L };
//    modifier_map Mod3   { Mode_switch };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "ben" {
    name[Group1]= "Bangla (India)";

      // Mainly numbers.
      key <AE01> { [      U09E7 		]	};
      key <AE02> { [      U09E8 		]	};
      key <AE03> { [      U09E9 		]	};
      key <AE04> { [      U09EA 		]	};
      key <AE05> { [      U09EB		]	};
      key <AE06> { [      U09EC 		]	};
      key <AE07> { [      U09ED	        ]	};
      key <AE08> { [      U09EE 		]	};
      key <AE09> { [      U09EF, parenleft	]	};
      key <AE10> { [      U09E6, parenright	]	};
      key <AE11> { [      minus, U0983 	]	};
      key <AE12> { [      U098B, U09C3	]	};

// Mainly long vowels

      key <AD01> { [      U09CC,  U0994	]	};
      key <AD02> { [      U09C8,  U0990	]	};
      key <AD03> { [      U09BE,  U0986	]	};
      key <AD04> { [      U09C0,  U0988	]	};
      key <AD05> { [      U09C2,  U098A	]	};

// Mainly voiced consonants

      key <AD06> { [      U09AC,  U09AD	]	};
      key <AD07> { [      U09B9,  U0999 ]	};
      key <AD08> { [      U0997,  U0998 ]	};
      key <AD09> { [      U09A6,  U09A7 ]	};
      key <AD10> { [      U099C,  U099D ]	};
      key <AD11> { [      U09A1, U09A2 	]	};
      key <AD12> { [      U09BC, U099E 	]	};

// Mainly short vowels
      key <AC01> { [      U09CB,  U0993 ]	};
      key <AC02> { [      U09C7,  U098F ]	};
      key <AC03> { [      U09CD,  U0985 ]	};
      key <AC04> { [      U09BF,  U0987 ]	};
      key <AC05> { [      U09C1,  U0989 ]	};


// Mainly unvoiced consonants

      key <AC06> { [      U09AA,  U09AB ]	};
      key <AC07> { [      U09B0,  U09DD ]	};
      key <AC08> { [      U0995,  U0996 ]	};
      key <AC09> { [      U09A4,  U09A5 ]	};
      key <AC10> { [      U099A,  U099B ]	};
      key <AC11> { [      U099F, U09A0 	]	};
      key <BKSL> { [      U005C, U007C 	]	};

      key <AB01> { [      z, Z  		]       };
      key <AB02> { [      U0982,  U0981 ]       };
      key <AB03> { [      U09AE,  U09A3 ]       };
      key <AB04> { [      U09A8,  U09A8 ]       };
      key <AB05> { [      U09AC,  U09AC ]       };
      key <AB06> { [      U09B2,  U09B2 ]       };
      key <AB07> { [      U09B8,  U09B6 ]       };
      key <AB08> { [      comma,      U09B7 ]       };
      key <AB09> { [      period,     U0964 ]       };
      key <AB10> { [      U09DF,  U09AF	]       };

    include "level3(ralt_switch)"
    include "rupeesign(4)"
};

xkb_symbols "ben_probhat" {
 name[Group1]= "Bangla (India, Probhat)";
   key.type[group1]="FOUR_LEVEL";

   key <ESC>  { [ Escape ] };

// numbers
   key <TLDE> { [ U200D, asciitilde   ] };
   key <AE01> { [ U09E7, exclam, U09F4 ] };
   key <AE02> { [ U09E8, at, U09F5 ] };
   key <AE03> { [ U09E9, numbersign, U09F6 ] };
   key <AE04> { [ U09EA, U09F3, U09F7, U09F2 ] };
   key <AE05> { [ U09EB, percent      ] };
   key <AE06> { [ U09EC, asciicircum  ] };
   key <AE07> { [ U09ED, U099E, U09FA ] };
   key <AE08> { [ U09EE, U09CE    ] };
   key <AE09> { [ U09EF, parenleft    ] };
   key <AE10> { [ U09E6, parenright, U09F8, U09F9 ] };
   key <AE11> { [ minus,     underscore   ] };
   key <AE12> { [ equal,     plus         ] };
   key <BKSP> { [ BackSpace               ] };

// tab, q to ] 
   key <TAB>  { [   Tab,  ISO_Left_Tab     ] };
   key <AD01> { [   U09A6,  U09A7  ] };
   key <AD02> { [   U09C2,  U098A  ] };
   key <AD03> { [   U09C0,  U0988  ] };
   key <AD04> { [   U09B0,  U09DC  ] };
   key <AD05> { [   U099F,  U09A0  ] };
   key <AD06> { [   U098F,  U0990  ] };
   key <AD07> { [   U09C1,  U0989  ] };
   key <AD08> { [   U09BF,  U0987  ] };
   key <AD09> { [   U0993,  U0994  ] };
   key <AD10> { [   U09AA,  U09AB  ] };
   key <AD11> { [   U09C7,  U09C8  ] };
   key <AD12> { [   U09CB,  U09CC, U09D7 ] };
   key <RTRN> { [   Return                 ] };

// caps, a to ' 
//   key <CAPS> { [   Caps_Lock              ] };
   key <AC01> { [   U09BE,  U0985, U098C, U09E0 ] };
   key <AC02> { [   U09B8,  U09B7, U09E1, U09E3 ] };
   key <AC03> { [   U09A1,  U09A2, U09C4, U09E2 ] };
   key <AC04> { [   U09A4,  U09A5  ] };
   key <AC05> { [   U0997,  U0998  ] };
   key <AC06> { [   U09B9,  U0983, U09BD ] };
   key <AC07> { [   U099C,  U099D  ] };
   key <AC08> { [   U0995,  U0996  ] };
   key <AC09> { [   U09B2,  U0982  ] };
   key <AC10> { [   semicolon,  colon      ] };
   key <AC11> { [   apostrophe, quotedbl   ] };

// shift, z to /
//   key <LFSH> { [   Shift_L                ] };
   key <AB01> { [   U09DF,  U09AF  ] };
   key <AB02> { [   U09B6,  U09DD  ] };
   key <AB03> { [   U099A,  U099B  ] };
   key <AB04> { [   U0986,  U098B  ] };
   key <AB05> { [   U09AC,  U09AD  ] };
   key <AB06> { [   U09A8,  U09A3  ] };
   key <AB07> { [   U09AE,  U0999  ] };
   key <AB08> { [   comma,      U09C3  ] };
   key <AB09> { [   U0964,  U0981, U09BC ] };
   key <AB10> { [   U09CD,  question   ] };
   key <BKSL> { [   U200C,  U0965  ] };

//   key <LCTL> { [   Control_L              ] };
//   key <SPCE> { [   space                  ] };

//   modifier_map Shift  { Shift_L };
//   modifier_map Lock   { Caps_Lock };
//   modifier_map Control{ Control_L };

    include "level3(ralt_switch)"
    include "rupeesign(4)"
};

// Bangla Baishakhi, Bangla Baishakhi InScript, Bangla Bornona, Uni Gitanjali Layouts are added by Promathesh Mandal <promathesh812004@gmail.com>

xkb_symbols "ben_baishakhi" {
 name[Group1]= "Bangla (India, Baishakhi)";
   key <ESC>   { [ Escape 					] };

// numbers
   key <TLDE> { [ 0x100200D, 0x100200C	] };
   key <AE01> { [ 0x10009E7, exclam		] };
   key <AE02> { [ 0x10009E8, at		] };
   key <AE03> { [ 0x10009E9, numbersign	] };
   key <AE04> { [ 0x10009EA, dollar, 0x10009F2	] };
   key <AE05> { [ 0x10009EB, percent		] };
   key <AE06> { [ 0x10009EC, asciicircum, 0x10009D7    ] };
   key <AE07> { [ 0x10009ED, ampersand ] };
   key <AE08> { [ 0x10009EE,   asterisk,0x10009FA       		] };
   key <AE09> { [ 0x10009EF, parenleft    	] };
   key <AE10> { [ 0x10009E6, parenright   	] };
   key <AE11> { [ minus, underscore   	] };
   key <AE12> { [ equal,     plus 	] };
   key <BKSP> { [ BackSpace               		] };

// tab, q to ] 
   key <TAB>   { [   Tab,  ISO_Left_Tab		] };
   key <AD01> { [   0x10009A1,  0x10009A2  ] };
   key <AD02> { [  0x10009C0 ,  0x10009C2  ] };
   key <AD03> { [   0x10009C7,  0x100098F, 0x1000990 ] };
   key <AD04> { [   0x10009B0 , 0x10009C3, 0x100098B             		] };
   key <AD05> { [   0x100099F,  0x10009A0	] };
   key <AD06> { [   0x10009AF,  0x10009DF	] };
   key <AD07> { [   0x10009C1,  0x1000989, 0x100098A  ] };
   key <AD08> { [   0x10009BF,  0x1000987, 0x1000988  ] };
   key <AD09> { [   0x10009CB,  0x1000993, 0x1000994	] };
   key <AD10> { [   0x10009AA,  0x10009AB	] };
   key <AD11> { [   bracketleft,  braceleft] };
   key <AD12> { [   bracketright,	braceright	] };
   key <RTRN> { [   Return                 		] };

// caps, a to ' 
// key <CAPS> { [   Caps_Lock            		] };
   key <AC01> { [   0x10009BE,  0x1000985, 0x1000986  ] };
   key <AC02> { [   0x10009B8,  0x10009B6,  0x10009B7  ] };
   key <AC03> { [   0x10009A6,  0x10009A7  ] };
   key <AC04> { [   0x10009A4,   0x10009A5, 0x10009CE  ] };
   key <AC05> { [   0x1000997,  0x1000998	] };
   key <AC06> { [   0x10009CD,  0x10009B9, 0x1000983  ] };
   key <AC07> { [   0x100099C,  0x100099D	] };
   key <AC08> { [   0x1000995,  0x1000996  	] };
  key <AC09> { [   0x10009B2,  0x1000964, 0x100098C  ] };
   key <AC10> { [   semicolon,  colon  	] };
   key <AC11> { [   apostrophe, quotedbl   	] };

// shift, z to /
// key <LFSH> { [   Shift_L              			] };
   key <AB01> { [   0x10009C8, 0x10009CC              		] };
   key <AB02> { [   0x10009DC, 0x10009DD              		] };
   key <AB03> { [   0x100099A,  0x100099B  ] };
   key <AB04> { [   0x10009F1,  0x10009F0	] };
   key <AB05> { [   0x10009AC,  0x10009AD  ] };
   key <AB06> { [   0x10009A8,  0x10009A3, 0x100099E  ] };
   key <AB07> { [   0x10009AE,  0x1000999, 0x1000981  ] };
   key <AB08> { [   comma,      less	] };
   key <AB09> { [    period,	greater,0x10009BC 		] };
   key <AB10> { [   slash,  question, 0x1000982   	] };
   key <BKSL> { [   backslash,        bar	] };

// third level with right-alt
    include "level3(ralt_switch)"

//   key <LCTL> { [   Control_L              ] };
//   key <SPCE> { [   space                  ] };

//   modifier_map Shift  { Shift_L };
//   modifier_map Lock   { Caps_Lock };
//   modifier_map Control{ Control_L };
};

xkb_symbols "ben_inscript" {
    name[Group1]= "Bangla (India, Baishakhi InScript)";

      // Mainly numbers.
      key <TLDE> { [      0x100200D, 0x100200C	] 	};
      key <AE01> { [      0x10009E7  		]	};
      key <AE02> { [      0x10009E8 		]	};
      key <AE03> { [      0x10009E9 		]	};
      key <AE04> { [      0x10009EA 		]	};
      key <AE05> { [      0x10009EB		]	};
      key <AE06> { [      0x10009EC 		]	};
      key <AE07> { [      0x10009ED	        ]	};
      key <AE08> { [      0x10009EE 		]	};
      key <AE09> { [      0x10009EF, parenleft	]	};
      key <AE10> { [      0x10009E6, parenright	]	};
      key <AE11> { [      minus, 0x1000983 	]	};
      key <AE12> { [      0x10009C3, 0x100098B 	]	};

// Mainly long vowels

      key <AD01> { [      0x10009CC,  0x1000994	]	};
      key <AD02> { [      0x10009C8,  0x1000990	]	};
      key <AD03> { [      0x10009BE,  0x1000986	]	};
      key <AD04> { [      0x10009C0,  0x1000988	]	};
      key <AD05> { [      0x10009C2,  0x100098A	]	};

// Mainly voiced consonants

      key <AD06> { [      0x10009AC,  0x10009AD	]	};
      key <AD07> { [      0x10009B9,  0x1000999 ]	};
      key <AD08> { [      0x1000997,  0x1000998 ]	};
      key <AD09> { [      0x10009A6,  0x10009A7 ]	};
      key <AD10> { [      0x100099C,  0x100099D ]	};
      key <AD11> { [      0x10009A1,  0x10009A2 ]	};
      key <AD12> { [      0x10009BC,  0x100099E ]	};

// Mainly short vowels
      key <AC01> { [      0x10009CB,  0x1000993 ]	};
      key <AC02> { [      0x10009C7,  0x100098F ]	};
      key <AC03> { [      0x10009CD,  0x1000985 ]	};
      key <AC04> { [      0x10009BF,  0x1000987 ]	};
      key <AC05> { [      0x10009C1,  0x1000989 ]	};


// Mainly unvoiced consonants

      key <AC06> { [      0x10009AA,  0x10009AB ]	};
      key <AC07> { [      0x10009B0,  0x10009DD ]	};
      key <AC08> { [      0x1000995,  0x1000996 ]	};
      key <AC09> { [      0x10009A4,  0x10009A5 ]	};
      key <AC10> { [      0x100099A,  0x100099B ]	};
      key <AC11> { [      0x100099F, 0x10009A0 	]	};
      key <BKSL> { [      backslash, bar 	]	};

      key <AB01> { [      0x10009CE  		]       };
      key <AB02> { [      0x1000982,  0x1000981 ]       };
      key <AB03> { [      0x10009AE,  0x10009A3 ]       };
      key <AB04> { [      0x10009A8,  0x10009A8 ]       };
      key <AB05> { [      0x10009AC,  0x10009AC ]       };
      key <AB06> { [      0x10009B2,  0x10009B2 ]       };
      key <AB07> { [      0x10009B8,  0x10009B6 ]       };
      key <AB08> { [      comma,      0x10009B7 ]       };
      key <AB09> { [      period,     0x1000964 ]       };
      key <AB10> { [      0x10009DF,  0x10009AF	]       };
};

xkb_symbols "ben_gitanjali" {
 name[Group1]= "Bangla (India, Gitanjali)";
   key <ESC>   { [ Escape			] };

// numbers
   key <TLDE> { [ colon, question	] };
   key <AE01> { [ 0x10009E7, 0x10009CE	] };
   key <AE02> { [ 0x10009E8, apostrophe	] };
   key <AE03> { [ 0x10009E9, numbersign	] };
   key <AE04> { [ 0x10009EA, 0x10009F3	] };
   key <AE05> { [ 0x10009EB, slash	] };
   key <AE06> { [ 0x10009EC, period	] };
   key <AE07> { [ 0x10009ED, ampersand 	] };
   key <AE08> { [ 0x10009EE, asterisk 	] };
   key <AE09> { [ 0x10009EF, parenleft  ] };
   key <AE10> { [ 0x10009E6, parenright	] };
   key <AE11> { [ minus, 0x1000983   	] };
   key <AE12> { [ 0x10009C3, 0x100098B 	] };
   key <BKSP> { [ BackSpace		] };

// tab, q to ] 
   key <TAB>   { [   Tab,  ISO_Left_Tab	] };
   key <AD01> { [   0x10009D7,  0x1000994 ] };
   key <AD02> { [   0x10009C8,  0x1000990 ] };
   key <AD03> { [   0x10009BE,  0x1000985 ] };
   key <AD04> { [   0x10009C0,  0x1000988 ] };
   key <AD05> { [   0x10009C2,  0x100098A ] };
   key <AD06> { [   0x10009AC,  0x10009AD ] };
   key <AD07> { [   0x10009B9,  0x1000999 ] };
   key <AD08> { [   0x1000997,  0x1000998 ] };
   key <AD09> { [   0x10009A6,  0x10009A7 ] };
   key <AD10> { [   0x100099C,  0x100099D ] };
   key <AD11> { [   0x10009A1,  0x10009A2 ] };
   key <AD12> { [   0x100200C,  0x100099E ] };
   key <RTRN> { [   Return		  ] };

// caps, a to ' 
// key <CAPS> { [   Caps_Lock            		] };
   key <AC01> { [   0x100200D,  0x1000993 ] };
   key <AC02> { [   0x10009C7,  0x100098F ] };
   key <AC03> { [   0x10009CD		  ] };
   key <AC04> { [   0x10009BF,  0x1000987 ] };
   key <AC05> { [   0x10009C1,  0x1000989 ] };
   key <AC06> { [   0x10009AA,  0x10009AB ] };
   key <AC07> { [   0x10009B0,  0x10009F0 ] };
   key <AC08> { [   0x1000995,  0x1000996 ] };
   key <AC09> { [   0x10009A4,  0x10009A5 ] };
   key <AC10> { [   0x100099A,  0x100099B ] };
   key <AC11> { [   0x100099F,  0x10009A0 ] };

// shift, z to /
// key <LFSH> { [   Shift_L              			] };
   key <AB01> { [   0x10009C7, 0x100098F ] };
   key <AB02> { [   0x1000982, 0x1000981 ] };
   key <AB03> { [   0x10009AE, 0x10009A3 ] };
   key <AB04> { [   0x10009A8, 0x10009DC ] };
   key <AB05> { [   0x10009F1, 0x10009DD ] };
   key <AB06> { [   0x10009B2		 ] };
   key <AB07> { [   0x10009B8, 0x10009B6 ] };
   key <AB08> { [   comma,     0x10009B7 ] };
   key <AB09> { [   0x1000964, 0x10009FA ] };
   key <AB10> { [   0x10009AF, 0x10009DF ] };
   key <BKSL> { [   backslash, bar	 ] };

// third level with right-win
//    include "level3(lwin_switch)"

//   key <LCTL> { [   Control_L              ] };
//   key <SPCE> { [   space                  ] };

//   modifier_map Shift  { Shift_L };
//   modifier_map Lock   { Caps_Lock };
//   modifier_map Control{ Control_L };
};


xkb_symbols "ben_bornona" {
 name[Group1]= "Bangla (India, Bornona)";
   key <ESC>  { [ Escape 					] };

// numbers
   key <TLDE> { [ 0x100200D, 0x100200C   	] };
   key <AE01> { [ 0x10009E7, exclam         	] };
   key <AE02> { [ 0x10009E8, 0x1000981 	] };
   key <AE03> { [ 0x10009E9, numbersign   	] };
   key <AE04> { [ 0x10009EA, 0x10009F3    	] };
   key <AE05> { [ 0x10009EB, percent      	] };
   key <AE06> { [ 0x10009EC, 0x1000983    	] };
   key <AE07> { [ 0x10009ED, 0x10009CE	] };
   key <AE08> { [ 0x10009EE, asterisk		] };
   key <AE09> { [ 0x10009EF, parenleft    	] };
   key <AE10> { [ 0x10009E6, parenright	] };
   key <AE11> { [ minus,	   underscore	] };
   key <AE12> { [ equal,          plus			] };
   key <BKSP> { [ BackSpace               		] };

// tab, q to ] 
   key <TAB>   { [   Tab,  	ISO_Left_Tab	] };
   key <AD01> { [   0x1000982,  0x1000999, 0x10009D7	] };
   key <AD02> { [   0x10009A2,  0x10009A0, 0x100098A ] };
   key <AD03> { [   0x10009C7,  0x10009C8, 0x1000988	] };
   key <AD04> { [   0x10009B0,  0x10009C3, 0x100098B	] };
   key <AD05> { [   0x10009A4,  0x100099F	] };
   key <AD06> { [   0x10009A7,  0x10009A5, 0x100098F  ] };
   key <AD07> { [   0x10009C1,  0x10009C2, 0x1000989	] };
   key <AD08> { [   0x10009BF,  0x10009C0, 0x1000987	] };
   key <AD09> { [   0x10009CB,  0x10009CC, 0x1000993	] };
   key <AD10> { [   0x10009AA, 0x1000990, 0x1000994		] };
   key <AD11> { [   0x100005B,  0x100007B, 0x10009DC  ] };
   key <AD12> { [   0x100005D,  0x100007D  ] };
   key <RTRN> { [   Return					] };

// caps, a to ' 
// key <CAPS> { [   Caps_Lock            		] };
   key <AC01> { [   0x10009BE,  0x1000985, 0x10009F4  ] };
   key <AC02> { [   0x10009B8,  0x10009B6, 0x10009F5  ] };
   key <AC03> { [   0x10009A6,  0x10009A1, 0x10009F8  ] };
   key <AC04> { [   0x10009AB				] };
   key <AC05> { [   0x1000997,  0x1000998	] };
   key <AC06> { [   0x10009CD, 0x10009B9	] };
   key <AC07> { [   0x100099C,  0x100099D	] };
   key <AC08> { [   0x1000995,  0x1000996	] };
   key <AC09> { [   0x10009B2,  0x1000964  ] };
   key <AC10> { [   semicolon,  0x100003A	] };
   key <AC11> { [   apostrophe, quotedbl   	] };

// shift, z to /
// key <LFSH> { [   Shift_L              			] };
   key <AB01> { [   0x10009AF, 0x10009DC	] };
   key <AB02> { [   0x10009B7, 0x10009DD, 0x10009FA	] };
   key <AB03> { [   0x100099A,  0x100099B  ] };
   key <AB04> { [   0x10009AD				] };
   key <AB05> { [   0x10009AC,  0x10009DF	] };
   key <AB06> { [   0x10009A8,  0x10009A3	] };
   key <AB07> { [   0x10009AE,  0x100099E	] };
   key <AB08> { [   comma,      0x100003C	] };
   key <AB09> { [   0x100002E,  0x100003E  ] };
   key <AB10> { [   0x100002F,  question   	] };
   key <BKSL> { [   0x10009F1,  0x10009F0	] };

//   key <LCTL> { [   Control_L              ] };
//   key <SPCE> { [   space                  ] };

//   modifier_map Shift  { Shift_L };
//   modifier_map Lock   { Caps_Lock };
//   modifier_map Control{ Control_L };
// third level with right-alt
    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "guj" {
      name[Group1]= "Gujarati";

      // Mainly numbers.
      key <AE01> { [      U0AE7, U0A8D 	]	};
      key <AE02> { [      U0AE8, U0AC5 	]	};
      key <AE03> { [      U0AE9 	 	]	};
      key <AE04> { [      U0AEA  	 	]	};
      key <AE05> { [      U0AEB  	 	]	};
      key <AE06> { [      U0AEC  	 	]	};
      key <AE07> { [      U0AED 		]	};
      key <AE08> { [      U0AEE  	 	]	};
      key <AE09> { [      U0AEF, parenleft 	]	};
      key <AE10> { [      U0AE6, parenright ]	};
      key <AE11> { [      minus,     U0A83  ]	};
      key <AE12> { [      U0A8B, U0AC3 	]	};

// Mainly long vowels

      key <AD01> { [      U0ACC, U0A94  ]	};
      key <AD02> { [      U0AC8, U0A90  ]	};
      key <AD03> { [      U0ABE, U0A86  ]	};
      key <AD04> { [      U0AC0, U0A88  ]	};
      key <AD05> { [      U0AC2, U0A8A  ]	};

// Mainly voiced consonants

      key <AD06> { [      U0AAC, U0AAD 	]	};
      key <AD07> { [      U0AB9, U0A99 	]	};
      key <AD08> { [      U0A97, U0A98 	]	};
      key <AD09> { [      U0AA6, U0AA7 	]	};
      key <AD10> { [      U0A9C, U0A9D 	]	};
      key <AD11> { [      U0AA1, U0AA2 	]	};
      key <AD12> { [      U0ABC, U0A9E 	]	};

// Mainly short vowels
      key <AC01> { [      U0ACB, U0A93	]	};
      key <AC02> { [      U0AC7, U0A8F	]	};
      key <AC03> { [      U0ACD, U0A85  ]	};
      key <AC04> { [      U0ABF, U0A87  ]	};
      key <AC05> { [      U0AC1, U0A89  ]	};

// Mainly unvoiced consonants

      key <AC06> { [      U0AAA, U0AAB 	]	};
      key <AC07> { [      U0AB0, U0AB0 	]	};
      key <AC08> { [      U0A95, U0A96 	]	};
      key <AC09> { [      U0AA4, U0AA5 	]	};
      key <AC10> { [      U0A9A, U0A9B 	]	};
      key <AC11> { [      U0A9F, U0AA0 	]	};
      key <BKSL> { [      U0AC9, U0A91 	]	};

      key <AB01> { [      z        , Z		]       };
      key <AB02> { [      U0A82, U0A81	]       };
      key <AB03> { [      U0AAE, U0AA3  ]       };
      key <AB04> { [      U0AA8, U0AA8   ]       };
      key <AB05> { [      U0AB5, U0AB5   ]       };
      key <AB06> { [      U0AB2, U0AB3  ]       };
      key <AB07> { [      U0AB8, U0AB6  ]       };
      key <AB08> { [      comma,     U0AB7  ]       };
      key <AB09> { [      period,    U0964  ]       };
      key <AB10> { [      U0AAF, question   ]       };
      include "rupeesign(4)"
      include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "kan" {

    // InScript layout for Kannada  
    // Author : G Karunakar <karunakar@freedomink.org>
    // Date   : Wed Nov 13 17:22:58 IST 2002
    // Kannada digits mapped in basic only

    name[Group1]= "Kannada";

    key <TLDE> { [  U0cca, U0c92	] };
    key <AE01> { [  U0ce7			] };
    key <AE02> { [  U0ce8			] };
    key <AE03> { [  U0ce9			] };
    key <AE04> { [  U0cea			] };
    key <AE05> { [  U0ceb			] };
    key <AE06> { [  U0cec			] };
    key <AE07> { [  U0ced			] };
    key <AE08> { [  U0cee			] };
    key <AE09> { [  U0cef			] };
    key <AE10> { [  U0ce6			] };
    key <AE11> { [  U0c83			] };
    key <AE12> { [  U0cc3, U0c8b	] };

    key <AD01> { [  U0ccc, U0c94	] };
    key <AD02> { [  U0cc8, U0c90	] };
    key <AD03> { [  U0cbe, U0c86	] };
    key <AD04> { [  U0cc0, U0c88	] };
    key <AD05> { [  U0cc2, U0c8a	] };
    key <AD06> { [  U0cac, U0cad	] };
    key <AD07> { [  U0cb9, U0c99	] };
    key <AD08> { [  U0c97, U0c98	] };
    key <AD09> { [  U0ca6, U0ca7	] };
    key <AD10> { [  U0c9c, U0c9d	] };
    key <AD11> { [  U0ca1, U0ca2	] };
    key <AD12> { [  U0cbc, U0c9e	] };

    key <AC01> { [  U0ccb, U0c93	] };
    key <AC02> { [  U0cc7, U0c8f	] };
    key <AC03> { [  U0ccd, U0c85	] };
    key <AC04> { [  U0cbf, U0c87	] };
    key <AC05> { [  U0cc1, U0c89	] };
    key <AC06> { [  U0caa, U0cab	] };
    key <AC07> { [  U0cb0, U0cb1	] };
    key <AC08> { [  U0c95, U0c96	] };
    key <AC09> { [  U0ca4, U0ca5	] };
    key <AC10> { [  U0c9a, U0c9b	] };
    key <AC11> { [  U0c9f, U0ca0	] };

    key <AB01> { [  U0cc6, U0c8e	] };
    key <AB02> { [  U0c82			] };
    key <AB03> { [  U0cae, U0ca3	] };
    key <AB04> { [  U0ca8			] };
    key <AB05> { [  U0cb5, U0cb4	] };
    key <AB06> { [  U0cb2, U0cb3	] };
    key <AB07> { [  U0cb8, U0cb6	] };
    key <AB08> { [  comma     , U0cb7	] };
    key <AB09> { [  period    				] };
    key <AB10> { [  U0caf, U0040	] };

    key <RALT> {
	symbols[Group1] = [ Mode_switch, Multi_key ],
	virtualMods = AltGr
    };
    include "rupeesign(4)"
    include "level3(ralt_switch)"
};

// Description : A keymap for Malayalam
// Encoding    : Unicode (http://www.unicode.org)
// Author      : Baiju M <baiju@freeshell.org>
// Date        : Sat Aug  17 21:10:48 IST 2002
// Mapping:

partial alphanumeric_keys
xkb_symbols "mal" {

    name[Group1] = "Malayalam";

    //From grave to backslash (\)

    key <TLDE> { [ U0d4a , U0d12           ] };

// svu: 
// These lines were in former "mal" variant - 
// but the digits are replaced with the ones from 'mal_plusnum' -
// for the integrity of all Indian layouts
//
//    key <AE01> { [1           ,     exclam           ] };
//    key <AE02> { [2           ,         at           ] };
//    key <AE03> { [3           , numbersign           ] };
//    key <AE04> { [4           ,     dollar           ] };
//    key <AE05> { [5           ,    percent           ] };
//    key <AE06> { [6           ,asciicircum           ] };
//    key <AE07> { [7           ,  ampersand           ] };
//    key <AE08> { [8           , asterisk           ] };
//    key <AE09> { [9           ,  parenleft           ] };
//    key <AE10> { [0           , parenright           ] };

      key <AE01> { [ U0d67 ,      exclam ] };
      key <AE02> { [ U0d68 ,          at ] };
      key <AE03> { [ U0d69 ,  numbersign ] };
      key <AE04> { [ U0d6a ,      dollar ] };
      key <AE05> { [ U0d6b ,     percent ] };
      key <AE06> { [ U0d6c , asciicircum ] };
      key <AE07> { [ U0d6d ,   ampersand ] };
      key <AE08> { [ U0d6e ,  asterisk ] };
      key <AE09> { [ U0d6f ,   parenleft ] };
      key <AE10> { [ U0d66 ,  parenright ] };

    key <AE11> { [ minus      , U0d03           ] };
    key <AE12> { [ U0d43 , U0d0b           ] };
    key <BKSL>  { [U0200c, U05C ]};//bksl: ZWNJ 


    // From 'q' to right bracket (])

    key <AD01> { [ U0d4c , U0d14 ] };
    key <AD02> { [ U0d48 , U0d10 ] };
    key <AD03> { [ U0d3e , U0d06 ] };
    key <AD04> { [ U0d40 , U0d08 ] };
    key <AD05> { [ U0d42 , U0d0a ] };
    key <AD06> { [ U0d2c , U0d2d ] };
    key <AD07> { [ U0d39 , U0d19 ] };
    key <AD08> { [ U0d17 , U0d18 ] };
    key <AD09> { [ U0d26 , U0d27 ] };
    key <AD10> { [ U0d1c , U0d1d ] };
    key <AD11> { [ U0d21 , U0d22 ] };
    key <AD12> { [ U0200d , U0d1e ] };

    // From 'a' to apostrophe (')

    key <AC01> { [ U0d4b , U0d13 ] };
    key <AC02> { [ U0d47 , U0d0f ] };
    key <AC03> { [ U0d4d , U0d05 ] };
    key <AC04> { [ U0d3f , U0d07 ] };
    key <AC05> { [ U0d41 , U0d09 ] };
    key <AC06> { [ U0d2a , U0d2b ] };
    key <AC07> { [ U0d30 , U0d31 ] };
    key <AC08> { [ U0d15 , U0d16 ] };
    key <AC09> { [ U0d24 , U0d25 ] };
    key <AC10> { [ U0d1a , U0d1b ] };
    key <AC11> { [ U0d1f , U0d20 ] };

    // From 'z' to slash (/)

    key <AB01> { [ U0d46 , U0d0e ] };
    key <AB02> { [ U0d02 , U200b ] };//X:ZWSP
    key <AB03> { [ U0d2e , U0d23 ] };
    key <AB04> { [ U0d28 ] };
    key <AB05> { [ U0d35 , U0d34 ] };
    key <AB06> { [ U0d32 , U0d33 ] };
    key <AB07> { [ U0d38 , U0d36 ] };
    key <AB08> { [ comma      , U0d37 ] };
    key <AB09> { [ period     , U0200d ] };
    key <AB10> { [ U0d2f , question   ] };

    include "rupeesign(4)"
    include "level3(ralt_switch)"
};

//Name		:	Lalitha
//Description	:	A transliteration keyboard layout for Malayalam
//Original Author :	Noah Levitt<nlevitt at columbia.edu>
//Current Main  : 	Jinesh K.J<jinesh.k@gmail.com>, Swathantra Malayalam Computing (SMC)<smc-discuss@googlegroups.com>

partial alphanumeric_keys
xkb_symbols "mal_lalitha" {
     name[Group1] = "Malayalam (Lalitha)";
     key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   U0D4D,	U0D02,		grave, 	asciitilde ] }; // grave: virama(chandrakala),anusvara
    key <AE01>  { [   1,	exclam,	U0D67,		exclam	   ] };
    key <AE02>  { [   2,	at,		U0D68,		at	   ] };
    key <AE03>  { [   3,    	numbersign, 	U0D69,		numbersign ] };
    key <AE04>  { [   4,	dollar,		U0D6A,		U20B9      ] }; // Rupee
    key <AE05>  { [   5,	percent,	U0D6B,		percent    ] };
    key <AE06>  { [   6,	asciicircum,	U0D6C,		asciicircum ] };
    key <AE07>  { [   7,	ampersand,	U0D6D,		ampersand  ] };
    key <AE08>  { [   8,	asterisk,	U0D6E,		asterisk   ] };
    key <AE09>  { [   9,	parenleft,	U0D6F,		parenleft  ] };
    key <AE10>  { [   0,	parenright,	U0D66,		parenright ] };
    key <AE11>	{ [   minus,	underscore	     ] };
    key <AE12>	{ [   equal,	plus		     ] };
    key <BKSL>  { [   U005C,	U007C,		U200C	] };//backslash:pipe,backslash,ZWNJ 

    //Q Row	
    key <AD01>   { [   U0D48,	U0D4C,	U0D10,	U0D14  ] }; // Q: ai and au matras 
    key <AD02>   { [   U0D35	] };  // W: wa, OM
    key <AD03>   { [   U0D46,   U0D47,	U0D0E,	U0D0F   ] };  // E: e,ee matras
    key <AD04>   { [   U0D30,	U0D31,	U0D43,	U0D0B  	] };  // R: ra,rra, vocalic Ri
    key <AD05>   { [   U0D24,   U0D25,	U0D1F,	U0D20   ] };  // T: tha, ttha,ta,tta
    key <AD06>   { [   U0D2f    ] };  // Y: ya
    key <AD07>   { [   U0D41,   U0D42,	U0D09,	U0D0A   ] };  // U: u, uu matras
    key <AD08>   { [   U0D3F,   U0D40,	U0D07,	U0D08   ] };  // I: i, ii matras
    key <AD09>   { [   U0D4A,   U0D4B,	U0D12,	U0D13   ] };  // O: o, oo matras
    key <AD10>   { [   U0D2A   ] };  // P: pa
    key <AD11>   { [   bracketleft,   braceleft   ] };//braceleft:   
    key <AD12>	 { [   bracketright, braceright   ] };//braceright:

    //A Row
    key <AC01>   { [   U0D3E,	 U0D05,	U0D06,	U0D05  ] };   // A: a,aa
    key <AC02>   { [   U0D38,    U0D37   ] };  // S: sa, ssa
    key <AC03>   { [   U0D26,    U0D27,	U0D21,	U0D22   ] };  // D: soft da,soft dda,hard da,hard dda,
    key <AC04>   { [   U0D2B     ] };  // F: pha
    key <AC05>   { [   U0D17,    U0D18   ] };  // G: ga, gha
    key <AC06>   { [   U0D39,    U0D03   ] };  // H: ha, visarg 
    key <AC07>   { [   U0D1C,    U0D1D   ] };  // J: ja, jha
    key <AC08>   { [   U0D15,    U0D16   ] };  // K: ka, kha
    key <AC09>   { [   U0D32,	 U0D33   ] };  // L: la, vocalic L or lru matra`
    key <AC10>   { [   semicolon, colon  ] };
    key <AC11>   { [apostrophe, quotedbl ] };

    //Z Row
    key <AB01>   { [   U0D34,	 U0D36 	 ] };  // Z: sha,zha
    key <AB02>   { [   U0D4D,	 U200B  ] };  // X: chandrakala,ZWSP
    key <AB03>   { [   U0D1A,    U0D1B   ] };  // C: ca, cha
    key <AB04>   { [   U0D35,	 U200D  ] };  // V: va,ZWJ
    key <AB05>   { [   U0D2C,    U0D2D   ] };  // B: ba, bha
    key <AB06>   { [   U0D28,    U0D23,	U0D19,	U0D1E   ] };  // N: na, hard na,nga,nha
    key <AB07>   { [   U0D2E,	 U0D02  ] };  // M: ma
    key <AB08>   { [   comma,    U003C ] };// comma: comma
    key <AB09>   { [   period, 	 U003E ] };  // period: period
    key <AB10>	 { [   slash,   question ] };

//    modifier_map Shift  { Shift_L };
//    modifier_map Lock   { Caps_Lock };
//    modifier_map Control{ Control_L };
//    modifier_map Mod3   { Mode_switch };
    include "level3(ralt_switch)"
};


partial alphanumeric_keys
xkb_symbols "olck" {

    // Layout for the Ol Chiki script.
    // http://www.unicode.org/L2/L2005/05243r-n2984-ol-chiki.pdf (figure 9)

    name[Group1]= "Ol Chiki";

    key <TLDE> { [  grave, U1C7B		] };

    key <AE01> { [  U1C51, exclam		] };
    key <AE02> { [  U1C52, at			] };
    key <AE03> { [  U1C53, numbersign		] };
    key <AE04> { [  U1C54, dollar, U20B9	] };
    key <AE05> { [  U1C55, percent		] };
    key <AE06> { [  U1C56, asciicircum		] };
    key <AE07> { [  U1C57, ampersand		] };
    key <AE08> { [  U1C58, asterisk		] };
    key <AE09> { [  U1C59, parenleft		] };
    key <AE10> { [  U1C50, parenright		] };
    key <AE11> { [  minus, U1C7C		] };
    key <AE12> { [  equal, plus			] };

    key <AD01> { [  U1C67			] };
    key <AD02> { [  U1C63			] };
    key <AD03> { [  U1C6E			] };
    key <AD04> { [  U1C68			] };
    key <AD05> { [  U1C74, U1C5B		] };
    key <AD06> { [  U1C6D  			] };
    key <AD07> { [  U1C69			] };
    key <AD08> { [  U1C64			] };
    key <AD09> { [  U1C5A, U1C73		] };
    key <AD10> { [  U1C6F  			] };
    key <AD11> { [  bracketleft, braceleft	] };
    key <AD12> { [  bracketright, braceright 	] };
    key <BKSL> { [  U1C7F, U1C7E		] };

    key <AC01> { [  U1C5F  			] };
    key <AC02> { [  U1C65			] };
    key <AC03> { [  U1C70, U1C6B		] };
    key <AC04> { [  U1C5D  			] };
    key <AC05> { [  U1C5C			] };
    key <AC06> { [  U1C66, U1C77		] };
    key <AC07> { [  U1C61  			] };
    key <AC08> { [  U1C60			] };
    key <AC09> { [  U1C5E			] };
    key <AC10> { [  semicolon, U1C7A		] };
    key <AC11> { [  apostrophe, quotedbl	] };

    key <AB01> { [  U1C72			] };
    key <AB02> { [  U1C7D			] };
    key <AB03> { [  U1C6A			] };
    key <AB04> { [  U1C76			] };
    key <AB05> { [  U1C75			] };
    key <AB06> { [  U1C71, U1C78		] };
    key <AB07> { [  U1C62, U1C6C		] };
    key <AB08> { [  comma, less			] };
    key <AB09> { [  U1C79, greater		] };
    key <AB10> { [  slash, question		] };

    key <RALT> {
	symbols[Group1] = [ Mode_switch, Multi_key ],
	virtualMods = AltGr
    };

    include "level3(ralt_switch)"
};


partial alphanumeric_keys
xkb_symbols "ori" {
    // InScript layout for Oriya  
    // Author: G Karunakar <karunakar@freedomink.org>
    // Date: Wed Nov 13 18:16:19 IST 2002

    name[Group1]= "Oriya";

    key <AE01> { [  U0b67			] };
    key <AE02> { [  U0b68			] };
    key <AE03> { [  U0b69			] };
    key <AE04> { [  U0b6a			] };
    key <AE05> { [  U0b6b			] };
    key <AE06> { [  U0b6c			] };
    key <AE07> { [  U0b6d			] };
    key <AE08> { [  U0b6e			] };
    key <AE09> { [  U0b6f			] };
    key <AE10> { [  U0b66			] };
    key <AE11> { [  U0b03			] };
    key <AE12> { [  U0b43, U0b0b	] };

    key <AD01> { [  U0b4c, U0b14	] };
    key <AD02> { [  U0b48, U0b10	] };
    key <AD03> { [  U0b3e, U0b06	] };
    key <AD04> { [  U0b40, U0b08	] };
    key <AD05> { [  U0b42, U0b0a	] };
    key <AD06> { [  U0b2c, U0b2d	] };
    key <AD07> { [  U0b39, U0b19	] };
    key <AD08> { [  U0b17, U0b18	] };
    key <AD09> { [  U0b26, U0b27	] };
    key <AD10> { [  U0b1c, U0b1d	] };
    key <AD11> { [  U0b21, U0b22	] };
    key <AD12> { [  U0b3c, U0b1e	] };

    key <AC01> { [  U0b4b, U0b13	] };
    key <AC02> { [  U0b47, U0b0f	] };
    key <AC03> { [  U0b4d, U0b05	] };
    key <AC04> { [  U0b3f, U0b07	] };
    key <AC05> { [  U0b41, U0b09	] };
    key <AC06> { [  U0b2a, U0b2b	] };
    key <AC07> { [  U0b30			] };
    key <AC08> { [  U0b15, U0b16	] };
    key <AC09> { [  U0b24, U0b25	] };
    key <AC10> { [  U0b1a, U0b1b	] };
    key <AC11> { [  U0b1f, U0b20	] };

    key <AB02> { [  U0b02, U0b01	] };
    key <AB03> { [  U0b2e, U0b23	] };
    key <AB04> { [  U0b28			] };
    key <AB05> { [  U0b35			] };
    key <AB06> { [  U0b32, U0b33	] };
    key <AB07> { [  U0b38, U0b36	] };
    key <AB08> { [  comma     , U0b37	] };
    key <AB09> { [  period    				] };
    key <AB10> { [  U0b2f, U0040	] };

    key <RALT> {
	symbols[Group1] = [ Mode_switch, Multi_key ],
	virtualMods = AltGr
    };
    include "rupeesign(4)"
    include "level3(ralt_switch)"
};

// Phonetic layout for Oriya like Hindi Bolnagiri
// Author: Lalit Mishra
// Date: 3rd March, 2021.
partial alphanumeric_keys
xkb_symbols "ori-bolnagri" {
     name[Group1] = "Oriya (Bolnagri)";
     key.type[group1]="FOUR_LEVEL";
    // Roman digits
    key <TLDE>  { [   U0B02,     U0B01,       grave,    asciitilde ] }; // grave: anusvara, candrabindu
    key <AE01>  { [   U0B67,     exclam,      1         ] };
    key <AE02>  { [   U0B68,     at,          2,        U20AC      ] };
    key <AE03>  { [   U0B69,     numbersign,  3,        U00A3      ] };
    key <AE04>  { [   U0B6A,     dollar,      4,        U20B9      ] }; // Rupee symbol on Shift+AltGr+4
    key <AE05>  { [   U0B6B,     percent,     5         ] };
    key <AE06>  { [   U0B6C,     asciicircum, 6         ] };
    key <AE07>  { [   U0B6D,     ampersand,   7         ] };
    key <AE08>  { [   U0B6E,     asterisk,    8         ] };
    key <AE09>  { [   U0B6F,     parenleft,   9         ] };
    key <AE10>  { [   U0B66,     parenright,  0         ] };
    key <AE11>  { [   minus,     underscore             ] };
    key <AE12>  { [   equal,     plus                   ] };
    key <BKSL>  { [   U0964,     U0965,       U007C,    U005C      ] }; //pipe : danda, double danda
    //Q Row
    key <AD01>  { [   U200C,     U200D        ] };                      // Q: ZWNJ, ZWJ
    key <AD02>  { [   U0B71,     U0B35        ] };                      // W: wa
    key <AD03>  { [   U0B47,     U0B48,       U0B0F,    U0B10      ] }; // E: e, ai matras
    key <AD04>  { [   U0B30,     U0B43,       U0B0B,    U0B60      ] }; // R: ra, vocalic Ri
    key <AD05>  { [   U0B24,     U0B25        ] };                      // T: ta, tha
    key <AD06>  { [   U0B2f,     U0B5F,       U0B1E     ] };            // Y: ya, nya
    key <AD07>  { [   U0B41,     U0B42,       U0B09,    U0B0A      ] }; // U: u, uu matras
    key <AD08>  { [   U0B3F,     U0B40,       U0B07,    U0B08      ] }; // I: i, ii matras
    key <AD09>  { [   U0B4B,     U0B4C,       U0B13,    U0B14      ] }; // O: o, au matras
    key <AD10>  { [   U0B2A,     U0B2B        ] };                      // P: pa, pha
    key <AD11>  { [   bracketleft,  braceleft ] };
    key <AD12>  { [   bracketright, braceright] };
    //A Row
    key <AC01>  { [   U0B3E,      U0B06,      U0B05,    U0B06      ] }; // A: aa, full A, AA
    key <AC02>  { [   U0B38,      U0B37       ] };                      // S: sa, ssa
    key <AC03>  { [   U0B26,      U0B27       ] };                      // D: da, dha
    key <AC04>  { [   U0B1F,      U0B20       ] };                      // F: TA, THA
    key <AC05>  { [   U0B17,      U0B18       ] };                      // G: ga, gha
    key <AC06>  { [   U0B39,      U0B03       ] };                      // H: ha, visarg
    key <AC07>  { [   U0B1C,      U0B1D       ] };                      // J: ja, jha
    key <AC08>  { [   U0B15,      U0B16       ] };                      // K: ka, kha
    key <AC09>  { [   U0B32,      U0B33,      U0B62,    U0B0C      ] }; // L: la, vocalic L or lru matra
    key <AC10>  { [   semicolon,  colon       ] };
    key <AC11>  { [   apostrophe, quotedbl    ] };
    //Z Row
    key <AB01>  { [   U0B36       ] };                                  // Z: sha, akaar candra
    key <AB02>  { [   U0B4D       ] };                                  // X: halant, aakaar candra, chandra A
    key <AB03>  { [   U0B1A,      U0B1B       ] };                      // C: ca, cha
    key <AB04>  { [   U0B21,      U0B22       ] };                      // V: da, dha
    key <AB05>  { [   U0B2C,      U0B2D       ] };                      // B: ba, bha
    key <AB06>  { [   U0B28,      U0B23       ] };                      // N: na, nna
    key <AB07>  { [   U0B2E,      U0B19,      U0B3D     ] };            // M: ma, nga, avagraha
    key <AB08>  { [   comma,      U0B70,      U0B44,    U0B61    ] };   // comma: comma, dev abbreviation sign
    key <AB09>  { [   period,     U0B3C,      U0B55     ] };            // period: period, nukta
    key <AB10>  { [   slash,      question    ] };

//    modifier_map Shift  { Shift_L };
//    modifier_map Lock   { Caps_Lock };
//    modifier_map Control{ Control_L };
//    modifier_map Mod3   { Mode_switch };

  include "level3(ralt_switch)"
};

// Phonetic layout for Oriya like Hindi Wx
// Author: Lalit Mishra
// Date: 3rd March, 2021.
partial alphanumeric_keys
xkb_symbols "ori-wx" {
    name[Group1]= "Oriya (Wx)";
      key <TLDE> {   [      grave,        asciitilde,  0x100200C, 0x100200D ] };
      key <AE01> {   [      0x1000B67,    exclam,      1 ] };
      key <AE02> {   [      0x1000B68,    at,          2,         0x10020AC  ] };
      key <AE03> {   [      0x1000B69,    numbersign,  3,         0x10000A3  ] };
      key <AE04> {   [      0x1000B6A,    dollar,      4,         0x10020B9  ] };
      key <AE05> {   [      0x1000B6B,    percent,     5 ] };
      key <AE06> {   [      0x1000B6C,    asciicircum, 6 ] };
      key <AE07> {   [      0x1000B6D,    ampersand,   7 ] };
      key <AE08> {   [      0x1000B6e,    asterisk,    8 ] };
      key <AE09> {   [      0x1000B6F,    parenleft,   9 ] };
      key <AE10> {   [      0x1000B66,    parenright,  0 ] };
      key <AE11> {   [      minus,        underscore   ] };
      key <AE12> {   [      equal,        plus         ] };
      key <AD01> {   [      0x1000B43,    0x1000B44,   0x1000B0B, 0x1000B60 ] };
      key <AD02> {   [      0x1000B24,    0x1000B25    ] };
      key <AD03> {   [      0x1000B47,    0x1000B48,   0x1000B0F, 0x1000B10 ] };
      key <AD04> {   [      0x1000B30,    0x1000B37    ] };
      key <AD05> {   [      0x1000B1F,    0x1000B20    ] };
      key <AD06> {   [      0x1000B2F,    0x1000B5F    ] };
      key <AD07> {   [      0x1000B41,    0x1000B42,   0x1000B09, 0x1000B0A ] };
      key <AD08> {   [      0x1000B3F,    0x1000B40,   0x1000B07, 0x1000B08 ] };
      key <AD09> {   [      0x1000B4B,    0x1000B4C,   0x1000B13, 0x1000B14 ] };
      key <AD10> {   [      0x1000B2A,    0x1000B2B    ] };
      key <AD11> {   [      bracketleft,  braceleft    ] };
      key <AD12> {   [      bracketright, braceright   ] };
      key <BKSL> {   [      0x1000964,    0x1000965,   backslash, bar       ] };
      key <AC01> {   [      0x1000B4D,    0x1000B3E,   0x1000B05, 0x1000B06 ] };
      key <AC02> {   [      0x1000B38,    0x1000B36    ] };
      key <AC03> {   [      0x1000B21,    0x1000B22    ] };
      key <AC04> {   [      0x1000B19,    0x1000B1E    ] };
      key <AC05> {   [      0x1000B17,    0x1000B18    ] };
      key <AC06> {   [      0x1000B39,    0x1000B03    ] };
      key <AC07> {   [      0x1000B1C,    0x1000B1D    ] };
      key <AC08> {   [      0x1000B15,    0x1000B16    ] };
      key <AC09> {   [      0x1000B32,    0x1000B62,   0x1000B33, 0x1000B0C ] };
      key <AC10> {   [      semicolon,    colon        ] };
      key <AC11> {   [      apostrophe,   quotedbl     ] };
      key <AB01> {   [      0x1000B01,    0x1000B3C,   0x1000B3D  ] };
      key <AB02> {   [      0x1000B26,    0x1000B27    ] };
      key <AB03> {   [      0x1000B1A,    0x1000B1B    ] };
      key <AB04> {   [      0x1000B71,    0x1000B35    ] };
      key <AB05> {   [      0x1000B2C,    0x1000B2D    ] };
      key <AB06> {   [      0x1000B28,    0x1000B23    ] };
      key <AB07> {   [      0x1000B2E,    0x1000B02    ] };
      key <AB08> {   [      comma,        less         ] };
      key <AB09> {   [      period,       greater      ] };
      key <AB10> {   [      slash,        question     ] };

  include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "tam" {
      name[Group1]= "Tamil (InScript)";

      key <TLDE> { [      U0BCA, U0B92	]	};

      // Mainly numbers.
      key <AE01> { [      U0BE7 		]	};
      key <AE02> { [      U0BE8 		]	};
      key <AE03> { [      U0BE9 		]	};
      key <AE04> { [      U0BEA 		]	};
      key <AE05> { [      U0BEB 		]	};
      key <AE06> { [      U0BEC 		]	};
      key <AE07> { [      U0BED        	]	};
      key <AE08> { [      U0BEE 		]	};
      key <AE09> { [      U0BEF, parenleft	]	};
      key <AE10> { [      U0BF0, parenright	]	};
      key <AE11> { [      U0BF1, U0B83  ]	};
      key <AE12> { [      U0BF2, plus	] 	};

// Mainly long vowels

      key <AD01> { [      U0BCC,  U0B94 ]	};
      key <AD02> { [      U0BC8,  U0B90 ]	};
      key <AD03> { [      U0BBE,  U0B86 ]	};
      key <AD04> { [      U0BC0,  U0B88 ]	};
      key <AD05> { [      U0BC2,  U0B8A ]	};

// Mainly voiced consonants

      key <AD07> { [      U0BB9, U0B99	]	};
      key <AD10> { [      U0B9c 	]	};
      key <AD12> { [      U0B9E				]	};

// Mainly short vowels
      key <AC01> { [      U0BCB,  U0B93 ]	};
      key <AC02> { [      U0BC7,  U0B8F ]	};
      key <AC03> { [      U0BCD,  U0B85 ]	};
      key <AC04> { [      U0BBF,  U0B87 ]	};
      key <AC05> { [      U0BC1,  U0B89 ]	};

// Mainly unvoiced consonants

      key <AC06> { [      U0BAA 		]	};
      key <AC07> { [      U0BB0,  U0BB1 ]	};
      key <AC08> { [      U0B95 		]	};
      key <AC09> { [      U0BA4 		]	};
      key <AC10> { [      U0B9A 		]	};
      key <AC11> { [      U0B9F 		]	};
      key <BKSL> { [      U005C, U007C	]	};//backslash-bar  - Changed to Unicode

      key <AB01> { [      U0BC6,  U0B8E	]	};
      key <AB02> { [      U0B82   		]       };
      key <AB03> { [      U0BAE,  U0BA3 ]       };
      key <AB04> { [      U0BA8,  U0BA9 ]       };
      key <AB05> { [      U0BB5,  U0BB4 ]       };
      key <AB06> { [      U0BB2,  U0BB3 ]       };
      key <AB07> { [      U0BB8,  U0BB6	]       };
      key <AB08> { [      comma,      U0BB7 ]       };
      key <AB09> { [      period,     U0964 ]       };
      key <AB10> { [      U0BAF,  question  ]       };

      include "level3(ralt_switch)"
      include "rupeesign(4)"
};

partial alphanumeric_keys
xkb_symbols "tam_tamilnet" {

// Description: A keymap based on the TamilNet'99 typewriter keyboard 
// Encoding: Unicode (http://www.unicode.org)
// Author: Thuraiappah Vaseeharan <vasee@ieee.org>
// Modifed by: Malathi S <malathiramya@gmail.com>
// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
// Date  : Fri Sep 4 11:32:00 CST 2009
// Mapping:

    name[Group1]= "Tamil (TamilNet '99)";

    // granthas
    key <TLDE> {  [ apostrophe, asciitilde ] };
    key <AE01> {  [ U0031, exclam ] } ;
    key <AE02> {  [ U0032, at ] } ;
    key <AE03> {  [ U0033, numbersign ] } ;
    key <AE04> {  [ U0034, U0BF9 ] } ;
    key <AE05> {  [ U0035, percent ] } ;
    key <AE06> {  [ U0036, asciicircum ] } ;
    key <AE07> {  [ U0037, ampersand ] } ;
    key <AE08> {  [ U0038, asterisk ] } ;
    key <AE09> {  [ U0039, parenleft ] } ;
    key <AE10> {  [ U0030, parenright ] } ;
    key <AE11> {  [ minus, underscore ] };
    key <AE12> {  [ equal, plus	] };


    // Qrow
    key <AD01> {  [ U0B9E, U0BB6 ] };
    key <AD02> {  [ U0BB1, U0BB7 ] };
    key <AD03> {  [ U0BA8, U0BB8 ] };
    key <AD04> {  [ U0B9A, U0BB9 ] };
    key <AD05> {  [ U0BB5, U0B9C ] };
    key <AD06> {  [ U0BB2 ] };
    key <AD07> {  [ U0BB0 ] };
    key <AD08> {  [ U0BC8, U0B90 ] };
    key <AD09> {  [ U0BCA, U0BCB ] };
    key <AD10> {  [ U0BBF, U0BC0 ] };
    key <AD11> {  [ U0BC1, U0BC2 ] };

    // Arow
    key <AC01> { [ U0BAF ] };
    key <AC02> { [ U0BB3 ] };
    key <AC03> { [ U0BA9 ] };
    key <AC04> { [ U0B95 ] };
    key <AC05> { [ U0BAA ] };
    key <AC06> { [ U0BBE, U0BB4 ] };
    key <AC07> { [ U0BA4 ] };
    key <AC08> { [ U0BAE ] };
    key <AC09> { [ U0B9F ] };
    key <AC10> { [ U0BCD, U0B83 ] };
    key <AC11> { [ U0B99 ] };

    // Zrow
    key <AB01> { [ U0BA3 ]  };
    key <AB02> { [ U0B92, U0B93 ]  };
    key <AB03> { [ U0B89, U0B8A ]  };
    key <AB04> { [ U0B8E, U0B8F ]  };
    key <AB05> { [ U0BC6, U0BC7 ]  };
    key <AB06> { [ U0B94, U0BCC ]  };
    key <AB07> { [ U0B85, U0B86 ]  };
    key <AB08> { [ U0B87, U0B88 ]  };
};

partial alphanumeric_keys
xkb_symbols "tam_tamilnet_with_tam_nums" {

// Description: A keymap based on the TamilNet'99 typewriter keyboard 
// Encoding: Unicode (http://www.unicode.org)
// Author: Malathi S <malathiramya@gmail.com>
// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
// Date  : Fri Sep 4 11:33:00 CST 2009
// Mapping:

      name[Group1]= "Tamil (TamilNet '99 with Tamil numerals)";

      // Mainly numbers.
      key <TLDE> { [ apostrophe, asciitilde ] };
      key <AE01> { [ U0BE7, exclam ] };
      key <AE02> { [ U0BE8, at ] };
      key <AE03> { [ U0BE9, numbersign ] };
      key <AE04> { [ U0BEA, U0BF9 ] };
      key <AE05> { [ U0BEB, percent ] };
      key <AE06> { [ U0BEC, asciicircum ] };
      key <AE07> { [ U0BED, ampersand ] };
      key <AE08> { [ U0BEE, asterisk ] };
      key <AE09> { [ U0BEF, parenleft ] };
      key <AE10> { [ U0BE6, parenright ] };
      key <AE11> { [ minus, underscore ] };
      key <AE12> { [ equal, plus ] };


    // Qrow
    key <AD01> {  [ U0B9E, U0BB6 ] };
    key <AD02> {  [ U0BB1, U0BB7 ] };
    key <AD03> {  [ U0BA8, U0BB8 ] };
    key <AD04> {  [ U0B9a, U0BB9 ] };
    key <AD05> {  [ U0BB5, U0B9c ] };
    key <AD06> {  [ U0BB2 ] };
    key <AD07> {  [ U0BB0 ] };
    key <AD08> {  [ U0BC8, U0B90 ] };
    key <AD09> {  [ U0BCA, U0BCB ] };
    key <AD10> {  [ U0BBF, U0BC0 ] };
    key <AD11> {  [ U0BC1, U0BC2 ] };

    // Arow
    key <AC01> { [ U0BAF ] };
    key <AC02> { [ U0BB3 ] };
    key <AC03> { [ U0BA9 ] };
    key <AC04> { [ U0B95 ] };
    key <AC05> { [ U0BAA ] };
    key <AC06> { [ U0BBE, U0BB4 ] };
    key <AC07> { [ U0BA4 ] };
    key <AC08> { [ U0BAE ] };
    key <AC09> { [ U0B9F ] };
    key <AC10> { [ U0BCD, U0B83 ] };
    key <AC11> { [ U0B99 ] };

    // Zrow
    key <AB01> { [ U0BA3 ]  };
    key <AB02> { [ U0B92, U0B93 ]  };
    key <AB03> { [ U0B89, U0B8A ]  };
    key <AB04> { [ U0B8E, U0B8F ]  };
    key <AB05> { [ U0BC6, U0BC7 ]  };
    key <AB06> { [ U0B94, U0BCC ]  };
    key <AB07> { [ U0B85, U0B86 ]  };
    key <AB08> { [ U0B87, U0B88 ]  };
};

partial alphanumeric_keys
xkb_symbols "tam_tamilnet_TSCII" {

// Description	: A Tamil typewrite-style keymap 
//		  loosely based on TamilNet'99 reommendations 
// Encoding	: TSCII (http://www.tscii.org)
// Author	: Thuraiappah Vaseeharan <vasee@ieee.org>
// Last Modified: Sat Jan  5 17:11:26 CST 2002

    name[Group1]= "Tamil (TamilNet '99, TSCII encoding)";

    key <AE01> {  [ 0x10000b7, 0x10000a4 ] }; // aytham
    key <AE02> {  [ 0x1000082, 0x10000a5 ] }; // shri
    key <AE03> {  [ 0x1000083, 0x1000088 ] }; // ja
    key <AE04> {  [ 0x1000084, 0x1000089 ] }; // sha
    key <AE05> {  [ 0x1000085, 0x100008a ] }; // sa
    key <AE06> {  [ 0x1000086, 0x100008b ] }; // ha
    key <AE07> {  [ 0x1000087, 0x100008c ] }; // ksha

    // Qrow
    key <AD01> {  [ 0x10000bb, 0x100009a ] }; // nja
    key <AD02> {  [ 0x10000c8, 0x10000da ] }; // Ra
    key <AD03> {  [ 0x10000bf, 0x10000d1 ] }; // NNa
    key <AD04> {  [ 0x10000ba, 0x10000cd ] }; // ca
    key <AD05> {  [ 0x10000c5, 0x10000d7 ] }; // va
    key <AD06> {  [ 0x10000c4, 0x10000d6 ] }; // la
    key <AD07> {  [ 0x10000c3, 0x10000d5 ] }; // ra
    key <AD08> {  [ 0x10000a8, 0x10000b3 ] }; // sangili, ai
    key <AD09> {  [ 0x10000ca, 0x10000cb ] }; // di, dI
    key <AD10> {  [ 0x10000a2, 0x10000a3 ] }; // visiri
    key <AD11> {  [ dead_acute, 0x10000a3 ] }; // Ukaaram

    // Arow
    key <AC01> { [ 0x10000c2, 0x10000d4 ] }; // ya
    key <AC02> { [ 0x10000c7, 0x10000d9 ] }; // La
    key <AC03> { [ 0x10000c9, 0x10000db ] }; // na
    key <AC04> { [ 0x10000b8, 0x10000cc ] }; // ka
    key <AC05> { [ 0x10000c0, 0x10000d2 ] }; // pa
    key <AC06> { [ dead_grave,0x10000a1 ] }; // pulli,aravu
    key <AC07> { [ 0x10000be, 0x10000d0 ] }; // tha
    key <AC08> { [ 0x10000c1, 0x10000d3 ] }; // ma
    key <AC09> { [ 0x10000bc, 0x10000ce ] }; // da
    key <AC10> { [ 0x10000c6, 0x10000d8 ] }; // zha
    key <AC11> { [ 0x10000b9, 0x1000099 ] }; // nga

    // Zrow
    key <AB01> { [ 0x10000bd, 0x10000cf ] }; // Na
    key <AB02> { [ 0x10000b4, 0x10000b5 ] }; // o, O
    key <AB03> { [ 0x10000af, 0x10000b0 ] }; // u, U
    key <AB04> { [ 0x10000b1, 0x10000b2 ] }; // e, E
    key <AB05> { [ 0x10000a6, 0x10000a7 ] }; // kombus
    key <AB06> { [ 0x10000b6, 0x10000aa ] }; // au
    key <AB07> { [ 0x10000ab, 0x10000ac ] }; // a, A
    key <AB08> { [ 0x10000fe, 0x10000ae ] }; // i, I
};

partial alphanumeric_keys
xkb_symbols "tam_tamilnet_TAB" {

// Description: A keymap based on the TamilNet'99 typewriter keyboard 
// Encoding: TAB (http://www.tamilnet99.org)
// Author: Thuraiappah Vaseeharan <t_vasee@yahoo.com>
// Date  : Sun Aug 12 02:23:00 CDT 2001

    name[Group1]= "Tamil (TamilNet '99, TAB encoding)";

    // numeral row
    key <AE01> {  [ 0x10000e7, 0x10000a7 ] } ;
    key <AE02> {  [ 0x10000fa, 0x10000a8 ] } ;
    key <AE03> {  [ 0x10000fb ] } ;
    key <AE04> {  [ 0x10000fc ] } ;
    key <AE05> {  [ 0x10000fd ] } ;
    key <AE06> {  [ 0x10000fe ] } ;
    key <AE07> {  [ 0x10000ff ] } ;

    // q-row
    key <AD01> {  [ 0x10000eb, 0x10000b3 ] };
    key <AD02> {  [ 0x10000f8, 0x10000c1 ] };
    key <AD03> {  [ 0x10000ef, 0x10000b8 ] };
    key <AD04> {  [ 0x10000ea, 0x10000b2 ] };
    key <AD05> {  [ 0x10000f5, 0x10000be ] };
    key <AD06> {  [ 0x10000f4, 0x10000bd ] };
    key <AD07> {  [ 0x10000f3, 0x10000bc ] };
    key <AD08> {  [ 0x10000ac, 0x10000e4 ] };
    key <AD09> {  [ 0x10000ae, 0x10000af ] };
    key <AD10> {  [ 0x10000a4, 0x10000a6 ] };
    key <AD11> {  [ dead_circumflex, 0x10000a6 ] }; // Ukaaram

    // a-row
    key <AC01> {  [ 0x10000f2, 0x10000bb ] };
    key <AC02> {  [ 0x10000f7, 0x10000c0 ] };
    key <AC03> {  [ 0x10000f9, 0x10000c2 ] };
    key <AC04> {  [ 0x10000e8, 0x10000b0 ] };
    key <AC05> {  [ 0x10000f0, 0x10000b9 ] };
    key <AC06> {  [ 0x10000a2, 0x10000a3 ] };
    key <AC07> {  [ 0x10000ee, 0x10000b6 ] };
    key <AC08> {  [ 0x10000f1, 0x10000ba ] };
    key <AC09> {  [ 0x10000ec, 0x10000b4 ] };
    key <AC10> {  [ 0x10000f6, 0x10000bf ] };
    key <AC11> {  [ 0x10000e9, 0x10000b1 ] };

    // z-row
    key <AB01> {  [ 0x10000ed, 0x10000b5 ] };
    key <AB02> {  [ 0x10000e5, 0x10000e6 ] };
    key <AB03> {  [ 0x10000e0, 0x10000e1 ] };
    key <AB04> {  [ 0x10000e2, 0x10000e3 ] };
    key <AB05> {  [ 0x10000aa, 0x10000ab ] };
    key <AB06> {  [ 0x10000ac, 0x10000a3 ] };
    key <AB07> {  [ 0x10000dc, 0x10000dd ] };
    key <AB08> {  [ 0x10000de, 0x10000df ] };
};

partial alphanumeric_keys
xkb_symbols "tel" {

    // InScript layout for Telugu using Unicode 
    // Author: G Karunakar <karunakar@freedomink.org>
    // Date:
    // See layout at http://www.indlinux.org/keymap/telugu.php

    name[Group1]= "Telugu";

    key <TLDE> { [  U0c4a, U0c12	] };
    key <AE01> { [  U0c67			] };
    key <AE02> { [  U0c68			] };
    key <AE03> { [  U0c69, numbersign	] };
    key <AE04> { [  U0c6a, dollar		] };
    key <AE05> { [  U0c6b, percent		] };
    key <AE06> { [  U0c6c, asciicircum	] };
    key <AE07> { [  U0c6d, ampersand	] };
    key <AE08> { [  U0c6e, asterisk	] };
    key <AE09> { [  U0c6f, parenleft	] };
    key <AE10> { [  U0c66, parenright	] };
    key <AE11> { [  U0c03, underscore	] };
    key <AE12> { [  U0c43, U0c0b	] };
    key <BKSP> { [  BackSpace			] };

    key <AD01> { [  U0c4c, U0c14	] };
    key <AD02> { [  U0c48, U0c10	] };
    key <AD03> { [  U0c3e, U0c06	] };
    key <AD04> { [  U0c40, U0c08	] };
    key <AD05> { [  U0c42, U0c0a	] };
    key <AD06> { [  U0c2c, U0c2d	] };
    key <AD07> { [  U0c39, U0c19	] };
    key <AD08> { [  U0c17, U0c18	] };
    key <AD09> { [  U0c26, U0c27	] };
    key <AD10> { [  U0c1c, U0c1d	] };
    key <AD11> { [  U0c21, U0c22	] };
    key <AD12> { [  U0c1e			] };

    key <AC01> { [  U0c4b, U0c13	] };
    key <AC02> { [  U0c47, U0c0f	] };
    key <AC03> { [  U0c4d, U0c05	] };
    key <AC04> { [  U0c3f, U0c07	] };
    key <AC05> { [  U0c41, U0c09	] };
    key <AC06> { [  U0c2a, U0c2b	] };
    key <AC07> { [  U0c30, U0c31	] };
    key <AC08> { [  U0c15, U0c16	] };
    key <AC09> { [  U0c24, U0c25	] };
    key <AC10> { [  U0c1a, U0c1b	] };
    key <AC11> { [  U0c1f, U0c20	] };

    key <AB01> { [  U0c46, U0c0e	] };
    key <AB02> { [  U0c02, U0c01	] };
    key <AB03> { [  U0c2e, U0c23	] };
    key <AB04> { [  U0c28			] };
    key <AB05> { [  U0c35			] };
    key <AB06> { [  U0c32, U0c33	] };
    key <AB07> { [  U0c38, U0c36	] };
    key <AB08> { [  comma     , U0c37	] };
    key <AB09> { [  period    				] };
    key <AB10> { [  U0c2f, U0040	] };

    key <RALT> {        
        symbols[Group1] = [ Mode_switch, Multi_key ],
        virtualMods = AltGr
    };
    include "rupeesign(4)"
    include "level3(ralt_switch)"
};

//Name                  :       Sarala
//Description           :       This is an adaptation of the Sarala keyboard (http://www.medhajananam.org/sarala/) developed 
//                              by Krishna Dhullipalla. Because of the way keyboard shortcuts are laid out in KDE, the keyboard
//                              modifiers had to be changed. The layout does not take any part of the original Sarala keyboard 
//                              code however. It has been developed from scratch, so the experience may differ.
//			        
//                              There is a ibus-m17n version of Sarala layout developed by Satya Pothamsetti <potham@gmail.com> on 
//                              http://www.medhajananam.org/.
//Standard		:	Supports Unicode 9.0.	 
//Help			:	This layout differs slightly from the layout on Medhajenanam. The layout has been depicted in the 
//				pdf file attached to this post on Sarala google group.
//				(https://groups.google.com/forum/#!topic/sarala-keyboard/-gsa90dUFcs).
//
//Layout Developed by   :       Krishna Dhullipalla <krishnadvr@yahoo.com> (http://www.medhajananam.org/)
//Author                :       Venkat R Akkineni <venkatram.akkineni@india.com>
//Date			:	Apr 28 2017
partial alphanumeric_keys
xkb_symbols "tel-sarala"
{
    name[Group1] = "Telugu (Sarala)";
    key.type[group1]="FOUR_LEVEL";
    // sequence 									  base, shift, alt, alt + shift
    key <AB01> { [          U0C4A,          U0C12                                 ] }; // ొ ఒ
    key <AB02> { [          U0C42,          U0C0A                                 ] }; // ూ ఊ
    key <AB03> { [          U0C21,          U0C22                                 ] }; // డ ఢ
    key <AB04> { [          U0C35,          U0C39                                 ] }; // వ హ
    key <AB05> { [          U0C2C,          U0C2D                                 ] }; // బ భ
    key <AB06> { [          U0C28,          U0C23                                 ] }; // న ణ
    key <AB07> { [          U0C2E,          U0C01                                 ] }; // మ ఁ
    key <AB08> { [         U002C,          U0C1E,      leftcaret 	    	  ] }; // , ఞ <
    key <AB09> { [         U002E,          U0C19,     rightcaret              	  ] }; // . ఙ >
    key <AB10> { [          U0C36,       question,      KP_Divide                 ] }; // శ ? /
    key <AC01> { [          U0C2F,          U0C3D           			  ] }; // య ఽ
    key <AC02> { [          U0C02,          U0C03                                 ] }; // ం ః
    key <AC03> { [          U0C26,          U0C27                                 ] }; // ద ధ
    key <AC04> { [          U0C4D,          U0C05                                 ] }; // ్ అ
    key <AC05> { [          U0C17,          U0C18                                 ] }; // గ ఘ
    key <AC06> { [          U0C1A,          U0C1B,          U0C58,          U0C59 ] }; // చ ఛ ౘ ౙ
    key <AC07> { [          U0C3E,          U0C06                                 ] }; // ా ఆ
    key <AC08> { [          U0C15,          U0C16,          U0C62,          U0C63 ] }; // క ఖ ౢ ౣ
    key <AC09> { [          U0C32,          U0C33,          U0C0C,          U0C61 ] }; // ల ళ ఌ ౡ
    key <AC10> { [          U0C1F,          U0C20,      semicolon,          colon ] }; // ట ఠ ; :
    key <AC11> { [     quoteright,       quotedbl	    	    		  ] }; // ' " 
    key <AD01> { [          U0C46,          U0C0E,          U0C44,          U0C34 ] }; // ె ఎ ౄ ఴ
    key <AD02> { [          U0C38,          U0C37,          U0C44                 ] }; // స ష ౄ
    key <AD03> { [          U0C47,          U0C0F,          U0C44                 ] }; // ే ఏ ౄ
    key <AD04> { [          U0C30,          U0C31,          U0C44,          U0C60 ] }; // ర ఱ ౄ ౠ
    key <AD05> { [          U0C24,          U0C25                                 ] }; // త థ
    key <AD06> { [          U0C40,          U0C08                                 ] }; // ీ ఈ
    key <AD07> { [          U0C41,          U0C09                                 ] }; // ు ఉ
    key <AD08> { [          U0C3F,          U0C07                                 ] }; // ి ఇ
    key <AD09> { [          U0C4B,          U0C13                                 ] }; // ో ఓ
    key <AD10> { [          U0C2A,          U0C2B                                 ] }; // ప ఫ
    key <AD11> { [          U0C1C,          U0C1D,    bracketleft,      braceleft ] }; // జ ఝ [ {
    key <AD12> { [          U0C48,          U0C10,   bracketright,     braceright ] }; // ై ఐ ] }
    key <AE01> { [           KP_1,         exclam,          U0C67,          U0C78 ] }; // 1 ! ౦ ౸
    key <AE02> { [           KP_2,             at,          U0C68,          U0C79 ] }; // 2 @ ౨ ౹
    key <AE03> { [           KP_3,     numbersign,          U0C69,          U0C7A ] }; // 3 # ౩ ౺
    key <AE04> { [           KP_4,         dollar,          U0C6A,          U0C7B ] }; // 4 $ ౪ ౻
    key <AE05> { [           KP_5,        percent,          U0C6B,          U0C7C ] }; // 5 % ౫ ౼
    key <AE06> { [           KP_6,    asciicircum,          U0C6C,          U0C7D ] }; // 6 ^ ౬ ౽
    key <AE07> { [           KP_7,      ampersand,          U0C6D,          U0C7E ] }; // 7 & ౭ ౾
    key <AE08> { [           KP_8,    KP_Multiply,          U0C6E,          U0C7F ] }; // 8 * ౮ ౿
    key <AE09> { [           KP_9,         U0028,           U0C6F,          U20B9 ] }; // 9 ( ౯ ₹
    key <AE10> { [           KP_0,         U0029,           U0C66,          U0C55 ] }; // 0 ) ౦ ౕ
    key <AE11> { [    KP_Subtract,       underbar,       NoSymbol,          U0C56 ] }; // - _  ౖ
    key <AE12> { [       KP_Equal,         KP_Add                                 ] }; // = +
    key <BKSL> { [          U0C4C,          U0C14,          U0964,          U0965 ] }; // ౌ ఔ । ॥
    key <TLDE> { [          U0C43,          U0C0B,      quoteleft,     asciitilde ] }; // ృ ఋ ` ~
    
    include "level3(ralt_switch)" 
};

partial alphanumeric_keys 
xkb_symbols "urd-phonetic" {
    include "pk(urd-phonetic)"
    name[Group1]= "Urdu (phonetic)";
};

partial alphanumeric_keys
xkb_symbols "urd-phonetic3" {
    include "pk(urd-crulp)"
    name[Group1]= "Urdu (alt. phonetic)";
};

partial alphanumeric_keys
xkb_symbols "urd-winkeys" {
    include "pk(urd-nla)"
    name[Group1]= "Urdu (Windows)";
};

partial alphanumeric_keys
xkb_symbols "guru" {
      name[Group1]= "Punjabi (Gurmukhi)";

      // Mainly numbers.
      key <AE01> { [      U0A67 		]	};
      key <AE02> { [      U0A68		]	};
      key <AE03> { [      U0A69, U0A71	]	};
      key <AE04> { [      U0A6A, U0A74	 	]	};
      key <AE05> { [      U0A6B, U262C		]	};
      key <AE06> { [      U0A6C  	 	]	};
      key <AE07> { [      U0A6D 		]	};
      key <AE08> { [      U0A6e  	 	]	};
      key <AE09> { [      U0A6F, parenleft 	]	};
      key <AE10> { [      U0A66, parenright ]	};
      key <AE11> { [      U0A03 	 	]	};
      key <AE12> { [      equal,	plus 	]	};

// Mainly long vowels

      key <AD01> { [      U0A4C, U0A14  ]	};
      key <AD02> { [      U0A48, U0A10  ]	};
      key <AD03> { [      U0A3E, U0A06  ]	};
      key <AD04> { [      U0A40, U0A08  ]	};
      key <AD05> { [      U0A42, U0A0A  ]	};

// Mainly voiced consonants

      key <AD06> { [      U0A2C, U0A2D 	]	};
      key <AD07> { [      U0A39, U0A19 	]	};
      key <AD08> { [      U0A17, U0A18 	]	};
      key <AD09> { [      U0A26, U0A27 	]	};
      key <AD10> { [      U0A1C, U0A1D 	]	};
      key <AD11> { [      U0A21, U0A22 	]	};
      key <AD12> { [      U0A3C, U0A1E 	]	};

// Mainly short vowels
      key <AC01> { [      U0A4B, U0A13  ]	};
      key <AC02> { [      U0A47, U0A0F  ]	};
      key <AC03> { [      U0A4D, U0A05  ]	};
      key <AC04> { [      U0A3F, U0A07  ]	};
      key <AC05> { [      U0A41, U0A09  ]	};

// Mainly unvoiced consonants

      key <AC06> { [      U0A2A, U0A2B 	]	};
      key <AC07> { [      U0A30, U0A5C 	]	};
      key <AC08> { [      U0A15, U0A16 	]	};
      key <AC09> { [      U0A24, U0A25 	]	};
      key <AC10> { [      U0A1A, U0A1B 	]	};
      key <AC11> { [      U0A1F, U0A20 	]	};
      key <BKSL> { [      U005C, U007C	]	};

      key <AB01> { [      z, 	 U0A01	]       };
      key <AB02> { [      U0A02, U0A70, U0A71  ]       };
      key <AB03> { [      U0A2E, U0A23  ]       };
      key <AB04> { [      U0A28, U0A28  ]       };
      key <AB05> { [      U0A35, U0A35  ]       };
      key <AB06> { [      U0A32, U0A33  ]       };
      key <AB07> { [      U0A38, U0A36  ]       };
      key <AB08> { [      comma,     less       ]       };
      key <AB09> { [      period,    U0964  ]       };
      key <AB10> { [      U0A2F, question   ]       };

    include "rupeesign(4)"
    include "level3(ralt_switch)"
};

//Name		:	Jhelum (Refind InScript)
//Description	:	A Jhelum keyboard layout for Gurmukhi (Punjabi)
//			http://www.satluj.org/Jhelum.html
//Modified for InScript to make
//Original Author :	Amanpreet Singh Alam <apreet.alam@gmail.com

partial alphanumeric_keys
xkb_symbols "jhelum" {
      name[Group1] = "Punjabi (Gurmukhi Jhelum)";
          key.type[group1]="FOUR_LEVEL";

     // Roman digits
     key <TLDE>  { [  grave, asciitilde, U0A02,U0A01 ] }; // grave: anusvara, candrabindu
     key <AE01>  { [   1,exclam,	U0A67,	exclam	   ] };
     key <AE02>  { [   2,at,	U0A68,	at	   ] };
     key <AE03>  { [   3,numbersign, U0A69,	numbersign ] };
     key <AE04>  { [   4,dollar,	U0A6A		 ] };
     key <AE05>  { [   5,percent,U0A6B,	percent    ] };
     key <AE06>  { [   6,U0A73, U0A6C,asciicircum ] };
     key <AE07>  { [   7,U0A72,U0A6D,ampersand  ] };
     key <AE08>  { [   8,asterisk,U0A6E,	asterisk   ] };
     key <AE09>  { [   9,parenleft,U0A6F,parenleft  ] };
     key <AE10>  { [   0,parenright,U0A66,parenright ] };
     key <AE11>	{ [   minus,underscore] };
     key <AE12>	{ [   equal,plus] };
     key <BKSL>  { [   U0964,U0965,U007C,U005C] }; //pipe : danda, double danda

     //Q Row	
     key <AD01>   { [   U0A4C, 	U0A14   ] };  // Q: oo, ooh
     key <AD02>   { [   U0A48,  	U0A10	] };  // W: ee, ae
     key <AD03>   { [   U0A3E,   U0A06  ] };  // E: a, aa
     key <AD04>   { [   U0A40,	U0A08, U20B9  	] };  // R: ee, ai, rupeesign
     key <AD05>   { [   U0A42,   U0A0A   ] };  // T: u, uu
     key <AD06>   { [   U0A30,	U0A5C   ] };  // Y: ra, raa
     key <AD07>   { [   U0A26,   U0A27   ] };  // U: tha, thha
     key <AD08>   { [   U0A17,   U0A18, U0A5A   ] };  // I:ga, gha
     key <AD09>   { [   U0A24,   U0A1F   ] };  // O: ta, tha
     key <AD10>   { [   U0A2A,   U0A5E, VoidSymbol,U0A5E  ] };  // P: pa, pha
     key <AD11>   { [   U0A21,   U0A22,   bracketleft,   braceleft   ] };
     key <AD12>	 { [   U0A19,   U0A1E,   bracketright, braceright   ] };

     //A Row
     key <AC01>   { [   U0A4B,	 U0A13  ] };   // A: o, oo
     key <AC02>   { [   U0A47,    U0A0F   ] };  // S: e, ee
     key <AC03>   { [   U0A4D,    U0A05   ] };  // D: halant, aa
     key <AC04>   { [   U0A3F,    U0A07   ] };  // F: i, aa
     key <AC05>   { [   U0A41,    U0A09   ] };  // G: u, uh
     key <AC06>   { [   U0A39,    U0A20   ] };  // H: ha, thha
     key <AC07>   { [   U0A1C,    U0A1D, U0A5B   ] };  // J: ja, jha
     key <AC08>   { [   U0A15,    U0A16,VoidSymbol ,U0A59   ] };  // K: ka, kha
     key <AC09>   { [   U0A32,	 U0A25, U0A33   ] };  // L: la, tha
     key <AC10>   { [   U0A38,   colon, U0A36  ] }; //; sa
     key <AC11>   { [apostrophe, quotedbl ] };

     //Z Row
     key <AB01>   { [   U0A71,	 U0A3C 	 ] };  // Z: addak, par bindi
     key <AB02>   { [   U0A02,    U0A70	 ] };  // X: bindi, tippi
     key <AB03>   { [   U0A1A,    U0A1B   ] };  // C: ca, cha
     key <AB04>   { [   U0A35,    U0A2F   ] };  // V: va, ya
     key <AB05>   { [   U0A2C,    U0A2D   ] };  // B: ba, bha
     key <AB06>   { [   U0A28,    U0A23   ] };  // N: na, nha
     key <AB07>   { [   U0A2E, U0A2E       ] };  // M: ma
     key <AB08>   { [   comma,    U262C	 ] };// comma: comma, dev abbreviation sign
     key <AB09>   { [   period,   U0A74 	 ] };  // period: period, nukta
     key <AB10>   { [   slash,   question ] };

//    modifier_map Shift  { Shift_L };
//    modifier_map Lock   { Caps_Lock };
//    modifier_map Control{ Control_L };
//    modifier_map Mod3   { Mode_switch };
    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "olpc" {

// Contact: Walter Bender <walter@laptop.org>

  include "in(deva)"

  key <TLDE> { [	U094A,	U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O
  key <AE01> { [	U0967,	U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E
  key <AE02> { [	U0968,	U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E
  key <AE03> { [	U0969	 ] }; // DEVANAGARI DIGIT THREE;
  key <AE04> { [	U096A	 ] }; // DEVANAGARI DIGIT FOUR;
  key <AE05> { [	U096B	 ] }; // DEVANAGARI DIGIT FIVE;
  key <AE06> { [	U096C	 ] }; // DEVANAGARI DIGIT SIX;
  key <AE07> { [	U096D	 ] }; // DEVANAGARI DIGIT SEVEN;
  key <AE08> { [	U096E	 ] }; // DEVANAGARI DIGIT EIGHT;
  key <AE09> { [	U096F,	parenleft ] }; // DEVANAGARI DIGIT NINE;
  key <AE10> { [	U0966,	parenright ] }; // DEVANAGARI DIGIT ZERO;
  key <AE11> { [	minus,		U0903 ] }; // DEVANAGARI SIGN VISARGA;
  key <AE12> { [	U0943,	U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R

  key <AD01> { [	U094C,	U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU
  key <AD02> { [	U0948,	U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI
  key <AD03> { [	U093E,	U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA
  key <AD04> { [	U0940,	U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II
  key <AD05> { [	U0942,	U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU
  key <AD06> { [	U092C,	U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA
  key <AD07> { [	U0939,	U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA
  key <AD08> { [	U0917,	U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA
  key <AD09> { [	U0926,	U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA
  key <AD10> { [	U091C,	U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA
  key <AD11> { [	U0921,	U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA
  key <AD12> { [	U093C,	U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA

  key <BKSL> { [	U0949,	U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O

  key <AC01> { [	U094B,	U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O
  key <AC02> { [	U0947,	U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E
  key <AC03> { [	U094D,	U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A
  key <AC04> { [	U093F,	U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I
  key <AC05> { [	U0941,	U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U
  key <AC06> { [	U092A,	U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA
  key <AC07> { [	U0930,	U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA
  key <AC08> { [	U0915,	U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA
  key <AC09> { [	U0924,	U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA
  key <AC10> { [	U091A,	U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA
  key <AC11> { [	U091F,	U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA

  key <AB01> { [	U0946,	U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E
  key <AB02> { [	U0902,	U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU
  key <AB03> { [	U092E,	U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA
  key <AB04> { [	U0928,	U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA
  key <AB05> { [	U0935,	U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA
  key <AB06> { [	U0932,	U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA
  key <AB07> { [	U0938,	U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA
  key <AB08> { [	comma,		U0937 ] }; // DEVANAGARI LETTER SSA
  key <AB09> { [	period,		U0964 ] }; // DEVANAGARI DANDA
  key <AB10> { [	U092F,	U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA

  // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
  include "nbsp(zwnj3zwj4)"

  include "group(olpc)"
};

partial alphanumeric_keys
xkb_symbols "hin-wx" {

    name[Group1]= "Hindi (Wx)";

      key <TLDE> {	 [     grave, asciitilde, 2, 3    ]	};

      key <AE01> {	 [      0x1000967, exclam 		]	};
      key <AE02> {	 [      0x1000968, at 		]	};
      key <AE03> {	 [      0x1000969 , numbersign	 		]	};
      key <AE04> {	 [      0x100096A , dollar		]	};
      key <AE05> {	 [      0x100096B , percent 	 		]	};
      key <AE06> {	 [      0x100096C , asciicircum	 		]	};
      key <AE07> {	 [      0x100096D , ampersand                       ]	};
      key <AE08> {	 [      0x100096e , asterisk 	 		]	};
      key <AE09> {	 [      0x100096F, parenleft 		]	};
      key <AE10> {	 [      0x1000966, parenright 		]	};
      key <AE11> {	 [      minus, underscore 	 		]	};
      key <AE12> {	 [      equal, plus 		]	};


      key <AD01> {	 [      0x1000943,  0x1000944, 0x100090B, 0x1000960]	};
      key <AD02> {	 [      0x1000924,  0x1000925       	]	};
      key <AD03> {	 [      0x1000947,  0x1000948, 0x100090F, 0x1000910]	};
      key <AD04> {	 [      0x1000930,  0x1000937       	]	};
      key <AD05> {	 [      0x100091F,  0x1000920       	]	};


      key <AD06> {	 [      0x100092F 		]	};
      key <AD07> {	 [      0x1000941,  0x1000942, 0x1000909, 0x100090A ]	};
      key <AD08> {	 [      0x100093F,  0x1000940, 0x1000907, 0x1000908 ]	};
      key <AD09> {	 [      0x100094B,  0x100094C, 0x1000913, 0x1000914]	};
      key <AD10> {	 [      0x100092A,  0x100092B 		]	};
      key <AD11> {	 [      bracketleft, braceleft  		]	};
      key <AD12> {	 [      bracketright, braceright  		]	};
      key <BKSL> {       [      backslash, bar, 0x1000964, 0x1000965 ] };

      key <AC01> {	 [      0x100094D,  0x100093E, 0x1000905,0x1000906 ] 	};
      key <AC02> {	 [      0x1000938,  0x1000936       	]	};
      key <AC03> {	 [      0x1000921,  0x1000922       	]	};
      key <AC04> {	 [      0x1000919,  0x100091E       	]	};
      key <AC05> {	 [      0x1000917,  0x1000918       	]	};


      key <AC06> {	 [      0x1000939,  0x1000903 		]	};
      key <AC07> {	 [      0x100091C,  0x100091D 		]	};
      key <AC08> {	 [      0x1000915,  0x1000916 		]	};
      key <AC09> {	 [      0x1000932,  0x1000962, 0x1000933, 0x100090C]	};
      key <AC10> {	 [      semicolon, colon  		]	};
      key <AC11> {	 [      apostrophe, quotedbl 		]	};

      key <AB01> {	 [      0x1000901,   0x100093C, 0x100093D, 0x1000950]   };
      key <AB02> {       [      0x1000926,   0x1000927      ]       };
      key <AB03> {       [      0x100091A,   0x100091B         ]       };
      key <AB04> {       [      0x1000935                      ]       };
      key <AB05> {       [      0x100092C,   0x100092D        ]       };
      key <AB06> {       [      0x1000928,   0x1000923         ]       };
      key <AB07> {       [      0x100092E,   0x1000902         ]       };
      key <AB08> {       [      comma,       less         ]       };
      key <AB09> {       [      period,      greater       ]       };
      key <AB10> {       [      slash,      question        ]       };

    include "level3(ralt_switch)"
    include "rupeesign(4)"
};

partial alphanumeric_keys
xkb_symbols "eng" {

    include "us(basic)"
    name[Group1]= "English (India, with rupee)";

    include "rupeesign(4)"
    include "level3(ralt_switch)"
};


// Description : Enhanced INSCRIPT keymap for Malayalam
// Encoding    : Unicode (http://www.unicode.org)
// Author      : Mahesh T Pai <paivakil@gmail.com>
// Date        : March, 2011
// Source      : http://www.nongnu.org/smc/docs/images/ml_inscript_layout.jpg
// Comment     : Based on the InScript Keyboard created by M Baiju
// Mapping:

partial alphanumeric_keys
xkb_symbols "mal_enhanced" {

    name[Group1] = "Malayalam (enhanced InScript, with rupee)";

   //From grave to backslash (\)

      key <TLDE> { [ U0d4a ,       U0d12 ] };
      key <AE01> { [ U0d67 ,      exclam ] };
      key <AE02> { [ U0d68 ,          at ] };
      key <AE03> { [ U0d69 ,  numbersign ] };
      key <AE04> { [ U0d6a ,      dollar ] };
      key <AE05> { [ U0d6b ,     percent ] };
      key <AE06> { [ U0d6c , asciicircum ] };
      key <AE07> { [ U0d6d ,   ampersand ] };
      key <AE08> { [ U0d6e ,       U0d7e ] };
      key <AE09> { [ U0d6f ,   parenleft ] };
      key <AE10> { [ U0d66 ,  parenright ] };

      key <AE11> { [ minus , U0d03       ] };
      key <AE12> { [ U0d43 , U0d0b       ] };
      key <BKSL> { [ U0d7c , U05C        ] }; //bksl: chillu RR 


  // From 'q' to right bracket (])

    key <AD01> { [ U0d57 , U0d14 ] };
    key <AD02> { [ U0d48 , U0d10 ] };
    key <AD03> { [ U0d3e , U0d06 ] };
    key <AD04> { [ U0d40 , U0d08 ] };
    key <AD05> { [ U0d42 , U0d0a ] };
    key <AD06> { [ U0d2c , U0d2d ] };
    key <AD07> { [ U0d39 , U0d19 ] };
    key <AD08> { [ U0d17 , U0d18 ] };
    key <AD09> { [ U0d26 , U0d27 ] };
    key <AD10> { [ U0d1c , U0d1d ] };
    key <AD11> { [ U0d21 , U0d22 ] };
    key <AD12> { [ U0200d , U0d1e ] };

    // From 'a' to apostrophe (')

    key <AC01> { [ U0d4b , U0d13 ] };
    key <AC02> { [ U0d47 , U0d0f ] };
    key <AC03> { [ U0d4d , U0d05 ] };
    key <AC04> { [ U0d3f , U0d07 ] };
    key <AC05> { [ U0d41 , U0d09 ] };
    key <AC06> { [ U0d2a , U0d2b ] };
    key <AC07> { [ U0d30 , U0d31 ] };
    key <AC08> { [ U0d15 , U0d16 ] };
    key <AC09> { [ U0d24 , U0d25 ] };
    key <AC10> { [ U0d1a , U0d1b ] };
    key <AC11> { [ U0d1f , U0d20 ] };

    // From 'z' to slash (/)

    key <AB01> { [ U0d46 , U0d0e ] };
    key <AB02> { [ U0d02 , U0d7a ] };
    key <AB03> { [ U0d2e , U0d23 ] };
    key <AB04> { [ U0d28 , U0d7b ] };
    key <AB05> { [ U0d35 , U0d34 ] };
    key <AB06> { [ U0d32 , U0d33 ] };
    key <AB07> { [ U0d38 , U0d36 ] };
    key <AB08> { [ comma , U0d37 ] };
    key <AB09> { [ period , U0d7d ] }; //chillu l
    key <AB10> { [ U0d2f , question ] };

    include "rupeesign(4)"
    include "level3(ralt_switch)"
};


// ---- BEGIN Hindi KaGaPa phonetic ----
// Name:        KaGaPa phonetic
// Brief:       Devanagari layout (Hindi, Sanskrit, Nepali, Marathi, etc.)
// Diagram:     (Original)[http://baraha.com/help/Keyboards/dev_brhkbd.htm]
//              (This layout)[http://bdsatish.in/lang/dev-kagapa.png]
//
// Description: Based on KaGaPa layout (also called Baraha layout or Nudi layout)
//              which is a modified layout of the specification by Dr. K. P. Rao.
//              This is a phonetic layout with the following features:
//              [1] All letters are mapped to phonetically-similar English keys
//                  as much as possible.
//              [2] The independent vowel (svara) and its dependent vowel (maatra)
//                  use the same key (depending upon SHIFT, ALTGR or ALTGR + SHIFT).
//              [3] Consonant conjuncts are produced by explicitly invoking the
//                  'viraama' (key f). The 'short a' maatra is implicit in all
//                  consonants.
//              [4] Zero width non-joiner and joiner are on keys 6 and 7
//                  respectively. These are absolutely essential for alternative
//                  glyph renderings of consonant half-forms.
//              [5] Rigvedic accent marks, visarga variants.
//
// Author:      Satish BD <bdsatish@gmail.com>
//
partial alphanumeric_keys
xkb_symbols "hin-kagapa" {
     name[Group1] = "Hindi (KaGaPa, phonetic)";
     key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   grave,   asciitilde,   U201C          ] };  // U201C: left double quotation mark
    key <AE01>  { [   1,            exclam,       U0967          ] };
    key <AE02>  { [   2,            at,           U0968,  U20A8  ] };  // U20A8: generic rupee sign (Rs)
    key <AE03>  { [   3,            numbersign,   U0969          ] };
    key <AE04>  { [   4,            dollar,       U096A,  U20B9  ] };  // U20B9: new Indian rupee sign
    key <AE05>  { [   5,            percent,      U096B          ] };
    key <AE06>  { [   6,            asciicircum,  U096C,  U200C  ] };  // ZWNJ
    key <AE07>  { [   7,            ampersand,    U096D,  U200D  ] };  // ZWJ
    key <AE08>  { [   8,            asterisk,     U096E,  U0901  ] };  // U0901: Devanagari candrabindu
    key <AE09>  { [   9,            parenleft,    U096F          ] };
    key <AE10>  { [   0,            parenright,   U0966,  U0970  ] };  // U0970: Devanagari abbreviation sign
    key <AE11>  { [   minus,        underscore,   U0952          ] };  // U0952: Devanagari stress sign anudatta
    key <AE12>  { [   equal,        plus                         ] };
    key <BKSL>  { [   U005C,        U007C,        U0964,  U0965  ] };  // backslash, pipe, danda, double danda

    //Q Row
    key <AD01>  { [   U091F,         U0920                       ] };  // Q: retroflex Ta, Tha
    key <AD02>  { [   U0921,         U0922,      U095C,  U095D   ] };  // W: retroflex Da, Dha, Da-nukta, Dha-nukta
    key <AD03>  { [   U0946,         U0947,      U090E,  U090F   ] };  // E: matras, short E, long E
    key <AD04>  { [   U0930,         U0943,      U090B,  U0931   ] };  // R: ra, vocalic R matra, vocalic R, ra-nukta
    key <AD05>  { [   U0924,         U0925                       ] };  // T: dental ta, tha
    key <AD06>  { [   U092F,         U0948,      U0910,  U095F   ] };  // Y: ya, ai matra, ai, ya-nukta
    key <AD07>  { [   U0941,         U0942,      U0909,  U090A   ] };  // U: matras, u, uu
    key <AD08>  { [   U093F,         U0940,      U0907,  U0908   ] };  // I: matras, i, ii
    key <AD09>  { [   U094A,         U094B,      U0912,  U0913   ] };  // O: matras, short o, long o
    key <AD10>  { [   U092A,         U092B,      U095E           ] };  // P: pa, pha, pha-nukta
    key <AD11>  { [   bracketleft,   braceleft                   ] };
    key <AD12>  { [   bracketright,  braceright                  ] };

    //A Row
    key <AC01>  { [   U093E,        U0906,     U0905,    U0972   ] };  // A: aa matra, aa, short a, candra a
    key <AC02>  { [   U0938,        U0936                        ] };  // S: sa, sha
    key <AC03>  { [   U0926,        U0927                        ] };  // D: dental da, dha
    key <AC04>  { [   U094D,        U0944,     U0960             ] };  // F: virama, vocalic RR matra, vocalic RR
    key <AC05>  { [   U0917,        U0918,     U095A             ] };  // G: ga, gha, ga-nukta
    key <AC06>  { [   U0939,        U0903,     U1CF5,    U1CF6   ] };  // H: ha, visarga, jihvamuliya, upadhmaniya
    key <AC07>  { [   U091C,        U091D,     U095B             ] };  // J: ja, jha, ja-nukta
    key <AC08>  { [   U0915,        U0916,     U0958,    U0959   ] };  // K: ka, kha, ka-nukta, kha-nukta
    key <AC09>  { [   U0932,        U0933,     U0962,    U090C   ] };  // L: la, lla, vocalic L matra, vocalic L
    key <AC10>  { [   semicolon,    colon,     U1CF2,    U1CF3   ] };  // U1CF2/3: ardhavisarga/rotated ardhavisarga
    key <AC11>  { [   apostrophe,   quotedbl,  U0951,    U201D   ] };  // U0951: Devanagari stress sign udatta
                                                                       // U201D: Right double quotation mark
    //Z Row
    key <AB01>  { [   U091E,   U0919                   ] };  // Z: nya, nga
    key <AB02>  { [   U0937,   U093C,  U0934           ] };  // X: ssa, nukta below, lla-nukta
    key <AB03>  { [   U091A,   U091B                   ] };  // C: ca, cha
    key <AB04>  { [   U0935,   U094C,  U0914           ] };  // V: va, matra au, au
    key <AB05>  { [   U092C,   U092D                   ] };  // B: ba, bha
    key <AB06>  { [   U0928,   U0923,  U0929           ] };  // N: na, nna, nnna
    key <AB07>  { [   U092E,   U0902,  U093D,  U0950   ] };  // M: ma, anusvara, avagraha, Devanagari OM
    key <AB08>  { [   comma,   U003C,  U0945,  U090D   ] };  // comma: comma, less than, matra, candra e
    key <AB09>  { [   period,  U003E,  U0949,  U0911   ] };  // period: period, greater than, matra, candra o
    key <AB10>  { [   slash,   question                ] };

    include "level3(ralt_switch)"
};
// ---- END Hindi KaGaPa ----

// Sanskrit uses Devanagari layout of Hindi
partial alphanumeric_keys
xkb_symbols "san-kagapa" {
  include "in(hin-kagapa)"
  name[Group1] = "Sanskrit (KaGaPa, phonetic)";
};

// Marathi uses Devanagari layout of Hindi
partial alphanumeric_keys
xkb_symbols "mar-kagapa" {
  include "in(hin-kagapa)"
  name[Group1] = "Marathi (KaGaPa, phonetic)";
};


// ---- BEGIN Kannada KaGaPa phonetic ----
// Name:        Kannada KaGaPa phonetic
// Diagram:     (Original)[http://www.baraha.com/help/Keyboards/kan_brhkbd.htm]
//              (This layout)[http://bdsatish.in/lang/kan-kagapa.png]
//
// Description: Based on KaGaPa layout (also called Baraha layout or Nudi layout).
//              See the description to "hin-kagapa" above.
//              Certain punctuation characters from Devanagari block are
//              retained for compatibility.
//
// Author:      Satish BD <bdsatish@gmail.com>
//
partial alphanumeric_keys
xkb_symbols "kan-kagapa" {
    name[Group1] = "Kannada (KaGaPa, phonetic)";
    key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   grave,   asciitilde,   U201C          ] };  // U201C: left double quotation mark
    key <AE01>  { [   1,            exclam,       U0CE7          ] };
    key <AE02>  { [   2,            at,           U0CE8,  U20A8  ] };  // U20A8: generic rupee sign (Rs)
    key <AE03>  { [   3,            numbersign,   U0CE9          ] };
    key <AE04>  { [   4,            dollar,       U0CEA,  U20B9  ] };  // U20B9: new Indian rupee sign
    key <AE05>  { [   5,            percent,      U0CEB          ] };
    key <AE06>  { [   6,            asciicircum,  U0CEC,  U200C  ] };  // ZWNJ
    key <AE07>  { [   7,            ampersand,    U0CED,  U200D  ] };  // ZWJ
    key <AE08>  { [   8,            asterisk,     U0CEE,  U0901  ] };  // U0901: Devanagari candrabindu
    key <AE09>  { [   9,            parenleft,    U0CEF          ] };
    key <AE10>  { [   0,            parenright,   U0CE6          ] };
    key <AE11>  { [   minus,        underscore,   U0952          ] };  // U0952: Devanagari stress sign anudatta
    key <AE12>  { [   equal,        plus                         ] };
    key <BKSL>  { [   U005C,        U007C,        U0964,  U0965  ] };  // backslash, pipe, danda, double danda

    //Q Row
    key <AD01>  { [   U0C9F,         U0CA0                       ] };  // Q: retroflex Ta, Tha
    key <AD02>  { [   U0CA1,         U0CA2                       ] };  // W: retroflex Da, Dha
    key <AD03>  { [   U0CC6,         U0CC7,      U0C8E,  U0C8F   ] };  // E: matras, short E, long E
    key <AD04>  { [   U0CB0,         U0CC3,      U0C8B,  U0CB1   ] };  // R: ra, vocalic R matra, vocalic R, RRA
    key <AD05>  { [   U0CA4,         U0CA5                       ] };  // T: dental ta, tha
    key <AD06>  { [   U0CAF,         U0CC8,      U0C90           ] };  // Y: ya, ai matra, ai
    key <AD07>  { [   U0CC1,         U0CC2,      U0C89,  U0C8A   ] };  // U: matras, u, uu
    key <AD08>  { [   U0CBF,         U0CC0,      U0C87,  U0C88   ] };  // I: matras, i, ii
    key <AD09>  { [   U0CCA,         U0CCB,      U0C92,  U0C93   ] };  // O: matras, short o, long o
    key <AD10>  { [   U0CAA,         U0CAB                       ] };  // P: pa, pha
    key <AD11>  { [   bracketleft,   braceleft                   ] };
    key <AD12>  { [   bracketright,  braceright                  ] };

    //A Row
    key <AC01>  { [   U0CBE,        U0C86,     U0C85             ] };  // A: aa matra, aa, short a
    key <AC02>  { [   U0CB8,        U0CB6                        ] };  // S: sa, sha
    key <AC03>  { [   U0CA6,        U0CA7                        ] };  // D: dental da, dha
    key <AC04>  { [   U0CCD,        U0CC4,     U0CE0             ] };  // F: virama, vocalic RR matra, vocalic RR
    key <AC05>  { [   U0C97,        U0C98                        ] };  // G: ga, gha
    key <AC06>  { [   U0CB9,        U0C83,     U0CF1,    U0CF2   ] };  // H: ha, visarga, jihvanuliya, upadhmaniya
    key <AC07>  { [   U0C9C,        U0C9D                        ] };  // J: ja, jha
    key <AC08>  { [   U0C95,        U0C96                        ] };  // K: ka, kha
    key <AC09>  { [   U0CB2,        U0CB3,     U0CE2,    U0C8C   ] };  // L: la, lla, vocalic L matra, vocalic L
    key <AC10>  { [   semicolon,    colon                        ] };
    key <AC11>  { [   apostrophe,   quotedbl,  U0951,    U201D   ] };  // U0951: Devanagari stress sign udatta
                                                                       // U201D: Right double quotation mark
    //Z Row
    key <AB01>  { [   U0C9E,   U0C99                   ] };  // Z: nya, nga
    key <AB02>  { [   U0CB7,   U0CBC,  U0CDE           ] };  // X: ssa, nukta below, LLLA
    key <AB03>  { [   U0C9A,   U0C9B                   ] };  // C: ca, cha
    key <AB04>  { [   U0CB5,   U0CCC,  U0C94           ] };  // V: va, matra au, au
    key <AB05>  { [   U0CAC,   U0CAD                   ] };  // B: ba, bha
    key <AB06>  { [   U0CA8,   U0CA3                   ] };  // N: na, nna
    key <AB07>  { [   U0CAE,   U0C82,  U0CBD,  U0950   ] };  // M: ma, anusvara, avagraha, Devanagari OM
    key <AB08>  { [   comma,   U003C,  U0CB1           ] };  // comma: comma, less than, RRA
    key <AB09>  { [   period,  U003E,  U0CDE           ] };  // period: period, greater than, LLLA
    key <AB10>  { [   slash,   question                ] };

    include "level3(ralt_switch)"
};
// ---- END Kannada KaGaPa ----


// ---- BEGIN Telugu KaGaPa phonetic ----
// Name:        Telugu KaGaPa phonetic
// Diagram:     (Original)[http://www.baraha.com/help/Keyboards/tel_brhkbd.htm]
//              (This layout)[http://bdsatish.in/lang/tel-kagapa.png]
//
// Description: Based on KaGaPa layout (also called Baraha layout or Nudi layout).
//              See the description to "hin-kagapa" above.
//              Certain punctuation characters from Devanagari block are
//              retained for compatibility.
//
// Author:      Satish BD <bdsatish@gmail.com>
//
partial alphanumeric_keys
xkb_symbols "tel-kagapa" {
    name[Group1] = "Telugu (KaGaPa, phonetic)";
    key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   grave,   asciitilde,   U201C          ] };  // U201C: left double quotation mark
    key <AE01>  { [   1,            exclam,       U0C67          ] };
    key <AE02>  { [   2,            at,           U0C68,  U20A8  ] };  // U20A8: generic rupee sign (Rs)
    key <AE03>  { [   3,            numbersign,   U0C69          ] };
    key <AE04>  { [   4,            dollar,       U0C6A,  U20B9  ] };  // U20B9: new Indian rupee sign
    key <AE05>  { [   5,            percent,      U0C6B          ] };
    key <AE06>  { [   6,            asciicircum,  U0C6C,  U200C  ] };  // ZWNJ
    key <AE07>  { [   7,            ampersand,    U0C6D,  U200D  ] };  // ZWJ
    key <AE08>  { [   8,            asterisk,     U0C6E,  U0C01  ] };  // U0C01: Telugu arasunna
    key <AE09>  { [   9,            parenleft,    U0C6F          ] };
    key <AE10>  { [   0,            parenright,   U0C66          ] };
    key <AE11>  { [   minus,        underscore,   U0952          ] };  // U0952: Devanagari stress sign anudatta
    key <AE12>  { [   equal,        plus                         ] };
    key <BKSL>  { [   U005C,        U007C,        U0964,  U0965  ] };  // backslash, pipe, danda, double danda

    //Q Row
    key <AD01>  { [   U0C1F,         U0C20                       ] };  // Q: retroflex Ta, Tha
    key <AD02>  { [   U0C21,         U0C22                       ] };  // W: retroflex Da, Dha
    key <AD03>  { [   U0C46,         U0C47,      U0C0E,  U0C0F   ] };  // E: matras, short E, long E
    key <AD04>  { [   U0C30,         U0C43,      U0C0B,  U0C31   ] };  // R: ra, vocalic R matra, vocalic R, RRA
    key <AD05>  { [   U0C24,         U0C25                       ] };  // T: dental ta, tha
    key <AD06>  { [   U0C2F,         U0C48,      U0C10           ] };  // Y: ya, ai matra, ai
    key <AD07>  { [   U0C41,         U0C42,      U0C09,  U0C0A   ] };  // U: matras, u, uu
    key <AD08>  { [   U0C3F,         U0C40,      U0C07,  U0C08   ] };  // I: matras, i, ii
    key <AD09>  { [   U0C4A,         U0C4B,      U0C12,  U0C13   ] };  // O: matras, short o, long o
    key <AD10>  { [   U0C2A,         U0C2B                       ] };  // P: pa, pha
    key <AD11>  { [   bracketleft,   braceleft                   ] };
    key <AD12>  { [   bracketright,  braceright                  ] };

    //A Row
    key <AC01>  { [   U0C3E,        U0C06,     U0C05             ] };  // A: aa matra, aa, short a
    key <AC02>  { [   U0C38,        U0C36                        ] };  // S: sa, sha
    key <AC03>  { [   U0C26,        U0C27                        ] };  // D: dental da, dha
    key <AC04>  { [   U0C4D,        U0C44,     U0C60             ] };  // F: virama, vocalic RR matra, vocalic RR
    key <AC05>  { [   U0C17,        U0C18                        ] };  // G: ga, gha
    key <AC06>  { [   U0C39,        U0C03                        ] };  // H: ha, visarga
    key <AC07>  { [   U0C1C,        U0C1D                        ] };  // J: ja, jha
    key <AC08>  { [   U0C15,        U0C16                        ] };  // K: ka, kha
    key <AC09>  { [   U0C32,        U0C33,     U0C62,    U0C0C   ] };  // L: la, lla, vocalic L matra, vocalic L
    key <AC10>  { [   semicolon,    colon                        ] };
    key <AC11>  { [   apostrophe,   quotedbl,  U0951,    U201D   ] };  // U0951: Devanagari stress sign udatta
                                                                       // U201D: Right double quotation mark
    //Z Row
    key <AB01>  { [   U0C1E,   U0C19                   ] };  // Z: nya, nga
    key <AB02>  { [   U0C37                            ] };  // X: ssa
    key <AB03>  { [   U0C1A,   U0C1B                   ] };  // C: ca, cha
    key <AB04>  { [   U0C35,   U0C4C,  U0C14           ] };  // V: va, matra au, au
    key <AB05>  { [   U0C2C,   U0C2D                   ] };  // B: ba, bha
    key <AB06>  { [   U0C28,   U0C23                   ] };  // N: na, nna
    key <AB07>  { [   U0C2E,   U0C02,  U0C3D,  U0950   ] };  // M: ma, anusvara, avagraha, Devanagari OM
    key <AB08>  { [   comma,   U003C,  U0C58           ] };  // comma: comma, less than, TSA
    key <AB09>  { [   period,  U003E,  U0C59           ] };  // period: period, greater than, DZA
    key <AB10>  { [   slash,   question                ] };

    include "level3(ralt_switch)"
};

// Description 	: Keymap for Manipuri language (Meetei mayek script)
// Encoding    	: Unicode (http://www.unicode.org)
// Author      	: Santosh Heigrujam <santosh.tomba@gmail.com>
// Date        	: December, 2013
// Source	: 
// Comment	:
	
partial alphanumeric_keys modifier_keys
xkb_symbols "eeyek" {

    name[Group1]= "Manipuri (Eeyek)";

    key <TLDE> {	[     grave,	asciitilde	]	};
    key <AE01> {	[	  Uabf1,	exclam 		]	};
    key <AE02> {	[	  Uabf2,	at		]	};
    key <AE03> {	[	  Uabf3,	numbersign	]	};
    key <AE04> {	[	  Uabf4,	dollar		]	};
    key <AE05> {	[	  Uabf5,	percent		]	};
    key <AE06> {	[	  Uabf6,	asciicircum	]	};
    key <AE07> {	[	  Uabf7,	ampersand	]	};
    key <AE08> {	[	  Uabf8,	asterisk	]	};
    key <AE09> {	[	  Uabf9,	parenleft	]	};
    key <AE10> {	[	  Uabf0,	parenright	]	};
    key <AE11> {	[     minus,	underscore	]	};
    key <AE12> {	[     equal,	plus		]	};

    key <AD01> {	[	  Uabc8,	Uabd8 		]	};
    key <AD02> {	[	  Uabcb,	Uabcb		]	};
    key <AD03> {	[	  Uabcf,	Uabe2		]	};
    key <AD04> {	[	  Uabd4,	Uabd4		]	};
    key <AD05> {	[	  Uabc7,	Uabe0		]	};
    key <AD06> {	[	  Uabcc,	Uabe6		]	};
    key <AD07> {	[	  Uabce,	Uabe8		]	};
    key <AD08> {	[	  Uabe4,	Uabe9		]	};
    key <AD09> {	[	  Uabe3,	Uabe7		]	};
    key <AD10> {	[	  Uabc4,	Uabde		]	};
    key <AD11> {	[ bracketleft,	braceleft	]	};
    key <AD12> {	[ bracketright,	braceright	]	};

    key <AC01> {	[	  Uabd1,	Uabe5 		]	};
    key <AC02> {	[	  Uabc1,	Uabd3		]	};
    key <AC03> {	[	  Uabd7,	Uabd9		]	};
    key <AC04> {	[	  Uabd0,	Uabda		]	};
    key <AC05> {	[	  Uabd2,	Uabd8		]	};
    key <AC06> {	[	  Uabcd,	Uabea		]	};
    key <AC07> {	[	  Uabd6,	Uabd3		]	};
    key <AC08> {	[	  Uabc0,	Uabdb		]	};
    key <AC09> {	[	  Uabc2,	Uabdc		]	};
    key <AC10> {	[ semicolon,	colon		]	};
    key <AC11> {	[ apostrophe,	quotedbl	]	};

    key <AB01> {	[	  Uabc9,	Uabe1 		]	};
    key <AB02> {	[	  Uabca,	Uabd9		]	};
    key <AB03> {	[	  Uabc6,	Uabeb		]	};
    key <AB04> {	[	  Uabda,	Uabed		]	};
    key <AB05> {	[	  Uabd5,	Uabec		]	};
    key <AB06> {	[	  Uabc5,	Uabdf		]	};
    key <AB07> {	[	  Uabc3,	Uabdd		]	};
    key <AB08> {	[     comma,	less		]	};
    key <AB09> {	[    period,	greater		]	};
    key <AB10> {	[     slash,	question	]	};

    key <BKSL> {	[ backslash,         bar	]	};
    
    include "level3(ralt_switch)"
};

// This layout is developed by Niranjan Tambe in July 2019
// for typing Indic languages in International Phonetic Alphabet (IPA).
// Contact - niranjanvikastambe@gmail.com

partial alphanumeric_keys modifier_keys
xkb_symbols "iipa" {

    name[Group1]= "Indic IPA";
    key <AE01>	{ [	1,		exclam]	};
    key <AE02>	{ [	2,		at]	};
    key <AE03>	{ [	3,		numbersign]	};
    key <AE04>	{ [	4,		U20B9]	};
    key <AE05>	{ [	5,		percent]	};
    key <AE06>	{ [	6,		asciicircum] };
    key <AE07>	{ [	7,		ampersand]	};
    key <AE08>	{ [	8,		asterisk]	};
    key <AE09>	{ [	9,		parenleft]	};
    key <AE10>	{ [	0,		parenright]	};
    key <AE11>	{ [	minus,	underscore]	};
    key <AE12>	{ [	equal,       plus]	};

    key <AD01>	{ [	U02B0,		U02B1]	}; // [ʰ], [ʱ]
    key <AD02>	{ [	U00E6,		q]	}; // [æ], [q] found in Urdu
    key <AD03>	{ [	a,			U028B]	}; // [a], [ʋ]
    key <AD04>	{ [	i,			U026A]	}; // [i] [ɪ]
    key <AD05>	{ [	u,			U026F]	}; // [u] [ɯ] found in Tamil
    key <AD06>	{ [	b,			Y]	}; // [b]
    key <AD07>	{ [	h,			U014B]	}; // [h], [ŋ]
    key <AD08>	{ [	g,			U0263]	}; // [g], [ɣ] found in Urdu
    key <AD09>	{ [	d,			U00F0]	}; // [d], [ð] found in Malayalam
    key <AD10>	{ [	U02A4,		U02A3]	}; // [ʤ], [ʣ] found in Marathi
    key <AD11>	{ [	U0256,		U027D]	}; // [ɖ], [ɽ]
    key <AD12>	{ [	bracketleft,	bracketright]	}; // "[", "]" needed for denoting phonetic symbols

    key <AC01>	{ [	o,		U0254]	}; // [o], [ɔ] found in Bangla
    key <AC02>	{ [	e,		U025B]	}; // [e], [ɛ]
    key <AC03>	{ [	U0259,	U0361]	}; // [ə], [   ͡  ]
    key <AC04>	{ [	i,		U026A]	}; // [i], [ɪ]
    key <AC05>	{ [	u,		U026F]	}; // [u], [ɯ]
    key <AC06>	{ [	p,		f]	}; // [p], [f]
    key <AC07>	{ [	U027E,	r]	}; // [ɾ], [r]
    key <AC08>	{ [	k,		x]	}; // [k], [x] found in Urdu
    key <AC09>	{ [	t,		U03B8]	}; // [t], [θ]
    key <AC10>	{ [	U02A7,	U02A6]	}; // [ʧ], [ʦ] found in Marathi
    key <AC11>	{ [	U0288,	quotedbl]	}; // [ʈ]
    key <TLDE>	{ [	grave, 	asciitilde]	};

    key <BKSL>	{ [	backslash,	bar]	};
    key <AB01>	{ [	U032A,		U0303]	}; // [ ̪], [ ̃] Dental mark, nasalisation mark
    key <AB02>	{ [	U0306,		X]	}; // [  ̆] Short sound
    key <AB03>	{ [	m,			U0273]	}; // [m], [ɳ]
    key <AB04>	{ [	n,			v]	}; // [n], [v]
    key <AB05>	{ [	w,			z] }; // [w], [z]
    key <AB06>	{ [	l,			U026D]	}; // [l], [ɭ]
    key <AB07>	{ [	s,			U0283]	}; // [s], [ʃ]
    key <AB08>	{ [	comma,		U0282]	}; // [ʂ]
    key <AB09>	{ [	period,		U02D0]	}; // [ː] Long sound
    key <AB10>	{ [	j,			slash] }; // [j]
};

// This layout is developed by Niranjan Tambe in July 2019
// for typing Marathi language with some necessary symbols.
// Contact - niranjanvikastambe@gmail.com

xkb_symbols "marathi" {
	name[Group1]="Marathi (enhanced InScript)";
	key <TLDE> { [ U0962, U090C,   grave, asciitilde  ] }; // Added  ॢ & ऌ
	key <AE01> { [ U0967, exclam,       1, exclam      ] }; // Added exclamation mark
	key <AE02> { [ U0968, U0945,       2, at          ] }; // Added ॅ
	key <AE03> { [ U0969, U093D,  3, numbersign  ] }; // Added ऽ
	key <AE04> { [ U096a, U20B9,      4		  ] }; // Added ₹
	key <AE05> { [ U096b, percent,     5, percent     ] }; 
	key <AE06> { [ U096c, asciicircum, 6, asciicircum ] }; 
	key <AE07> { [ U096d, U0970,   7, ampersand   ] }; // Added ॰
	key <AE08> { [ U096e, U0950,    8, asterisk    ] };
	key <AE09> { [ U096f, parenleft,   9, parenleft   ] };
	key <AE10> { [ U0966, parenright,  0, parenright  ] };
	key <AE11> { [ minus, U0903, minus, underscore    ] };
	key <AE12> { [ U0943, U090b, U0944, U0960 ] };

	key <AD01> { [ U094c, U0914 ] };
	key <AD02> { [ U0948, U0910 ] };
	key <AD03> { [ U093e, U0906 ] };
	key <AD04> { [ U0940, U0908, U0963, U0961 ] };
	key <AD05> { [ U0942, U090a ] };
	key <AD06> { [ U092c, U092d ] };
	key <AD07> { [ U0939, U0919 ] };
	key <AD08> { [ U0917, U0918, U095a ] };
	key <AD09> { [ U0926, U0927 ] };
	key <AD10> { [ U091c, U091d, U095b ] };
	key <AD11> { [ U0921, U0922, U095c, U095d ] };
	key <AD12> { [ U093c, U091e ] };
	key <BKSL> { [ U0949, U0911, U005C, U007C ] };

	key <AC01> { [ U094b, U0913 ] };
	key <AC02> { [ U0947, U090f ] };
	key <AC03> { [ U094d, U0905 ] };
	key <AC04> { [ U093f, U0907, U0962, U090c ] };
	key <AC05> { [ U0941, U0909 ] };
	key <AC06> { [ U092a, U092b, NoSymbol, U095e ] };
	key <AC07> { [ U0930, U0931 ] };
	key <AC08> { [ U0915, U0916, U0958, U0959 ] };
	key <AC09> { [ U0924, U0925 ] };
	key <AC10> { [ U091a, U091b, U0952 ] };
	key <AC11> { [ U091f, U0920, NoSymbol, U0951 ] };

	key <AB01> { [ apostrophe, U0972, U0953 ] }; // Added apostrophe & ॲ
	key <AB02> { [ U0902, U0901, NoSymbol, U0950 ] }; 
	key <AB03> { [ U092e, U0923, U0954 ] };
	key <AB04> { [ U0928, quotedbl ] }; // Added "
	key <AB05> { [ U0935, UA8FB ] }; // Added headstroke
	key <AB06> { [ U0932, U0933 ] };
	key <AB07> { [ U0938, U0936 ] };
	key <AB08> { [ comma, U0937, U0970 ] };
	key <AB09> { [ period, U0964, U0965, U093d ] };
	key <AB10> { [ U092f, question, slash, question ] };
};
// EXTRAS:
// Vedic and Miscellaneous symbols
// This layout covers 'Extended Devanagari' and 'Vedic Extensions' Unicode blocks.
// This is helpful for including all the required symbols when typing complex texts such as those from Samaveda and Yajurveda.
// This layout only includes signs and symbols. Text needs to be typed seperately.
// Created by : Abhishek Deshpande     <abhishekdeshpande128@gmail.com>
// Date : 27th October, 2020
partial alphanumeric_keys
xkb_symbols "san-misc" {
     name[Group1] = "Sanskrit symbols";
     key.type[group1]="FOUR_LEVEL";

    // Roman digits
    key <TLDE>  { [   U1CD0,  UA8FA  ] };
    key <AE01>  { [   UA8E1,  U1CD1  ] };
    key <AE02>  { [   UA8E2,  UA8F2  ] };
    key <AE03>  { [   UA8E3,  UA8F3  ] };
    key <AE04>  { [   UA8E4,  UA8F4  ] };
    key <AE05>  { [   UA8E5,  UA8F5  ] };
    key <AE06>  { [   UA8E6,  UA8F6  ] };
    key <AE07>  { [   UA8E7,  UA8F7  ] };
    key <AE08>  { [   UA8E8,  UA8F8  ] };
    key <AE09>  { [   UA8E9,  UA8F9  ] };
    key <AE10>  { [   UA8E0,  UA8FC  ] };
    key <AE11>  { [   UA8FB,  U1CD2  ] };
    key <AE12>  { [   U1CF2,  U1CF3   ] };
    key <BKSL>  { [   U1CF8,  U1CF9   ] };

    //Q Row
    key <AD01>  { [   U1CD4,  U1CD5  ] };
    key <AD02>  { [   U1CD6,  U1CD7  ] };
    key <AD03>  { [   U1CD8,  U1CD9  ] };
    key <AD04>  { [   UA8EF  ] };
    key <AD05>  { [   U1CDA,  U1CDB  ] };
    key <AD06>  { [   UA8FE,   UA8FF  ] };
    key <AD07>  { [   UA8EB  ] };
    key <AD08>  { [   U1CDC,  U1CDD ] };
    key <AD09>  { [   U1CDE,  U1CDF  ] };
    key <AD10>  { [   UA8EE  ] };
    key <AD11>  { [   U1CE0  ] };
    key <AD12>  { [   U1CE1  ] };

    //A Row
    key <AC01>  { [   UA8EA  ] };
    key <AC02>  { [   UA8F1  ] };
    key <AC03>  { [   U1CE2  ] };
    key <AC04>  { [   U1CE3,  U1CE4  ] };
    key <AC05>  { [   U1CE5,  U1CE6  ] };
    key <AC06>  { [   U1CE7,  U1CE8  ] };
    key <AC07>  { [   U1CE9,  U1CEA  ] };
    key <AC08>  { [   UA8EC  ] };
    key <AC09>  { [   U1CEB,  U1CEC  ] };
    key <AC10>  { [   U1CEE,  U1CEF  ] };
    key <AC11>  { [   U1CF0,  U1CF1  ] };
    
    //Z Row
    key <AB01>  { [   U1CED  ] };
    key <AB02>  { [   U1CF4  ] };
    key <AB03>  { [   U1CF5  ] };
    key <AB04>  { [   UA8F0  ] };
    key <AB05>  { [   U1CF6  ] }; 
    key <AB06>  { [   UA8ED  ] };
    key <AB07>  { [   U0950,  UA8FD  ] };
    key <AB08>  { [   U1CF7,  U093D  ] };
    key <AB09>  { [   U1CFA,  U2638  ] };
    key <AB10>  { [   U0FD5,  U2740  ] };

    include "rupeesign(4)"
    include "level3(ralt_switch)"
};
//           Modi is an ancient Indian script that is used to write texts in Marathi, Hindi and Sanskrit. It is most commonly used to write Marathi language in Maharashtra.
//           This keyboard layout is Based on Marathi KaGaPa phonetic layout. Just the characters which are not applicable in Modi, are ommited.
//
//           Created by : Abhishek Deshpande     <abhishekdeshpande128@gmail.com>
//           Date : 9th February, 2020
// 
partial alphanumeric_keys
xkb_symbols "modi-kagapa" {
     name[Group1] = "Modi (KaGaPa phonetic)";
     key.type[group1]="FOUR_LEVEL";

 // Roman digits
    key <TLDE>  { [   grave,   asciitilde,   U201C           ] };  // U201C: left double quotation mark
    key <AE01>  { [   1,            exclam,       U11651          ] };
    key <AE02>  { [   2,            at,           U11652,  U20A8  ] };  // U20A8: generic rupee sign (Rs)
    key <AE03>  { [   3,            numbersign,   U11653          ] };
    key <AE04>  { [   4,            dollar,       U11654,  U20B9  ] };  // U20B9: new Indian rupee sign
    key <AE05>  { [   5,            percent,      U11655          ] };
    key <AE06>  { [   6,            asciicircum,  U11656,  U200C  ] };  // ZWNJ
    key <AE07>  { [   7,            ampersand,    U11657,  U200D  ] };  // ZWJ
    key <AE08>  { [   8,            asterisk,     U11658          ] };  
    key <AE09>  { [   9,            parenleft,    U11659          ] };
    key <AE10>  { [   0,            parenright,   U11650,  U11643 ] };  // U11643: Modi abbreviation sign
    key <AE11>  { [   minus,        underscore                    ] };  
    key <AE12>  { [   equal,        plus                          ] };
    key <BKSL>  { [   U005C,        U007C,        U11641,  U11642 ] };  // backslash, pipe, Modi danda, Modi double danda

    //Q Row
    key <AD01>  { [   U11618,         U11619                      ] };  // Q: retroflex Modi letter Ta, Tha
    key <AD02>  { [   U1161A,         U1161B                      ] };  // W: retroflex Modi letter Da, Dha 
    key <AD03>  { [   U11639,         U1160A,    U1160B           ] };  // E: Modi vovel sign E, Modi letter E, letter ai
    key <AD04>  { [   U11628,         U11635,    U11606           ] };  // R: Modi ra, Modi vowel sign vocalic R, vocalic letter R 
    key <AD05>  { [   U1161D,         U1161E                      ] };  // T: dental Modi letter ta, tha
    key <AD06>  { [   U11627,         U1163A                      ] };  // Y: Modi letter ya, Modi vowel sign ai
    key <AD07>  { [   U11633,         U11634,    U11604,  U11605  ] };  // U: Modi vowel sign u, uu, Modi letter u, uu
    key <AD08>  { [   U11631,         U11632,    U11602,  U11603  ] };  // I: Modi vowel sign i, ii, Modi letter i, ii
    key <AD09>  { [   U1163B,         U1160C                      ] };  // O: Modi vowel sign o, Modi letter o
    key <AD10>  { [   U11622,         U11623                      ] };  // P: Modi letter pa, pha 
    key <AD11>  { [   bracketleft,   braceleft                    ] };
    key <AD12>  { [   bracketright,  braceright                   ] };

    //A Row
    key <AC01>  { [   U11630,       U11601,     U11600           ] };  // A: Modi vowel sign aa, Modi letter aa, Modi letter a
    key <AC02>  { [   U1162D,       U1162B                       ] };  // S: Modi letter sa, sha
    key <AC03>  { [   U1161F,       U11620                       ] };  // D: dental Modi letter da, dha
    key <AC04>  { [   U1163F,       U11636,     U11607           ] };  // F: Modi sign virama, Modi vowel sign vocalic RR, letter vocalic RR
    key <AC05>  { [   U11610,       U11611                       ] };  // G: Modi letter ga, gha
    key <AC06>  { [   U1162E,       U1163E                       ] };  // H: Modi letter ha, Modi visarga
    key <AC07>  { [   U11615,       U11616                       ] };  // J: Modi letter ja, jha
    key <AC08>  { [   U1160E,       U1160F                       ] };  // K: Modi letter ka, kha
    key <AC09>  { [   U11629,       U1162F,     U11637,  U11608  ] };  // L: Modi letter la, lla, Modi vowel sign vocalic L, letter vocalic L
    key <AC10>  { [   semicolon,    colon                        ] };
    key <AC11>  { [   apostrophe,   quotedbl                     ] }; 
                                                                       
    //Z Row
    key <AB01>  { [   U11617,    U11612                     ] };  // Z: Modi letter nya, nga
    key <AB02>  { [   U1162C,    U11609,   U11638           ] };  // X: Modi letter ssa, Modi letter vocalic ll, Modi vowel sign vocalic ll 
    key <AB03>  { [   U11613,    U11614                     ] };  // C: Modi letter ca, cha
    key <AB04>  { [   U1162A,    U1163C,   U1160D           ] };  // V: Modi letter va, Modi vowel sign au, Modi letter au
    key <AB05>  { [   U11624,    U11625                     ] };  // B: Modi letter ba, bha
    key <AB06>  { [   U11621,    U1161C                     ] };  // N: Modi letter na, nna
    key <AB07>  { [   U11626,    U1163D,   U093D,    U0950  ] };  // M: Modi ma, Modi anusvara, avagraha, Devanagari OM (Avagraha & OM commonly occur in Marathi texts, so they are mapped here for convenience.)
    key <AB08>  { [   comma,     U003C,    U11640,   U11644 ] };  // comma: comma, less than, Modi chandrabindu, Modi sign huva
    key <AB09>  { [   period,    U003E                      ] };  // period: period, greater than
    key <AB10>  { [   slash,     question                   ] };

    include "level3(ralt_switch)"
};

// Navees, a phonetic keyboard layout for Urdu
// https://saadatm.github.io/navees
partial alphanumeric_keys
xkb_symbols "urd-navees" {
    include "pk(urd-navees)"
    name[Group1]= "Urdu (Navees)";
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         &                  &                  &                  &                  &                  &                  &                  &                  &                  &                  >'                  ?'                  A'                  C'                  E'                  J'                  '                  '                  '                  '                  '                   '                  A(                  B(                  D(                  F(                  K(                  (                  (                   (      $            (      (            (      ,            (      0            (      4            (      8            (      <            (      @            (      D            (      H            (      L            (      P            (      T            (      X            )      \            )      `            )      d            )      h            )      l            )      p            )      t            )      x            )      |            )                  )                  )                  )                  )                  )                  *                  *                  *                  *                  *                  *                  *                  *                  *                  +                  +                  +                  +                  I+                  M+                  T+                  Y+                  u+                  +                  +                  +                  +                  +                  +                  ,                  ,                  ,       	            ,      	            ,      	            ,      	            ,      	            ,      	            ,      	            ,      	            ,       	            -      $	            s-      (	            y-      ,	            {-      0	            }-      4	            -      8	            -      <	            -      @	            -      D	            -      H	            -      L	            -      P	            -      T	            -      X	            -      \	            -      `	            /      d	            "/      h	            #/      l	            %/      p	            '/      t	            )/      x	            +/      |	            0/      	            z7      	            7      	            7      	            7      	            7      	            l;      	            u;      	            y;      	            ~;      	            -B      	            0B      	            7B      	            9B      	            ;B      	            =B      	            >B      	            BB      	            FB      	            7C      	            ;C      	            <C      	            >C      	            @C      	            BC      	            DC      	            IC      	            ]J      	            `J      	            gJ      	            lJ      	            mJ      	            qJ       
            xJ      
            5K      
            9K      
            :K      
            <K      
            >K      
            CK      
            K       
             L      $
            L      (
            L      ,
            L      0
            L      4
            L      8
            L      <
            L      @
            NM      D
            OM      H
            PM      L
            RM      P
            TM      T
            VM      X
            XM      \
            ]M      `
            N      d
            N      h
            N      l
            N      p
            N      t
            N      x
            N      |
            N      
            N      
                    
            !       
            8       
            =       
                   
                   
            ~      
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
            	      
                  
                  
            `      
                  
                  
                  
                  
                  
                  
                  
                                                                                                                                           9                  X                   z      $                  (            '      ,            c      0            d      4            e      8            g      <            i      @            k      D            m      H            r      L            s      P                  T                  X                  \                  `                  d                  h            9      l                  p                  t                  x                  |            p                                                                                                                               &                  8                  K                  P                  ~                                    	                  	                  	                  	                  	                  
                  
                  
                  
                  
                                                      #                  $                  =                  a                  g                  h                  {                                                                                                                                                 
                  
                   
      $                  (                  ,            $      0            ,      4            4      8            H      <                  @                  D                  H            K      L                  P            9      T            f      X                  \                  `                  d            @      h                  l                  p                  t                  x            h      |            v                                                                                                                                                                  :                                                                                                                                                9                  \                  f                  u                  v                                                                                                                              R                  V                  ^                  b                  s       
                  
                  
                  
                  
                  
                  
                  
                   
                  $
                  (
            2      ,
            @      0
            H      4
            J      8
            L      <
            N      @
            P      D
            U      H
            v      L
            x      P
                  T
                  X
                  \
                  `
            #       d
            7       h
            \       l
            q       p
                   t
                   x
                   |
                    
            @       
                    
                   
            G       
            L       
            m       
            r                                     [                                                                                   ;                    L                 ^                       {2      $             2      (                   0             E      4             G      8                   @             6F      D             G      H                   P             F      T             BI      X                   `             G      d             I      h                   p             H      t             I      x                                H                   I                                      H                   I                                                                    0             0       8             0       @             @       H             @                  r                                             G                j          8                   P         r           .symtab .strtab .shstrtab .note.gnu.build-id .note.Linux .rela.text .rela.text.unlikely .rela.init.text .rela.exit.text .rela__ksymtab_gpl __kcrctab_gpl __ksymtab_strings .rela__mcount_loc .rodata.str1.8 .rodata.str1.1 .rela.smp_locks .rodata .modinfo .rela__param .rela.retpoline_sites .rela.return_sites .orc_unwind .rela.orc_unwind_ip __versions .rela__bug_table .rela__jump_table .rela.data .rela.exit.data .rela.init.data .rela.static_call_sites .rela.gnu.linkonce.this_module .bss .comment .note.GNU-stack .BTF .gnu_debuglink                                                                                         @       $                              .                     d       <                              ?                            N                             :      @               8     I      4                    J                     |O                                    E      @                    HK      4                    ^                     9p      @                              Y      @                S            4                    n                     yp      r                              i      @               S     x       4   	                 ~                     p      4                             y      @               8T     8
      4                                          s                                          2               s      N                                                 *x                                         @               pa     @      4                          2               y                                        2                     o                                                  (      `                                    @               f     @      4                                               P                                                         x                                                 h      (                                    @               h     `       4         