diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f86292f3438c78d1922477fa08b1bb74ee2668ca
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,16 @@
+test:
+    image: python:3.8-slim
+    script:
+        - python3 -m ebpfcat.ebpf_test -v Tests && python3 -m ebpfcat.ethercat_test -v
+
+docs:
+    image: sphinxdoc/sphinx
+    script:
+        - apt-get update
+        - apt-get install -y openssh-client
+        - pip3 install . --user
+        - sphinx-build -b html -d _build/doctrees . _build/html
+        - eval $(ssh-agent)
+        - echo "$SSHKEY" | ssh-add -
+        - ssh -o UserKnownHostsFile=known_hosts wp86team@exflqr30526 "./doc-prepare ec_$CI_COMMIT_REF_NAME"
+        - scp -o UserKnownHostsFile=known_hosts -r _build/html wp86team@exflqr30526:html/ec_$CI_COMMIT_REF_NAME
diff --git a/ebpfcat/devices.py b/ebpfcat/devices.py
index c61fcb2b0d78ae4931dfcf62f37317a71ae01c39..faec3e011c1aeea6e69a6f9294fcd1b96ed4af38 100644
--- a/ebpfcat/devices.py
+++ b/ebpfcat/devices.py
@@ -40,11 +40,16 @@ class AnalogInput(Device):
         self.data = data
 
     def program(self):
-        self.value = self.data
+        # it does not make much sense to copy data faster than
+        # we can process
+        return
 
     def update(self):
         self.value = self.data
 
+    def fast_update(self):
+        self.value = self.data
+
 
 class AnalogOutput(Device):
     """Generic analog output device
diff --git a/ebpfcat/ebpf.py b/ebpfcat/ebpf.py
index 6fd6e5959064ccf639f23a3ac81c18e2e4df1fe3..a615bcfe783908e2a55beef1f4cca4bb99e0311e 100644
--- a/ebpfcat/ebpf.py
+++ b/ebpfcat/ebpf.py
@@ -902,6 +902,21 @@ class ktime(Expression):
             yield dst, True, False
 
 
+class prandom(Expression):
+    """a function that returns the current ktime in ns"""
+    def __init__(self, ebpf):
+        self.ebpf = ebpf
+
+    @contextmanager
+    def calculate(self, dst, long, signed, force=False):
+        with self.ebpf.get_free_register(dst) as dst:
+            with self.ebpf.save_registers([i for i in range(6) if i != dst]):
+                self.ebpf.call(FuncId.get_prandom_u32)
+                if dst != 0:
+                    self.ebpf.r[dst] = self.ebpf.r0
+            yield dst, True, False
+
+
 class RegisterDesc:
     def __init__(self, no, array):
         self.no = no
diff --git a/ebpfcat/ebpf_test.py b/ebpfcat/ebpf_test.py
index 6cea964a6aaf658a350f50a49024724411db091b..c6ca17d2a7603cd2d19e44feb1224249aae72728 100644
--- a/ebpfcat/ebpf_test.py
+++ b/ebpfcat/ebpf_test.py
@@ -704,11 +704,11 @@ class KernelTests(TestCase):
         class Global(EBPF):
             map = ArrayMap()
             ar = map.globalVar()
-            aw = map.globalVar(write=True)
+            aw = map.globalVar()
 
         class Sub(SubProgram):
             br = Global.map.globalVar()
-            bw = Global.map.globalVar(write=True)
+            bw = Global.map.globalVar()
 
             def program(self):
                 self.br -= -33
@@ -726,32 +726,26 @@ class KernelTests(TestCase):
 
         fd, _ = e.load(log_level=1)
         prog_test_run(fd, 1000, 1000, 100, 100, 1)
-        e.map.readwrite()
         self.assertEqual(e.ar, 7)
         self.assertEqual(e.aw, 11)
         self.assertEqual(s1.br, 33)
         self.assertEqual(s1.bw, 36)
-        self.assertEqual(s2.br, 33)
-        self.assertEqual(s2.bw, 36)
-        e.aw = e.ar * 2
         s1.br = 3
         s2.br *= 5
         e.ar = 1111
         self.assertEqual(e.ar, 1111)
-        self.assertEqual(e.aw, 14)
+        self.assertEqual(e.aw, 11)
         self.assertEqual(s1.br, 3)
         self.assertEqual(s1.bw, 36)
         self.assertEqual(s2.br, 165)
         self.assertEqual(s2.bw, 36)
-        e.map.readwrite()
         prog_test_run(fd, 1000, 1000, 0, 0, 1)
-        e.map.readwrite()
-        self.assertEqual(e.ar, 21)
-        self.assertEqual(e.aw, 25)
-        self.assertEqual(s1.br, 66)
-        self.assertEqual(s1.bw, 69)
-        self.assertEqual(s2.br, 66)
-        self.assertEqual(s2.bw, 69)
+        self.assertEqual(e.ar, 18)
+        self.assertEqual(e.aw, 22)
+        self.assertEqual(s1.br, 36)
+        self.assertEqual(s1.bw, 39)
+        self.assertEqual(s2.br, 198)
+        self.assertEqual(s2.bw, 201)
 
     def test_minimal(self):
         class Local(EBPF):
@@ -760,12 +754,11 @@ class KernelTests(TestCase):
         e = Local(ProgType.XDP, "GPL")
         e.a = 7
         e.a += 3
-        e.mI[e.r1] += e.r1
+        e.mI[e.r10 - 4] += e.r1
         e.a -= 3
         e.exit()
         print(e.opcodes)
         print(e.load(log_level=1)[1])
-        self.fail()
 
 
 if __name__ == "__main__":
diff --git a/ebpfcat/ebpfcat.py b/ebpfcat/ebpfcat.py
index c3b927474d67ad34fe674b87902270aa9ac2e87c..a1590be57a35d3817690c7474b46b505df101bbe 100644
--- a/ebpfcat/ebpfcat.py
+++ b/ebpfcat/ebpfcat.py
@@ -16,12 +16,12 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 """The high-level API for EtherCAT loops"""
-from asyncio import ensure_future, gather, sleep
+from asyncio import ensure_future, gather, wait_for, TimeoutError
 from struct import pack, unpack, calcsize, pack_into, unpack_from
 from time import time
 from .arraymap import ArrayMap, ArrayGlobalVarDesc
 from .ethercat import ECCmd, EtherCat, Packet, Terminal
-from .ebpf import FuncId, MemoryDesc, SubProgram, ktime
+from .ebpf import FuncId, MemoryDesc, SubProgram, prandom
 from .xdp import XDP, XDPExitCode
 from .bpf import (
     ProgType, MapType, create_map, update_elem, prog_test_run, lookup_elem)
@@ -201,13 +201,13 @@ class DeviceVar(ArrayGlobalVarDesc):
     def __get__(self, instance, owner):
         if instance is None:
             return self
-        elif instance.sync_group.current_data is None:
+        elif isinstance(instance.sync_group, FastSyncGroup):
             return super().__get__(instance, owner)
         else:
             return instance.__dict__.get(self.name, 0)
 
     def __set__(self, instance, value):
-        if instance.sync_group.current_data is None:
+        if isinstance(instance.sync_group, FastSyncGroup):
             super().__set__(instance, value)
         else:
             instance.__dict__[self.name] = value
@@ -226,13 +226,16 @@ class Device(SubProgram):
                 ret.add(pv.terminal)
         return ret
 
+    def fast_update(self):
+        pass
+
 
 class EBPFTerminal(Terminal):
     compatibility = None
     position_offset = {2: 0, 3: 0}
 
-    async def initialize(self, relative, absolute):
-        await super().initialize(relative, absolute)
+    async def apply_eeprom(self):
+        await super().apply_eeprom()
         if (self.compatibility is not None and
                 (self.vendorId, self.productCode) not in self.compatibility):
             raise RuntimeError(
@@ -272,37 +275,42 @@ class EtherXDP(XDP):
     license = "GPL"
 
     variables = ArrayMap()
+    dropcounter = variables.globalVar("I")
     counters = variables.globalVar("64I")
 
     rate = 0
 
     def program(self):
-        with self.tmp:
-            self.ebpf.tmp = ktime(self.ebpf)
-            self.ebpf.tmp = self.ebpf.tmp * 0xcf019d85 + 1
-            with self.ebpf.tmp & 0xffff < self.rate:
-                self.ebpf.exit(XDPExitCode.DROP)
-        with self.packetSize > 24 as p, p.pH[12] == 0xA488, p.pB[16] == 0:
-            self.r3 = p.pI[18]
+        ETHERTYPE = 12
+        CMD0 = 16
+        IDX0 = 17
+        ADDR0 = 18
+
+        with prandom(self.ebpf) & 0xffff < self.rate:
+            self.dropcounter += 1
+            self.ebpf.exit(XDPExitCode.DROP)
+        with self.packetSize > 24 as p, p.pH[ETHERTYPE] == 0xA488, \
+                p.pB[CMD0] == 0:
+            self.r3 = p.pI[ADDR0]  # use r3 for tail_call
             with self.counters.get_address(None, False, False) as (dst, _), \
                     self.r3 < FastEtherCat.MAX_PROGS:
-                self.mH[self.r[dst] + 4 * self.r3] += 1
-                p.pB[17] += 2
-                with p.pB[17] & 1 as is_regular:
-                    self.mB[self.r[dst] + 4 * self.r3 + 3] += 1
-                    self.mB[self.r[dst] + 4 * self.r3 + 2] = 0
-                with is_regular.Else():
-                    self.mB[self.r[dst] + 4 * self.r3 + 2] += 1
-                    self.mB[self.r[dst] + 4 * self.r3 + 3] = 0
-                    with self.mB[self.r[dst] + 4 * self.r3 + 2] > 3 as exceed:
-                        p.pB[17] += 1  # turn into regular package
-                    with exceed.Else():
+                self.r[dst] += 4 * self.r3
+                self.r4 = self.mB[self.r[dst]]
+                # we lost a packet
+                with p.pB[IDX0] == self.r4 as cond:
+                    self.mI[self.r[dst]] += 1 + (self.r4 & 1)
+                # normal case: two packets on the wire
+                with cond.Else(), ((p.pB[IDX0] + 1 & 0xff) == self.r4) \
+                                  | (p.pB[IDX0] == 0) as c2:
+                    self.mI[self.r[dst]] += 1
+                    with self.r4 & 1:  # last one was active
+                        p.pB[IDX0] = self.mB[self.r[dst]]
                         self.exit(XDPExitCode.TX)
-            self.r2 = self.get_fd(self.programs)
-            for i, o in enumerate(self.opcodes):
-                print(i, o)
-            self.call(FuncId.tail_call)
-
+                with c2.Else():
+                    self.exit(XDPExitCode.PASS)
+                p.pB[IDX0] = self.mB[self.r[dst]]
+                self.r2 = self.get_fd(self.programs)
+                self.call(FuncId.tail_call)
         self.exit(XDPExitCode.PASS)
 
 
@@ -332,31 +340,18 @@ class FastEtherCat(SimpleEtherCat):
         fd, _ = sg.load(log_level=1)
         update_elem(self.programs, pack("<I", index), pack("<I", fd), 0)
         self.sync_groups[index] = sg
-        sg.assembled = packet.assemble(index)
         return index
 
-    async def watchdog(self):
-        lastcounts = [0] * 64
-        while True:
-            t0 = time()
-            counts = self.ebpf.counters
-            for i, sg in self.sync_groups.items():
-                if ((counts[i] ^ lastcounts[i]) & 0xffff == 0
-                        or (counts[i] >> 24) > 3):
-                    self.send_packet(sg.assembled)
-                    print("sent", i)
-                lastcounts[i] = counts[i]
-            await sleep(0.001)
-
     async def connect(self):
         await super().connect()
         self.ebpf = EtherXDP()
         self.ebpf.programs = self.programs
         self.fd = await self.ebpf.attach(self.addr[0])
-        ensure_future(self.watchdog())
 
 
 class SyncGroupBase:
+    missed_counter = 0
+
     def __init__(self, ec, devices, **kwargs):
         super().__init__(**kwargs)
         self.ec = ec
@@ -370,23 +365,30 @@ class SyncGroupBase:
         self.terminals = {t: None for t in
                           sorted(terminals, key=lambda t: t.position)}
 
+    async def run(self):
+        data = self.asm_packet
+        while True:
+            self.ec.send_packet(data)
+            try:
+                data = await wait_for(self.ec.receive_index(self.packet_index),
+                                      timeout=0.01)
+            except TimeoutError:
+                self.missed_counter += 1
+                print("didn't receive in time", self.missed_counter)
+                continue
+            data = self.update_devices(data)
+
 
 class SyncGroup(SyncGroupBase):
     """A group of devices communicating at the same time"""
 
     packet_index = 1000
 
-    current_data = False  # None is used to indicate FastSyncGroup
-
-    async def run(self):
-        self.current_data = self.asm_packet
-        while True:
-            self.ec.send_packet(self.current_data)
-            data = await self.ec.receive_index(self.packet_index)
-            self.current_data = bytearray(data)
-            for dev in self.devices:
-                dev.update()
-            await sleep(0)
+    def update_devices(self, data):
+        self.current_data = bytearray(data)
+        for dev in self.devices:
+            dev.update()
+        return self.current_data
 
     def start(self):
         self.allocate()
@@ -424,9 +426,22 @@ class FastSyncGroup(SyncGroupBase, XDP):
                 print("JMP")
         self.exit(XDPExitCode.TX)
 
+    async def run(self):
+        self.ec.send_packet(self.asm_packet)
+        self.ec.send_packet(self.asm_packet)
+        await super().run()
+
+    def update_devices(self, data):
+        self.current_data = data
+        for dev in self.devices:
+            dev.fast_update()
+        return self.asm_packet
+
     def start(self):
         self.allocate()
-        self.ec.register_sync_group(self, self.packet)
+        self.packet_index = self.ec.register_sync_group(self, self.packet)
+        self.asm_packet = self.packet.assemble(self.packet_index)
+        ensure_future(self.run())
 
     def allocate(self):
         self.packet = Packet()
diff --git a/ebpfcat/ethercat.py b/ebpfcat/ethercat.py
index 6a2353b64b88e174077fa99a0b34dca31d3c02dc..d626644fc3f7d8abeba4cc8a504fb47dfbe88f36 100644
--- a/ebpfcat/ethercat.py
+++ b/ebpfcat/ethercat.py
@@ -28,10 +28,15 @@ this modules contains the code to actually talk to EtherCAT terminals.
 """
 from asyncio import ensure_future, Event, Future, gather, get_event_loop, Protocol, Queue, Lock
 from enum import Enum
+from itertools import count
 from random import randint
 from socket import socket, AF_PACKET, SOCK_DGRAM
 from struct import pack, unpack, unpack_from, calcsize
 
+class EtherCatError(Exception):
+    pass
+
+
 class ECCmd(Enum):
    NOP = 0  # No Operation
    APRD = 1  # Auto Increment Read
@@ -281,7 +286,12 @@ class EtherCat(Protocol):
             if packet.full() or self.send_queue.empty():
                 data = await self.roundtrip_packet(packet)
                 for start, stop, future in dgrams:
-                    future.set_result(data[start:stop])
+                    wkc, = unpack("<H", data[stop:stop+2])
+                    if wkc == 0:
+                        future.set_exception(
+                            EtherCatError("datagram was not processed"))
+                    else:
+                        future.set_result(data[start:stop])
                 dgrams = []
                 packet = Packet()
 
@@ -355,6 +365,15 @@ class EtherCat(Protocol):
         no, = unpack("<h", ret[16:18])  # number of terminals
         return no
 
+    async def find_free_address(self):
+        """Find an absolute address currently not in use"""
+        no = await self.count()
+        for i in count(no):
+            try:
+                await self.roundtrip(ECCmd.FPRD, i, 0x10, "H", 0)
+            except EtherCatError:
+                return i  # this address is not in use
+
     def connection_made(self, transport):
         """start the send loop once the connection is made"""
         transport.get_extra_info("socket").bind(self.addr)
@@ -387,8 +406,14 @@ class Terminal:
         await self.set_state(0x11)
         await self.set_state(1)
 
+        self.mbx_cnt = 1
+        self.mbx_lock = Lock()
+
+        await self.apply_eeprom()
+
+    async def apply_eeprom(self):
         async def read_eeprom(no, fmt):
-            return unpack(fmt, await self.eeprom_read_one(no))
+            return unpack(fmt, await self._eeprom_read_one(no))
 
         self.vendorId, self.productCode = await read_eeprom(8, "<II")
         self.revisionNo, self.serialNo = await read_eeprom(0xc, "<II")
@@ -397,9 +422,6 @@ class Terminal:
         # self.mbx_in_off, self.mbx_in_sz, self.mbx_out_off, self.mbx_out_sz = \
         #     await read_eeprom(0x18, "<HHHH")
 
-        self.mbx_cnt = 1
-        self.mbx_lock = Lock()
-
         self.eeprom = await self.read_eeprom()
         if 41 not in self.eeprom:
             # no sync managers defined in eeprom
