hfmodemDocumentation

compress.py

# SPDX-License-Identifier: AGPL-3.0-only
# SPDX-FileCopyrightText: 2026 Saul St John (W9SSJ)

"""PACTOR field compression: Huffman, PMC and run length.

The published protocol description prints the decoder skeletons and the whole of
both coding tables, and states that PACTOR-2, -3 and -4 share them (SCS PACTOR-4
protocol description §12, pp. 22-41). `HUFTAB` and `REFTAB` below are that
printed data, transcribed.

`HUFTAB` is 33 consecutive 254-entry trees: the plain Huffman tree first, then
sixteen German PMC context trees, then the same sixteen for English. Every tree
is a complete binary tree over the 128-symbol alphabet -- 127 internal nodes,
two entries each. An entry below 768 is the offset of a child node in the same
tree, in units of two bytes; an entry above 767 is a leaf carrying its symbol in
the low byte. `REFTAB[c]` is the offset of the context tree to use after
emitting `c`, or zero for the 112 characters that fall back to plain Huffman.
Bits are consumed least-significant first within each byte.

`encode_field` applies the selected transmit policy while `pmc` encodes the
robust bridge callsign in PMC English. A receiver
reads what the peer's status byte declares, and a real station declares all of
it: the DL6MAA recording in the regression corpus carries PMC German, PMC
English and case-swapped fields in one transfer. The supervisor layer above the
compressors runs BOTH ways (`transparent`, `Supervisor`); it is the only thing
that makes 0x1C, 0x1D and 0x1E reach a peer as data.

Three facts the printed skeletons do not state, each measured on that recording
-- it carries the SCS PTC-II manual, so the plaintext is known:

  * EVERY FIELD IS CODED FRESH. The coder's context does not carry from one
    packet to the next: decoded independently, each field opens in clean
    plaintext and the concatenation reads continuously; decoded as one stream,
    every field boundary opens tens of characters of soup. Text still SPANS
    fields -- "Datentransparenz" arrives split "...Datentransparen" + "z" -- it
    is the coder state that restarts, not the sentence. The run-length layer
    rides the sentence, not the coder, and is the one carry (`Decoder`).
  * SYMBOL 0x7F IS AN ESCAPE, not a character. Seven raw bits follow it in the
    same bit stream, least significant first, and the character is 0x80 plus
    their value. Read as a character instead, every umlaut in the German text
    opens a desynchronised stretch that runs until the tree walk happens to
    realign. That recording is PACTOR-3, and PACTOR-3 is the only level SCS's
    monitor reads the escape on: below it, symbols 0x0E..0x17 carry the
    umlauts (`_UMLAUTS`), which is why the German context trees give 0x0F,
    0x10 and 0x17 codes as short as five bits.
  * THE HIGH HALF IS CODEPAGE 437 -- the PTC's own terminal charset. "verf" +
    0x81 + "gbar", 0x94 in "m*glich", 0x84 in "sch*dliche", byte for byte.
    `decompress` returns the 8-bit stream; render it with `.decode("cp437")`.

PACTOR-1 declares its data mode in two status bits rather than three. The ARRL
PACTOR annex's 128 numeric entries match the base tree apart from its duplicated
closing-bracket entry (and its printed n/ASCII typo). That ambiguous symbol
uses ASCII fallback. Stock modern P1 transmission remains a separate gate.
Previously observed Winlink PACTOR-1 traffic measures type 0,
8-bit ASCII -- but "8-bit" does not mean transparent. 0x1E is IDLE and 0x1C
opens a supervisor block. The SCS reference decoder also expands raw 0x1D runs
in uncompressed P3 fields (2026-09-20 saved mail transfers); `transparent` quotes all three.
"""
from __future__ import annotations

from functools import lru_cache
from dataclasses import dataclass

from . import spec

RUN_PREFIX = 0x1D
"""Head of the three-symbol run-length code: prefix, code symbol, count."""

ESCAPE = 0x7F
"""The 8-bit escape: seven raw bits follow, the character is 0x80 + their value."""

ENGLISH_BIAS = 8128
"""Sixteen German context trees separate a context tree from its English twin."""

SB = 0x1C
"""ASCII FS, the supervisor byte: "das die normale Textausgabe auf die
Systemebene umlenkt". The byte after it is the supervisor function code."""

SIC_CONTROL = 0x60
"""Any SIC from 0x60 up, less this, is the character it carries: `a`..<DEL>
give 0x01 to 0x1F, "ermoeglicht volle Datentransparenz", and the only
transparency PACTOR-1 has. SCS's monitor subtracts without bounds, so 0x60
gives 0x00 and 0x80..0xFF give 0x20..0x9F; a SIC below 0x60 opens a block."""

SI_END = 0x20
"""<SPACE> closes a supervisor block that carries parameters rather than a
control character."""


def transparent(data: bytes) -> bytes:
    """`data` written so a PACTOR character stream carries it byte for byte.

    Three values are the stream's own: 0x1E is IDLE, 0x1C opens a supervisor
    block, and 0x1D opens a run even in uncompressed P3 packets. They use the two-byte
    supervisor sequence the 1990 description reserves for control characters.

    MEASURED against SCS's own monitor, 2026-09-01, at 200 Bd: the field
    `41 1c 7e 20 42 1c 7c 20 43 ...` reads back `A`, 0x1E, <SPACE>, `B`, 0x1C,
    <SPACE>, `C` -- so the SIC carries the character on its own and the space
    after it is ordinary text, not a terminator. A block whose SIC is below
    0x60 IS terminated by a space and yields nothing: `1c 1d 1e 1f 20`
    inside a run of 0x00-0xFF took all five bytes off the stream. Both rules
    hold across a packet boundary -- `1c` ending one field and `7e` opening the
    next still delivered one 0x1E."""
    out = bytearray()
    for byte in data:
        if byte in (spec.IDLE, SB, RUN_PREFIX):
            out += bytes((SB, SIC_CONTROL + byte))
        else:
            out.append(byte)
    return bytes(out)


def supervisor_block(text: str) -> bytes:
    """`text`, a function code and its parameters (`A 3`), as the block that
    carries them: SB, the code, the parameters, <SPACE>.

    Not through `transparent`, which is the whole point: this is the channel
    the escape borrows. The parameters may not hold the <SPACE> that ends them.
    A code from 0x60 up is a transparency pair on the peer's side, not a block:
    `1c 62` delivers 0x02 and the rest arrives as text."""
    code, params = text[:1], text[1:].lstrip(" ")
    if not 0x21 <= ord(code or " ") < SIC_CONTROL:
        raise ValueError(f"{code!r} is not a function code: one printable "
                         f"character from `!` to `_`")
    if not all(0x21 <= ord(c) <= 0x7E for c in params):
        raise ValueError(f"parameters {params!r} must be printable, with no "
                         f"<SPACE> -- it ends the block")
    return bytes((SB,)) + (code + params).encode("ascii") + bytes((SI_END,))