@@ -456,7 +478,6 @@ class Terminal:
         async def parse(func):
             bitpos = 0
             async for idx, subidx, sm, bits in func:
-                #print("k", idx, subidx, sm, bits)
                 if idx == 0:
                     pass
                 elif bits < 8:
@@ -534,7 +555,7 @@ class Terminal:
                 s, error = await self.ec.roundtrip(ECCmd.FPRD, self.position,
                                                    0x0130, "H2xH")
                 if error != 0:
-                    raise RuntimeError(f"AL register {error}")
+                    raise EtherCatError(f"AL register {error}")
 
     async def get_error(self):
         """read the error register"""
@@ -555,7 +576,7 @@ class Terminal:
         return (await self.ec.roundtrip(ECCmd.FPWR, self.position,
                                         start, *args, **kwargs))
 
-    async def eeprom_read_one(self, start):
+    async def _eeprom_read_one(self, start):
         """read 8 bytes from the eeprom at `start`"""
         while (await self.read(0x502, "H"))[0] & 0x8000:
             pass
@@ -565,13 +586,26 @@ class Terminal:
             busy, data = await self.read(0x502, "H4x8s")
         return data
 
+    async def eeprom_write_one(self, start, data):
+        """read 2 bytes from the eeprom at `start`"""
+        while (await self.read(0x502, "H"))[0] & 0x8000:
+            pass
+        busy = 0x1000
+        while busy & 0xff00:
+            await self.write(0x502, "HIH", 0x201, start, data)
+            busy = 0x8000
+            while busy & 0x8000:
+                busy, = await self.read(0x502, "H")
+                print(f"busy {busy:X}")
+            await self.write(0x502, "H", 0)
+
     async def read_eeprom(self):
         """read the entire eeprom"""
         async def get_data(size):
             nonlocal data, pos
 
             while len(data) < size:
-                data += await self.eeprom_read_one(pos)
+                data += await self._eeprom_read_one(pos)
                 pos += 4
             ret, data = data[:size], data[size:]
             return ret
@@ -593,7 +627,7 @@ class Terminal:
         """send data to the mailbox"""
         status, = await self.read(0x805, "B")  # always using mailbox 0, OK?
         if status & 8:
-            raise RuntimeError("mailbox full, read first")
+            raise EtherCatError("mailbox full, read first")
         assert self.mbx_out_off is not None, "not send mailbox defined"
         await self.write(self.mbx_out_off, "HHBB",
                                 datasize(args, data),
@@ -626,10 +660,10 @@ class Terminal:
             while fragments:
                 type, data = await self.mbx_recv()
                 if type is not MBXType.COE:
-                    raise RuntimeError(f"expected CoE package, got {type}")
+                    raise EtherCatError(f"expected CoE package, got {type}")
                 coecmd, rodcmd, fragments = unpack("<HBxH", data[:6])
                 if rodcmd & 0x7f != odcmd.value + 1:
-                    raise RuntimeError(f"expected {odcmd.value}, got {odcmd}")
+                    raise EtherCatError(f"expected {odcmd.value}, got {odcmd}")
                 ret.append(data[offset:])
                 offset = 6
             return b"".join(ret)
@@ -643,16 +677,16 @@ class Terminal:
                     index, 1 if subindex is None else subindex)
             type, data = await self.mbx_recv()
             if type is not MBXType.COE:
-                raise RuntimeError(f"expected CoE, got {type}")
+                raise EtherCatError(f"expected CoE, got {type}")
             coecmd, sdocmd, idx, subidx, size = unpack("<HBHBI", data[:10])
             if coecmd >> 12 != CoECmd.SDORES.value:
                 if subindex is None and coecmd >> 12 == CoECmd.SDOREQ.value:
                     return b""  # if there is no data, the terminal fails
-                raise RuntimeError(
+                raise EtherCatError(
                     f"expected CoE SDORES (3), got {coecmd>>12:x} "
                     f"for {index:X}:{9 if subindex is None else subindex:02X}")
             if idx != index:
-                raise RuntimeError(f"requested index {index}, got {idx}")
+                raise EtherCatError(f"requested index {index}, got {idx}")
             if sdocmd & 2:
                 return data[6 : 10 - ((sdocmd>>2) & 3)]
             ret = [data[10:]]
@@ -666,13 +700,13 @@ class Terminal:
                         1 if subindex is None else subindex)
                 type, data = await self.mbx_recv()
                 if type is not MBXType.COE:
-                    raise RuntimeError(f"expected CoE, got {type}")
+                    raise EtherCatError(f"expected CoE, got {type}")
                 coecmd, sdocmd = unpack("<HB", data[:3])
                 if coecmd >> 12 != CoECmd.SDORES.value:
-                    raise RuntimeError(
+                    raise EtherCatError(
                         f"expected CoE cmd SDORES, got {coecmd}")
                 if sdocmd & 0xe0 != 0:
-                    raise RuntimeError(f"requested index {index}, got {idx}")
+                    raise EtherCatError(f"requested index {index}, got {idx}")
                 if sdocmd & 1 and len(data) == 7:
                     data = data[:3 + (sdocmd >> 1) & 7]
                 ret += data[3:]
@@ -681,7 +715,7 @@ class Terminal:
                     break
                 toggle ^= 0x10
             if retsize != size:
-                raise RuntimeError(f"expected {size} bytes, got {retsize}")
+                raise EtherCatError(f"expected {size} bytes, got {retsize}")
             return b"".join(ret)
 
     async def sdo_write(self, data, index, subindex=None):
@@ -693,12 +727,12 @@ class Terminal:
                         index, subindex, data)
                 type, data = await self.mbx_recv()
             if type is not MBXType.COE:
-                raise RuntimeError(f"expected CoE, got {type}, {data} {odata} {index:x} {subindex}")
+                raise EtherCatError(f"expected CoE, got {type}, {data} {odata} {index:x} {subindex}")
             coecmd, sdocmd, idx, subidx = unpack("<HBHB", data[:6])
             if idx != index or subindex != subidx:
-                raise RuntimeError(f"requested index {index}, got {idx}")
+                raise EtherCatError(f"requested index {index}, got {idx}")
             if coecmd >> 12 != CoECmd.SDORES.value:
-                raise RuntimeError(f"expected CoE SDORES, got {coecmd>>12:x}")
+                raise EtherCatError(f"expected CoE SDORES, got {coecmd>>12:x}")
         else:
             async with self.mbx_lock:
                 stop = min(len(data), self.mbx_out_sz - 16)
@@ -710,12 +744,12 @@ class Terminal:
                         data=data[:stop])
                 type, data = await self.mbx_recv()
                 if type is not MBXType.COE:
-                    raise RuntimeError(f"expected CoE, got {type}")
+                    raise EtherCatError(f"expected CoE, got {type}")
                 coecmd, sdocmd, idx, subidx = unpack("<HBHB", data[:6])
                 if coecmd >> 12 != CoECmd.SDORES.value:
-                    raise RuntimeError(f"expected CoE SDORES, got {coecmd>>12:x}")
+                    raise EtherCatError(f"expected CoE SDORES, got {coecmd>>12:x}")
                 if idx != index or subindex != subidx:
-                    raise RuntimeError(f"requested index {index}, got {idx}")
+                    raise EtherCatError(f"requested index {index}, got {idx}")
                 toggle = 0
                 while stop < len(data):
                     start = stop
@@ -733,12 +767,12 @@ class Terminal:
                                 1 if subindex is None else subindex, data=d)
                         type, data = await self.mbx_recv()
                         if type is not MBXType.COE:
-                            raise RuntimeError(f"expected CoE, got {type}")
+                            raise EtherCatError(f"expected CoE, got {type}")
                         coecmd, sdocmd, idx, subidx = unpack("<HBHB", data[:6])
                         if coecmd >> 12 != CoECmd.SDORES.value:
-                            raise RuntimeError(f"expected CoE SDORES")
+                            raise EtherCatError(f"expected CoE SDORES")
                         if idx != index or subindex != subidx:
-                            raise RuntimeError(f"requested index {index}")
+                            raise EtherCatError(f"requested index {index}")
                     toggle ^= 0x10
 
     async def read_ODlist(self):
diff --git a/ebpfcat/ethercat_test.py b/ebpfcat/ethercat_test.py
index f95f0c701ae51b3d64986a7ea01fc95bac6f1dfa..5c921c4fa139bc5ff2b4f4f8b2fb13d2e595168a 100644
--- a/ebpfcat/ethercat_test.py
+++ b/ebpfcat/ethercat_test.py
@@ -15,22 +15,33 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
+from ast import literal_eval
 from asyncio import CancelledError, Future, get_event_loop, sleep, gather
-from unittest import TestCase, main
+from functools import wraps
+from itertools import count
+from struct import pack
+from unittest import TestCase, main, skip
 
 from .devices import AnalogInput, AnalogOutput, Motor
 from .terminals import EL4104, EL3164, EK1814
-from .ethercat import ECCmd
+from .ethercat import ECCmd, Terminal
 from .ebpfcat import (
     FastSyncGroup, SyncGroup, TerminalVar, Device, EBPFTerminal, PacketDesc)
 from .ebpf import Instruction, Opcode as O
 
 
+H = bytes.fromhex
+
+
 class MockEtherCat:
     def __init__(self, test):
         self.test = test
+        with open(__file__.rsplit("/", 1)[0] + "/testdata.py", "r") as fin:
+            self.test_data = literal_eval(fin.read())
 
-    async def roundtrip(self, *args):
+    async def roundtrip(self, *args, data=None):
+        if data is not None:
+            args += data,
         self.test.assertEqual(args, self.expected.pop(0))
         return self.results.pop(0)
 
@@ -50,68 +61,121 @@ class MockEtherCat:
         return 0x33
 
 
+class MockTerminal(Terminal):
+    async def initialize(self, relative, absolute):
+        self.position = absolute
+        self.operational = False
+        data = self.ec.test_data[-relative]
+        self.test_eeprom = data["eeprom"]
+        self.test_sdo = data["sdo"]
+        await self.apply_eeprom()
+
+    async def to_operational(self):
+        self.operational = True
+
+    async def sdo_read(self, index, subindex=None):
+        assert self.operational
+        if subindex is None:
+            r = b''
+            for i in count(1):
+                a = self.test_sdo.get((index, i))
+                if a is None:
+                    break
+                r += a
+            return r
+        elif subindex == 0 and (index, 0) not in self.test_sdo:
+            for i in count(1):
+                a = self.test_sdo.get((index, i))
+                if a is None:
+                    return pack("B", i - 1)
+        return self.test_sdo[index, subindex]
+
+    async def _eeprom_read_one(self, pos):
+        if pos * 2 > len(self.test_eeprom):
+            return b"\xff" * 8
+        return self.test_eeprom[pos*2 : pos*2 + 8]
+
+
+def mockAsync(f):
+    @wraps(f)
+    def wrapper(self):
+        get_event_loop().run_until_complete(f(self))
+    return wrapper
+
+
+def mockTerminal(cls):
+    class Mocked(MockTerminal, cls):
+        pass
+    return Mocked()
+
+
 class Tests(TestCase):
-    def test_input(self):
-        ti = EL3164()
-        ti.pdo_in_sz = 4
-        ti.pdo_in_off = 0xABCD
-        ti.position = 0x77
-        ti.pdo_out_sz = 3
-        ti.pdo_out_off = 0x4321
+    @mockAsync
+    async def test_input(self):
+        ti = mockTerminal(EL3164)
         ec = MockEtherCat(self)
         ti.ec = ec
+        ec.expected = [
+            (ECCmd.FPWR, 4, 0x800, 0x80),
+            (ECCmd.FPWR, 4, 0x800, H('00108000260001018010800022000102'
+                                     '00110000040000038011100020000104')),
+        ]
+        ec.results = [None, None]
+        await ti.initialize(-1, 4)
         ai = AnalogInput(ti.channel1.value)
         SyncGroup.packet_index = 1000
         sg = SyncGroup(ec, [ai])
         self.task = sg.start()
         ec.expected = [
-            (ECCmd.FPRD, 0x77, 304, "H2xH"),  # get state
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000000000000000" # in datagram
-                          "050077002143030000000000000000"), # out datagram
+            H("2a10"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              # in datagram
+              "04000400801110000000000000000000000000000000000000000000"),
             1000, # == 0x3e8, see ID datagram
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000123456780000" # in datagram
-                          "050077002143030000000000000000"), # out datagram
+            H("2a10"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              # in datagram
+              "04000400801110000000123456780000000000000000000000000000"),
             1000,
             ]
         ec.results = [
-            (8, 0),  # return state 8, no error
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000123456780000" # in datagram
-                          "050077002143030000000000000000"), # out datagram
+            H("2a10"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              # in datagram
+              "04000400801110000000123456780000000000000000000000000000"),
+            H("2a10"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              # in datagram
+              "04000400801110000000123456780000000000000000000000000000"),
             ]
         self.future = Future()
         with self.assertRaises(CancelledError):
-            get_event_loop().run_until_complete(
-                    gather(self.future, self.task))
+            await gather(self.future, self.task)
         self.assertEqual(ai.value, 0x7856)
         self.task.cancel()
         with self.assertRaises(CancelledError):
-            get_event_loop().run_until_complete(self.task)
+            await self.task
 
-    def test_output(self):
-        ti = EL4104()
-        ti.pdo_in_sz = 4
-        ti.pdo_in_off = 0xABCD
-        ti.position = 0x77
-        ti.pdo_out_sz = 3
-        ti.pdo_out_off = 0x4321
+    @mockAsync
+    async def test_output(self):
+        ti = mockTerminal(EL4104)
         ec = MockEtherCat(self)
         ti.ec = ec
+        ec.expected = [
+            (ECCmd.FPWR, 7, 0x800, 0x80),
+            (ECCmd.FPWR, 7, 0x800, H('0010800026000101801080002200010'
+                                     '200110800240001038011000000000004')),
+        ]
+        ec.results = [None, None]
+        await ti.initialize(-2, 7)
         ao = AnalogOutput(ti.ch1_value)
         SyncGroup.packet_index = 1000
         sg = SyncGroup(ec, [ao])
         self.task = sg.start()
         ec.expected = [
-            (ECCmd.FPRD, 0x77, 304, "H2xH"),  # get state
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000000000000000" # in datagram
-                          "050077002143030000000000000000"), # out datagram
+            H("2210"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              "0500070000110800000000000000000000000000"), # out datagram
             1000, # == 0x3e8, see ID datagram
             ]
         ec.results = [
@@ -120,48 +184,30 @@ class Tests(TestCase):
         self.future = Future()
         ao.value = 0x9876
         with self.assertRaises(CancelledError):
-            get_event_loop().run_until_complete(
-                    gather(self.future, self.task))
+            await gather(self.future, self.task)
         ec.expected = [
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000123456780000" # in datagram
-                          "050077002143030000007698000000"), # out datagram
+            H("2210"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              "0500070000110800000076980000000000000000"), # out datagram
             1000,
             ]
         ec.results = [
-            bytes.fromhex("2d10"  # EtherCAT Header, length & type
-                          "0000e8030000008000000000"  # ID datagram
-                          "04007700cdab04800000123456780000" # in datagram
-                          "050077002143030000007698000000"), # out datagram
+            H("2210"  # EtherCAT Header, length & type
+              "0000e8030000008000000000"  # ID datagram
+              "0500070000110800000076980000000000000000"), # out datagram
             ]
         self.future = Future()
         with self.assertRaises(CancelledError):
-            get_event_loop().run_until_complete(
-                    gather(self.future, self.task))
+            await gather(self.future, self.task)
         self.task.cancel()
         with self.assertRaises(CancelledError):
-            get_event_loop().run_until_complete(self.task)
+            await self.task
 
+    @skip
     def test_ebpf(self):
-        ti = EL3164()
-        ti.pdo_in_sz = 4
-        ti.pdo_in_off = 0xABCD
-        ti.position = 0x77
-        ti.pdo_out_sz = None
-        ti.pdo_out_off = None
-        to = EL4104()
-        to.pdo_in_sz = None
-        to.pdo_in_off = None
-        to.position = 0x55
-        to.pdo_out_sz = 2
-        to.pdo_out_off = 0x5678
-        td = EK1814()
-        td.pdo_in_sz = 1
-        td.pdo_in_off = 0x7777
-        td.position = 0x44
-        td.pdo_out_sz = 1
-        td.pdo_out_off = 0x8888
+        ti = mockTerminal(EL3164)
+        to = mockTerminal(EL4104)
+        td = mockTerminal(EK1814)
 
         class D(Device):
             ai = TerminalVar()
diff --git a/ebpfcat/scripts.py b/ebpfcat/scripts.py
index 887bcbe0ad37beaec48cf618ac14f66f1286a771..b88ce1b5f46e71f67287e4951334a56b94a48b75 100644
--- a/ebpfcat/scripts.py
+++ b/ebpfcat/scripts.py
@@ -1,10 +1,12 @@
 from argparse import ArgumentParser
 import asyncio
 from functools import wraps