def bit_stream(data_type: int) -> bool:
    """Whether a field of this mode is a coded BIT stream rather than bytes.

    IDLE is a SYMBOL, "in beiden Faellen" -- so under a coded mode it is a code
    word and the byte 0x1E means nothing. DL6MAA's 200 Bd announcement is the
    proof on tape: eight bytes of Huffman then twelve of `spec.TEMPLATE`
    resumed at its ninth byte, `1e 1e` among them. Take those two out as
    padding and the bit stream desynchronises -- `1dl6maa\r` becomes
    `1dl6maa\r\x0frg d g d g d`."""
    return data_type in _PARTS


_TEXT, _SIC, _PARAMETERS = range(3)


class Supervisor:
    """One link direction's character stream turned back into host bytes.

    The inverse of `transparent`, and the layer above the compressors: "die
    gesamte SI laeuft wie gewoehnlicher Text ueber das PT-System", so a block
    is read after the coding trees rather than before them. Stateful, because a
    block can put its SB at the end of one packet and its function code at the
    start of the next -- MEASURED, `41*19 1c` then `7e 42*19` delivered one
    0x1E and nineteen `B`, and a parameter block's <SPACE> terminator closed it
    across the boundary just as readily.

    IT GOES ON THE LINK WITH `transparent` OR NOT AT ALL. The two are one
    change: a receiver that reads blocks off a transmitter that never writes
    them loses every 0x1C the host queued, and `test_mail`'s loopback catches
    that half. It cannot catch the absence of both -- `ptc.SimPeer` carries a
    payload as bytes and renders no field, so nothing there drops an IDLE. The
    witness for the pair is a keyed link, `test_p1transparent`.
    """

    def __init__(self):
        self._state = _TEXT
        self._block = bytearray()
        self.blocks: list[tuple[str, bytes]] = []
        """Function blocks read and not yet taken: code, parameters."""

    def feed(self, chars: bytes) -> bytes:
        out = bytearray()
        for c in chars:
            if c == spec.IDLE:
                continue
            if self._state == _SIC:
                if c >= SIC_CONTROL:
                    out.append(c - SIC_CONTROL)
                    self._state = _TEXT
                else:
                    self._block[:] = bytes((c,))
                    self._state = _PARAMETERS
            elif self._state == _PARAMETERS:
                if c == SI_END:
                    self.blocks.append((chr(self._block[0]), bytes(self._block[1:])))
                    self._state = _TEXT
                else:
                    self._block.append(c)
            elif c == SB:
                self._state = _SIC
            else:
                out.append(c)
        return bytes(out)


MODE_NAMES = {
    spec.DataType.ASCII_8BIT: "ASCII",
    spec.DataType.HUFFMAN: "Huffman",
    spec.DataType.HUFFMAN_SWAPPED: "Huffman swapped",
    spec.DataType.PMC_GERMAN: "PMC German",
    spec.DataType.PMC_GERMAN_SWAPPED: "PMC German swapped",
    spec.DataType.PMC_ENGLISH: "PMC English",
    spec.DataType.PMC_ENGLISH_SWAPPED: "PMC English swapped",
}

_PARTS = {
    spec.DataType.HUFFMAN: (False, False, False),
    spec.DataType.HUFFMAN_SWAPPED: (False, False, True),
    spec.DataType.PMC_GERMAN: (True, False, False),
    spec.DataType.PMC_GERMAN_SWAPPED: (True, False, True),
    spec.DataType.PMC_ENGLISH: (True, True, False),
    spec.DataType.PMC_ENGLISH_SWAPPED: (True, True, True),
}
"""(pmc, english, swapped) per data-type code. The three bits do not decompose
uniformly: 0b010 means swapped for plain Huffman but English for PMC."""


class Decoder:
    """One link direction's character stream, taken a packet field at a time.

    The coding trees restart with every field (module header), but the
    run-length layer rides the CHARACTER stream, which is continuous across
    fields: a run may put its prefix at the end of one packet and its code and
    count at the start of the next. Measured on the DL6MAA transfer -- the
    eleven-dash rule under "Allgemeines" arrives split exactly there, and
    per-field expansion prints "-" and "-j" where the peer wrote a line. So
    the one thing carried from field to field is an unfinished run's pending
    symbols, at most two of them.

    `feed` is total over every value the status byte's three-bit field can
    hold: ASCII_8BIT skips the coding trees but still expands runs; only the
    reserved value passes through untouched. A pure idle fill, what an ISS with an empty buffer
    transmits, decodes to b"".

    The protocol decides three things, in SCS's monitor's order after the tree
    walk and the case swap: the 0x7F escape is PACTOR-3's, the umlaut symbols
    are every other level's, and PACTOR-1 has no runs at all. A field fed
    without one is read at the protocol of the field before it -- PACTOR-3 on
    a fresh decoder.

    What comes out is still the wire's CHARACTER stream, not the host's bytes:
    `Supervisor` is the layer above this one and the peer's 0x1C blocks are
    still in here.
    """

    def __init__(self):
        self._pending: list[int] = []
        self.protocol = spec.Protocol.PACTOR3

    def feed(self, data: bytes, data_type: int,
             protocol: str | None = None) -> bytes:
        if protocol is not None:
            self.protocol = spec.Protocol(protocol)
        p3 = self.protocol is spec.Protocol.PACTOR3
        part = _PARTS.get(data_type)
        if data_type == spec.DataType.ASCII_8BIT:
            symbols = bytes(s for s in data if s != spec.IDLE)
        elif part is None:
            self._pending.clear()
            return data
        else:
            pmc, english, swapped = part
            symbols = bytes(s for s in _symbols(data, pmc, english, p3)
                            if s != spec.IDLE)
            if swapped:
                symbols = symbols.translate(_SWAP)
            if not p3:
                symbols = symbols.translate(_UMLAUTS)
        if self.protocol is spec.Protocol.PACTOR1:
            return symbols
        expanded, self._pending = _expand_runs(self._pending + list(symbols))
        return bytes(expanded)


def decompress(data: bytes, data_type: int, protocol: str | None = None) -> bytes:
    """One field on its own; a stream of them wants a `Decoder`."""
    return Decoder().feed(data, data_type, protocol)


@lru_cache(maxsize=33)
def _codes(table_offset: int) -> dict[int, tuple[int, ...]]:
    """Invert one of the published decoding trees."""
    codes = {}

    def walk(offset, path):
        for bit in (0, 1):
            entry = HUFTAB[(table_offset + offset + 2 * bit) >> 1]
            if entry > 767:
                codes[entry & 255] = path + (bit,)
            else:
                walk(entry, path + (bit,))

    walk(0, ())
    return codes