+from hashlib import sha1
+from pprint import PrettyPrinter
 from struct import unpack
 import sys
 
-from .ethercat import EtherCat, Terminal, ECCmd
+from .ethercat import EtherCat, Terminal, ECCmd, EtherCatError
 
 def entrypoint(func):
     @wraps(func)
@@ -42,17 +44,17 @@ async def info():
 
     if args.terminal is None:
         terminals = range(await ec.count())
+        terms = [Terminal() for t in terminals]
+        for t in terms:
+            t.ec = ec
+        await asyncio.gather(*(t.initialize(-i, i + 7)
+                               for i, t in zip(terminals, terms)))
     else:
-        # former terminal: don't listen!
-        # this does not work with all terminals, dunno why
-        await ec.roundtrip(ECCmd.FPRW, 7, 0x10, "H", 0)
-        terminals = [args.terminal]
-
-    terms = [Terminal() for t in terminals]
-    for t in terms:
-        t.ec = ec
-    await asyncio.gather(*(t.initialize(-i, i + 7)
-                           for i, t in zip(terminals, terms)))
+        free = await ec.find_free_address()
+        term = Terminal()
+        term.ec = ec
+        await term.initialize(-args.terminal, free)
+        terms = [term]
 
     for i, t in enumerate(terms):
         print(f"terminal no {i}")
@@ -72,15 +74,106 @@ async def info():
             for k, v in ret.items():
                 print(f"{k:X}:")
                 for kk, vv in v.entries.items():
-                     print(f"    {kk:X}: {vv}")
-                     if args.values:
-                         r = await vv.read()
-                         if isinstance(r, int):
-                             print(f"        {r:10} {r:8X}")
-                         else:
-                             print(f"        {r}")
+                    print(f"    {kk:X}: {vv}")
+                    if args.values:
+                        try:
+                            r = await vv.read()
+                        except EtherCatError as e:
+                            print(f"        Error {e.args[0]}")
+                        else:
+                            if isinstance(r, int):
+                                print(f"        {r:10} {r:8X}")
+                            else:
+                                print(f"        {r}")
         if args.pdo:
             await t.to_operational()
             await t.parse_pdos()
             for (idx, subidx), (sm, pos, fmt) in t.pdos.items():
                 print(f"{idx:4X}:{subidx:02X} {sm} {pos} {fmt}")