def pmc(text: str, *, field_bytes: int | None = None) -> bytes:
    """Encode an ASCII callsign line as type-6 PMC English.

    Each field starts with fresh context and an IDLE symbol, as measured on
    K4MCK's P2 announcement. Finish a partial byte with the next IDLE code;
    `field_bytes` continues that IDLE bitstream to the field boundary. This
    intentionally encodes ASCII text only, not arbitrary binary host data.
    """
    chars = transparent(text.encode("ascii"))
    bits, context = [], 0
    for symbol in bytes((spec.IDLE,)) + chars:
        bits.extend(_codes(context)[symbol])
        ref = REFTAB[symbol]
        context = ref + ENGLISH_BIAS if ref else 0
    size = (len(bits)+7)//8 if field_bytes is None else field_bytes
    if size*8 < len(bits):
        raise ValueError("PMC text exceeds field capacity")
    while len(bits) < size*8:
        bits.extend(_codes(context)[spec.IDLE])
        context = 0
    bits = bits[:size*8]
    return bytes(sum(b << j for j, b in enumerate(bits[i:i + 8]))
                 for i in range(0, len(bits), 8))


@dataclass(frozen=True)
class EncodedField:
    data: bytes
    data_type: int
    consumed: int
    bits: int


@lru_cache(maxsize=16)
def encode_field(chars: bytes, field_bytes: int, *, mode: int,
                 protocol=spec.Protocol.PACTOR3) -> EncodedField:
    """Fit a prefix of the transparent character stream into one physical field.

    MODE 0 is ASCII, MODE 1 adds plain Huffman, MODE 2 adds the context/case
    trees and runs. P1 MODE 2 uses MODE 1 and never runs. Context and padding
    restart per field; the caller retains the original prefix for peer credit.
    Unsupported coded symbols fall back to ASCII, including P3's literal DEL
    and the ambiguous closing-bracket entry in the published P1 annex.
    """
    if mode not in (0, 1, 2) or field_bytes <= 0:
        raise ValueError('invalid encoding policy or field size')
    protocol = spec.Protocol(protocol)
    if protocol == spec.Protocol.PACTOR1:
        mode = min(mode, 1)
    types = [spec.DataType.ASCII_8BIT]
    if mode:
        types.append(spec.DataType.HUFFMAN)
    if mode == 2:
        types.extend(t for t in _PARTS if t != spec.DataType.HUFFMAN)
    candidates = [_encode_candidate(chars, field_bytes, t, False, protocol) for t in types]
    if mode == 2:
        candidates.extend(_encode_candidate(chars, field_bytes, t, True, protocol)
                          for t in types)
    return max(candidates, key=lambda c: (c.consumed, -c.bits))


def _encode_candidate(chars, size, data_type, runs, protocol):
    pmc, english, swapped = _PARTS.get(data_type, (False, False, False))
    ascii_mode = data_type == spec.DataType.ASCII_8BIT

    def emit(symbols, context):
        out = []
        for symbol in symbols:
            if swapped:
                symbol = _SWAP[symbol]
            if ascii_mode:
                out.extend((symbol >> b) & 1 for b in range(8))
                continue
            if protocol == spec.Protocol.PACTOR3:
                if symbol == ESCAPE:
                    raise ValueError('literal DEL has no coded representation')
                high = symbol >= 128
            else:
                # These codes denote umlauts below P3; raw control bytes and
                # other high bytes must retain their eight-bit ASCII value.
                if symbol >= 128 or symbol in (14, 15, 16, 20, 21, 22, 23):
                    raise ValueError('symbol requires ASCII fallback')
                if protocol == spec.Protocol.PACTOR1 and symbol == 93:
                    raise ValueError('published P1 bracket code is ambiguous')
                high = False
            coded = ESCAPE if high else symbol
            out.extend(_codes(context)[coded])
            if high:
                out.extend((symbol >> b) & 1 for b in range(7))
            if pmc:
                ref = REFTAB[coded]
                context = ref + ENGLISH_BIAS if ref and english else ref
        return out, context

    bits, context, consumed = [], 0, 0
    budget = size * 8
    while consumed < len(chars):
        symbol = chars[consumed]
        count = 1
        if runs:
            while (count < 96 and consumed+count < len(chars)
                   and chars[consumed+count] == symbol):
                count += 1
        taken = None
        if count >= 4:
            for n in range(count, 3, -1):
                # Counts 1..30 use printable bias. 31 uses the literal count
                # to avoid P3's reserved 0x7F escape; 32..96 are literal.
                sent = n + 0x60 if n <= 30 else n
                try:
                    coded, next_context = emit((RUN_PREFIX, symbol, sent), context)
                    direct, _ = emit(bytes((symbol,))*n, context)
                except ValueError:
                    continue
                if len(coded) < len(direct) and len(bits)+len(coded) <= budget:
                    taken = coded, next_context, n
                    break
        if taken is None:
            try:
                coded, next_context = emit((symbol,), context)
            except ValueError:
                break
            if len(bits)+len(coded) > budget:
                break
            taken = coded, next_context, 1
        coded, context, n = taken
        bits.extend(coded)
        consumed += n
    used = len(bits)
    while len(bits) < budget:
        padding, context = emit((spec.IDLE,), context)
        bits.extend(padding)
    data = bytes(sum(bit << b for b, bit in enumerate(bits[i:i+8]))
                 for i in range(0, budget, 8))
    return EncodedField(data, data_type, consumed, used)


def _symbols(data: bytes, pmc: bool, english: bool, escape: bool):
    """Walk the coding trees over `data`, yielding 8-bit characters and IDLE."""
    bit = _bits(data)
    table_offset = 0
    try:
        while True:
            offset = 0
            while True:
                if next(bit):
                    offset += 2
                offset = HUFTAB[(table_offset + offset) >> 1]
                if offset > 767:
                    break
            symbol = offset & 0xFF
            if pmc:
                # The printed plain-Huffman skeleton restarts the walk only on
                # IDLE where the PMC one restarts unconditionally; restarting
                # only on IDLE cannot decode a second character, so the plain
                # listing is read as a printing slip and both restart.
                context = REFTAB[symbol]
                table_offset = (context + ENGLISH_BIAS
                                if context and english else context)
            if escape and symbol == ESCAPE:
                symbol = 0x80
                for i in range(7):
                    symbol |= next(bit) << i
            yield symbol
    except StopIteration:
        return


def _bits(data: bytes):
    for byte in data:
        for _ in range(8):
            yield byte & 1
            byte >>= 1


def _expand_runs(symbols: list[int]) -> tuple[list[int], list[int]]:
    """Expand the three-symbol run-length code: prefix, code, count.

    Counts 1-31 arrive biased by 0x60 -- so a count is a printable character --
    and other counts below 128 are literal. High-bit counts produce no output
    (the SCS reference decoder: type-0 F3 1D 4B 92 72 delivers F3 72). A run left unfinished
    at the end comes back as the second element, for the next field to
    complete."""
    out: list[int] = []
    i = 0
    while i < len(symbols):
        if symbols[i] == RUN_PREFIX:
            if i + 2 >= len(symbols):
                return out, symbols[i:]
            code, sent = symbols[i + 1], symbols[i + 2]
            count = sent - 0x60 if 0x61 <= sent <= 0x7F else sent
            out.extend([code] * (count if sent < 0x80 else 0))
            i += 3
        else:
            out.append(symbols[i])
            i += 1
    return out, []