+
+
+def encode(name):
+    r = int.from_bytes(sha1(name.encode("ascii")).digest(), "little")
+    return r % 0xffffffff + 1
+
+@entrypoint
+async def eeprom():
+    parser = ArgumentParser(
+        prog = "ec-eeprom",
+        description = "Read and write the eeprom")
+
+    parser.add_argument("interface")
+    parser.add_argument("-t", "--terminal", type=int)
+    parser.add_argument("-r", "--read", action="store_true")
+    parser.add_argument("-w", "--write", type=int)
+    parser.add_argument("-n", "--name", type=str)
+    parser.add_argument("-c", "--check", type=str)
+    args = parser.parse_args()
+
+    ec = EtherCat(args.interface)
+    await ec.connect()
+
+    if args.terminal is None:
+        return
+        terminals = range(await ec.count())
+    else:
+        # former terminal: don't listen!
+        # this does not work with all terminals, dunno why
+        await ec.roundtrip(ECCmd.FPRW, 7, 0x10, "H", 0)
+        terminals = [args.terminal]
+
+    t = Terminal()
+    t.ec = ec
+    await t.initialize(-args.terminal, 7)
+
+    if args.read or args.check is not None:
+        r, = unpack("<4xI", await t.eeprom_read_one(0xc))
+        if args.check is not None:
+            c = encode(args.check)
+            print(f"{r:8X} {c:8X} {r == c}")
+        else:
+            print(f"{r:8X} {r}")
+
+    w = None
+    if args.write is not None:
+        w = args.write
+    elif args.name is not None:
+        w = encode(args.name)
+        print(f"{w:8X} {w}")
+    if w is not None:
+        await t.eeprom_write_one(0xe, w & 0xffff)
+        await t.eeprom_write_one(0xf, w >> 16)
+
+
+@entrypoint
+async def create_test():
+    ec = EtherCat(sys.argv[1])
+    await ec.connect()
+    no = await ec.count()
+
+    terminals = []
+
+    for i in range(no):
+        t = Terminal()
+        t.ec = ec
+        await t.initialize(-i, await ec.find_free_address())
+        sdo = {}
+        if t.has_mailbox():
+            await t.to_operational()
+            odlist = await t.read_ODlist()
+
+            for k, v in odlist.items():
+                for kk, vv in v.entries.items():
+                    try:
+                        ret = await t.sdo_read(v.index, vv.valueInfo)
+                    except EtherCatError:
+                        pass
+                    sdo[v.index, vv.valueInfo] = ret
+
+        ret = []
+        for i in range(0, 0x400, 4):
+            ret.append(await t._eeprom_read_one(i))
+        eeprom = b"".join(ret).rstrip(b"\xff")
+        terminals.append(dict(eeprom=eeprom, sdo=sdo))
+    pp = PrettyPrinter(indent=4)
+    pp.pprint(terminals)
diff --git a/ebpfcat/testdata.py b/ebpfcat/testdata.py
new file mode 100644
index 0000000000000000000000000000000000000000..e05faa6777ad67568e08994e4e072f7d8e6df5a4
--- /dev/null
+++ b/ebpfcat/testdata.py
@@ -0,0 +1,1871 @@
+[   {   'eeprom': b'\x04\r\x00\x00\n\x000\x00\x00\x00\x00\x00\x00\x00\x1b\x00'
+                  b'\x02\x00\x00\x00R,\x16\x07\x00\x00\x12\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00'
+                  b'\x8d\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x01\x00\n\x00h\x00'
+                  b'\x0e\x06EK1814\x08SystemBk\x0eSystem KopplerREK1814 Ethe'
+                  b'rCAT-EA-Koppler (1A E-Bus, 4 K. Dig. Ein, 3ms, 4 K. Dig.'
+                  b' Aus 24V, 0,5A)\tChannel 1\x05Input\tChannel 2\tChannel 3\t'
+                  b'Channel 4\tChannel 5\x06Output\tChannel 6\tChannel 7\tChann'
+                  b'el 8\x1e\x00\x10\x00\x02\x00\x01\x04\x02\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x18\xfc\x03\x001\x01\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'(\x00\x01\x00\x01\x02)\x00\x08\x00\x01\x0f\x01\x00D\x00'
+                  b'\t\x03\x00\x10\x01\x00\x00\x00\x01\x04+\x00\x01\x00\xf0\xff'
+                  b'2\x00 \x00\x00\x1a\x01\x01\x00\x05\x11\x00\x00`\x01\x06'
+                  b'\x01\x01\x00\x00\x01\x1a\x01\x01\x00\x07\x11\x00'
+                  b'\x10`\x01\x06\x01\x01\x00\x00\x02\x1a\x01\x01'
+                  b'\x00\x08\x11\x00 `\x01\x06\x01\x01\x00\x00\x03\x1a\x01\x01'
+                  b'\x00\t\x11\x000`\x01\x06\x01\x01\x00\x003\x00 \x00'
+                  b'\x08\x16\x01\x00\x00\n\x11\x00\x80p\x01\x0b\x01\x01\x00\x00'
+                  b'\t\x16\x01\x00\x00\x0c\x11\x00\x90p\x01\x0b\x01\x01\x00\x00'
+                  b'\n\x16\x01\x00\x00\r\x11\x00\xa0p\x01\x0b\x01\x01\x00\x00'
+                  b'\x0b\x16\x01\x00\x00\x0e\x11\x00\xb0p\x01\x0b'
+                  b'\x01\x01\x00\x00',
+        'sdo': {}},
+    {   'eeprom': b'\x05\x04\x03\xcc\xd0\x07\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00=\x00\x02\x00\x00\x00R0\\\x0c\x00\x00\x14\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x10\xf4\x00\xf4\x10\xf4\x00\x00\x10\x80\x00'
+                  b'\x80\x10\x80\x00\x0c\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x04\x00\x0f\x00\x13\x8a\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0f\x00\x01\x00\n\x00\xd4\x00\x19\x06EL3164\x05AnaIn Analo'
+                  b'ge Eingangsklemmen (EL3xxx)\x1dEL3164 4K. Ana. Eingang 0-10'
+                  b'V\x08Synchron\x02DC\x04DCIN\x15AI Standard Channel 1\x12Sta'
+                  b'tus__Underrange\x11Status__Overrange\x0fStatus__Limit '
+                  b'1\x0fStatus__Limit 2\rStatus__Error\x08Status__\x12Status_'
+                  b'_Sync error\x13Status__TxPDO State\x14Status__TxPDO Toggle'
+                  b'\x05Value\x14AI Compact Channel 1\x15AI Standard Channel '
+                  b'2\x14AI Compact Channel 2\x15AI Standard Channel 3\x14AI '
+                  b'Compact Channel 3\x15AI Standard Channel 4\x14AI Compact C'
+                  b'hannel 4\x1e\x00\x10\x00\x02\x00\x01\x04\x0c\x07\x01\x00'
+                  b'\x00\x00\x00\x04\x82\x00\x03\x003\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'(\x00\x01\x00\x02\x03)\x00\x10\x00\x00\x10\x80\x00&\x00'
+                  b'\x01\x01\x80\x10\x80\x00"\x00\x01\x02\x00\x11'
+                  b'\x00\x00\x04\x00\x00\x03\x80\x11\x10\x00 \x00\x01\x042\x00'
+                  b'\xe0\x00\x00\x1a\x0b\x03\x00\x08\x10\x00\x00`\x01\t\x01\x01'
+                  b'\x00\x00\x00`\x02\n\x01\x01\x00\x00\x00`\x03\x0b1\x02'
+                  b'\x00\x00\x00`\x05\x0c1\x02\x00\x00\x00`\x07\r\x01\x01'
+                  b'\x00\x00\x00\x00\x00\x0e\x00\x01\x00\x00\x00\x00'
+                  b'\x00\x0e\x00\x05\x00\x00\x00`\x0e\x0f\x01\x01\x00\x00\x00`'
+                  b'\x0f\x10\x01\x01\x00\x00\x00`\x10\x11\x01\x01\x00\x00\x00`'
+                  b'\x11\x12\x03\x10\x00\x00\x01\x1a\x01\xff\x00\x13'
+                  b'\x10\x00\x00`\x11\x12\x03\x10\x00\x00\x02\x1a'
+                  b'\x0b\x03\x00\x14\x10\x00\x10`\x01\t\x01\x01\x00\x00\x10`'
+                  b'\x02\n\x01\x01\x00\x00\x10`\x03\x0b1\x02\x00\x00\x10`'
+                  b'\x05\x0c1\x02\x00\x00\x10`\x07\r\x01\x01\x00\x00\x00\x00'
+                  b'\x00\x0e\x00\x01\x00\x00\x00\x00\x00\x0e\x00\x05'
+                  b'\x00\x00\x10`\x0e\x0f\x01\x01\x00\x00\x10`\x0f\x10\x01\x01'
+                  b'\x00\x00\x10`\x10\x11\x01\x01\x00\x00\x10`\x11\x12\x03\x10'
+                  b'\x00\x00\x03\x1a\x01\xff\x00\x15\x10\x00\x10`'
+                  b'\x11\x12\x03\x10\x00\x00\x04\x1a\x0b\x03\x00\x16\x10\x00 `'
+                  b'\x01\t\x01\x01\x00\x00 `\x02\n\x01\x01\x00\x00 `'
+                  b'\x03\x0b1\x02\x00\x00 `\x05\x0c1\x02\x00\x00 `'
+                  b'\x07\r\x01\x01\x00\x00\x00\x00\x00\x0e\x00\x01'
+                  b'\x00\x00\x00\x00\x00\x0e\x00\x05\x00\x00 `\x0e\x0f\x01\x01'
+                  b'\x00\x00 `\x0f\x10\x01\x01\x00\x00 `\x10\x11\x01\x01'
+                  b'\x00\x00 `\x11\x12\x03\x10\x00\x00\x05\x1a\x01\xff\x00\x17'
+                  b'\x10\x00 `\x11\x12\x03\x10\x00\x00\x06\x1a\x0b\x03\x00\x18'
+                  b'\x10\x000`\x01\t\x01\x01\x00\x000`\x02\n\x01\x01\x00\x000`'
+                  b'\x03\x0b1\x02\x00\x000`\x05\x0c1\x02\x00\x000`'
+                  b'\x07\r\x01\x01\x00\x00\x00\x00\x00\x0e\x00\x01'
+                  b'\x00\x00\x00\x00\x00\x0e\x00\x05\x00\x000`\x0e\x0f\x01\x01'
+                  b'\x00\x000`\x0f\x10\x01\x01\x00\x000`\x10\x11\x01\x01'
+                  b'\x00\x000`\x11\x12\x03\x10\x00\x00\x07\x1a\x01\xff\x00\x19'
+                  b'\x10\x000`\x11\x12\x03\x10\x00\x00<\x00$\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\xa8a\x00\x00\x00\x00'
+                  b'\x00\x07\x01\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00`y'
+                  b'\xfe\xff\xa8a\x00\x00\x00\x00\x00\x07\x01\x00'
+                  b'\x07\x00\x00\x00\x00\x00',
+        'sdo': {   (4096, 0): b'\x89\x13,\x01',
+                   (4104, 0): b'EL3164',
+                   (4105, 0): b'15',
+                   (4106, 0): b'04',
+                   (4113, 1): b'\x00\x00\x00\x00',
+                   (4120, 1): b'\x02\x00\x00\x00',
+                   (4120, 2): b'R0\\\x0c',
+                   (4120, 3): b'\x00\x00\x14\x00',
+                   (4120, 4): b'\x00\x00\x00\x00',
+                   (4336, 1): b'\x83\xb6\x00\x00',
+                   (6144, 6): b'\x01\x1a',
+                   (6145, 6): b'\x00\x1a',
+                   (6146, 6): b'\x03\x1a',
+                   (6147, 6): b'\x02\x1a',
+                   (6148, 6): b'\x05\x1a',
+                   (6149, 6): b'\x04\x1a',
+                   (6150, 6): b'\x07\x1a',
+                   (6151, 6): b'\x06\x1a',
+                   (6656, 1): b'\x01\x01\x00`',
+                   (6656, 2): b'\x01\x02\x00`',
+                   (6656, 3): b'\x02\x03\x00`',
+                   (6656, 4): b'\x02\x05\x00`',
+                   (6656, 5): b'\x01\x07\x00`',
+                   (6656, 6): b'\x01\x00\x00\x00',
+                   (6656, 7): b'\x05\x00\x00\x00',
+                   (6656, 8): b'\x01\x0e\x00`',
+                   (6656, 9): b'\x01\x0f\x00`',
+                   (6656, 10): b'\x01\x10\x00`',
+                   (6656, 11): b'\x10\x11\x00`',
+                   (6657, 1): b'\x10\x11\x00`',
+                   (6658, 1): b'\x01\x01\x10`',
+                   (6658, 2): b'\x01\x02\x10`',
+                   (6658, 3): b'\x02\x03\x10`',
+                   (6658, 4): b'\x02\x05\x10`',
+                   (6658, 5): b'\x01\x07\x10`',
+                   (6658, 6): b'\x01\x00\x00\x00',
+                   (6658, 7): b'\x05\x00\x00\x00',
+                   (6658, 8): b'\x01\x0e\x10`',
+                   (6658, 9): b'\x01\x0f\x10`',
+                   (6658, 10): b'\x01\x10\x10`',
+                   (6658, 11): b'\x10\x11\x10`',
+                   (6659, 1): b'\x10\x11\x10`',
+                   (6660, 1): b'\x01\x01 `',
+                   (6660, 2): b'\x01\x02 `',
+                   (6660, 3): b'\x02\x03 `',
+                   (6660, 4): b'\x02\x05 `',
+                   (6660, 5): b'\x01\x07 `',
+                   (6660, 6): b'\x01\x00\x00\x00',
+                   (6660, 7): b'\x05\x00\x00\x00',
+                   (6660, 8): b'\x01\x0e `',
+                   (6660, 9): b'\x01\x0f `',
+                   (6660, 10): b'\x01\x10 `',
+                   (6660, 11): b'\x10\x11 `',
+                   (6661, 1): b'\x10\x11 `',
+                   (6662, 1): b'\x01\x010`',
+                   (6662, 2): b'\x01\x020`',
+                   (6662, 3): b'\x02\x030`',
+                   (6662, 4): b'\x02\x050`',
+                   (6662, 5): b'\x01\x070`',
+                   (6662, 6): b'\x01\x00\x00\x00',
+                   (6662, 7): b'\x05\x00\x00\x00',
+                   (6662, 8): b'\x01\x0e0`',
+                   (6662, 9): b'\x01\x0f0`',
+                   (6662, 10): b'\x01\x100`',
+                   (6662, 11): b'\x10\x110`',
+                   (6663, 1): b'\x10\x110`',
+                   (7168, 1): b'\x01',
+                   (7168, 2): b'\x02',
+                   (7168, 3): b'\x03',
+                   (7168, 4): b'\x04',
+                   (7186, 0): b'\x00',
+                   (7187, 1): b'\x00\x1a',
+                   (7187, 2): b'\x02\x1a',
+                   (7187, 3): b'\x04\x1a',
+                   (7187, 4): b'\x06\x1a',
+                   (7219, 1): b'\x01\x00',
+                   (7219, 2): b'@B\x0f\x00',
+                   (7219, 3): b'\x90_\x01\x00',
+                   (7219, 4): b'\x0b\xd0',
+                   (7219, 5): b'\xa0\x86\x01\x00',
+                   (7219, 6): b"\x10'\x00\x00",
+                   (7219, 7): b'\x00\x00\x00\x00',
+                   (7219, 8): b'\x00\x00',
+                   (7219, 9): b'\xa0\x86\x01\x00',
+                   (7219, 11): b'\x00\x00',
+                   (7219, 12): b'\x00\x00',
+                   (7219, 13): b'\x00\x00',
+                   (7219, 32): b'\x00',
+                   (24576, 1): b'\x00',
+                   (24576, 2): b'\x00',
+                   (24576, 3): b'\x00',
+                   (24576, 5): b'\x00',
+                   (24576, 7): b'\x00',
+                   (24576, 14): b'\x00',
+                   (24576, 15): b'\x00',
+                   (24576, 16): b'\x00',
+                   (24576, 17): b'\x00\x00',
+                   (24592, 1): b'\x00',
+                   (24592, 2): b'\x00',
+                   (24592, 3): b'\x00',
+                   (24592, 5): b'\x00',
+                   (24592, 7): b'\x00',
+                   (24592, 14): b'\x00',
+                   (24592, 15): b'\x00',
+                   (24592, 16): b'\x00',
+                   (24592, 17): b'\x00\x00',
+                   (24608, 1): b'\x00',
+                   (24608, 2): b'\x00',
+                   (24608, 3): b'\x00',
+                   (24608, 5): b'\x00',
+                   (24608, 7): b'\x00',
+                   (24608, 14): b'\x00',
+                   (24608, 15): b'\x00',
+                   (24608, 16): b'\x00',
+                   (24608, 17): b'\x00\x00',
+                   (24624, 1): b'\x00',
+                   (24624, 2): b'\x00',
+                   (24624, 3): b'\x00',
+                   (24624, 5): b'\x00',
+                   (24624, 7): b'\x00',
+                   (24624, 14): b'\x00',
+                   (24624, 15): b'\x00',
+                   (24624, 16): b'\x00',
+                   (24624, 17): b'\x00\x00',
+                   (32768, 1): b'\x00',
+                   (32768, 2): b'\x00',
+                   (32768, 5): b'\x00',
+                   (32768, 6): b'\x00',
+                   (32768, 7): b'\x00',
+                   (32768, 8): b'\x00',
+                   (32768, 10): b'\x00',
+                   (32768, 11): b'\x01',
+                   (32768, 14): b'\x00',
+                   (32768, 17): b'\x00\x00',
+                   (32768, 18): b'a\x1e\x00\x00',
+                   (32768, 19): b'\x00\x00',
+                   (32768, 20): b'\x00\x00',
+                   (32768, 21): b'\x00\x00',
+                   (32768, 23): b'\x00\x00',
+                   (32768, 24): b'\x00@',
+                   (32782, 1): b'\xe5\xff',
+                   (32783, 1): b'\x00\x00',
+                   (32783, 2): b'CI',
+                   (32784, 1): b'\x00',
+                   (32784, 2): b'\x00',
+                   (32784, 5): b'\x00',
+                   (32784, 6): b'\x00',
+                   (32784, 7): b'\x00',
+                   (32784, 8): b'\x00',
+                   (32784, 10): b'\x00',
+                   (32784, 11): b'\x01',
+                   (32784, 14): b'\x00',
+                   (32784, 17): b'\x00\x00',
+                   (32784, 18): b'\x00\x00\x01\x00',
+                   (32784, 19): b'\x00\x00',
+                   (32784, 20): b'\x00\x00',
+                   (32784, 21): b'\x00\x00',
+                   (32784, 23): b'\x00\x00',
+                   (32784, 24): b'\x00@',
+                   (32798, 1): b'\x01\x00',
+                   (32799, 1): b'\x19\x00',
+                   (32799, 2): b'OI',
+                   (32800, 1): b'\x00',
+                   (32800, 2): b'\x00',
+                   (32800, 5): b'\x00',
+                   (32800, 6): b'\x00',
+                   (32800, 7): b'\x00',
+                   (32800, 8): b'\x00',
+                   (32800, 10): b'\x00',
+                   (32800, 11): b'\x01',
+                   (32800, 14): b'\x00',
+                   (32800, 17): b'\x00\x00',
+                   (32800, 18): b'\x00\x00\x01\x00',
+                   (32800, 19): b'\x00\x00',
+                   (32800, 20): b'\x00\x00',
+                   (32800, 21): b'\x00\x00',
+                   (32800, 23): b'\x00\x00',
+                   (32800, 24): b'\x00@',
+                   (32814, 1): b'\x08\x00',
+                   (32815, 1): b'\t\x00',
+                   (32815, 2): b'\xaaH',
+                   (32816, 1): b'\x00',
+                   (32816, 2): b'\x00',
+                   (32816, 5): b'\x00',
+                   (32816, 6): b'\x00',
+                   (32816, 7): b'\x00',
+                   (32816, 8): b'\x00',
+                   (32816, 10): b'\x00',
+                   (32816, 11): b'\x01',
+                   (32816, 14): b'\x00',
+                   (32816, 17): b'\x00\x00',
+                   (32816, 18): b'\x00\x00\x01\x00',
+                   (32816, 19): b'\x00\x00',
+                   (32816, 20): b'\x00\x00',
+                   (32816, 21): b'\x00\x00',
+                   (32816, 23): b'\x00\x00',
+                   (32816, 24): b'\x00@',
+                   (32830, 1): b'\xfa\xff',
+                   (32831, 1): b'\x03\x00',
+                   (32831, 2): b'1I',
+                   (61440, 1): b'\x10\x00',
+                   (61440, 2): b'\x04\x00',
+                   (61448, 0): b'\x00\x00\x00\x00',
+                   (61449, 0): b'\x00\x00\x00\x00',
+                   (61456, 1): b',\x01\x00\x00',
+                   (61456, 2): b',\x01\x00\x00',
+                   (61456, 3): b',\x01\x00\x00',
+                   (61456, 4): b',\x01\x00\x00'}},
+    {   'eeprom': b'\x05\x0c\x03\x88\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x18\x00\x02\x00\x00\x00R0\x08\x10\x00\x00\xfc\x03'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x10\xf4\x00\xf4\x10\xf4\x00\x00\x10\x80\x00'
+                  b'\x80\x10\x80\x00\x0c\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x03\x00\n\x00\x93\xc1\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0f\x00\x01\x00\n\x00`\x00\x0b\x06EL4104\x06AnaOut Anal'
+                  b'oge Ausgangsklemmen (EL4xxx)%EL4104 4Ch. Ana. Ausgang 0-'
+                  b'10V, 16bit\x08Synchron\x02DC\x13AO Output Channel 1\rAnalo'
+                  b'g output\x13AO Output Channel 2\x13AO Output Channel 3'
+                  b'\x13AO Output Channel 4\x1e\x00\x10\x00\x02\x00\x01\x04'
+                  b'\x0c\x03\x01\x00\x00\x00\x00\x04\xbe\x00\x03\x00'
+                  b'3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00(\x00\x01\x00\x01\x03)\x00\x10\x00\x00\x10'
+                  b'\x80\x00&\x00\x01\x01\x80\x10\x80\x00"\x00\x01\x02\x00\x11'
+                  b'\x08\x00$\x00\x01\x03\x80\x11\x00\x00\x00\x00\x00\x043\x00'
+                  b' \x00\x00\x16\x01\x02\x00\x07\x11\x00\x00p\x11\x08\x03\x10'
+                  b'\x00\x00\x01\x16\x01\x02\x00\t\x11\x00\x10p\x11\x08\x03\x10'
+                  b'\x00\x00\x02\x16\x01\x02\x00\n\x11\x00 p\x11\x08\x03\x10'
+                  b'\x00\x00\x03\x16\x01\x02\x00\x0b\x11\x000p\x11\x08\x03\x10'
+                  b'\x00\x00<\x00\x18\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\xa0\x86\x01\x00\x00\x00\x00\x07\x01\x00'
+                  b'\x06\x00\x00\x00\x00\x00',
+        'sdo': {   (4096, 0): b'\x89\x13\x90\x01',
+                   (4104, 0): b'EL4104',
+                   (4105, 0): b'10',
+                   (4106, 0): b'03',
+                   (4113, 1): b'\x00\x00\x00\x00',
+                   (4120, 1): b'\x02\x00\x00\x00',
+                   (4120, 2): b'R0\x08\x10',
+                   (4120, 3): b'\x00\x00\xfc\x03',
+                   (4120, 4): b'\x00\x00\x00\x00',
+                   (4336, 1): b'/\xb8\x00\x00',
+                   (5632, 1): b'\x10\x01\x00p',
+                   (5633, 1): b'\x10\x01\x10p',
+                   (5634, 1): b'\x10\x01 p',
+                   (5635, 1): b'\x10\x010p',
+                   (7168, 1): b'\x01',
+                   (7168, 2): b'\x02',
+                   (7168, 3): b'\x03',
+                   (7168, 4): b'\x04',
+                   (7186, 1): b'\x00\x16',
+                   (7186, 2): b'\x01\x16',
+                   (7186, 3): b'\x02\x16',
+                   (7186, 4): b'\x03\x16',
+                   (7187, 0): b'\x00',
+                   (7218, 1): b'\x01\x00',
+                   (7218, 2): b'\x00\x00\x00\x00',
+                   (7218, 3): b'\x00\x00\x00\x00',
+                   (7218, 4): b'\x0b\xc0',
+                   (7218, 5): b'\x00\x00\x00\x00',
+                   (7218, 6): b'\x00\x00\x00\x00',
+                   (7218, 7): b'\x00\x00\x00\x00',
+                   (7218, 8): b'\x00\x00',
+                   (7218, 9): b'\x00\x00\x00\x00',
+                   (7218, 11): b'\x00\x00',
+                   (7218, 12): b'\x00\x00',
+                   (7218, 13): b'\x00\x00',
+                   (7218, 32): b'\x00',
+                   (28672, 1): b'`\t',
+                   (28688, 1): b'\x00\x00',
+                   (28704, 1): b'\x00\x00',
+                   (28720, 1): b'\x00\x00',
+                   (32768, 1): b'\x00',
+                   (32768, 2): b'\x00',
+                   (32768, 5): b'\x00',
+                   (32768, 7): b'\x00',
+                   (32768, 8): b'\x01',
+                   (32768, 17): b'd\x00',
+                   (32768, 18): b'P\xc3\x00\x00',
+                   (32768, 19): b'\x00\x00',
+                   (32768, 20): b'\xff\xff',
+                   (32768, 21): b'\x00\x00',
+                   (32768, 22): b'\xff\xff',
+                   (32782, 1): b'\x0e\x00',
+                   (32783, 1): b'\x0e\x00',
+                   (32783, 2): b'\x04\xed',
+                   (32784, 1): b'\x00',
+                   (32784, 2): b'\x00',
+                   (32784, 5): b'\x00',
+                   (32784, 7): b'\x01',
+                   (32784, 8): b'\x01',
+                   (32784, 17): b'\x00\x00',
+                   (32784, 18): b'\x00\x00\x01\x00',
+                   (32784, 19): b'\x00\x00',
+                   (32784, 20): b'\xff\xff',
+                   (32784, 21): b'\x00\x00',
+                   (32784, 22): b'\xff\xff',
+                   (32798, 1): b'\xfc\xff',
+                   (32799, 1): b'\xfc\xff',
+                   (32799, 2): b'j\xec',
+                   (32800, 1): b'\x00',
+                   (32800, 2): b'\x00',
+                   (32800, 5): b'\x00',
+                   (32800, 7): b'\x00',
+                   (32800, 8): b'\x01',
+                   (32800, 17): b'\x00\x00',
+                   (32800, 18): b'\x00\x00\x01\x00',
+                   (32800, 19): b'\x00\x00',
+                   (32800, 20): b'\xff\xff',
+                   (32800, 21): b'\x00\x00',
+                   (32800, 22): b'\xff\xff',
+                   (32814, 1): b'\x06\x00',
+                   (32815, 1): b'\x06\x00',
+                   (32815, 2): b'\xfe\xec',
+                   (32816, 1): b'\x00',
+                   (32816, 2): b'\x00',
+                   (32816, 5): b'\x00',
+                   (32816, 7): b'\x00',
+                   (32816, 8): b'\x01',
+                   (32816, 17): b'\x00\x00',
+                   (32816, 18): b'\x90\x01\x00\x00',
+                   (32816, 19): b'\x00\x00',
+                   (32816, 20): b'\xff\xff',
+                   (32816, 21): b'\x00\x00',
+                   (32816, 22): b'\xff\xff',
+                   (32830, 1): b'\xfc\xff',
+                   (32831, 1): b'\xfc\xff',
+                   (32831, 2): b'w\xee',
+                   (61440, 1): b'\x10\x00',
+                   (61440, 2): b'\x04\x00',
+                   (61448, 0): b'\x00\x00\x00\x00',
+                   (61456, 1): b'\x90\x01\x00\x00',
+                   (61456, 2): b'\x90\x01\x00\x00',
+                   (61456, 3): b'\x90\x01\x00\x00',
+                   (61456, 4): b'\x90\x01\x00\x00'}},
+    {   'eeprom': b'\x05\x04\x03\x0c\xd0\x07\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00E\x00\x02\x00\x00\x00R0w\x1b\x00\x00\x17\x00'
+                  b'\x99\x84\x1a\xeb\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x10\xf4\x00\xf4\x10\xf4\x00\x00\x10\x80\x00'
+                  b'\x80\x10\x80\x00\x0c\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0b\x00\x08\x00\x0fQ\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0f\x00\x01\x00\n\x00<\x00\x06\x06EL7031\x12DriveAxisTe'
+                  b'rminals"Antriebs- und Achsklemmen (EL7xxx),EL7031 1K. Sc'
+                  b'hrittmotor-Endstufe (24V, 1.5A)\x08Synchron\x02DC\xff'
+                  b"\x1e\x00\x10\x00\x02\x00\x01\x04\x0c'\x01\x00"
+                  b'\x00\x00\x00\x04x\x00\x03\x003\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x02\x00'
+                  b'\x01\x02\x03\xff)\x00\x10\x00\x00\x10\x80\x00&\x00\x01\x01'
+                  b'\x80\x10\x80\x00"\x00\x01\x02\x00\x11\x08\x00$\x00\x01\x03'
+                  b'\x80\x11\x08\x00 \x00\x01\x04<\x00\x18\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03'
+                  b'\x01\x00\x06\x00\x00\x00\x00\x00',
+        'sdo': {   (4096, 0): b'\x89\x13\x00\x00',
+                   (4104, 0): b'EL7031',
+                   (4105, 0): b'08',
+                   (4106, 0): b'11',
+                   (4113, 1): b'\x00\x00\x00\x00',
+                   (4120, 1): b'\x02\x00\x00\x00',
+                   (4120, 2): b'R0w\x1b',
+                   (4120, 3): b'\x00\x00\x17\x00',
+                   (4120, 4): b'\xca8\x00\x00',
+                   (4336, 1): b'.\xe3\x00\x00',
+                   (4339, 1): b'2',
+                   (4339, 2): b'2',
+                   (4339, 3): b'\x00',
+                   (4339, 4): b'\x01',
+                   (4339, 5): b'\x00\x00',
+                   (4339, 6): b"\x00\xe0w\x1b\x10\x005\x11\x80\x91\x9b'"
+                              b'\xf7c\x02\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                              b'\x06\x00\x00\x00',
+                   (4339, 7): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc09#\x1a'
+                              b'AR\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                              b'\x06\x00\x00\x00',
+                   (4339, 8): b'\x00\xe0w\x1b\x10\x005\x11\x00\xc4\x1a\x1c'
+                              b'AR\x03\x00\x06\x00\xe8\x03\x06\x00\x00\x00'
+                              b'\x06\x00\x00\x00',
+                   (4339, 9): b'\x00\xe0w\x1b\x10\x00\x00\x11@\xaeQ\xc1'
+                              b'\x0bY\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                              b'\x06\x00\x00\x00',
+                   (4339, 10): b'\x00\xe0w\x1b\x10\x005\x11\x808I\xc3'
+                               b'\x0bY\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 11): b'\x00\xe0w\x1b\x10\x00\x00\x11@y\xda\xb9'
+                               b'_Y\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 12): b'\x00\xe0w\x1b\x10\x005\x11\x80\x03\xd2\xbb'
+                               b'_Y\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 13): b'\x00\xe0w\x1b\x10\x00\x00\x11@2\xdb\x81'
+                               b'oY\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 14): b'\x00\xe0w\x1b\x10\x005\x11\x80\xbc\xd2\x83'
+                               b'oY\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 15): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\xad\x8b\xfd'
+                               b'tY\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 16): b'\x00\xe0w\x1b\x10\x005\x11\x008\x83\xff'
+                               b'tY\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 17): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0|\x07\x0c'
+                               b'\xb2Y\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 18): b'\x00\xe0w\x1b\x10\x005\x11\x00\x07\xff\r'
+                               b'\xb2Y\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 19): b'\x00\xe0w\x1b\x10\x00\x00\x11@k\x80\x12'
+                               b'\xc4Y\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 20): b'\x00\xe0w\x1b\x10\x005\x11\xc07\x87\x14'
+                               b'\xc4Y\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 21): b'\x00\xe0w\x1b\x10\x00\x00\x11\x00/ \xef'
+                               b'\xd2Y\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 22): b'\x00\xe0w\x1b\x10\x005\x11@\xb9\x17\xf1'
+                               b'\xd2Y\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 23): b'\x00\xe0w\x1b\x10\x00\x00\x11@\xc93\xe9'
+                               b'\xe5Y\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 24): b'\x00\xe0w\x1b\x10\x005\x11\x80S+\xeb'
+                               b'\xe5Y\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 25): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\xb6\x14K'
+                               b'\xeaY\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 26): b'\x00\xe0w\x1b\x10\x005\x11\x00A\x0cM'
+                               b'\xeaY\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 27): b'\x00\xe0w\x1b\x10\x00\x00\x11@"gg\xefY\x03\x00'
+                               b'\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 28): b'\x00\xe0w\x1b\x10\x005\x11\x80\xac^i'
+                               b'\xefY\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 29): b'\x00\xe0w\x1b\x10\x00\x00\x11\x00V~q'
+                               b'\x88\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 30): b'\x00\xe0w\x1b\x10\x005\x11@\xe0us'
+                               b'\x88\xa6\x03\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 31): b'\x00\xe0w\x1b\x10\x00\x00\x11\x00%fS'
+                               b'\x8b\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 32): b'\x00\xe0w\x1b\x10\x005\x11@\xaf]U'
+                               b'\x8b\xa6\x03\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 33): b'\x00\xe0w\x1b\x10\x00\x00\x11\x00.\xa4\xea'
+                               b'\x98\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 34): b'\x00\xe0w\x1b\x10\x005\x11@\xb8\x9b\xec'
+                               b'\x98\xa6\x03\x00\x06\x00\xe8\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 35): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\x8aFi'
+                               b'\xc9\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 36): b'\x00\xe0w\x1b\x10\x005\x11@WMk\xc9\xa6\x03\x00'
+                               b'\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 37): b'\x00\xe0w\x1b\x10\x00\x00\x11\x80RF\xcf'
+                               b'\xd1\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 38): b'\x00\xe0w\x1b\x10\x005\x11\x00\x1fM\xd1'
+                               b'\xd1\xa6\x03\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 39): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0*\xeb|'
+                               b'\xda\xa6\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 40): b'\x00\xe0w\x1b\x10\x005\x11\x00\xb5\xe2~'
+                               b'\xda\xa6\x03\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 41): b"\x00\xe0w\x1b\x10\x00\x00\x11\x00'\xc72"
+                               b'\x1b\xa7\x03\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 42): b'\x00\xe0w\x1b\x10\x005\x11@\xb1\xbe4'
+                               b'\x1b\xa7\x03\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 43): b'\x00\xe0w\x1b\x10\x00\x00\x11\x80\xd5e\xb3'
+                               b'6\xa7\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 44): b'\x00\xe0w\x1b\x10\x005\x11\xc0_]\xb5'
+                               b'6\xa7\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 45): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\xf2Zk'
+                               b'@\xa7\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 46): b'\x00\xe0w\x1b\x10\x005\x11@\xbfam@\xa7\x03\x00'
+                               b'\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 47): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\x8d\x85\xa7'
+                               b'M\xa7\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 48): b'\x00\xe0w\x1b\x10\x005\x11\x00\x18}\xa9'
+                               b'M\xa7\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 49): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0\xf7\x9b\x18'
+                               b'W\xa7\x03\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 50): b'\x00\xe0w\x1b\x10\x005\x11\x00\x82\x93\x1a'
+                               b'W\xa7\x03\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 51): b'\x00\xe0w\x1b\x10\x00\x00\x11\xc0L\xd6\xd0'
+                               b'\xcd\x1c\x02\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 52): b'\x00\xe0w\x1b\x10\x005\x11\x00\xd7\xcd\xd2'
+                               b'\xcd\x1c\x02\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 53): b'\x00\xe0w\x1b\x10\x00\x00\x11\x80\x05\xd6\xc3'
+                               b'%\x1d\x02\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 54): b'\x00\xe0w\x1b\x10\x005\x11\xc0\x8f\xcd\xc5'
+                               b'%\x1d\x02\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 55): b'\x00\xe0w\x1b\x10\x00\x00\x11@\x07\xa4%'
+                               b'\xf7c\x02\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4344, 0): b'@\x0e\xc2tW\xa7\x03\x00',
+                   (5120, 6): b'\x01\x16\x00\x00\x00\x00',
+                   (5121, 6): b'\x00\x16\x00\x00\x00\x00',
+                   (5123, 6): b'\x04\x16\x05\x16\x06\x16',
+                   (5124, 6): b'\x03\x16\x05\x16\x06\x16',
+                   (5125, 6): b'\x03\x16\x04\x16\x06\x16',
+                   (5126, 6): b'\x03\x16\x04\x16\x05\x16',
+                   (5632, 1): b'\x01\x00\x00\x00',
+                   (5632, 2): b'\x01\x02\x00p',
+                   (5632, 3): b'\x01\x03\x00p',
+                   (5632, 4): b'\x01\x04\x00p',
+                   (5632, 5): b'\x04\x00\x00\x00',
+                   (5632, 6): b'\x08\x00\x00\x00',
+                   (5632, 7): b'\x10\x11\x00p',
+                   (5633, 1): b'\x01\x00\x00\x00',
+                   (5633, 2): b'\x01\x02\x00p',
+                   (5633, 3): b'\x01\x03\x00p',
+                   (5633, 4): b'\x01\x04\x00p',
+                   (5633, 5): b'\x04\x00\x00\x00',
+                   (5633, 6): b'\x08\x00\x00\x00',
+                   (5633, 7): b' \x11\x00p',
+                   (5634, 1): b'\x01\x01\x10p',
+                   (5634, 2): b'\x01\x02\x10p',
+                   (5634, 3): b'\x01\x03\x10p',
+                   (5634, 4): b'\x05\x00\x00\x00',
+                   (5634, 5): b'\x08\x00\x00\x00',
+                   (5635, 1): b' \x11\x10p',
+                   (5636, 1): b'\x10!\x10p',
+                   (5637, 1): b'\x01\x01 p',
+                   (5637, 2): b'\x01\x02 p',
+                   (5637, 3): b'\x06\x00\x00\x00',
+                   (5637, 4): b'\x08\x00\x00\x00',
+                   (5637, 5): b' \x11 p',
+                   (5638, 1): b'\x01\x01 p',
+                   (5638, 2): b'\x01\x02 p',
+                   (5638, 3): b'\x06\x00\x00\x00',
+                   (5638, 4): b'\x08\x00\x00\x00',
+                   (5638, 5): b' \x11 p',
+                   (5638, 6): b'\x10! p',
+                   (5638, 7): b'\x10" p',
+                   (5638, 8): b'\x10# p',
+                   (5638, 9): b'\x10$ p',
+                   (6144, 6): b'\x01\x1a',
+                   (6145, 6): b'\x00\x1a',
+                   (6149, 6): b'\x06\x1a',
+                   (6150, 6): b'\x05\x1a',
+                   (6656, 1): b'\x01\x00\x00\x00',
+                   (6656, 2): b'\x01\x02\x00`',
+                   (6656, 3): b'\x01\x03\x00`',
+                   (6656, 4): b'\x01\x04\x00`',
+                   (6656, 5): b'\x01\x05\x00`',
+                   (6656, 6): b'\x03\x00\x00\x00',
+                   (6656, 7): b'\x04\x00\x00\x00',
+                   (6656, 8): b'\x01\r\x00`',
+                   (6656, 9): b'\x01\x0e\x00`',
+                   (6656, 10): b'\x01\x00\x00\x00',
+                   (6656, 11): b'\x01\x10\x00`',
+                   (6656, 12): b'\x10\x11\x00`',
+                   (6656, 13): b'\x10\x12\x00`',
+                   (6657, 1): b'\x01\x00\x00\x00',
+                   (6657, 2): b'\x01\x02\x00`',
+                   (6657, 3): b'\x01\x03\x00`',
+                   (6657, 4): b'\x01\x04\x00`',
+                   (6657, 5): b'\x01\x05\x00`',
+                   (6657, 6): b'\x03\x00\x00\x00',
+                   (6657, 7): b'\x04\x00\x00\x00',
+                   (6657, 8): b'\x01\r\x00`',
+                   (6657, 9): b'\x01\x0e\x00`',
+                   (6657, 10): b'\x01\x00\x00\x00',
+                   (6657, 11): b'\x01\x10\x00`',
+                   (6657, 12): b' \x11\x00`',
+                   (6657, 13): b' \x12\x00`',
+                   (6658, 1): b' \x16\x00`',
+                   (6659, 1): b'\x01\x01\x10`',
+                   (6659, 2): b'\x01\x02\x10`',
+                   (6659, 3): b'\x01\x03\x10`',
+                   (6659, 4): b'\x01\x04\x10`',
+                   (6659, 5): b'\x01\x05\x10`',
+                   (6659, 6): b'\x01\x06\x10`',
+                   (6659, 7): b'\x01\x07\x10`',
+                   (6659, 8): b'\x01\x00\x00\x00',
+                   (6659, 9): b'\x03\x00\x00\x00',
+                   (6659, 10): b'\x01\x0c\x10`',
+                   (6659, 11): b'\x01\r\x10`',
+                   (6659, 12): b'\x01\x0e\x10`',
+                   (6659, 13): b'\x01\x00\x00\x00',
+                   (6659, 14): b'\x01\x10\x10`',
+                   (6660, 1): b'\x10\x11\x10`',
+                   (6660, 2): b'\x10\x12\x10`',
+                   (6661, 1): b'\x01\x01 `',
+                   (6661, 2): b'\x01\x02 `',
+                   (6661, 3): b'\x01\x03 `',
+                   (6661, 4): b'\x01\x04 `',
+                   (6661, 5): b'\x01\x05 `',
+                   (6661, 6): b'\x01\x06 `',
+                   (6661, 7): b'\x01\x07 `',
+                   (6661, 8): b'\x01\x00\x00\x00',
+                   (6661, 9): b'\x08\x00\x00\x00',
+                   (6662, 1): b'\x01\x01 `',
+                   (6662, 2): b'\x01\x02 `',
+                   (6662, 3): b'\x01\x03 `',
+                   (6662, 4): b'\x01\x04 `',
+                   (6662, 5): b'\x01\x05 `',
+                   (6662, 6): b'\x01\x06 `',
+                   (6662, 7): b'\x01\x07 `',
+                   (6662, 8): b'\x01\x00\x00\x00',
+                   (6662, 9): b'\x08\x00\x00\x00',
+                   (6662, 10): b' \x11 `',
+                   (6662, 11): b'\x10! `',
+                   (6662, 12): b' " `',
+                   (7168, 1): b'\x01',
+                   (7168, 2): b'\x02',
+                   (7168, 3): b'\x03',
+                   (7168, 4): b'\x04',
+                   (7186, 1): b'\x00\x16',
+                   (7186, 2): b'\x02\x16',
+                   (7186, 3): b'\x04\x16',
+                   (7187, 1): b'\x00\x1a',
+                   (7187, 2): b'\x03\x1a',
+                   (7187, 3): b'\x00\x00',
+                   (7187, 4): b'\x00\x00',
+                   (7187, 5): b'\x00\x00',
+                   (7218, 1): b'\x01\x00',
+                   (7218, 2): b'@B\x0f\x00',
+                   (7218, 3): b'\x00\x00\x00\x00',
+                   (7218, 4): b'\x07\x08',
+                   (7218, 5): b'\x90\xd0\x03\x00',
+                   (7218, 6): b'\x00\x00\x00\x00',
+                   (7218, 7): b'\x00\x00\x00\x00',
+                   (7218, 8): b'\x00\x00',
+                   (7218, 9): b'\x00\x00\x00\x00',
+                   (7218, 11): b'\x00\x00',
+                   (7218, 12): b'\x00\x00',
+                   (7218, 13): b'\x00\x00',
+                   (7218, 32): b'\x00',
+                   (7219, 1): b'"\x00',
+                   (7219, 2): b'@B\x0f\x00',
+                   (7219, 3): b'\x00\x00\x00\x00',
+                   (7219, 4): b'\x07\x08',
+                   (7219, 5): b'\x90\xd0\x03\x00',
+                   (7219, 6): b'\x90\xd0\x03\x00',
+                   (7219, 7): b'\x00\x00\x00\x00',
+                   (7219, 8): b'\x00\x00',
+                   (7219, 9): b'\x00\x00\x00\x00',
+                   (7219, 11): b'\x00\x00',
+                   (7219, 12): b'\x00\x00',
+                   (7219, 13): b'\x00\x00',
+                   (7219, 32): b'\x00',
+                   (24576, 2): b'\x00',
+                   (24576, 3): b'\x00',
+                   (24576, 4): b'\x00',
+                   (24576, 5): b'\x00',
+                   (24576, 13): b'\x00',
+                   (24576, 14): b'\x00',
+                   (24576, 16): b'\x01',
+                   (24576, 17): b'\x00\x00\x00\x00',
+                   (24576, 18): b'\x00\x00\x00\x00',
+                   (24576, 22): b'\x00\x00\x00\x00',
+                   (24592, 1): b'\x00',
+                   (24592, 2): b'\x00',
+                   (24592, 3): b'\x00',
+                   (24592, 4): b'\x01',
+                   (24592, 5): b'\x00',
+                   (24592, 6): b'\x00',
+                   (24592, 7): b'\x00',
+                   (24592, 12): b'\x00',
+                   (24592, 13): b'\x00',
+                   (24592, 14): b'\x00',
+                   (24592, 16): b'\x00',
+                   (24592, 17): b'\x00\x00',
+                   (24592, 18): b'\x00\x00',
+                   (24608, 1): b'\x00',
+                   (24608, 2): b'\x00',
+                   (24608, 3): b'\x01',
+                   (24608, 4): b'\x00',
+                   (24608, 5): b'\x00',
+                   (24608, 6): b'\x00',
+                   (24608, 7): b'\x00',
+                   (24608, 17): b'\x00\x00\x00\x00',
+                   (24608, 33): b'\x00\x00',
+                   (24608, 34): b'\x00\x00\x00\x00',
+                   (28672, 2): b'\x00',
+                   (28672, 3): b'\x00',
+                   (28672, 4): b'\x00',
+                   (28672, 17): b'\x00\x00\x00\x00',
+                   (28688, 1): b'\x00',
+                   (28688, 2): b'\x00',
+                   (28688, 3): b'\x00',
+                   (28688, 17): b'\x00\x00\x00\x00',
+                   (28688, 33): b'\x00\x00',
+                   (28704, 1): b'\x00',
+                   (28704, 2): b'\x00',
+                   (28704, 17): b'\x00\x00\x00\x00',
+                   (28704, 33): b'\x00\x00',
+                   (28704, 34): b'\x00\x00',
+                   (28704, 35): b'\x00\x00',
+                   (28704, 36): b'\x00\x00',
+                   (32768, 14): b'\x00',
+                   (32784, 1): b'\xdc\x05',
+                   (32784, 2): b'\xf4\x01',
+                   (32784, 3): b'\xc0]',
+                   (32784, 4): b'd\x00',
+                   (32784, 5): b'\x00\x00',
+                   (32784, 6): b'\xc8\x00',
+                   (32784, 9): b'\x00\x00',
+                   (32784, 16): b'd\x00',
+                   (32784, 17): b'\x96\x00',
+                   (32785, 1): b'\x90\x01',
+                   (32785, 2): b'\x04\x00',
+                   (32785, 3): b'\x00',
+                   (32785, 5): b'\x00',
+                   (32785, 6): b'\x00\x00',
+                   (32785, 7): b'd\x00',
+                   (32785, 8): b'd\x00',
+                   (32786, 1): b'\x00',
+                   (32786, 5): b'\x01',
+                   (32786, 9): b'\x00',
+                   (32786, 17): b'\x03',
+                   (32786, 25): b'\x04',
+                   (32786, 48): b'\x00',
+                   (32786, 49): b'\x00',
+                   (32786, 50): b'\x02',
+                   (32786, 54): b'\x02',
+                   (32787, 1): b'\xe8\x03',
+                   (32787, 2): b'\x00\x00',
+                   (32787, 3): b'\x00',
+                   (32787, 5): b'\x00',
+                   (32787, 6): b'\x00\x00',
+                   (32787, 7): b'\x00\x00',
+                   (32787, 8): b'\x00\x00',
+                   (32800, 1): b'd\x00',
+                   (32800, 2): b"\x10'",
+                   (32800, 3): b'\xe8\x03',
+                   (32800, 4): b'\xe8\x03',
+                   (32800, 5): b'\xe8\x03',
+                   (32800, 6): b'\xe8\x03',
+                   (32800, 7): b'd\x00',
+                   (32800, 8): b'\x00\x00\x00\x00',
+                   (32800, 9): b'd\x00',
+                   (32800, 10): b'\n\x00',
+                   (32800, 11): b'\n\x00',
+                   (32800, 12): b'\xe8\x03',
+                   (32800, 13): b'2\x00',
+                   (32800, 14): b'\x00\x00\x00\x00',
+                   (32800, 15): b'\x00\x00\x00\x00',
+                   (32800, 16): b'\x00\x00',
+                   (32801, 1): b'\x01\x00',
+                   (32801, 17): b'\x00',
+                   (32801, 19): b'\x01',
+                   (32801, 20): b'\x00',
+                   (32801, 21): b'\x00',
+                   (32801, 22): b'\x00',
+                   (36880, 1): b'\x00',
+                   (36880, 2): b'\x00',
+                   (36880, 3): b'\x00',
+                   (36880, 4): b'\x00',
+                   (36880, 5): b'\x00',
+                   (36880, 6): b'\x00',
+                   (36880, 7): b'\x00',
+                   (36880, 8): b'\x00',
+                   (36880, 9): b'\x00',
+                   (36880, 19): b'\x00',
+                   (36896, 1): b'\x00\x00',
+                   (36896, 3): b'\x00\x00',
+                   (36896, 4): b'\x00\x00\x00\x00',
+                   (40976, 1): b'\x00',
+                   (40976, 2): b'\x00',
+                   (40976, 3): b'\x00',
+                   (40976, 4): b'\x00',
+                   (40976, 5): b'\x00',
+                   (40976, 6): b'\x00',
+                   (40976, 7): b'\x00',
+                   (40976, 8): b'\x01',
+                   (40976, 9): b'\x01',
+                   (40976, 10): b'\x00',
+                   (40976, 17): b'\x00',
+                   (40992, 1): b'\x00',
+                   (40992, 2): b'\x00',
+                   (40992, 3): b'\x00',
+                   (40992, 4): b'\x00',
+                   (40992, 5): b'\x00',
+                   (40992, 6): b'\x00',
+                   (61440, 1): b'\x10\x00',
+                   (61440, 2): b'\x03\x00',
+                   (61448, 0): b'\x00\x00\x00\x00',
+                   (61456, 1): b'\xff\x01\x00\x00',
+                   (61456, 2): b'\xbf\x02\x00\x00',
+                   (61456, 3): b'\xc0\x02\x00\x00',
+                   (61569, 1): b'\x00\x00\x00\x00',
+                   (63503, 1): b'\x00}',
+                   (63503, 2): b'\x04\x06',
+                   (63503, 3): b'\x14\x00',
+                   (63503, 4): b'P',
+                   (63503, 5): b'd',
+                   (63503, 6): b'\n\x00',
+                   (63503, 7): b'$\xff',
+                   (63503, 8): b'F\x00',
+                   (63744, 1): b'F\x00',
+                   (63744, 2): b'F\x00',
+                   (63744, 4): b'F\x00',
+                   (63744, 5): b'F\x00',
+                   (63744, 6): b'F\x00',
+                   (64256, 1): b'\x00\x00',
+                   (64256, 2): b'\x00',
+                   (64256, 3): b'\x00\x00\x00\x00'}},
+    {   'eeprom': b'\x05\x04\x03\xcc\xd0\x07\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00=\x00\x02\x00\x00\x00R0\x81\x1b\x00\x00\x17\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x10\xf4\x00\xf4\x10\xf4\x00\x00\x10\x80\x00'
+                  b'\x80\x10\x80\x00\x0c\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0c\x00\t\x00\x8e\xbc\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0f\x00\x01\x00\n\x00;\x00\x06\x06EL7041\x12DriveAxisTe'
+                  b'rminals"Antriebs- und Achsklemmen (EL7xxx)*EL7041 1K. Sc'
+                  b'hrittmotor-Endstufe (50V, 5A)\x08Synchron\x02DC\xff\x1e\x00'
+                  b"\x10\x00\x02\x00\x01\x04\x0c'\x01\x00\x00\x00"
+                  b'\x00\x04\x8c\x00\x03\x003\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00'
+                  b'\x02\x00\x01\x02\x03\xff)\x00\x10\x00\x00\x10\x80\x00&\x00'
+                  b'\x01\x01\x80\x10\x80\x00"\x00\x01\x02\x00\x11\x08\x00$\x00'
+                  b'\x01\x03\x80\x11\x08\x00 \x00\x01\x04<\x00\x18\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x03\x01\x00\x06\x00\x00\x00\x00\x00',
+        'sdo': {   (4096, 0): b'\x89\x13\x00\x00',
+                   (4104, 0): b'EL7041',
+                   (4105, 0): b'09',
+                   (4106, 0): b'12',
+                   (4113, 1): b'\x00\x00\x00\x00',
+                   (4120, 1): b'\x02\x00\x00\x00',
+                   (4120, 2): b'R0\x81\x1b',
+                   (4120, 3): b'\x00\x00\x17\x00',
+                   (4120, 4): b'|9\x00\x00',
+                   (4336, 1): b'\xed9\x00\x00',
+                   (4339, 1): b'2',
+                   (4339, 2): b'\x14',
+                   (4339, 3): b'\x00',
+                   (4339, 4): b'\x01',
+                   (4339, 5): b'\x00\x00',
+                   (4339, 6): b'\x00\xe0\x81\x1b\x10\x005\x11\x80^\xda('
+                              b'\xbb\x89\x01\x00\x06\x00\xe7\x03'
+                              b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 7): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x80=\n\xa6'
+                              b'\x01\x8a\x01\x00\x06\x00\x00\x01'
+                              b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 8): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\xc7\x01\xa8'
+                              b'\x01\x8a\x01\x00\x06\x00\xe7\x03'
+                              b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 9): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\x13:P'
+                              b'\n\x8a\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                              b'\x06\x00\x00\x00',
+                   (4339, 10): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\xdf@R'
+                               b'\n\x8a\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 11): b'\x00\xe0\x81\x1b\x10\x00\x00\x11'
+                               b'\x00\xdc\x1c\x08K\x8a\x01\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 12): b'\x00\xe0\x81\x1b\x10\x005\x11@f\x14\n'
+                               b'K\x8a\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 13): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x80\x95&\xa4'
+                               b'f\x8a\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 14): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\x1f\x1e\xa6'
+                               b'f\x8a\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 15): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x80\xd7\xfeW'
+                               b'p\x8a\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 16): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0a\xf6Y'
+                               b'p\x8a\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 17): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x80r)\x94'
+                               b'}\x8a\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 18): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\xfc \x96'
+                               b'}\x8a\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 19): b'\x00\xe0\x81\x1b\x10\x00\x00\x11'
+                               b'\x80\xca\xc5\x04\x87\x8a\x01\x00'
+                               b'\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 20): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0T\xbd\x06'
+                               b'\x87\x8a\x01\x00\x06\x00\xe7\x03'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 21): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x80H\x0b\xff'
+                               b';\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 22): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\xd2\x02\x01'
+                               b'<\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 23): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x00\xe1X\xae'
+                               b'?\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 24): b'\x00\xe0\x81\x1b\x10\x005\x11@kP\xb0'
+                               b'?\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 25): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x00\x13\x8fm'
+                               b'@\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 26): b'\x00\xe0\x81\x1b\x10\x005\x11@\x9d\x86o'
+                               b'@\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 27): b'\x00\xe0\x81\x1b\x10\x00\x00\x11'
+                               b'\x00\xde\x82\xa2L\x00\x00\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 28): b'\x00\xe0\x81\x1b\x10\x005\x11@hz\xa4'
+                               b'L\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 29): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\x810\xbb'
+                               b'M\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 30): b'\x00\xe0\x81\x1b\x10\x005\x11\x80\x0b(\xbd'
+                               b'M\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 31): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\xca\xabw'
+                               b'T\x00\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 32): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0\x96\xb2y'
+                               b'T\x00\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 33): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\x00\xdfX\xf0'
+                               b'\x11H\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 34): b'\x00\xe0\x81\x1b\x10\x005\x11@iP\xf2'
+                               b'\x11H\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 35): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\xa7\x061'
+                               b'\x16H\x00\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 36): b'\x00\xe0\x81\x1b\x10\x005\x11\xc0s\r3'
+                               b'\x16H\x00\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 37): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@n\x9bn'
+                               b'p5\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 38): b'\x00\xe0\x81\x1b\x10\x005\x11\x80\xf8\x92p'
+                               b'p5\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 39): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\x94\x19\x17'
+                               b';<\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 40): b'\x00\xe0\x81\x1b\x10\x005\x11\x80\x1e\x11\x19'
+                               b';<\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 41): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\xc0\xc5V`'
+                               b'\x8f<\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 42): b'\x00\xe0\x81\x1b\x10\x005\x11\x00PNb'
+                               b'\x8f<\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 43): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\xc0\x1b\xb8%'
+                               b'\x9f<\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 44): b"\x00\xe0\x81\x1b\x10\x005\x11\x00\xa6\xaf'"
+                               b'\x9f<\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 45): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\xf1\xca\xa3'
+                               b'\xa4<\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 46): b'\x00\xe0\x81\x1b\x10\x005\x11\x80{\xc2\xa5'
+                               b'\xa4<\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 47): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\xc09\xdd\xba'
+                               b'\x02=\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 48): b'\x00\xe0\x81\x1b\x10\x005\x11@\x06\xe4\xbc'
+                               b'\x02=\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 49): b'\x00\xe0\x81\x1b\x10\x00\x00\x11'
+                               b'\xc0\xb5\xd5\xb5\x15=\x01\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4339, 50): b'\x00\xe0\x81\x1b\x10\x005\x11@\x82\xdc\xb7'
+                               b'\x15=\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 51): b'\x00\xe0\x81\x1b\x10\x00\x00\x11\xc0\xe8)\x16'
+                               b'\x1a=\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 52): b'\x00\xe0\x81\x1b\x10\x005\x11\x00s!\x18'
+                               b'\x1a=\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 53): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\x81\xad3'
+                               b'\x1f=\x01\x00\x06\x00\x00\x01\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 54): b'\x00\xe0\x81\x1b\x10\x005\x11\x80\x0b\xa55'
+                               b'\x1f=\x01\x00\x06\x00\xe7\x03\x06\x00\x00\x00'
+                               b'\x06\x00\x00\x00',
+                   (4339, 55): b'\x00\xe0\x81\x1b\x10\x00\x00\x11@\xd4\xe2&'
+                               b'\xbb\x89\x01\x00\x06\x00\x00\x01'
+                               b'\x06\x00\x00\x00\x06\x00\x00\x00',
+                   (4344, 0): b'\x80\xe3`d\x87\x8a\x01\x00',
+                   (5120, 6): b'\x01\x16\x00\x00\x00\x00',
+                   (5121, 6): b'\x00\x16\x00\x00\x00\x00',
+                   (5123, 6): b'\x04\x16\x05\x16\x06\x16',
+                   (5124, 6): b'\x03\x16\x05\x16\x06\x16',
+                   (5125, 6): b'\x03\x16\x04\x16\x06\x16',
+                   (5126, 6): b'\x03\x16\x04\x16\x05\x16',
+                   (5632, 1): b'\x01\x01\x00p',
+                   (5632, 2): b'\x01\x02\x00p',
+                   (5632, 3): b'\x01\x03\x00p',
+                   (5632, 4): b'\x01\x04\x00p',
+                   (5632, 5): b'\x04\x00\x00\x00',
+                   (5632, 6): b'\x08\x00\x00\x00',
+                   (5632, 7): b'\x10\x11\x00p',
+                   (5633, 1): b'\x01\x01\x00p',
+                   (5633, 2): b'\x01\x02\x00p',
+                   (5633, 3): b'\x01\x03\x00p',
+                   (5633, 4): b'\x01\x04\x00p',
+                   (5633, 5): b'\x04\x00\x00\x00',
+                   (5633, 6): b'\x08\x00\x00\x00',
+                   (5633, 7): b' \x11\x00p',
+                   (5634, 1): b'\x01\x01\x10p',
+                   (5634, 2): b'\x01\x02\x10p',
+                   (5634, 3): b'\x01\x03\x10p',
+                   (5634, 4): b'\x05\x00\x00\x00',
+                   (5634, 5): b'\x08\x00\x00\x00',
+                   (5635, 1): b' \x11\x10p',
+                   (5636, 1): b'\x10!\x10p',
+                   (5637, 1): b'\x01\x01 p',
+                   (5637, 2): b'\x01\x02 p',
+                   (5637, 3): b'\x06\x00\x00\x00',
+                   (5637, 4): b'\x08\x00\x00\x00',
+                   (5637, 5): b' \x11 p',
+                   (5638, 1): b'\x01\x01 p',
+                   (5638, 2): b'\x01\x02 p',
+                   (5638, 3): b'\x06\x00\x00\x00',
+                   (5638, 4): b'\x08\x00\x00\x00',
+                   (5638, 5): b' \x11 p',
+                   (5638, 6): b'\x10! p',
+                   (5638, 7): b'\x10" p',
+                   (5638, 8): b'\x10# p',
+                   (5638, 9): b'\x10$ p',
+                   (6144, 6): b'\x01\x1a',
+                   (6145, 6): b'\x00\x1a',
+                   (6149, 6): b'\x06\x1a',
+                   (6150, 6): b'\x05\x1a',
+                   (6656, 1): b'\x01\x01\x00`',
+                   (6656, 2): b'\x01\x02\x00`',
+                   (6656, 3): b'\x01\x03\x00`',
+                   (6656, 4): b'\x01\x04\x00`',
+                   (6656, 5): b'\x01\x05\x00`',
+                   (6656, 6): b'\x02\x00\x00\x00',
+                   (6656, 7): b'\x01\x08\x00`',
+                   (6656, 8): b'\x01\t\x00`',
+                   (6656, 9): b'\x01\n\x00`',
+                   (6656, 10): b'\x01\x0b\x00`',
+                   (6656, 11): b'\x01\x00\x00\x00',
+                   (6656, 12): b'\x01\r\x00`',
+                   (6656, 13): b'\x01\x0e\x00`',
+                   (6656, 14): b'\x01\x00\x00\x00',
+                   (6656, 15): b'\x01\x10\x00`',
+                   (6656, 16): b'\x10\x11\x00`',
+                   (6656, 17): b'\x10\x12\x00`',
+                   (6657, 1): b'\x01\x01\x00`',
+                   (6657, 2): b'\x01\x02\x00`',
+                   (6657, 3): b'\x01\x03\x00`',
+                   (6657, 4): b'\x01\x04\x00`',
+                   (6657, 5): b'\x01\x05\x00`',
+                   (6657, 6): b'\x02\x00\x00\x00',
+                   (6657, 7): b'\x01\x08\x00`',
+                   (6657, 8): b'\x01\t\x00`',
+                   (6657, 9): b'\x01\n\x00`',
+                   (6657, 10): b'\x01\x0b\x00`',
+                   (6657, 11): b'\x01\x00\x00\x00',
+                   (6657, 12): b'\x01\r\x00`',
+                   (6657, 13): b'\x01\x0e\x00`',
+                   (6657, 14): b'\x01\x00\x00\x00',
+                   (6657, 15): b'\x01\x10\x00`',
+                   (6657, 16): b' \x11\x00`',
+                   (6657, 17): b' \x12\x00`',
+                   (6658, 1): b' \x16\x00`',
+                   (6659, 1): b'\x01\x01\x10`',
+                   (6659, 2): b'\x01\x02\x10`',
+                   (6659, 3): b'\x01\x03\x10`',
+                   (6659, 4): b'\x01\x04\x10`',
+                   (6659, 5): b'\x01\x05\x10`',
+                   (6659, 6): b'\x01\x06\x10`',
+                   (6659, 7): b'\x01\x07\x10`',
+                   (6659, 8): b'\x01\x00\x00\x00',
+                   (6659, 9): b'\x03\x00\x00\x00',
+                   (6659, 10): b'\x01\x0c\x10`',
+                   (6659, 11): b'\x01\r\x10`',
+                   (6659, 12): b'\x01\x0e\x10`',
+                   (6659, 13): b'\x01\x00\x00\x00',
+                   (6659, 14): b'\x01\x10\x10`',
+                   (6660, 1): b'\x10\x11\x10`',
+                   (6660, 2): b'\x10\x12\x10`',
+                   (6661, 1): b'\x01\x01 `',
+                   (6661, 2): b'\x01\x02 `',
+                   (6661, 3): b'\x01\x03 `',
+                   (6661, 4): b'\x01\x04 `',
+                   (6661, 5): b'\x01\x05 `',
+                   (6661, 6): b'\x01\x06 `',
+                   (6661, 7): b'\x01\x07 `',
+                   (6661, 8): b'\x01\x00\x00\x00',
+                   (6661, 9): b'\x08\x00\x00\x00',
+                   (6662, 1): b'\x01\x01 `',
+                   (6662, 2): b'\x01\x02 `',
+                   (6662, 3): b'\x01\x03 `',
+                   (6662, 4): b'\x01\x04 `',
+                   (6662, 5): b'\x01\x05 `',
+                   (6662, 6): b'\x01\x06 `',
+                   (6662, 7): b'\x01\x07 `',
+                   (6662, 8): b'\x01\x00\x00\x00',
+                   (6662, 9): b'\x08\x00\x00\x00',
+                   (6662, 10): b' \x11 `',
+                   (6662, 11): b'\x10! `',
+                   (6662, 12): b' " `',
+                   (7168, 1): b'\x01',
+                   (7168, 2): b'\x02',
+                   (7168, 3): b'\x03',
+                   (7168, 4): b'\x04',
+                   (7186, 1): b'\x00\x16',
+                   (7186, 2): b'\x02\x16',
+                   (7186, 3): b'\x04\x16',
+                   (7187, 1): b'\x00\x1a',
+                   (7187, 2): b'\x03\x1a',
+                   (7187, 3): b'\x00\x00',
+                   (7187, 4): b'\x00\x00',
+                   (7187, 5): b'\x00\x00',
+                   (7218, 1): b'\x01\x00',
+                   (7218, 2): b'@B\x0f\x00',
+                   (7218, 3): b'\x00\x00\x00\x00',
+                   (7218, 4): b'\x07\x08',
+                   (7218, 5): b'\x90\xd0\x03\x00',
+                   (7218, 6): b'\x00\x00\x00\x00',
+                   (7218, 7): b'\x00\x00\x00\x00',
+                   (7218, 8): b'\x00\x00',
+                   (7218, 9): b'\x00\x00\x00\x00',
+                   (7218, 11): b'\x00\x00',
+                   (7218, 12): b'\x00\x00',
+                   (7218, 13): b'\x00\x00',
+                   (7218, 32): b'\x00',
+                   (7219, 1): b'"\x00',
+                   (7219, 2): b'@B\x0f\x00',
+                   (7219, 3): b'\x00\x00\x00\x00',
+                   (7219, 4): b'\x07\x08',
+                   (7219, 5): b'\x90\xd0\x03\x00',
+                   (7219, 6): b'\x90\xd0\x03\x00',
+                   (7219, 7): b'\x00\x00\x00\x00',
+                   (7219, 8): b'\x00\x00',
+                   (7219, 9): b'\x00\x00\x00\x00',
+                   (7219, 11): b'\x00\x00',
+                   (7219, 12): b'\x00\x00',
+                   (7219, 13): b'\x00\x00',
+                   (7219, 32): b'\x00',
+                   (24576, 1): b'\x00',
+                   (24576, 2): b'\x00',
+                   (24576, 3): b'\x00',
+                   (24576, 4): b'\x00',
+                   (24576, 5): b'\x00',
+                   (24576, 8): b'\x00',
+                   (24576, 9): b'\x00',
+                   (24576, 10): b'\x00',
+                   (24576, 11): b'\x00',
+                   (24576, 13): b'\x00',
+                   (24576, 14): b'\x00',
+                   (24576, 16): b'\x00',
+                   (24576, 17): b'\x00\x00\x00\x00',
+                   (24576, 18): b'\x00\x00\x00\x00',
+                   (24576, 22): b'\x00\x00\x00\x00',
+                   (24592, 1): b'\x00',
+                   (24592, 2): b'\x00',
+                   (24592, 3): b'\x00',
+                   (24592, 4): b'\x01',
+                   (24592, 5): b'\x00',
+                   (24592, 6): b'\x00',
+                   (24592, 7): b'\x00',
+                   (24592, 12): b'\x01',
+                   (24592, 13): b'\x01',
+                   (24592, 14): b'\x00',
+                   (24592, 16): b'\x00',
+                   (24592, 17): b'\x00\x00',
+                   (24592, 18): b'\x00\x00',
+                   (24608, 1): b'\x00',
+                   (24608, 2): b'\x00',
+                   (24608, 3): b'\x01',
+                   (24608, 4): b'\x00',
+                   (24608, 5): b'\x00',
+                   (24608, 6): b'\x00',
+                   (24608, 7): b'\x00',
+                   (24608, 17): b'\x00\x00\x00\x00',
+                   (24608, 33): b'\x00\x00',
+                   (24608, 34): b'\x00\x00\x00\x00',
+                   (28672, 1): b'\x00',
+                   (28672, 2): b'\x00',
+                   (28672, 3): b'\x00',
+                   (28672, 4): b'\x00',
+                   (28672, 17): b'\x00\x00\x00\x00',
+                   (28688, 1): b'\x00',
+                   (28688, 2): b'\x00',
+                   (28688, 3): b'\x00',
+                   (28688, 17): b'\x00\x00\x00\x00',
+                   (28688, 33): b'\x00\x00',
+                   (28704, 1): b'\x00',
+                   (28704, 2): b'\x00',
+                   (28704, 17): b'\x00\x00\x00\x00',
+                   (28704, 33): b'\x00\x00',
+                   (28704, 34): b'\x00\x00',
+                   (28704, 35): b'\x00\x00',
+                   (28704, 36): b'\x00\x00',
+                   (32768, 8): b'\x00',
+                   (32768, 10): b'\x00',
+                   (32768, 14): b'\x00',
+                   (32784, 1): b'\xf4\x01',
+                   (32784, 2): b'\xfa\x00',
+                   (32784, 3): b'P\xc3',
+                   (32784, 4): b'd\x00',
+                   (32784, 5): b'\x00\x00',
+                   (32784, 6): b'\xc8\x00',
+                   (32784, 7): b'\x01\x00',
+                   (32784, 9): b'\x00\x00',
+                   (32784, 16): b'd\x00',
+                   (32784, 17): b'\x96\x00',
+                   (32785, 1): b'\x90\x01',
+                   (32785, 2): b'\x04\x00',
+                   (32785, 3): b'\x00',
+                   (32785, 5): b'\x00',
+                   (32785, 6): b'\x00\x00',
+                   (32785, 7): b'd\x00',
+                   (32785, 8): b'd\x00',
+                   (32786, 1): b'\x00',
+                   (32786, 5): b'\x01',
+                   (32786, 8): b'\x01',
+                   (32786, 9): b'\x00',
+                   (32786, 17): b'\x03',
+                   (32786, 25): b'\x04',
+                   (32786, 48): b'\x01',
+                   (32786, 49): b'\x01',
+                   (32786, 50): b'\x00',
+                   (32786, 54): b'\x00',
+                   (32787, 1): b'\xe8\x03',
+                   (32787, 2): b'\x00\x00',
+                   (32787, 3): b'\x00',
+                   (32787, 5): b'\x00',
+                   (32787, 6): b'\x00\x00',
+                   (32787, 7): b'\x00\x00',
+                   (32787, 8): b'\x00\x00',
+                   (32800, 1): b'd\x00',
+                   (32800, 2): b"\x10'",
+                   (32800, 3): b'\xe8\x03',
+                   (32800, 4): b'\xe8\x03',
+                   (32800, 5): b'\xe8\x03',
+                   (32800, 6): b'\xe8\x03',
+                   (32800, 7): b'd\x00',
+                   (32800, 8): b'\x00\x00\x00\x00',
+                   (32800, 9): b'd\x00',
+                   (32800, 10): b'\n\x00',
+                   (32800, 11): b'\n\x00',
+                   (32800, 12): b'\xe8\x03',
+                   (32800, 13): b'2\x00',
+                   (32800, 14): b'\x00\x00\x00\x00',
+                   (32800, 15): b'\x00\x00\x00\x00',
+                   (32800, 16): b'\x00\x00',
+                   (32801, 1): b'\x01\x00',
+                   (32801, 17): b'\x00',
+                   (32801, 19): b'\x01',
+                   (32801, 20): b'\x00',
+                   (32801, 21): b'\x00',
+                   (32801, 22): b'\x00',
+                   (36880, 1): b'\x00',
+                   (36880, 2): b'\x00',
+                   (36880, 3): b'\x00',
+                   (36880, 4): b'\x00',
+                   (36880, 5): b'\x00',
+                   (36880, 6): b'\x00',
+                   (36880, 7): b'\x00',
+                   (36880, 8): b'\x00',
+                   (36880, 9): b'\x00',
+                   (36880, 19): b'\x00',
+                   (36896, 1): b'\x00\x00',
+                   (36896, 3): b'\x00\x00',
+                   (36896, 4): b'\x00\x00\x00\x00',
+                   (40976, 1): b'\x00',
+                   (40976, 2): b'\x00',
+                   (40976, 3): b'\x00',
+                   (40976, 4): b'\x00',
+                   (40976, 5): b'\x00',
+                   (40976, 6): b'\x00',
+                   (40976, 7): b'\x00',
+                   (40976, 8): b'\x01',
+                   (40976, 9): b'\x01',
+                   (40976, 10): b'\x00',
+                   (40976, 17): b'\x00',
+                   (40992, 1): b'\x00',
+                   (40992, 2): b'\x00',
+                   (40992, 3): b'\x00',
+                   (40992, 4): b'\x00',
+                   (40992, 5): b'\x00',
+                   (40992, 6): b'\x00',
+                   (61440, 1): b'\x10\x00',
+                   (61440, 2): b'\x03\x00',
+                   (61448, 0): b'\x00\x00\x00\x00',
+                   (61456, 1): b'\xff\x01\x00\x00',
+                   (61456, 2): b'\xbf\x02\x00\x00',
+                   (61456, 3): b'\xc0\x02\x00\x00',
+                   (61569, 1): b'\x00\x00\x00\x00',
+                   (63503, 1): b'\x00}',
+                   (63503, 2): b'\x02\x01',
+                   (63503, 3): b'\x14\x00',
+                   (63503, 4): b'P',
+                   (63503, 5): b'd',
+                   (63503, 6): b'\n\x00',
+                   (63503, 7): b'r\xe8',
+                   (63503, 8): b'J\xe8',
+                   (63744, 1): b'J\xe8',
+                   (63744, 2): b'J\xe8',
+                   (63744, 4): b'J\xe8',
+                   (63744, 5): b'J\xe8',
+                   (63744, 6): b'J\xe8',
+                   (64256, 1): b'\x00\x00',
+                   (64256, 2): b'\x00',
+                   (64256, 3): b'\x00\x00\x00\x00'}},
+    {   'eeprom': b'\x05\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\xaf\x00\x02\x00\x00\x00R0\x86\x17\x00\x00\x13\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x10\xf4\x00\xf4\x10\xf4\x00\x00\x10\x80\x00'
+                  b'\x80\x10\x80\x00\x0c\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x03\x00\x08\x00\x8fa\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+                  b'\x0f\x00\x01\x00\n\x00-\x00\x04\x06EL6022\rCommunicati'
+                  b'on\x1eKommunikationsklemmen (EL6xxx)$EL6022 Schnittstelle 2'
+                  b"K. (RS422/485)\x1e\x00\x10\x00\x02\x00\x01\x04\x0c'"
+                  b'\x01\x00\x00\x00\r\x04\x0e\x01\x03\x003\x00\x00\x00\x00\x00'
+                  b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00'
+                  b'\x02\x00\x01\x02\x03\xff)\x00\x10\x00\x00\x10\x80\x00&\x00'
+                  b'\x01\x01\x80\x10\x80\x00"\x00\x01\x02\x00\x110\x00$\x00'
+                  b'\x01\x03 \x120\x00 \x00\x01\x04',
+        'sdo': {   (4096, 0): b'\x89\x13X\x02',
+                   (4104, 0): b'EL6022',
+                   (4105, 0): b'08',
+                   (4106, 0): b'03',
+                   (4113, 1): b'\x00\x00\x00\x00',
+                   (4120, 1): b'\x02\x00\x00\x00',
+                   (4120, 2): b'R0\x86\x17',
+                   (4120, 3): b'\x00\x00\x10\x00',
+                   (4120, 4): b'\x00\x00\x00\x00',
+                   (4336, 1): b'\xbeK\x00\x00',
+                   (5120, 6): b'\x04\x16',
+                   (5121, 6): b'\x05\x16',
+                   (5124, 6): b'\x00\x16',
+                   (5125, 6): b'\x01\x16',
+                   (5632, 1): b'\x01\x01\x00p',
+                   (5632, 2): b'\x01\x02\x00p',
+                   (5632, 3): b'\x01\x03\x00p',
+                   (5632, 4): b'\x01\x04\x00p',
+                   (5632, 5): b'\x04\x00\x00\x00',
+                   (5632, 6): b'\x08\t\x00p',
+                   (5632, 7): b'\x08\x11\x00p',
+                   (5632, 8): b'\x08\x12\x00p',
+                   (5632, 9): b'\x08\x13\x00p',
+                   (5632, 10): b'\x08\x14\x00p',
+                   (5632, 11): b'\x08\x15\x00p',
+                   (5632, 12): b'\x08\x16\x00p',
+                   (5632, 13): b'\x08\x17\x00p',
+                   (5632, 14): b'\x08\x18\x00p',
+                   (5632, 15): b'\x08\x19\x00p',
+                   (5632, 16): b'\x08\x1a\x00p',
+                   (5632, 17): b'\x08\x1b\x00p',
+                   (5632, 18): b'\x08\x1c\x00p',
+                   (5632, 19): b'\x08\x1d\x00p',
+                   (5632, 20): b'\x08\x1e\x00p',
+                   (5632, 21): b'\x08\x1f\x00p',
+                   (5632, 22): b'\x08 \x00p',
+                   (5632, 23): b'\x08!\x00p',
+                   (5632, 24): b'\x08"\x00p',
+                   (5632, 25): b'\x08#\x00p',
+                   (5632, 26): b'\x08$\x00p',
+                   (5632, 27): b'\x08%\x00p',
+                   (5632, 28): b'\x08&\x00p',
+                   (5633, 1): b'\x01\x01\x10p',
+                   (5633, 2): b'\x01\x02\x10p',
+                   (5633, 3): b'\x01\x03\x10p',
+                   (5633, 4): b'\x01\x04\x10p',
+                   (5633, 5): b'\x04\x00\x00\x00',
+                   (5633, 6): b'\x08\t\x10p',
+                   (5633, 7): b'\x08\x11\x10p',
+                   (5633, 8): b'\x08\x12\x10p',
+                   (5633, 9): b'\x08\x13\x10p',
+                   (5633, 10): b'\x08\x14\x10p',
+                   (5633, 11): b'\x08\x15\x10p',
+                   (5633, 12): b'\x08\x16\x10p',
+                   (5633, 13): b'\x08\x17\x10p',
+                   (5633, 14): b'\x08\x18\x10p',
+                   (5633, 15): b'\x08\x19\x10p',
+                   (5633, 16): b'\x08\x1a\x10p',
+                   (5633, 17): b'\x08\x1b\x10p',
+                   (5633, 18): b'\x08\x1c\x10p',
+                   (5633, 19): b'\x08\x1d\x10p',
+                   (5633, 20): b'\x08\x1e\x10p',
+                   (5633, 21): b'\x08\x1f\x10p',
+                   (5633, 22): b'\x08 \x10p',
+                   (5633, 23): b'\x08!\x10p',
+                   (5633, 24): b'\x08"\x10p',
+                   (5633, 25): b'\x08#\x10p',
+                   (5633, 26): b'\x08$\x10p',
+                   (5633, 27): b'\x08%\x10p',
+                   (5633, 28): b'\x08&\x10p',
+                   (5636, 1): b'\x10\x01\x01p',
+                   (5636, 2): b'\x08\x11\x00p',
+                   (5636, 3): b'\x08\x12\x00p',
+                   (5636, 4): b'\x08\x13\x00p',
+                   (5636, 5): b'\x08\x14\x00p',
+                   (5636, 6): b'\x08\x15\x00p',
+                   (5636, 7): b'\x08\x16\x00p',
+                   (5636, 8): b'\x08\x17\x00p',
+                   (5636, 9): b'\x08\x18\x00p',
+                   (5636, 10): b'\x08\x19\x00p',
+                   (5636, 11): b'\x08\x1a\x00p',
+                   (5636, 12): b'\x08\x1b\x00p',
+                   (5636, 13): b'\x08\x1c\x00p',
+                   (5636, 14): b'\x08\x1d\x00p',
+                   (5636, 15): b'\x08\x1e\x00p',
+                   (5636, 16): b'\x08\x1f\x00p',
+                   (5636, 17): b'\x08 \x00p',
+                   (5636, 18): b'\x08!\x00p',
+                   (5636, 19): b'\x08"\x00p',
+                   (5636, 20): b'\x08#\x00p',
+                   (5636, 21): b'\x08$\x00p',
+                   (5636, 22): b'\x08%\x00p',
+                   (5636, 23): b'\x08&\x00p',
+                   (5637, 1): b'\x10\x01\x11p',
+                   (5637, 2): b'\x08\x11\x10p',
+                   (5637, 3): b'\x08\x12\x10p',
+                   (5637, 4): b'\x08\x13\x10p',
+                   (5637, 5): b'\x08\x14\x10p',
+                   (5637, 6): b'\x08\x15\x10p',
+                   (5637, 7): b'\x08\x16\x10p',
+                   (5637, 8): b'\x08\x17\x10p',
+                   (5637, 9): b'\x08\x18\x10p',
+                   (5637, 10): b'\x08\x19\x10p',
+                   (5637, 11): b'\x08\x1a\x10p',
+                   (5637, 12): b'\x08\x1b\x10p',
+                   (5637, 13): b'\x08\x1c\x10p',
+                   (5637, 14): b'\x08\x1d\x10p',
+                   (5637, 15): b'\x08\x1e\x10p',
+                   (5637, 16): b'\x08\x1f\x10p',
+                   (5637, 17): b'\x08 \x10p',
+                   (5637, 18): b'\x08!\x10p',
+                   (5637, 19): b'\x08"\x10p',
+                   (5637, 20): b'\x08#\x10p',
+                   (5637, 21): b'\x08$\x10p',
+                   (5637, 22): b'\x08%\x10p',
+                   (5637, 23): b'\x08&\x10p',
+                   (6144, 6): b'\x04\x1a',
+                   (6145, 6): b'\x05\x1a',
+                   (6148, 6): b'\x00\x1a',
+                   (6149, 6): b'\x01\x1a',
+                   (6656, 1): b'\x01\x01\x00`',
+                   (6656, 2): b'\x01\x02\x00`',
+                   (6656, 3): b'\x01\x03\x00`',
+                   (6656, 4): b'\x01\x04\x00`',
+                   (6656, 5): b'\x01\x05\x00`',
+                   (6656, 6): b'\x01\x06\x00`',
+                   (6656, 7): b'\x01\x07\x00`',
+                   (6656, 8): b'\x01\x00\x00\x00',
+                   (6656, 9): b'\x08\t\x00`',
+                   (6656, 10): b'\x08\x11\x00`',
+                   (6656, 11): b'\x08\x12\x00`',
+                   (6656, 12): b'\x08\x13\x00`',
+                   (6656, 13): b'\x08\x14\x00`',
+                   (6656, 14): b'\x08\x15\x00`',
+                   (6656, 15): b'\x08\x16\x00`',
+                   (6656, 16): b'\x08\x17\x00`',
+                   (6656, 17): b'\x08\x18\x00`',
+                   (6656, 18): b'\x08\x19\x00`',
+                   (6656, 19): b'\x08\x1a\x00`',
+                   (6656, 20): b'\x08\x1b\x00`',
+                   (6656, 21): b'\x08\x1c\x00`',
+                   (6656, 22): b'\x08\x1d\x00`',
+                   (6656, 23): b'\x08\x1e\x00`',
+                   (6656, 24): b'\x08\x1f\x00`',
+                   (6656, 25): b'\x08 \x00`',
+                   (6656, 26): b'\x08!\x00`',
+                   (6656, 27): b'\x08"\x00`',
+                   (6656, 28): b'\x08#\x00`',
+                   (6656, 29): b'\x08$\x00`',
+                   (6656, 30): b'\x08%\x00`',
+                   (6656, 31): b'\x08&\x00`',
+                   (6657, 1): b'\x01\x01\x10`',
+                   (6657, 2): b'\x01\x02\x10`',
+                   (6657, 3): b'\x01\x03\x10`',
+                   (6657, 4): b'\x01\x04\x10`',
+                   (6657, 5): b'\x01\x05\x10`',
+                   (6657, 6): b'\x01\x06\x10`',
+                   (6657, 7): b'\x01\x07\x10`',
+                   (6657, 8): b'\x01\x00\x00\x00',
+                   (6657, 9): b'\x08\t\x10`',
+                   (6657, 10): b'\x08\x11\x10`',
+                   (6657, 11): b'\x08\x12\x10`',
+                   (6657, 12): b'\x08\x13\x10`',
+                   (6657, 13): b'\x08\x14\x10`',
+                   (6657, 14): b'\x08\x15\x10`',
+                   (6657, 15): b'\x08\x16\x10`',
+                   (6657, 16): b'\x08\x17\x10`',
+                   (6657, 17): b'\x08\x18\x10`',
+                   (6657, 18): b'\x08\x19\x10`',
+                   (6657, 19): b'\x08\x1a\x10`',
+                   (6657, 20): b'\x08\x1b\x10`',
+                   (6657, 21): b'\x08\x1c\x10`',
+                   (6657, 22): b'\x08\x1d\x10`',
+                   (6657, 23): b'\x08\x1e\x10`',
+                   (6657, 24): b'\x08\x1f\x10`',
+                   (6657, 25): b'\x08 \x10`',
+                   (6657, 26): b'\x08!\x10`',
+                   (6657, 27): b'\x08"\x10`',
+                   (6657, 28): b'\x08#\x10`',
+                   (6657, 29): b'\x08$\x10`',
+                   (6657, 30): b'\x08%\x10`',
+                   (6657, 31): b'\x08&\x10`',
+                   (6660, 1): b'\x10\x01\x01`',
+                   (6660, 2): b'\x08\x11\x00`',
+                   (6660, 3): b'\x08\x12\x00`',
+                   (6660, 4): b'\x08\x13\x00`',
+                   (6660, 5): b'\x08\x14\x00`',
+                   (6660, 6): b'\x08\x15\x00`',
+                   (6660, 7): b'\x08\x16\x00`',
+                   (6660, 8): b'\x08\x17\x00`',
+                   (6660, 9): b'\x08\x18\x00`',
+                   (6660, 10): b'\x08\x19\x00`',
+                   (6660, 11): b'\x08\x1a\x00`',
+                   (6660, 12): b'\x08\x1b\x00`',
+                   (6660, 13): b'\x08\x1c\x00`',
+                   (6660, 14): b'\x08\x1d\x00`',
+                   (6660, 15): b'\x08\x1e\x00`',
+                   (6660, 16): b'\x08\x1f\x00`',
+                   (6660, 17): b'\x08 \x00`',
+                   (6660, 18): b'\x08!\x00`',
+                   (6660, 19): b'\x08"\x00`',
+                   (6660, 20): b'\x08#\x00`',
+                   (6660, 21): b'\x08$\x00`',
+                   (6660, 22): b'\x08%\x00`',
+                   (6660, 23): b'\x08&\x00`',
+                   (6661, 1): b'\x10\x01\x11`',
+                   (6661, 2): b'\x08\x11\x10`',
+                   (6661, 3): b'\x08\x12\x10`',
+                   (6661, 4): b'\x08\x13\x10`',
+                   (6661, 5): b'\x08\x14\x10`',
+                   (6661, 6): b'\x08\x15\x10`',
+                   (6661, 7): b'\x08\x16\x10`',
+                   (6661, 8): b'\x08\x17\x10`',
+                   (6661, 9): b'\x08\x18\x10`',
+                   (6661, 10): b'\x08\x19\x10`',
+                   (6661, 11): b'\x08\x1a\x10`',
+                   (6661, 12): b'\x08\x1b\x10`',
+                   (6661, 13): b'\x08\x1c\x10`',
+                   (6661, 14): b'\x08\x1d\x10`',
+                   (6661, 15): b'\x08\x1e\x10`',
+                   (6661, 16): b'\x08\x1f\x10`',
+                   (6661, 17): b'\x08 \x10`',
+                   (6661, 18): b'\x08!\x10`',
+                   (6661, 19): b'\x08"\x10`',
+                   (6661, 20): b'\x08#\x10`',
+                   (6661, 21): b'\x08$\x10`',
+                   (6661, 22): b'\x08%\x10`',
+                   (6661, 23): b'\x08&\x10`',
+                   (7168, 1): b'\x01',
+                   (7168, 2): b'\x02',
+                   (7168, 3): b'\x03',
+                   (7168, 4): b'\x04',
+                   (7186, 1): b'\x04\x16',
+                   (7186, 2): b'\x05\x16',
+                   (7187, 1): b'\x04\x1a',
+                   (7187, 2): b'\x05\x1a',
+                   (7218, 1): b'\x00\x00',
+                   (7218, 2): b'\x00\xe2\x04\x00',
+                   (7218, 3): b'\x00\x00\x00\x00',
+                   (7218, 4): b'\x01\x00',
+                   (7218, 5): b'\x80M\x00\x00',
+                   (7218, 6): b'\x00\x00\x00\x00',
+                   (7218, 7): b'\x00\x00\x00\x00',
+                   (7218, 8): b'\x00\x00',
+                   (7218, 9): b'\x00\x00\x00\x00',
+                   (7218, 11): b'\x00\x00',
+                   (7218, 12): b'\x00\x00',
+                   (7218, 13): b'\x00\x00',
+                   (7218, 32): b'\x00',
+                   (7219, 1): b'\x00\x00',
+                   (7219, 2): b'\x00\xe2\x04\x00',
+                   (7219, 3): b'\x00\x00\x00\x00',
+                   (7219, 4): b'\x01\x00',
+                   (7219, 5): b'\x80M\x00\x00',
+                   (7219, 6): b'\x00\x00\x00\x00',
+                   (7219, 7): b'\x00\x00\x00\x00',
+                   (7219, 8): b'\x00\x00',
+                   (7219, 9): b'\x00\x00\x00\x00',
+                   (7219, 11): b'\x00\x00',
+                   (7219, 12): b'\x00\x00',
+                   (7219, 13): b'\x00\x00',
+                   (7219, 32): b'\x00',
+                   (24576, 1): b'\x00',
+                   (24576, 2): b'\x00',
+                   (24576, 3): b'\x00',
+                   (24576, 4): b'\x00',
+                   (24576, 5): b'\x00',
+                   (24576, 6): b'\x00',
+                   (24576, 7): b'\x00',
+                   (24576, 9): b'\x00',
+                   (24576, 17): b'\x00',
+                   (24576, 18): b'\x00',
+                   (24576, 19): b'\x00',
+                   (24576, 20): b'\x00',
+                   (24576, 21): b'\x00',
+                   (24576, 22): b'\x00',
+                   (24576, 23): b'\x00',
+                   (24576, 24): b'\x00',
+                   (24576, 25): b'\x00',
+                   (24576, 26): b'\x00',
+                   (24576, 27): b'\x00',
+                   (24576, 28): b'\x00',
+                   (24576, 29): b'\x00',
+                   (24576, 30): b'\x00',
+                   (24576, 31): b'\x00',
+                   (24576, 32): b'\x00',
+                   (24576, 33): b'\x00',
+                   (24576, 34): b'\x00',
+                   (24576, 35): b'\x00',
+                   (24576, 36): b'\x00',
+                   (24576, 37): b'\x00',
+                   (24576, 38): b'\x00',
+                   (24577, 1): b'\x00\x00',
+                   (24592, 1): b'\x00',
+                   (24592, 2): b'\x00',
+                   (24592, 3): b'\x00',
+                   (24592, 4): b'\x00',
+                   (24592, 5): b'\x00',
+                   (24592, 6): b'\x00',
+                   (24592, 7): b'\x00',
+                   (24592, 9): b'\x00',
+                   (24592, 17): b'\x00',
+                   (24592, 18): b'\x00',
+                   (24592, 19): b'\x00',
+                   (24592, 20): b'\x00',
+                   (24592, 21): b'\x00',
+                   (24592, 22): b'\x00',
+                   (24592, 23): b'\x00',
+                   (24592, 24): b'\x00',
+                   (24592, 25): b'\x00',
+                   (24592, 26): b'\x00',
+                   (24592, 27): b'\x00',
+                   (24592, 28): b'\x00',
+                   (24592, 29): b'\x00',
+                   (24592, 30): b'\x00',
+                   (24592, 31): b'\x00',
+                   (24592, 32): b'\x00',
+                   (24592, 33): b'\x00',
+                   (24592, 34): b'\x00',
+                   (24592, 35): b'\x00',
+                   (24592, 36): b'\x00',
+                   (24592, 37): b'\x00',
+                   (24592, 38): b'\x00',
+                   (24593, 1): b'\x00\x00',
+                   (28672, 1): b'\x00',
+                   (28672, 2): b'\x00',
+                   (28672, 3): b'\x00',
+                   (28672, 4): b'\x00',
+                   (28672, 9): b'\x00',
+                   (28672, 17): b'\x00',
+                   (28672, 18): b'\x00',
+                   (28672, 19): b'\x00',
+                   (28672, 20): b'\x00',
+                   (28672, 21): b'\x00',
+                   (28672, 22): b'\x00',
+                   (28672, 23): b'\x00',
+                   (28672, 24): b'\x00',
+                   (28672, 25): b'\x00',
+                   (28672, 26): b'\x00',
+                   (28672, 27): b'\x00',
+                   (28672, 28): b'\x00',
+                   (28672, 29): b'\x00',
+                   (28672, 30): b'\x00',
+                   (28672, 31): b'\x00',
+                   (28672, 32): b'\x00',
+                   (28672, 33): b'\x00',
+                   (28672, 34): b'\x00',
+                   (28672, 35): b'\x00',
+                   (28672, 36): b'\x00',
+                   (28672, 37): b'\x00',
+                   (28672, 38): b'\x00',
+                   (28673, 1): b'\x00\x00',
+                   (28688, 1): b'\x00',
+                   (28688, 2): b'\x00',
+                   (28688, 3): b'\x00',
+                   (28688, 4): b'\x00',
+                   (28688, 9): b'\x00',
+                   (28688, 17): b'\x00',
+                   (28688, 18): b'\x00',
+                   (28688, 19): b'\x00',
+                   (28688, 20): b'\x00',
+                   (28688, 21): b'\x00',
+                   (28688, 22): b'\x00',
+                   (28688, 23): b'\x00',
+                   (28688, 24): b'\x00',
+                   (28688, 25): b'\x00',
+                   (28688, 26): b'\x00',
+                   (28688, 27): b'\x00',
+                   (28688, 28): b'\x00',
+                   (28688, 29): b'\x00',
+                   (28688, 30): b'\x00',
+                   (28688, 31): b'\x00',
+                   (28688, 32): b'\x00',
+                   (28688, 33): b'\x00',
+                   (28688, 34): b'\x00',
+                   (28688, 35): b'\x00',
+                   (28688, 36): b'\x00',
+                   (28688, 37): b'\x00',
+                   (28688, 38): b'\x00',
+                   (28689, 1): b'\x00\x00',
+                   (32768, 2): b'\x00',
+                   (32768, 3): b'\x00',
+                   (32768, 4): b'\x00',
+                   (32768, 5): b'\x01',
+                   (32768, 6): b'\x01',
+                   (32768, 7): b'\x01',
+                   (32768, 17): b'\x06',
+                   (32768, 21): b'\x03',
+                   (32768, 26): b'P\x03',
+                   (32784, 2): b'\x00',
+                   (32784, 3): b'\x00',
+                   (32784, 4): b'\x00',
+                   (32784, 5): b'\x01',
+                   (32784, 6): b'\x01',
+                   (32784, 7): b'\x01',
+                   (32784, 17): b'\x06',
+                   (32784, 21): b'\x03',
+                   (32784, 26): b'P\x03',
+                   (40960, 1): b'\x00',
+                   (40960, 2): b'\x00',
+                   (40960, 3): b'\x00',
+                   (40960, 4): b'\x00',
+                   (40960, 5): b'\x00',
+                   (40960, 17): b'\x00\x00',
+                   (40960, 18): b'\x00\x00',
+                   (40976, 1): b'\x00',
+                   (40976, 2): b'\x00',
+                   (40976, 3): b'\x00',
+                   (40976, 4): b'\x00',
+                   (40976, 5): b'\x00',
+                   (40976, 17): b'\x00\x00',
+                   (40976, 18): b'\x00\x00',
+                   (61440, 1): b'\x10\x00',
+                   (61440, 2): b'\x02\x00',
+                   (61448, 0): b'\x00\x00\x00\x00',
+                   (61456, 1): b'X\x02\x00\x00',
+                   (61456, 2): b'X\x02\x00\x00'}}]
diff --git a/pyproject.toml b/pyproject.toml
index 995d3a93148669770bc8c9e9a5789b7200803e19..f415737a218c7d92bcc31cbe3db6af37892620f5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,3 +6,5 @@ dependencies = []
 [project.scripts]
 ec-scanbus = "ebpfcat.scripts:scanbus"
 ec-info = "ebpfcat.scripts:info"
+ec-eeprom = "ebpfcat.scripts:eeprom"
+ec-create-test = "ebpfcat.scripts:create_test"