_SWAP = bytes(b ^ 0x20 if 65 <= b <= 90 or 97 <= b <= 122 else b
              for b in range(256))
"""ASCII case swap as a translation table: the swapped modes code text in the
opposite case (upper-case-heavy traffic compresses better inverted)."""

_UMLAUTS = bytes.maketrans(bytes((0x0E, 0x0F, 0x10, 0x14, 0x15, 0x16, 0x17)),
                           "äöüÄÖÜß".encode("cp437"))
"""Below PACTOR-3 the coders carry German umlauts on these control symbols,
and SCS's monitor turns them into codepage 437."""


HUFTAB = (
    # base Huffman tree
    4, 8, 12, 16, 800, 20, 24, 28, 32, 869, 36, 40,
    44, 48, 52, 56, 60, 878, 64, 873, 882, 68, 884, 72,
    76, 80, 883, 84, 88, 868, 865, 92, 96, 100, 104, 885,
    876, 108, 872, 112, 116, 871, 120, 877, 781, 778, 879, 867,
    124, 128, 132, 136, 140, 144, 866, 870, 148, 152, 887, 836,
    156, 875, 160, 164, 890, 168, 814, 812, 172, 176, 180, 184,
    188, 851, 192, 196, 200, 204, 208, 833, 837, 212, 880, 886,
    216, 816, 838, 220, 224, 834, 228, 835, 841, 232, 852, 236,
    847, 240, 244, 248, 848, 252, 256, 260, 817, 264, 850, 268,
    272, 276, 280, 808, 809, 844, 846, 284, 858, 288, 845, 292,
    825, 296, 855, 821, 889, 300, 818, 819, 820, 822, 823, 824,
    840, 304, 842, 853, 854, 796, 888, 308, 843, 831, 829, 312,
    316, 320, 881, 849, 874, 839, 324, 813, 328, 826, 332, 336,
    340, 344, 348, 801, 815, 352, 356, 360, 810, 364, 802, 805,
    807, 368, 863, 372, 376, 380, 384, 806, 811, 830, 832, 804,
    828, 856, 388, 803, 392, 396, 400, 404, 408, 412, 416, 420,
    424, 428, 432, 857, 436, 440, 444, 448, 827, 860, 452, 456,
    460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504,
    859, 861, 895, 894, 893, 892, 891, 864, 862, 799, 797, 795,
    793, 792, 791, 790, 789, 788, 787, 786, 785, 784, 798, 783,
    782, 780, 779, 777, 776, 775, 774, 773, 772, 771, 770, 769,
    768, 794,
    # German PMC context 1
    4, 8, 12, 800, 16, 20, 24, 28, 32, 36, 868, 40,
    44, 48, 52, 56, 60, 869, 64, 68, 72, 76, 80, 84,
    88, 865, 92, 883, 96, 100, 104, 108, 887, 885, 112, 116,
    866, 890, 873, 120, 836, 848, 124, 851, 128, 886, 833, 132,
    877, 136, 834, 140, 845, 871, 144, 148, 152, 837, 878, 870,
    156, 854, 160, 875, 850, 164, 168, 838, 172, 176, 852, 180,
    843, 184, 188, 192, 844, 872, 196, 200, 204, 839, 840, 808,
    208, 876, 212, 835, 879, 817, 216, 781, 220, 224, 841, 855,
    874, 784, 228, 232, 882, 236, 853, 880, 240, 244, 818, 867,
    822, 248, 252, 813, 858, 256, 811, 820, 821, 824, 847, 856,
    859, 260, 264, 884, 268, 790, 819, 846, 272, 825, 276, 280,
    284, 288, 881, 292, 823, 842, 296, 300, 304, 308, 312, 316,
    320, 324, 807, 816, 888, 328, 332, 336, 340, 344, 348, 352,
    356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400,
    404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496,
    500, 504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
    778, 779, 780, 782, 783, 785, 786, 787, 788, 789, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 809, 810, 812, 814, 815, 826, 827, 828, 829, 830, 831,
    832, 849, 857, 860, 861, 862, 863, 864, 889, 891, 892, 893,
    894, 895,
    # German PMC context 2
    4, 8, 12, 16, 882, 878, 20, 873, 24, 800, 28, 32,
    36, 883, 40, 44, 876, 48, 884, 52, 56, 877, 60, 64,
    68, 72, 76, 872, 866, 80, 84, 871, 870, 781, 868, 88,
    867, 885, 92, 875, 96, 100, 104, 812, 108, 813, 888, 112,
    881, 890, 116, 814, 887, 791, 120, 880, 124, 869, 865, 886,
    128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 809, 879,
    168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212,
    216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260,
    264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308,
    312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356,
    360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404,
    408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452,
    456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500,
    504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
    779, 780, 782, 783, 784, 785, 786, 787, 788, 789, 790, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 807, 808, 810, 811, 815, 816, 817, 818, 819, 820, 821,
    822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833,
    834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845,
    846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857,
    858, 859, 860, 861, 862, 863, 864, 874, 889, 891, 892, 893,
    894, 895,
    # German PMC context 3
    4, 8, 12, 800, 16, 20, 24, 871, 28, 868, 32, 869,
    36, 40, 44, 884, 48, 52, 878, 56, 883, 60, 865, 814,
    64, 885, 812, 873, 68, 890, 72, 781, 76, 80, 84, 875,
    88, 872, 879, 92, 870, 96, 876, 100, 813, 104, 108, 112,
    866, 886, 116, 783, 120, 124, 887, 128, 784, 880, 877, 132,
    136, 140, 809, 826, 882, 144, 148, 152, 156, 160, 164, 168,
    807, 867, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208,
    212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256,
    260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304,
    308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352,
    356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400,
    404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496,
    500, 504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
    778, 779, 780, 782, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 808, 810, 811, 815, 816, 817, 818, 819, 820, 821, 822,
    823, 824, 825, 827, 828, 829, 830, 831, 832, 833, 834, 835,
    836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
    848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
    860, 861, 862, 863, 864, 874, 881, 888, 889, 891, 892, 893,
    894, 895,
    # German PMC context 4
    4, 8, 12, 16, 869, 878, 20, 24, 884, 28, 32, 871,
    36, 867, 883, 40, 44, 879, 876, 48, 877, 52, 882, 56,
    886, 60, 800, 64, 875, 68, 72, 880, 76, 865, 80, 866,
    868, 84, 88, 92, 872, 96, 100, 781, 104, 813, 890, 108,
    870, 112, 116, 120, 124, 791, 885, 128, 132, 136, 140, 144,
    148, 152, 815, 873, 888, 156, 160, 164, 168, 172, 176, 180,
    184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228,
    232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276,
    280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324,
    328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372,
    376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420,
    424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468,
    472, 476, 480, 484, 488, 492, 496, 500, 504, 768, 769, 770,
    771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 783,
    784, 785, 786, 787, 788, 789, 790, 792, 793, 794, 795, 796,
    797, 798, 799, 801, 802, 803, 804, 805, 806, 807, 808, 809,
    810, 811, 812, 814, 816, 817, 818, 819, 820, 821, 822, 823,
    824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835,
    836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
    848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
    860, 861, 862, 863, 864, 874, 881, 887, 889, 891, 892, 893,
    894, 895,
    # German PMC context 5
    4, 8, 12, 800, 16, 20, 24, 28, 32, 869, 36, 40,
    44, 48, 868, 879, 873, 52, 884, 56, 865, 60, 883, 64,
    68, 72, 885, 76, 866, 870, 878, 80, 84, 781, 890, 871,
    88, 877, 92, 867, 96, 875, 887, 813, 100, 876, 104, 814,
    872, 783, 812, 108, 112, 882, 784, 116, 120, 880, 124, 128,
    132, 809, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172,
    176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220,
    224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268,
    272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316,
    320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364,
    368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412,
    416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460,
    464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768,
    769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780,
    782, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795,
    796, 797, 798, 799, 801, 802, 803, 804, 805, 806, 807, 808,
    810, 811, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824,
    825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
    837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848,
    849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860,
    861, 862, 863, 864, 874, 881, 886, 888, 889, 891, 892, 893,
    894, 895,
    # German PMC context 6
    4, 8, 12, 869, 16, 800, 20, 24, 28, 873, 32, 36,
    882, 40, 44, 865, 48, 52, 56, 890, 885, 814, 60, 64,
    68, 884, 812, 883, 813, 72, 887, 76, 879, 80, 781, 84,
    876, 88, 92, 96, 870, 100, 104, 108, 880, 112, 784, 872,
    116, 120, 783, 124, 866, 867, 871, 128, 809, 878, 132, 875,
    877, 886, 889, 136, 140, 144, 826, 148, 152, 156, 160, 164,
    168, 807, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208,
    212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256,
    260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304,
    308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352,
    356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400,
    404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496,
    500, 504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
    778, 779, 780, 782, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 808, 810, 811, 815, 816, 817, 818, 819, 820, 821, 822,
    823, 824, 825, 827, 828, 829, 830, 831, 832, 833, 834, 835,
    836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
    848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
    860, 861, 862, 863, 864, 868, 874, 881, 888, 891, 892, 893,
    894, 895,
    # German PMC context 7
    4, 8, 12, 16, 20, 884, 800, 24, 28, 869, 32, 36,
    867, 873, 883, 879, 40, 44, 880, 48, 52, 56, 865, 60,
    64, 68, 72, 76, 781, 813, 80, 871, 885, 84, 88, 886,
    887, 92, 870, 812, 96, 866, 100, 814, 104, 875, 108, 889,
    882, 890, 112, 876, 116, 120, 868, 877, 124, 872, 878, 128,
    132, 136, 140, 807, 826, 144, 148, 152, 156, 160, 164, 168,
    172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216,
    220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264,
    268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312,
    316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360,
    364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408,
    412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456,
    460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504,
    768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
    780, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 808, 809, 810, 811, 815, 816, 817, 818, 819, 820, 821,
    822, 823, 824, 825, 827, 828, 829, 830, 831, 832, 833, 834,
    835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846,
    847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858,
    859, 860, 861, 862, 863, 864, 874, 881, 888, 891, 892, 893,
    894, 895,
    # German PMC context 8
    4, 869, 8, 12, 873, 800, 16, 20, 24, 865, 28, 885,
    32, 876, 36, 40, 882, 44, 48, 781, 52, 879, 56, 60,
    887, 64, 812, 813, 68, 814, 866, 72, 76, 80, 878, 883,
    84, 88, 92, 889, 96, 100, 104, 108, 784, 872, 875, 886,
    890, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152,
    156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200,
    204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248,
    252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296,
    300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344,
    348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392,
    396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440,
    444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488,
    492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774, 775,
    776, 777, 778, 779, 780, 782, 783, 785, 786, 787, 788, 789,
    790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 801, 802,
    803, 804, 805, 806, 807, 808, 809, 810, 811, 815, 816, 817,
    818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829,
    830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841,
    842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853,
    854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 867,
    868, 870, 871, 874, 877, 880, 881, 884, 888, 891, 892, 893,
    894, 895,
    # German PMC context 9
    4, 8, 12, 16, 20, 878, 24, 885, 876, 28, 884, 32,
    882, 36, 40, 44, 883, 48, 867, 52, 877, 56, 866, 60,
    64, 800, 872, 868, 68, 72, 875, 871, 791, 76, 80, 84,
    88, 889, 888, 92, 873, 890, 96, 781, 870, 880, 814, 100,
    104, 108, 813, 112, 116, 120, 124, 815, 886, 128, 132, 136,
    140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184,
    188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232,
    236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280,
    284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328,
    332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376,
    380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424,
    428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472,
    476, 480, 484, 488, 492, 496, 500, 504, 768, 769, 770, 771,
    772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 783, 784,
    785, 786, 787, 788, 789, 790, 792, 793, 794, 795, 796, 797,
    798, 799, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810,
    811, 812, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825,
    826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837,
    838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849,
    850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861,
    862, 863, 864, 865, 869, 874, 879, 881, 887, 891, 892, 893,
    894, 895,
    # German PMC context 10
    4, 878, 8, 12, 16, 20, 24, 883, 28, 882, 870, 32,
    36, 40, 800, 44, 877, 48, 867, 884, 869, 52, 56, 876,
    791, 871, 60, 813, 64, 68, 880, 72, 868, 76, 80, 84,
    865, 875, 88, 866, 872, 873, 92, 96, 885, 100, 104, 108,
    112, 812, 890, 116, 120, 124, 128, 132, 136, 140, 144, 148,
    152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196,
    200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244,
    248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292,
    296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340,
    344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388,
    392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436,
    440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484,
    488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774,
    775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786,
    787, 788, 789, 790, 792, 793, 794, 795, 796, 797, 798, 799,
    801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 814,
    815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826,
    827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838,
    839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850,
    851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862,
    863, 864, 874, 879, 881, 886, 887, 888, 889, 891, 892, 893,
    894, 895,
    # German PMC context 11
    4, 8, 869, 12, 16, 20, 876, 24, 28, 873, 32, 884,
    36, 40, 865, 883, 44, 800, 48, 879, 52, 885, 56, 60,
    64, 68, 867, 72, 76, 80, 84, 868, 88, 871, 866, 92,
    781, 96, 783, 812, 814, 100, 104, 870, 880, 813, 108, 112,
    116, 120, 784, 878, 882, 887, 124, 128, 132, 826, 875, 886,
    889, 136, 140, 144, 791, 809, 872, 890, 148, 152, 156, 160,
    164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208,
    212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256,
    260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304,
    308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352,
    356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400,
    404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496,
    500, 504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
    778, 779, 780, 782, 785, 786, 787, 788, 789, 790, 792, 793,
    794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805, 806,
    807, 808, 810, 811, 815, 816, 817, 818, 819, 820, 821, 822,
    823, 824, 825, 827, 828, 829, 830, 831, 832, 833, 834, 835,
    836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
    848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
    860, 861, 862, 863, 864, 874, 877, 881, 888, 891, 892, 893,
    894, 895,
    # German PMC context 12
    4, 8, 12, 16, 869, 800, 20, 24, 28, 32, 36, 882,
    865, 40, 878, 884, 44, 876, 48, 52, 56, 873, 60, 879,
    64, 68, 72, 781, 883, 885, 76, 887, 80, 84, 783, 814,
    88, 877, 870, 890, 812, 813, 875, 92, 866, 96, 100, 104,
    871, 108, 112, 784, 827, 868, 116, 120, 124, 128, 132, 136,
    140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184,
    188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232,
    236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280,
    284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328,
    332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376,
    380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424,
    428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472,
    476, 480, 484, 488, 492, 496, 500, 504, 768, 769, 770, 771,
    772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 785, 786,
    787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
    799, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
    815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826,
    828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
    840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851,
    852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
    864, 867, 872, 874, 880, 881, 886, 888, 889, 891, 892, 893,
    894, 895,
    # German PMC context 13
    4, 8, 869, 12, 800, 16, 20, 24, 28, 883, 32, 36,
    40, 44, 884, 885, 876, 873, 882, 48, 865, 878, 52, 56,
    814, 875, 60, 781, 64, 812, 68, 866, 72, 813, 76, 80,
    784, 84, 88, 92, 877, 96, 100, 104, 870, 871, 879, 890,
    108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152,
    156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200,
    204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248,
    252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296,
    300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344,
    348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392,
    396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440,
    444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488,
    492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774, 775,
    776, 777, 778, 779, 780, 782, 783, 785, 786, 787, 788, 789,
    790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 801, 802,
    803, 804, 805, 806, 807, 808, 809, 810, 811, 815, 816, 817,
    818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829,
    830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841,
    842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853,
    854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 867,
    868, 872, 874, 880, 881, 886, 887, 888, 889, 891, 892, 893,
    894, 895,
    # German PMC context 14
    4, 8, 12, 800, 16, 20, 24, 873, 28, 865, 32, 869,
    877, 36, 40, 44, 48, 880, 52, 885, 884, 56, 781, 783,
    883, 60, 64, 68, 72, 76, 879, 813, 80, 84, 88, 866,
    784, 876, 92, 870, 96, 791, 812, 854, 868, 886, 100, 855,
    871, 104, 108, 814, 826, 112, 116, 120, 124, 128, 132, 136,
    140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184,
    188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232,
    236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280,
    284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328,
    332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376,
    380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424,
    428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472,
    476, 480, 484, 488, 492, 496, 500, 504, 768, 769, 770, 771,
    772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 785, 786,
    787, 788, 789, 790, 792, 793, 794, 795, 796, 797, 798, 799,
    801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 815,
    816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 827, 828,
    829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840,
    841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852,
    853, 856, 857, 858, 859, 860, 861, 862, 863, 864, 867, 872,
    874, 875, 878, 881, 882, 887, 888, 889, 890, 891, 892, 893,
    894, 895,
    # German PMC context 15
    4, 8, 12, 16, 20, 878, 24, 28, 882, 32, 36, 40,
    877, 44, 868, 876, 871, 48, 867, 52, 56, 884, 60, 64,
    883, 800, 68, 887, 890, 870, 72, 872, 880, 76, 80, 866,
    813, 84, 88, 92, 888, 96, 869, 100, 791, 104, 835, 875,
    886, 108, 112, 781, 885, 116, 120, 812, 865, 879, 124, 128,
    132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176,
    180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224,
    228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272,
    276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320,
    324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368,
    372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416,
    420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464,
    468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768, 769,
    770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782,
    783, 784, 785, 786, 787, 788, 789, 790, 792, 793, 794, 795,
    796, 797, 798, 799, 801, 802, 803, 804, 805, 806, 807, 808,
    809, 810, 811, 814, 815, 816, 817, 818, 819, 820, 821, 822,
    823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834,
    836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
    848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
    860, 861, 862, 863, 864, 873, 874, 881, 889, 891, 892, 893,
    894, 895,
    # German PMC context 16
    872, 4, 8, 875, 12, 16, 869, 20, 879, 24, 28, 865,
    32, 884, 36, 781, 876, 40, 44, 877, 48, 52, 814, 889,
    56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100,
    104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148,
    152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196,
    200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244,
    248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292,
    296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340,
    344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388,
    392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436,
    440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484,
    488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774,
    775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786, 787,
    788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
    800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
    812, 813, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824,
    825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
    837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848,
    849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860,
    861, 862, 863, 864, 866, 867, 868, 870, 871, 873, 874, 878,
    880, 881, 882, 883, 885, 886, 887, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 1
    4, 8, 12, 16, 800, 20, 24, 28, 32, 884, 36, 40,
    44, 48, 865, 52, 56, 60, 64, 879, 68, 873, 72, 883,
    867, 76, 80, 84, 866, 88, 887, 92, 96, 880, 877, 100,
    868, 104, 108, 870, 781, 112, 882, 116, 869, 120, 124, 876,
    128, 848, 878, 872, 885, 132, 833, 136, 140, 144, 852, 148,
    152, 156, 160, 164, 836, 817, 840, 168, 172, 838, 176, 180,
    851, 184, 808, 850, 886, 188, 835, 871, 192, 841, 845, 196,
    200, 204, 818, 208, 834, 212, 807, 216, 220, 224, 821, 839,
    875, 228, 837, 874, 881, 232, 236, 240, 854, 244, 824, 843,
    889, 248, 252, 819, 846, 849, 256, 820, 855, 822, 825, 844,
    847, 853, 260, 264, 268, 272, 276, 842, 280, 813, 284, 288,
    292, 296, 300, 304, 308, 312, 816, 858, 890, 316, 320, 324,
    328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372,
    376, 810, 811, 380, 384, 388, 392, 396, 400, 404, 408, 412,
    416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460,
    464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768,
    769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780,
    782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793,
    794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805, 806,
    809, 812, 814, 815, 823, 826, 827, 828, 829, 830, 831, 832,
    856, 857, 859, 860, 861, 862, 863, 864, 888, 891, 892, 893,
    894, 895,
    # English PMC context 2
    4, 8, 800, 12, 16, 20, 24, 882, 28, 32, 883, 36,
    878, 40, 868, 44, 48, 52, 56, 865, 60, 867, 877, 64,
    884, 68, 876, 72, 76, 886, 80, 869, 84, 88, 881, 814,
    92, 781, 870, 812, 888, 96, 813, 873, 889, 880, 887, 100,
    104, 108, 885, 112, 116, 120, 124, 128, 871, 132, 136, 140,
    866, 872, 879, 144, 807, 148, 152, 156, 160, 164, 168, 809,
    826, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212,
    216, 831, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256,
    260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304,
    308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352,
    356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400,
    404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496,
    500, 504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
    778, 779, 780, 782, 783, 784, 785, 786, 787, 788, 789, 790,
    791, 792, 793, 794, 795, 796, 797, 798, 799, 801, 802, 803,
    804, 805, 806, 808, 810, 811, 815, 816, 817, 818, 819, 820,
    821, 822, 823, 824, 825, 827, 828, 829, 830, 832, 833, 834,
    835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846,
    847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858,
    859, 860, 861, 862, 863, 864, 874, 875, 890, 891, 892, 893,
    894, 895,
    # English PMC context 3
    4, 8, 12, 16, 800, 20, 24, 28, 32, 868, 871, 36,
    884, 40, 865, 869, 883, 44, 867, 48, 879, 52, 56, 60,
    64, 876, 68, 72, 873, 870, 76, 889, 813, 878, 781, 80,
    812, 885, 886, 875, 814, 84, 88, 92, 96, 100, 104, 108,
    112, 116, 120, 124, 128, 132, 880, 136, 140, 144, 148, 152,
    156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200,
    204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248,
    252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296,
    300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344,
    348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392,
    396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440,
    444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488,
    492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774, 775,
    776, 777, 778, 779, 780, 782, 783, 784, 785, 786, 787, 788,
    789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 801,
    802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 815, 816,
    817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828,
    829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840,
    841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852,
    853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864,
    866, 872, 874, 877, 881, 882, 887, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 4
    4, 8, 12, 16, 878, 20, 24, 884, 28, 883, 32, 879,
    36, 40, 44, 871, 48, 867, 877, 52, 868, 876, 870, 56,
    882, 869, 60, 886, 64, 865, 68, 866, 880, 72, 813, 76,
    875, 80, 84, 890, 88, 92, 814, 96, 100, 104, 888, 108,
    112, 116, 120, 124, 128, 132, 872, 136, 140, 144, 148, 152,
    156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200,
    204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248,
    252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296,
    300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344,
    348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392,
    396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440,
    444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488,
    492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774, 775,
    776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787,
    788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
    800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
    812, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825,
    826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837,
    838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849,
    850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861,
    862, 863, 864, 873, 874, 881, 885, 887, 889, 891, 892, 893,
    894, 895,
    # English PMC context 5
    4, 8, 12, 869, 16, 20, 800, 24, 28, 879, 865, 32,
    36, 40, 44, 48, 884, 52, 873, 868, 889, 877, 882, 56,
    883, 60, 64, 68, 72, 812, 76, 870, 80, 814, 885, 84,
    88, 876, 781, 875, 92, 96, 866, 100, 813, 878, 104, 108,
    867, 886, 887, 112, 871, 116, 120, 124, 880, 128, 132, 136,
    140, 144, 148, 807, 152, 156, 160, 164, 168, 172, 176, 180,
    184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228,
    232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276,
    280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324,
    328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372,
    376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420,
    424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468,
    472, 476, 480, 484, 488, 492, 496, 500, 504, 768, 769, 770,
    771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782, 783,
    784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795,
    796, 797, 798, 799, 801, 802, 803, 804, 805, 806, 808, 809,
    810, 811, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824,
    825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
    837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848,
    849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860,
    861, 862, 863, 864, 872, 874, 881, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 6
    4, 8, 872, 12, 16, 800, 20, 873, 24, 869, 28, 879,
    32, 36, 865, 882, 40, 883, 44, 48, 52, 885, 56, 887,
    889, 60, 64, 812, 68, 72, 867, 884, 76, 814, 781, 80,
    878, 813, 876, 84, 88, 92, 96, 100, 104, 108, 112, 116,
    120, 124, 128, 132, 136, 140, 815, 868, 877, 880, 890, 144,
    148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192,
    196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240,
    244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288,
    292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336,
    340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384,
    388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432,
    436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480,
    484, 488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773,
    774, 775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786,
    787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
    799, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
    816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827,
    828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
    840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851,
    852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
    864, 866, 870, 871, 874, 875, 881, 886, 888, 891, 892, 893,
    894, 895,
    # English PMC context 7
    4, 8, 800, 12, 16, 20, 24, 28, 884, 873, 869, 32,
    36, 40, 44, 48, 52, 883, 872, 56, 812, 879, 889, 880,
    60, 885, 814, 64, 68, 781, 72, 865, 877, 76, 867, 870,
    80, 813, 84, 887, 88, 876, 92, 807, 96, 815, 100, 104,
    108, 809, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148,
    152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196,
    200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244,
    248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292,
    296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340,
    344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388,
    392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436,
    440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484,
    488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773, 774,
    775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786, 787,
    788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
    801, 802, 803, 804, 805, 806, 808, 810, 811, 816, 817, 818,
    819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830,
    831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842,
    843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854,
    855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 866, 868,
    871, 874, 875, 878, 881, 882, 886, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 8
    4, 8, 800, 12, 869, 16, 873, 20, 24, 28, 32, 36,
    885, 40, 44, 48, 865, 52, 883, 56, 879, 60, 887, 812,
    814, 64, 68, 884, 889, 868, 72, 781, 834, 76, 813, 882,
    80, 886, 84, 88, 92, 876, 96, 100, 826, 874, 104, 108,
    112, 116, 809, 871, 872, 120, 124, 128, 132, 136, 140, 144,
    148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192,
    196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240,
    244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288,
    292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336,
    340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384,
    388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432,
    436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480,
    484, 488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773,
    774, 775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786,
    787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
    799, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 815,
    816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 827, 828,
    829, 830, 831, 832, 833, 835, 836, 837, 838, 839, 840, 841,
    842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853,
    854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 866,
    867, 870, 875, 877, 878, 880, 881, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 9
    4, 8, 12, 16, 20, 878, 24, 28, 876, 884, 32, 882,
    36, 800, 40, 883, 44, 48, 52, 867, 868, 56, 60, 873,
    886, 866, 64, 877, 880, 885, 68, 871, 889, 72, 76, 875,
    80, 781, 888, 84, 813, 88, 92, 96, 870, 100, 104, 108,
    112, 874, 116, 120, 124, 128, 132, 136, 140, 812, 887, 144,
    148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192,
    196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240,
    244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288,
    292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336,
    340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384,
    388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432,
    436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480,
    484, 488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773,
    774, 775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786,
    787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
    799, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811,
    814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825,
    826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837,
    838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849,
    850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861,
    862, 863, 864, 865, 869, 872, 879, 881, 890, 891, 892, 893,
    894, 895,
    # English PMC context 10
    4, 8, 12, 16, 20, 24, 883, 28, 876, 32, 884, 36,
    40, 882, 877, 44, 873, 878, 48, 868, 869, 867, 871, 52,
    865, 880, 56, 60, 870, 64, 800, 866, 813, 68, 72, 76,
    80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124,
    128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172,
    176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220,
    224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268,
    272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316,
    320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364,
    368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412,
    416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460,
    464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768,
    769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780,
    781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 807, 808, 809, 810, 811, 812, 814, 815, 816, 817, 818,
    819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830,
    831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842,
    843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854,
    855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 872, 874,
    875, 879, 881, 885, 886, 887, 888, 889, 890, 891, 892, 893,
    894, 895,
    # English PMC context 11
    4, 8, 12, 16, 20, 800, 24, 869, 28, 32, 876, 889,
    873, 36, 879, 865, 40, 883, 44, 48, 885, 52, 56, 884,
    60, 64, 868, 68, 812, 781, 882, 72, 814, 76, 813, 80,
    84, 88, 866, 807, 887, 92, 870, 871, 877, 96, 100, 104,
    108, 112, 116, 867, 886, 120, 124, 128, 132, 136, 140, 144,
    148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192,
    196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240,
    244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288,
    292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336,
    340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384,
    388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432,
    436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480,
    484, 488, 492, 496, 500, 504, 768, 769, 770, 771, 772, 773,
    774, 775, 776, 777, 778, 779, 780, 782, 783, 784, 785, 786,
    787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798,
    799, 801, 802, 803, 804, 805, 806, 808, 809, 810, 811, 815,
    816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827,
    828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
    840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851,
    852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
    864, 872, 874, 875, 878, 880, 881, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 12
    4, 869, 8, 12, 16, 865, 800, 873, 20, 879, 24, 28,
    32, 882, 36, 880, 885, 40, 44, 48, 52, 56, 60, 781,
    814, 64, 812, 68, 877, 878, 884, 72, 813, 883, 76, 80,
    84, 88, 92, 867, 889, 96, 100, 104, 108, 112, 116, 120,
    124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168,
    172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216,
    220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264,
    268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312,
    316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360,
    364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408,
    412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456,
    460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504,
    768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
    780, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 807, 808, 809, 810, 811, 815, 816, 817, 818, 819, 820,
    821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832,
    833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844,
    845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856,
    857, 858, 859, 860, 861, 862, 863, 864, 866, 868, 870, 871,
    872, 874, 875, 876, 881, 886, 887, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 13
    4, 8, 800, 12, 16, 20, 24, 878, 872, 28, 869, 32,
    873, 36, 865, 40, 44, 885, 48, 52, 781, 814, 879, 884,
    882, 56, 60, 876, 64, 812, 871, 889, 68, 72, 76, 80,
    807, 813, 883, 84, 88, 92, 96, 100, 104, 108, 112, 116,
    120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164,
    168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212,
    216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260,
    264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308,
    312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356,
    360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404,
    408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452,
    456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500,
    504, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
    779, 780, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791,
    792, 793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804,
    805, 806, 808, 809, 810, 811, 815, 816, 817, 818, 819, 820,
    821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832,
    833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844,
    845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856,
    857, 858, 859, 860, 861, 862, 863, 864, 866, 867, 868, 870,
    874, 875, 877, 880, 881, 886, 887, 888, 890, 891, 892, 893,
    894, 895,
    # English PMC context 14
    4, 8, 12, 16, 20, 865, 869, 879, 24, 28, 880, 800,
    32, 873, 36, 885, 866, 883, 40, 44, 814, 877, 48, 52,
    56, 60, 812, 64, 68, 878, 887, 72, 813, 870, 76, 80,
    781, 854, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120,
    124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168,
    172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216,
    220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264,
    268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312,
    316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360,
    364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408,
    412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456,
    460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504,
    768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
    780, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792,
    793, 794, 795, 796, 797, 798, 799, 801, 802, 803, 804, 805,
    806, 807, 808, 809, 810, 811, 815, 816, 817, 818, 819, 820,
    821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832,
    833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844,
    845, 846, 847, 848, 849, 850, 851, 852, 853, 855, 856, 857,
    858, 859, 860, 861, 862, 863, 864, 867, 868, 871, 872, 874,
    875, 876, 881, 882, 884, 886, 888, 889, 890, 891, 892, 893,
    894, 895,
    # English PMC context 15
    4, 8, 12, 16, 878, 20, 24, 882, 28, 32, 870, 800,
    36, 40, 868, 44, 48, 52, 877, 885, 56, 887, 60, 884,
    876, 64, 880, 886, 883, 68, 867, 72, 866, 76, 80, 84,
    88, 871, 869, 879, 92, 813, 96, 873, 888, 100, 104, 108,
    814, 865, 112, 812, 116, 781, 889, 120, 124, 128, 875, 132,
    136, 140, 144, 148, 152, 872, 156, 160, 164, 168, 172, 176,
    180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224,
    228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272,
    276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320,
    324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368,
    372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416,
    420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464,
    468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768, 769,
    770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782,
    783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794,
    795, 796, 797, 798, 799, 801, 802, 803, 804, 805, 806, 807,
    808, 809, 810, 811, 815, 816, 817, 818, 819, 820, 821, 822,
    823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834,
    835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846,
    847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858,
    859, 860, 861, 862, 863, 864, 874, 881, 890, 891, 892, 893,
    894, 895,
    # English PMC context 16
    4, 8, 12, 879, 16, 20, 24, 872, 865, 869, 28, 884,
    32, 36, 40, 44, 873, 875, 48, 882, 889, 52, 876, 885,
    800, 867, 56, 781, 814, 60, 64, 68, 813, 72, 76, 80,
    84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128,
    132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176,
    180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224,
    228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272,
    276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320,
    324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368,
    372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416,
    420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464,
    468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 768, 769,
    770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 782,
    783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794,
    795, 796, 797, 798, 799, 801, 802, 803, 804, 805, 806, 807,
    808, 809, 810, 811, 812, 815, 816, 817, 818, 819, 820, 821,
    822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833,
    834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845,
    846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857,
    858, 859, 860, 861, 862, 863, 864, 866, 868, 870, 871, 874,
    877, 878, 880, 881, 883, 886, 887, 888, 890, 891, 892, 893,
    894, 895,
)

REFTAB = (
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 4572, 0, 8128, 4064, 1016, 0, 6604, 6096, 2032, 0, 0,
    5588, 7112, 1524, 7620, 0, 0, 2540, 3556, 3048, 5080, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
)