won't work unless the div
+ * stanzas are listed twice at different places in the list. It means we can't
+ * use dll2 directly since the number of references is open-ended.
+ *
+ * lcsp_stanza_ptr provides indirection that allows multiple listings.
+ */
+
+typedef struct lcsp_stanza_ptr {
+ lws_dll2_t list;
+
+ lcsp_stanza_t *stz;
+} lcsp_stanza_ptr_t;
+
+typedef struct lcsp_atr_ptr {
+ lws_dll2_t list;
+
+ lcsp_atr_t *atr;
+} lcsp_atr_ptr_t;
+
+#define LHP_FLAG_DOCUMENT_END (1 << 0)
+
+typedef struct lhp_ctx {
+ lws_dll2_owner_t stack; /* lhp_pstack_t */
+
+ struct lwsac *cssac; /* css allocations all in an ac */
+ struct lwsac *cascadeac; /* active_stanzas ac */
+ struct lwsac *propatrac; /* prop atr query results ac */
+ lws_dll2_owner_t css; /* lcsp_stanza_t (all in ac) */
+
+ lws_dll2_owner_t *ids;
+
+ lws_fx_t tf;
+ lcsp_css_units_t unit;
+ lcsp_stanza_t *stz; /* current stanza getting properties */
+ lcsp_defs_t *def; /* current property getting values */
+
+ lws_dll2_owner_t active_stanzas; /* lcsp_stanza_ptr_t allocated
+ * in cascadeac */
+ lws_dll2_owner_t active_atr; /* lcsp_atr_ptr_t allocated in
+ * propatrac */
+
+ lws_surface_info_t ic;
+
+ const char *base_url; /* strdup of https://x.com/y.html */
+ sul_cb_t ssevcb; /* callback for ss events */
+ lws_sorted_usec_list_t *ssevsul; /* sul to use to resume rz */
+
+ void *user;
+ void *user1;
+ const char *tag; /* private */
+ size_t tag_len; /* private */
+
+ int npos;
+ int state; /* private */
+ int state_css_comm; /* private */
+ int nl_temp;
+ int temp_count;
+
+ uint32_t flags;
+ uint32_t temp;
+ int32_t window; /* 0, or ss item flow control limit */
+
+ union {
+ uint32_t s;
+ struct {
+ uint32_t first:1;
+ uint32_t closing:1;
+ uint32_t void_element:1;
+ uint32_t doctype:1;
+ uint32_t inq:1;
+ uint32_t tag_used:1;
+ uint32_t arg:1;
+ uint32_t default_css:1;
+#define LHP_CSS_PROPVAL_INT_WHOLE 1
+#define LHP_CSS_PROPVAL_INT_FRAC 2
+#define LHP_CSS_PROPVAL_INT_UNIT 3
+ uint32_t integer:2;
+ uint32_t color:2;
+ } f;
+ } u;
+
+ int prop; /* lcsp_props_t */
+ int propval; /* lcsp_propvals_t */
+ int16_t css_state; /* private */
+ int16_t cssval_state; /* private */
+
+ uint8_t in_body:1;
+
+ /* at end so we can memset members above it in one go */
+
+ char buf[LHP_STRING_CHUNK + 1];
+
+} lhp_ctx_t;
+
+/*
+ * lws_lhp_construct() - Construct an lhp context
+ *
+ * \param ctx: the lhp context to prepare
+ * \param cb: the stream parsing callback
+ * \param user: opaque user pointer available from the lhp context
+ * \param ic: struct with arguments for lhp context
+ *
+ * The lhp context is allocated by the caller (the size is known).
+ * Prepares an lhp context to parse html. Returns 0 for OK, or nonzero if OOM.
+ */
+LWS_VISIBLE LWS_EXTERN int
+lws_lhp_construct(lhp_ctx_t *ctx, lhp_callback cb, void *user,
+ const lws_surface_info_t *ic);
+
+/*
+ * lws_lhp_destruct() - Destroy an lhp context
+ *
+ * \param ctx: the lhp context to prepare
+ *
+ * Destroys an lhp context. The lhp context is allocated by the caller (the
+ * size is known). But there are suballocations that must be destroyed with
+ * this.
+ */
+LWS_VISIBLE LWS_EXTERN void
+lws_lhp_destruct(lhp_ctx_t *ctx);
+
+/**
+ * lws_lhp_ss_browse() - browse url using SS and parse via lhp to DLOs
+ *
+ * \param cx: the lws_context
+ * \param rs: the user's render state object
+ * \param url: the https://x.com/y.xyz URL to browse
+ * \param render: the user's linewise render callback (called from \p rs.sul)
+ *
+ * High level network fetch via SS and render html via lhp / DLO
+ *
+ * rs->ic must be prepared before calling.
+ *
+ * Returns nonzero if an early, fatal problem, else returns 0 and continues
+ * asynchronously.
+ *
+ * If rs->box is (0,0,0,0) on entry, it is set to represent the whole display
+ * surface. Otherwise if not representing the whole display surface, it
+ * indicates partial mode should be used.
+ */
+LWS_VISIBLE LWS_EXTERN int
+lws_lhp_ss_browse(struct lws_context *cx, lws_display_render_state_t *rs,
+ const char *url, sul_cb_t render);
+
+/**
+ * lws_lhp_parse() - parses a chunk of input HTML
+ *
+ * \p ctx: the parsing context
+ * \p buf: pointer to the start of the chunk of html
+ * \p len: pointer the number of bytes of html available at *\pbuf
+ *
+ * Parses up to *len bytes at *buf. On exit, *buf and *len are adjusted
+ * according to how much data was used. May return before processing all the
+ * input.
+ *
+ * Returns LWS_SRET_WANT_INPUT if the parsing is stalled on some other async
+ * event (eg, fetch of image to find out the dimensions).
+ *
+ * The lws_lhp_ss_browse() api wraps this.
+ */
+LWS_VISIBLE LWS_EXTERN lws_stateful_ret_t
+lws_lhp_parse(lhp_ctx_t *ctx, const uint8_t **buf, size_t *len);
+
+/**
+ * lws_css_cascade_get_prop_atr() - create active css atr list for property
+ *
+ * \p ctx: the parsing context
+ * \p prop: the LCSP_PROP_ property to generate the attribute list for
+ *
+ * Returns NULL if no atr or OOM.
+ *
+ * Otherwise produces a list of active CSS property attributes walkable via
+ * ctx->active_atr, and returns the tail one. For simple attributes where the
+ * last definition is the active one, this points to the last definition.
+ */
+LWS_VISIBLE LWS_EXTERN const lcsp_atr_t *
+lws_css_cascade_get_prop_atr(lhp_ctx_t *ctx, lcsp_props_t prop);
+
+LWS_VISIBLE LWS_EXTERN lhp_pstack_t *
+lws_css_get_parent_block(lhp_ctx_t *ctx, lhp_pstack_t *ps);
+
+LWS_VISIBLE LWS_EXTERN const char *
+lws_css_pstack_name(lhp_pstack_t *ps);
+
+LWS_VISIBLE LWS_EXTERN const char *
+lws_html_get_atr(lhp_pstack_t *ps, const char *aname, size_t aname_len);
+
+LWS_VISIBLE LWS_EXTERN const lws_fx_t *
+lws_csp_px(const lcsp_atr_t *a, lhp_pstack_t *ps);
+
+LWS_VISIBLE LWS_EXTERN void
+lws_lhp_tag_dlo_id(lhp_ctx_t *ctx, lhp_pstack_t *ps, lws_dlo_t *dlo);
+
+#define LWS_LHPREF_WIDTH 0
+#define LWS_LHPREF_HEIGHT 1
+#define LWS_LHPREF_NONE 2
+
+LWS_VISIBLE LWS_EXTERN int
+lhp_prop_axis(const lcsp_atr_t *a);
diff --git a/lib/misc/CMakeLists.txt b/lib/misc/CMakeLists.txt
index 71a3c92c4..3a5f4b59e 100644
--- a/lib/misc/CMakeLists.txt
+++ b/lib/misc/CMakeLists.txt
@@ -165,6 +165,16 @@ if (LWS_WITH_CBOR)
misc/lecp.c
misc/ieeehalfprecision.c)
endif()
+if (LWS_WITH_LHP)
+ list(APPEND SOURCES
+ misc/lhp.c)
+
+ if (LWS_WITH_SECURE_STREAMS)
+ list(APPEND SOURCES
+ misc/lhp-ss.c)
+ endif()
+
+endif()
if (UNIX)
if (NOT LWS_HAVE_GETIFADDRS)
diff --git a/lib/misc/css-lextable-strings.txt b/lib/misc/css-lextable-strings.txt
new file mode 100644
index 000000000..a6d92117e
--- /dev/null
+++ b/lib/misc/css-lextable-strings.txt
@@ -0,0 +1,120 @@
+azimuth:
+background-attachment:
+background-color:
+background-image:
+background-position:
+background-repeat:
+background:
+border-collapse:
+border-color:
+border-spacing:
+border-style:
+border-top:
+border-right:
+border-bottom:
+border-left:
+border-top-color:
+border-right-color:
+border-bottom-color:
+border-left-color:
+border-top-style:
+border-right-style:
+border-bottom-style:
+border-left-style:
+border-top-width:
+border-right-width:
+border-bottom-width:
+border-left-width:
+border-width:
+border-top-left-radius:
+border-top-right-radius:
+border-bottom-left-radius:
+border-bottom-right-radius:
+border-radius:
+border:
+bottom:
+caption-side:
+clear:
+clip:
+color:
+content:
+counter-increment:
+counter-reset:
+cue-after:
+cue-before:
+cue:
+cursor:
+direction:
+display:
+elevation:
+empty-cells:
+float:
+font-family:
+font-size:
+font-style:
+font-variant:
+font-weight:
+font:
+height:
+left:
+letter-spacing:
+line-height:
+list-style-image:
+list-style-position:
+list-style-type:
+list-style:
+margin-right:
+margin-left:
+margin-top:
+margin-bottom:
+margin:
+max-height:
+max-width:
+min-height:
+min-width:
+orphans:
+outline-color:
+outline-style:
+outline-width:
+outline:
+overflow:
+padding-top:
+padding-right:
+padding-bottom:
+padding-left:
+padding:
+page-break-after:
+page-break-before:
+page-break-inside:
+pause-after:
+pause-before:
+pause:
+pitch-range:
+pitch:
+play-during:
+position:
+quotes:
+richness:
+right:
+speak-header:
+speak-numeral:
+speak-punctuation:
+speak:
+speech-rate:
+stress:
+table-layout:
+text-align:
+text-decoration:
+text-indent:
+text-transform:
+top:
+unicode-bidi:
+vertical-align:
+visibility:
+voice-family:
+volume:
+white-space:
+widows:
+width:
+word-spacing:
+z-index:
diff --git a/lib/misc/css-lextable.h b/lib/misc/css-lextable.h
new file mode 100644
index 000000000..446ca3c8d
--- /dev/null
+++ b/lib/misc/css-lextable.h
@@ -0,0 +1,1337 @@
+ /* 0: azimuth: */
+ /* 1: background-attachment: */
+ /* 2: background-color: */
+ /* 3: background-image: */
+ /* 4: background-position: */
+ /* 5: background-repeat: */
+ /* 6: background: */
+ /* 7: border-collapse: */
+ /* 8: border-color: */
+ /* 9: border-spacing: */
+ /* 10: border-style: */
+ /* 11: border-top: */
+ /* 12: border-right: */
+ /* 13: border-bottom: */
+ /* 14: border-left: */
+ /* 15: border-top-color: */
+ /* 16: border-right-color: */
+ /* 17: border-bottom-color: */
+ /* 18: border-left-color: */
+ /* 19: border-top-style: */
+ /* 20: border-right-style: */
+ /* 21: border-bottom-style: */
+ /* 22: border-left-style: */
+ /* 23: border-top-width: */
+ /* 24: border-right-width: */
+ /* 25: border-bottom-width: */
+ /* 26: border-left-width: */
+ /* 27: border-width: */
+ /* 28: border-top-left-radius: */
+ /* 29: border-top-right-radius: */
+ /* 30: border-bottom-left-radius: */
+ /* 31: border-bottom-right-radius: */
+ /* 32: border-radius: */
+ /* 33: border: */
+ /* 34: bottom: */
+ /* 35: caption-side: */
+ /* 36: clear: */
+ /* 37: clip: */
+ /* 38: color: */
+ /* 39: content: */
+ /* 40: counter-increment: */
+ /* 41: counter-reset: */
+ /* 42: cue-after: */
+ /* 43: cue-before: */
+ /* 44: cue: */
+ /* 45: cursor: */
+ /* 46: direction: */
+ /* 47: display: */
+ /* 48: elevation: */
+ /* 49: empty-cells: */
+ /* 50: float: */
+ /* 51: font-family: */
+ /* 52: font-size: */
+ /* 53: font-style: */
+ /* 54: font-variant: */
+ /* 55: font-weight: */
+ /* 56: font: */
+ /* 57: height: */
+ /* 58: left: */
+ /* 59: letter-spacing: */
+ /* 60: line-height: */
+ /* 61: list-style-image: */
+ /* 62: list-style-position: */
+ /* 63: list-style-type: */
+ /* 64: list-style: */
+ /* 65: margin-right: */
+ /* 66: margin-left: */
+ /* 67: margin-top: */
+ /* 68: margin-bottom: */
+ /* 69: margin: */
+ /* 70: max-height: */
+ /* 71: max-width: */
+ /* 72: min-height: */
+ /* 73: min-width: */
+ /* 74: orphans: */
+ /* 75: outline-color: */
+ /* 76: outline-style: */
+ /* 77: outline-width: */
+ /* 78: outline: */
+ /* 79: overflow: */
+ /* 80: padding-top: */
+ /* 81: padding-right: */
+ /* 82: padding-bottom: */
+ /* 83: padding-left: */
+ /* 84: padding: */
+ /* 85: page-break-after: */
+ /* 86: page-break-before: */
+ /* 87: page-break-inside: */
+ /* 88: pause-after: */
+ /* 89: pause-before: */
+ /* 90: pause: */
+ /* 91: pitch-range: */
+ /* 92: pitch: */
+ /* 93: play-during: */
+ /* 94: position: */
+ /* 95: quotes: */
+ /* 96: richness: */
+ /* 97: right: */
+ /* 98: speak-header: */
+ /* 99: speak-numeral: */
+ /* 100: speak-punctuation: */
+ /* 101: speak: */
+ /* 102: speech-rate: */
+ /* 103: stress: */
+ /* 104: table-layout: */
+ /* 105: text-align: */
+ /* 106: text-decoration: */
+ /* 107: text-indent: */
+ /* 108: text-transform: */
+ /* 109: top: */
+ /* 110: unicode-bidi: */
+ /* 111: vertical-align: */
+ /* 112: visibility: */
+ /* 113: voice-family: */
+ /* 114: volume: */
+ /* 115: white-space: */
+ /* 116: widows: */
+ /* 117: width: */
+ /* 118: word-spacing: */
+ /* 119: z-index: */
+/* enum {
+ XXXX_AZIMUTH,
+ XXXX_BACKGROUND_ATTACHMENT,
+ XXXX_BACKGROUND_COLOR,
+ XXXX_BACKGROUND_IMAGE,
+ XXXX_BACKGROUND_POSITION,
+ XXXX_BACKGROUND_REPEAT,
+ XXXX_BACKGROUND,
+ XXXX_BORDER_COLLAPSE,
+ XXXX_BORDER_COLOR,
+ XXXX_BORDER_SPACING,
+ XXXX_BORDER_STYLE,
+ XXXX_BORDER_TOP,
+ XXXX_BORDER_RIGHT,
+ XXXX_BORDER_BOTTOM,
+ XXXX_BORDER_LEFT,
+ XXXX_BORDER_TOP_COLOR,
+ XXXX_BORDER_RIGHT_COLOR,
+ XXXX_BORDER_BOTTOM_COLOR,
+ XXXX_BORDER_LEFT_COLOR,
+ XXXX_BORDER_TOP_STYLE,
+ XXXX_BORDER_RIGHT_STYLE,
+ XXXX_BORDER_BOTTOM_STYLE,
+ XXXX_BORDER_LEFT_STYLE,
+ XXXX_BORDER_TOP_WIDTH,
+ XXXX_BORDER_RIGHT_WIDTH,
+ XXXX_BORDER_BOTTOM_WIDTH,
+ XXXX_BORDER_LEFT_WIDTH,
+ XXXX_BORDER_WIDTH,
+ XXXX_BORDER_TOP_LEFT_RADIUS,
+ XXXX_BORDER_TOP_RIGHT_RADIUS,
+ XXXX_BORDER_BOTTOM_LEFT_RADIUS,
+ XXXX_BORDER_BOTTOM_RIGHT_RADIUS,
+ XXXX_BORDER_RADIUS,
+ XXXX_BORDER,
+ XXXX_BOTTOM,
+ XXXX_CAPTION_SIDE,
+ XXXX_CLEAR,
+ XXXX_CLIP,
+ XXXX_COLOR,
+ XXXX_CONTENT,
+ XXXX_COUNTER_INCREMENT,
+ XXXX_COUNTER_RESET,
+ XXXX_CUE_AFTER,
+ XXXX_CUE_BEFORE,
+ XXXX_CUE,
+ XXXX_CURSOR,
+ XXXX_DIRECTION,
+ XXXX_DISPLAY,
+ XXXX_ELEVATION,
+ XXXX_EMPTY_CELLS,
+ XXXX_FLOAT,
+ XXXX_FONT_FAMILY,
+ XXXX_FONT_SIZE,
+ XXXX_FONT_STYLE,
+ XXXX_FONT_VARIANT,
+ XXXX_FONT_WEIGHT,
+ XXXX_FONT,
+ XXXX_HEIGHT,
+ XXXX_LEFT,
+ XXXX_LETTER_SPACING,
+ XXXX_LINE_HEIGHT,
+ XXXX_LIST_STYLE_IMAGE,
+ XXXX_LIST_STYLE_POSITION,
+ XXXX_LIST_STYLE_TYPE,
+ XXXX_LIST_STYLE,
+ XXXX_MARGIN_RIGHT,
+ XXXX_MARGIN_LEFT,
+ XXXX_MARGIN_TOP,
+ XXXX_MARGIN_BOTTOM,
+ XXXX_MARGIN,
+ XXXX_MAX_HEIGHT,
+ XXXX_MAX_WIDTH,
+ XXXX_MIN_HEIGHT,
+ XXXX_MIN_WIDTH,
+ XXXX_ORPHANS,
+ XXXX_OUTLINE_COLOR,
+ XXXX_OUTLINE_STYLE,
+ XXXX_OUTLINE_WIDTH,
+ XXXX_OUTLINE,
+ XXXX_OVERFLOW,
+ XXXX_PADDING_TOP,
+ XXXX_PADDING_RIGHT,
+ XXXX_PADDING_BOTTOM,
+ XXXX_PADDING_LEFT,
+ XXXX_PADDING,
+ XXXX_PAGE_BREAK_AFTER,
+ XXXX_PAGE_BREAK_BEFORE,
+ XXXX_PAGE_BREAK_INSIDE,
+ XXXX_PAUSE_AFTER,
+ XXXX_PAUSE_BEFORE,
+ XXXX_PAUSE,
+ XXXX_PITCH_RANGE,
+ XXXX_PITCH,
+ XXXX_PLAY_DURING,
+ XXXX_POSITION,
+ XXXX_QUOTES,
+ XXXX_RICHNESS,
+ XXXX_RIGHT,
+ XXXX_SPEAK_HEADER,
+ XXXX_SPEAK_NUMERAL,
+ XXXX_SPEAK_PUNCTUATION,
+ XXXX_SPEAK,
+ XXXX_SPEECH_RATE,
+ XXXX_STRESS,
+ XXXX_TABLE_LAYOUT,
+ XXXX_TEXT_ALIGN,
+ XXXX_TEXT_DECORATION,
+ XXXX_TEXT_INDENT,
+ XXXX_TEXT_TRANSFORM,
+ XXXX_TOP,
+ XXXX_UNICODE_BIDI,
+ XXXX_VERTICAL_ALIGN,
+ XXXX_VISIBILITY,
+ XXXX_VOICE_FAMILY,
+ XXXX_VOLUME,
+ XXXX_WHITE_SPACE,
+ XXXX_WIDOWS,
+ XXXX_WIDTH,
+ XXXX_WORD_SPACING,
+ XXXX_Z_INDEX,
+}; */
+
+/* pos 0000: 0 */ 0x61 /* 'a' */, 0x3A, 0x00 /* (to 0x003A s 1) */,
+ 0x62 /* 'b' */, 0x40, 0x00 /* (to 0x0043 s 9) */,
+ 0x63 /* 'c' */, 0xED, 0x01 /* (to 0x01F3 s 257) */,
+ 0x64 /* 'd' */, 0x74, 0x02 /* (to 0x027D s 333) */,
+ 0x65 /* 'e' */, 0x89, 0x02 /* (to 0x0295 s 349) */,
+ 0x66 /* 'f' */, 0xA3, 0x02 /* (to 0x02B2 s 370) */,
+ 0x68 /* 'h' */, 0xF0, 0x02 /* (to 0x0302 s 413) */,
+ 0x6C /* 'l' */, 0xF5, 0x02 /* (to 0x030A s 420) */,
+ 0x6D /* 'm' */, 0x55, 0x03 /* (to 0x036D s 479) */,
+ 0x6F /* 'o' */, 0xC2, 0x03 /* (to 0x03DD s 540) */,
+ 0x70 /* 'p' */, 0x07, 0x04 /* (to 0x0425 s 582) */,
+ 0x71 /* 'q' */, 0xC2, 0x04 /* (to 0x04E3 s 691) */,
+ 0x72 /* 'r' */, 0xC7, 0x04 /* (to 0x04EB s 698) */,
+ 0x73 /* 's' */, 0xD9, 0x04 /* (to 0x0500 s 711) */,
+ 0x74 /* 't' */, 0x28, 0x05 /* (to 0x0552 s 760) */,
+ 0x75 /* 'u' */, 0x76, 0x05 /* (to 0x05A3 s 814) */,
+ 0x76 /* 'v' */, 0x81, 0x05 /* (to 0x05B1 s 827) */,
+ 0x77 /* 'w' */, 0xBB, 0x05 /* (to 0x05EE s 869) */,
+ 0x7A /* 'z' */, 0xEC, 0x05 /* (to 0x0622 s 902) */,
+ 0x08, /* fail */
+/* pos 003a: 1 */ 0xFA /* 'z' -> */,
+/* pos 003b: 2 */ 0xE9 /* 'i' -> */,
+/* pos 003c: 3 */ 0xED /* 'm' -> */,
+/* pos 003d: 4 */ 0xF5 /* 'u' -> */,
+/* pos 003e: 5 */ 0xF4 /* 't' -> */,
+/* pos 003f: 6 */ 0xE8 /* 'h' -> */,
+/* pos 0040: 7 */ 0xBA /* ':' -> */,
+/* pos 0041: 8 */ 0x00, 0x00 /* - terminal marker 0 - */,
+/* pos 0043: 9 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x004A s 10) */,
+ 0x6F /* 'o' */, 0x51, 0x00 /* (to 0x0097 s 60) */,
+ 0x08, /* fail */
+/* pos 004a: 10 */ 0xE3 /* 'c' -> */,
+/* pos 004b: 11 */ 0xEB /* 'k' -> */,
+/* pos 004c: 12 */ 0xE7 /* 'g' -> */,
+/* pos 004d: 13 */ 0xF2 /* 'r' -> */,
+/* pos 004e: 14 */ 0xEF /* 'o' -> */,
+/* pos 004f: 15 */ 0xF5 /* 'u' -> */,
+/* pos 0050: 16 */ 0xEE /* 'n' -> */,
+/* pos 0051: 17 */ 0xE4 /* 'd' -> */,
+/* pos 0052: 18 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0059 s 19) */,
+ 0x3A /* ':' */, 0x40, 0x00 /* (to 0x0095 s 59) */,
+ 0x08, /* fail */
+/* pos 0059: 19 */ 0x61 /* 'a' */, 0x10, 0x00 /* (to 0x0069 s 20) */,
+ 0x63 /* 'c' */, 0x19, 0x00 /* (to 0x0075 s 31) */,
+ 0x69 /* 'i' */, 0x1D, 0x00 /* (to 0x007C s 37) */,
+ 0x70 /* 'p' */, 0x21, 0x00 /* (to 0x0083 s 43) */,
+ 0x72 /* 'r' */, 0x28, 0x00 /* (to 0x008D s 52) */,
+ 0x08, /* fail */
+/* pos 0069: 20 */ 0xF4 /* 't' -> */,
+/* pos 006a: 21 */ 0xF4 /* 't' -> */,
+/* pos 006b: 22 */ 0xE1 /* 'a' -> */,
+/* pos 006c: 23 */ 0xE3 /* 'c' -> */,
+/* pos 006d: 24 */ 0xE8 /* 'h' -> */,
+/* pos 006e: 25 */ 0xED /* 'm' -> */,
+/* pos 006f: 26 */ 0xE5 /* 'e' -> */,
+/* pos 0070: 27 */ 0xEE /* 'n' -> */,
+/* pos 0071: 28 */ 0xF4 /* 't' -> */,
+/* pos 0072: 29 */ 0xBA /* ':' -> */,
+/* pos 0073: 30 */ 0x00, 0x01 /* - terminal marker 1 - */,
+/* pos 0075: 31 */ 0xEF /* 'o' -> */,
+/* pos 0076: 32 */ 0xEC /* 'l' -> */,
+/* pos 0077: 33 */ 0xEF /* 'o' -> */,
+/* pos 0078: 34 */ 0xF2 /* 'r' -> */,
+/* pos 0079: 35 */ 0xBA /* ':' -> */,
+/* pos 007a: 36 */ 0x00, 0x02 /* - terminal marker 2 - */,
+/* pos 007c: 37 */ 0xED /* 'm' -> */,
+/* pos 007d: 38 */ 0xE1 /* 'a' -> */,
+/* pos 007e: 39 */ 0xE7 /* 'g' -> */,
+/* pos 007f: 40 */ 0xE5 /* 'e' -> */,
+/* pos 0080: 41 */ 0xBA /* ':' -> */,
+/* pos 0081: 42 */ 0x00, 0x03 /* - terminal marker 3 - */,
+/* pos 0083: 43 */ 0xEF /* 'o' -> */,
+/* pos 0084: 44 */ 0xF3 /* 's' -> */,
+/* pos 0085: 45 */ 0xE9 /* 'i' -> */,
+/* pos 0086: 46 */ 0xF4 /* 't' -> */,
+/* pos 0087: 47 */ 0xE9 /* 'i' -> */,
+/* pos 0088: 48 */ 0xEF /* 'o' -> */,
+/* pos 0089: 49 */ 0xEE /* 'n' -> */,
+/* pos 008a: 50 */ 0xBA /* ':' -> */,
+/* pos 008b: 51 */ 0x00, 0x04 /* - terminal marker 4 - */,
+/* pos 008d: 52 */ 0xE5 /* 'e' -> */,
+/* pos 008e: 53 */ 0xF0 /* 'p' -> */,
+/* pos 008f: 54 */ 0xE5 /* 'e' -> */,
+/* pos 0090: 55 */ 0xE1 /* 'a' -> */,
+/* pos 0091: 56 */ 0xF4 /* 't' -> */,
+/* pos 0092: 57 */ 0xBA /* ':' -> */,
+/* pos 0093: 58 */ 0x00, 0x05 /* - terminal marker 5 - */,
+/* pos 0095: 59 */ 0x00, 0x06 /* - terminal marker 6 - */,
+/* pos 0097: 60 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x009E s 61) */,
+ 0x74 /* 't' */, 0x53, 0x01 /* (to 0x01ED s 252) */,
+ 0x08, /* fail */
+/* pos 009e: 61 */ 0xE4 /* 'd' -> */,
+/* pos 009f: 62 */ 0xE5 /* 'e' -> */,
+/* pos 00a0: 63 */ 0xF2 /* 'r' -> */,
+/* pos 00a1: 64 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x00A8 s 65) */,
+ 0x3A /* ':' */, 0x47, 0x01 /* (to 0x01EB s 251) */,
+ 0x08, /* fail */
+/* pos 00a8: 65 */ 0x63 /* 'c' */, 0x16, 0x00 /* (to 0x00BE s 66) */,
+ 0x73 /* 's' */, 0x27, 0x00 /* (to 0x00D2 s 78) */,
+ 0x74 /* 't' */, 0x39, 0x00 /* (to 0x00E7 s 91) */,
+ 0x72 /* 'r' */, 0x41, 0x00 /* (to 0x00F2 s 95) */,
+ 0x62 /* 'b' */, 0x51, 0x00 /* (to 0x0105 s 101) */,
+ 0x6C /* 'l' */, 0x5C, 0x00 /* (to 0x0113 s 108) */,
+ 0x77 /* 'w' */, 0xED, 0x00 /* (to 0x01A7 s 189) */,
+ 0x08, /* fail */
+/* pos 00be: 66 */ 0xEF /* 'o' -> */,
+/* pos 00bf: 67 */ 0xEC /* 'l' -> */,
+/* pos 00c0: 68 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x00C7 s 69) */,
+ 0x6F /* 'o' */, 0x0B, 0x00 /* (to 0x00CE s 75) */,
+ 0x08, /* fail */
+/* pos 00c7: 69 */ 0xE1 /* 'a' -> */,
+/* pos 00c8: 70 */ 0xF0 /* 'p' -> */,
+/* pos 00c9: 71 */ 0xF3 /* 's' -> */,
+/* pos 00ca: 72 */ 0xE5 /* 'e' -> */,
+/* pos 00cb: 73 */ 0xBA /* ':' -> */,
+/* pos 00cc: 74 */ 0x00, 0x07 /* - terminal marker 7 - */,
+/* pos 00ce: 75 */ 0xF2 /* 'r' -> */,
+/* pos 00cf: 76 */ 0xBA /* ':' -> */,
+/* pos 00d0: 77 */ 0x00, 0x08 /* - terminal marker 8 - */,
+/* pos 00d2: 78 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x00D9 s 79) */,
+ 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x00E1 s 86) */,
+ 0x08, /* fail */
+/* pos 00d9: 79 */ 0xE1 /* 'a' -> */,
+/* pos 00da: 80 */ 0xE3 /* 'c' -> */,
+/* pos 00db: 81 */ 0xE9 /* 'i' -> */,
+/* pos 00dc: 82 */ 0xEE /* 'n' -> */,
+/* pos 00dd: 83 */ 0xE7 /* 'g' -> */,
+/* pos 00de: 84 */ 0xBA /* ':' -> */,
+/* pos 00df: 85 */ 0x00, 0x09 /* - terminal marker 9 - */,
+/* pos 00e1: 86 */ 0xF9 /* 'y' -> */,
+/* pos 00e2: 87 */ 0xEC /* 'l' -> */,
+/* pos 00e3: 88 */ 0xE5 /* 'e' -> */,
+/* pos 00e4: 89 */ 0xBA /* ':' -> */,
+/* pos 00e5: 90 */ 0x00, 0x0A /* - terminal marker 10 - */,
+/* pos 00e7: 91 */ 0xEF /* 'o' -> */,
+/* pos 00e8: 92 */ 0xF0 /* 'p' -> */,
+/* pos 00e9: 93 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x00F0 s 94) */,
+ 0x2D /* '-' */, 0x33, 0x00 /* (to 0x011F s 113) */,
+ 0x08, /* fail */
+/* pos 00f0: 94 */ 0x00, 0x0B /* - terminal marker 11 - */,
+/* pos 00f2: 95 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00F9 s 96) */,
+ 0x61 /* 'a' */, 0xEF, 0x00 /* (to 0x01E4 s 245) */,
+ 0x08, /* fail */
+/* pos 00f9: 96 */ 0xE7 /* 'g' -> */,
+/* pos 00fa: 97 */ 0xE8 /* 'h' -> */,
+/* pos 00fb: 98 */ 0xF4 /* 't' -> */,
+/* pos 00fc: 99 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x0103 s 100) */,
+ 0x2D /* '-' */, 0x37, 0x00 /* (to 0x0136 s 120) */,
+ 0x08, /* fail */
+/* pos 0103: 100 */ 0x00, 0x0C /* - terminal marker 12 - */,
+/* pos 0105: 101 */ 0xEF /* 'o' -> */,
+/* pos 0106: 102 */ 0xF4 /* 't' -> */,
+/* pos 0107: 103 */ 0xF4 /* 't' -> */,
+/* pos 0108: 104 */ 0xEF /* 'o' -> */,
+/* pos 0109: 105 */ 0xED /* 'm' -> */,
+/* pos 010a: 106 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x0111 s 107) */,
+ 0x2D /* '-' */, 0x3A, 0x00 /* (to 0x0147 s 127) */,
+ 0x08, /* fail */
+/* pos 0111: 107 */ 0x00, 0x0D /* - terminal marker 13 - */,
+/* pos 0113: 108 */ 0xE5 /* 'e' -> */,
+/* pos 0114: 109 */ 0xE6 /* 'f' -> */,
+/* pos 0115: 110 */ 0xF4 /* 't' -> */,
+/* pos 0116: 111 */ 0x3A /* ':' */, 0x07, 0x00 /* (to 0x011D s 112) */,
+ 0x2D /* '-' */, 0x45, 0x00 /* (to 0x015E s 134) */,
+ 0x08, /* fail */
+/* pos 011d: 112 */ 0x00, 0x0E /* - terminal marker 14 - */,
+/* pos 011f: 113 */ 0x63 /* 'c' */, 0x10, 0x00 /* (to 0x012F s 114) */,
+ 0x73 /* 's' */, 0x4D, 0x00 /* (to 0x016F s 141) */,
+ 0x77 /* 'w' */, 0x66, 0x00 /* (to 0x018B s 165) */,
+ 0x6C /* 'l' */, 0x86, 0x00 /* (to 0x01AE s 195) */,
+ 0x72 /* 'r' */, 0x90, 0x00 /* (to 0x01BB s 207) */,
+ 0x08, /* fail */
+/* pos 012f: 114 */ 0xEF /* 'o' -> */,
+/* pos 0130: 115 */ 0xEC /* 'l' -> */,
+/* pos 0131: 116 */ 0xEF /* 'o' -> */,
+/* pos 0132: 117 */ 0xF2 /* 'r' -> */,
+/* pos 0133: 118 */ 0xBA /* ':' -> */,
+/* pos 0134: 119 */ 0x00, 0x0F /* - terminal marker 15 - */,
+/* pos 0136: 120 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0140 s 121) */,
+ 0x73 /* 's' */, 0x3D, 0x00 /* (to 0x0176 s 147) */,
+ 0x77 /* 'w' */, 0x56, 0x00 /* (to 0x0192 s 171) */,
+ 0x08, /* fail */
+/* pos 0140: 121 */ 0xEF /* 'o' -> */,
+/* pos 0141: 122 */ 0xEC /* 'l' -> */,
+/* pos 0142: 123 */ 0xEF /* 'o' -> */,
+/* pos 0143: 124 */ 0xF2 /* 'r' -> */,
+/* pos 0144: 125 */ 0xBA /* ':' -> */,
+/* pos 0145: 126 */ 0x00, 0x10 /* - terminal marker 16 - */,
+/* pos 0147: 127 */ 0x63 /* 'c' */, 0x10, 0x00 /* (to 0x0157 s 128) */,
+ 0x73 /* 's' */, 0x33, 0x00 /* (to 0x017D s 153) */,
+ 0x77 /* 'w' */, 0x4C, 0x00 /* (to 0x0199 s 177) */,
+ 0x6C /* 'l' */, 0x79, 0x00 /* (to 0x01C9 s 220) */,
+ 0x72 /* 'r' */, 0x83, 0x00 /* (to 0x01D6 s 232) */,
+ 0x08, /* fail */
+/* pos 0157: 128 */ 0xEF /* 'o' -> */,
+/* pos 0158: 129 */ 0xEC /* 'l' -> */,
+/* pos 0159: 130 */ 0xEF /* 'o' -> */,
+/* pos 015a: 131 */ 0xF2 /* 'r' -> */,
+/* pos 015b: 132 */ 0xBA /* ':' -> */,
+/* pos 015c: 133 */ 0x00, 0x11 /* - terminal marker 17 - */,
+/* pos 015e: 134 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0168 s 135) */,
+ 0x73 /* 's' */, 0x23, 0x00 /* (to 0x0184 s 159) */,
+ 0x77 /* 'w' */, 0x3C, 0x00 /* (to 0x01A0 s 183) */,
+ 0x08, /* fail */
+/* pos 0168: 135 */ 0xEF /* 'o' -> */,
+/* pos 0169: 136 */ 0xEC /* 'l' -> */,
+/* pos 016a: 137 */ 0xEF /* 'o' -> */,
+/* pos 016b: 138 */ 0xF2 /* 'r' -> */,
+/* pos 016c: 139 */ 0xBA /* ':' -> */,
+/* pos 016d: 140 */ 0x00, 0x12 /* - terminal marker 18 - */,
+/* pos 016f: 141 */ 0xF4 /* 't' -> */,
+/* pos 0170: 142 */ 0xF9 /* 'y' -> */,
+/* pos 0171: 143 */ 0xEC /* 'l' -> */,
+/* pos 0172: 144 */ 0xE5 /* 'e' -> */,
+/* pos 0173: 145 */ 0xBA /* ':' -> */,
+/* pos 0174: 146 */ 0x00, 0x13 /* - terminal marker 19 - */,
+/* pos 0176: 147 */ 0xF4 /* 't' -> */,
+/* pos 0177: 148 */ 0xF9 /* 'y' -> */,
+/* pos 0178: 149 */ 0xEC /* 'l' -> */,
+/* pos 0179: 150 */ 0xE5 /* 'e' -> */,
+/* pos 017a: 151 */ 0xBA /* ':' -> */,
+/* pos 017b: 152 */ 0x00, 0x14 /* - terminal marker 20 - */,
+/* pos 017d: 153 */ 0xF4 /* 't' -> */,
+/* pos 017e: 154 */ 0xF9 /* 'y' -> */,
+/* pos 017f: 155 */ 0xEC /* 'l' -> */,
+/* pos 0180: 156 */ 0xE5 /* 'e' -> */,
+/* pos 0181: 157 */ 0xBA /* ':' -> */,
+/* pos 0182: 158 */ 0x00, 0x15 /* - terminal marker 21 - */,
+/* pos 0184: 159 */ 0xF4 /* 't' -> */,
+/* pos 0185: 160 */ 0xF9 /* 'y' -> */,
+/* pos 0186: 161 */ 0xEC /* 'l' -> */,
+/* pos 0187: 162 */ 0xE5 /* 'e' -> */,
+/* pos 0188: 163 */ 0xBA /* ':' -> */,
+/* pos 0189: 164 */ 0x00, 0x16 /* - terminal marker 22 - */,
+/* pos 018b: 165 */ 0xE9 /* 'i' -> */,
+/* pos 018c: 166 */ 0xE4 /* 'd' -> */,
+/* pos 018d: 167 */ 0xF4 /* 't' -> */,
+/* pos 018e: 168 */ 0xE8 /* 'h' -> */,
+/* pos 018f: 169 */ 0xBA /* ':' -> */,
+/* pos 0190: 170 */ 0x00, 0x17 /* - terminal marker 23 - */,
+/* pos 0192: 171 */ 0xE9 /* 'i' -> */,
+/* pos 0193: 172 */ 0xE4 /* 'd' -> */,
+/* pos 0194: 173 */ 0xF4 /* 't' -> */,
+/* pos 0195: 174 */ 0xE8 /* 'h' -> */,
+/* pos 0196: 175 */ 0xBA /* ':' -> */,
+/* pos 0197: 176 */ 0x00, 0x18 /* - terminal marker 24 - */,
+/* pos 0199: 177 */ 0xE9 /* 'i' -> */,
+/* pos 019a: 178 */ 0xE4 /* 'd' -> */,
+/* pos 019b: 179 */ 0xF4 /* 't' -> */,
+/* pos 019c: 180 */ 0xE8 /* 'h' -> */,
+/* pos 019d: 181 */ 0xBA /* ':' -> */,
+/* pos 019e: 182 */ 0x00, 0x19 /* - terminal marker 25 - */,
+/* pos 01a0: 183 */ 0xE9 /* 'i' -> */,
+/* pos 01a1: 184 */ 0xE4 /* 'd' -> */,
+/* pos 01a2: 185 */ 0xF4 /* 't' -> */,
+/* pos 01a3: 186 */ 0xE8 /* 'h' -> */,
+/* pos 01a4: 187 */ 0xBA /* ':' -> */,
+/* pos 01a5: 188 */ 0x00, 0x1A /* - terminal marker 26 - */,
+/* pos 01a7: 189 */ 0xE9 /* 'i' -> */,
+/* pos 01a8: 190 */ 0xE4 /* 'd' -> */,
+/* pos 01a9: 191 */ 0xF4 /* 't' -> */,
+/* pos 01aa: 192 */ 0xE8 /* 'h' -> */,
+/* pos 01ab: 193 */ 0xBA /* ':' -> */,
+/* pos 01ac: 194 */ 0x00, 0x1B /* - terminal marker 27 - */,
+/* pos 01ae: 195 */ 0xE5 /* 'e' -> */,
+/* pos 01af: 196 */ 0xE6 /* 'f' -> */,
+/* pos 01b0: 197 */ 0xF4 /* 't' -> */,
+/* pos 01b1: 198 */ 0xAD /* '-' -> */,
+/* pos 01b2: 199 */ 0xF2 /* 'r' -> */,
+/* pos 01b3: 200 */ 0xE1 /* 'a' -> */,
+/* pos 01b4: 201 */ 0xE4 /* 'd' -> */,
+/* pos 01b5: 202 */ 0xE9 /* 'i' -> */,
+/* pos 01b6: 203 */ 0xF5 /* 'u' -> */,
+/* pos 01b7: 204 */ 0xF3 /* 's' -> */,
+/* pos 01b8: 205 */ 0xBA /* ':' -> */,
+/* pos 01b9: 206 */ 0x00, 0x1C /* - terminal marker 28 - */,
+/* pos 01bb: 207 */ 0xE9 /* 'i' -> */,
+/* pos 01bc: 208 */ 0xE7 /* 'g' -> */,
+/* pos 01bd: 209 */ 0xE8 /* 'h' -> */,
+/* pos 01be: 210 */ 0xF4 /* 't' -> */,
+/* pos 01bf: 211 */ 0xAD /* '-' -> */,
+/* pos 01c0: 212 */ 0xF2 /* 'r' -> */,
+/* pos 01c1: 213 */ 0xE1 /* 'a' -> */,
+/* pos 01c2: 214 */ 0xE4 /* 'd' -> */,
+/* pos 01c3: 215 */ 0xE9 /* 'i' -> */,
+/* pos 01c4: 216 */ 0xF5 /* 'u' -> */,
+/* pos 01c5: 217 */ 0xF3 /* 's' -> */,
+/* pos 01c6: 218 */ 0xBA /* ':' -> */,
+/* pos 01c7: 219 */ 0x00, 0x1D /* - terminal marker 29 - */,
+/* pos 01c9: 220 */ 0xE5 /* 'e' -> */,
+/* pos 01ca: 221 */ 0xE6 /* 'f' -> */,
+/* pos 01cb: 222 */ 0xF4 /* 't' -> */,
+/* pos 01cc: 223 */ 0xAD /* '-' -> */,
+/* pos 01cd: 224 */ 0xF2 /* 'r' -> */,
+/* pos 01ce: 225 */ 0xE1 /* 'a' -> */,
+/* pos 01cf: 226 */ 0xE4 /* 'd' -> */,
+/* pos 01d0: 227 */ 0xE9 /* 'i' -> */,
+/* pos 01d1: 228 */ 0xF5 /* 'u' -> */,
+/* pos 01d2: 229 */ 0xF3 /* 's' -> */,
+/* pos 01d3: 230 */ 0xBA /* ':' -> */,
+/* pos 01d4: 231 */ 0x00, 0x1E /* - terminal marker 30 - */,
+/* pos 01d6: 232 */ 0xE9 /* 'i' -> */,
+/* pos 01d7: 233 */ 0xE7 /* 'g' -> */,
+/* pos 01d8: 234 */ 0xE8 /* 'h' -> */,
+/* pos 01d9: 235 */ 0xF4 /* 't' -> */,
+/* pos 01da: 236 */ 0xAD /* '-' -> */,
+/* pos 01db: 237 */ 0xF2 /* 'r' -> */,
+/* pos 01dc: 238 */ 0xE1 /* 'a' -> */,
+/* pos 01dd: 239 */ 0xE4 /* 'd' -> */,
+/* pos 01de: 240 */ 0xE9 /* 'i' -> */,
+/* pos 01df: 241 */ 0xF5 /* 'u' -> */,
+/* pos 01e0: 242 */ 0xF3 /* 's' -> */,
+/* pos 01e1: 243 */ 0xBA /* ':' -> */,
+/* pos 01e2: 244 */ 0x00, 0x1F /* - terminal marker 31 - */,
+/* pos 01e4: 245 */ 0xE4 /* 'd' -> */,
+/* pos 01e5: 246 */ 0xE9 /* 'i' -> */,
+/* pos 01e6: 247 */ 0xF5 /* 'u' -> */,
+/* pos 01e7: 248 */ 0xF3 /* 's' -> */,
+/* pos 01e8: 249 */ 0xBA /* ':' -> */,
+/* pos 01e9: 250 */ 0x00, 0x20 /* - terminal marker 32 - */,
+/* pos 01eb: 251 */ 0x00, 0x21 /* - terminal marker 33 - */,
+/* pos 01ed: 252 */ 0xF4 /* 't' -> */,
+/* pos 01ee: 253 */ 0xEF /* 'o' -> */,
+/* pos 01ef: 254 */ 0xED /* 'm' -> */,
+/* pos 01f0: 255 */ 0xBA /* ':' -> */,
+/* pos 01f1: 256 */ 0x00, 0x22 /* - terminal marker 34 - */,
+/* pos 01f3: 257 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0200 s 258) */,
+ 0x6C /* 'l' */, 0x17, 0x00 /* (to 0x020D s 270) */,
+ 0x6F /* 'o' */, 0x24, 0x00 /* (to 0x021D s 278) */,
+ 0x75 /* 'u' */, 0x55, 0x00 /* (to 0x0251 s 311) */,
+ 0x08, /* fail */
+/* pos 0200: 258 */ 0xF0 /* 'p' -> */,
+/* pos 0201: 259 */ 0xF4 /* 't' -> */,
+/* pos 0202: 260 */ 0xE9 /* 'i' -> */,
+/* pos 0203: 261 */ 0xEF /* 'o' -> */,
+/* pos 0204: 262 */ 0xEE /* 'n' -> */,
+/* pos 0205: 263 */ 0xAD /* '-' -> */,
+/* pos 0206: 264 */ 0xF3 /* 's' -> */,
+/* pos 0207: 265 */ 0xE9 /* 'i' -> */,
+/* pos 0208: 266 */ 0xE4 /* 'd' -> */,
+/* pos 0209: 267 */ 0xE5 /* 'e' -> */,
+/* pos 020a: 268 */ 0xBA /* ':' -> */,
+/* pos 020b: 269 */ 0x00, 0x23 /* - terminal marker 35 - */,
+/* pos 020d: 270 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0214 s 271) */,
+ 0x69 /* 'i' */, 0x09, 0x00 /* (to 0x0219 s 275) */,
+ 0x08, /* fail */
+/* pos 0214: 271 */ 0xE1 /* 'a' -> */,
+/* pos 0215: 272 */ 0xF2 /* 'r' -> */,
+/* pos 0216: 273 */ 0xBA /* ':' -> */,
+/* pos 0217: 274 */ 0x00, 0x24 /* - terminal marker 36 - */,
+/* pos 0219: 275 */ 0xF0 /* 'p' -> */,
+/* pos 021a: 276 */ 0xBA /* ':' -> */,
+/* pos 021b: 277 */ 0x00, 0x25 /* - terminal marker 37 - */,
+/* pos 021d: 278 */ 0x6C /* 'l' */, 0x0A, 0x00 /* (to 0x0227 s 279) */,
+ 0x6E /* 'n' */, 0x0C, 0x00 /* (to 0x022C s 283) */,
+ 0x75 /* 'u' */, 0x10, 0x00 /* (to 0x0233 s 289) */,
+ 0x08, /* fail */
+/* pos 0227: 279 */ 0xEF /* 'o' -> */,
+/* pos 0228: 280 */ 0xF2 /* 'r' -> */,
+/* pos 0229: 281 */ 0xBA /* ':' -> */,
+/* pos 022a: 282 */ 0x00, 0x26 /* - terminal marker 38 - */,
+/* pos 022c: 283 */ 0xF4 /* 't' -> */,
+/* pos 022d: 284 */ 0xE5 /* 'e' -> */,
+/* pos 022e: 285 */ 0xEE /* 'n' -> */,
+/* pos 022f: 286 */ 0xF4 /* 't' -> */,
+/* pos 0230: 287 */ 0xBA /* ':' -> */,
+/* pos 0231: 288 */ 0x00, 0x27 /* - terminal marker 39 - */,
+/* pos 0233: 289 */ 0xEE /* 'n' -> */,
+/* pos 0234: 290 */ 0xF4 /* 't' -> */,
+/* pos 0235: 291 */ 0xE5 /* 'e' -> */,
+/* pos 0236: 292 */ 0xF2 /* 'r' -> */,
+/* pos 0237: 293 */ 0xAD /* '-' -> */,
+/* pos 0238: 294 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x023F s 295) */,
+ 0x72 /* 'r' */, 0x0F, 0x00 /* (to 0x024A s 305) */,
+ 0x08, /* fail */
+/* pos 023f: 295 */ 0xEE /* 'n' -> */,
+/* pos 0240: 296 */ 0xE3 /* 'c' -> */,
+/* pos 0241: 297 */ 0xF2 /* 'r' -> */,
+/* pos 0242: 298 */ 0xE5 /* 'e' -> */,
+/* pos 0243: 299 */ 0xED /* 'm' -> */,
+/* pos 0244: 300 */ 0xE5 /* 'e' -> */,
+/* pos 0245: 301 */ 0xEE /* 'n' -> */,
+/* pos 0246: 302 */ 0xF4 /* 't' -> */,
+/* pos 0247: 303 */ 0xBA /* ':' -> */,
+/* pos 0248: 304 */ 0x00, 0x28 /* - terminal marker 40 - */,
+/* pos 024a: 305 */ 0xE5 /* 'e' -> */,
+/* pos 024b: 306 */ 0xF3 /* 's' -> */,
+/* pos 024c: 307 */ 0xE5 /* 'e' -> */,
+/* pos 024d: 308 */ 0xF4 /* 't' -> */,
+/* pos 024e: 309 */ 0xBA /* ':' -> */,
+/* pos 024f: 310 */ 0x00, 0x29 /* - terminal marker 41 - */,
+/* pos 0251: 311 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0258 s 312) */,
+ 0x72 /* 'r' */, 0x23, 0x00 /* (to 0x0277 s 328) */,
+ 0x08, /* fail */
+/* pos 0258: 312 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x025F s 313) */,
+ 0x3A /* ':' */, 0x1A, 0x00 /* (to 0x0275 s 327) */,
+ 0x08, /* fail */
+/* pos 025f: 313 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0266 s 314) */,
+ 0x62 /* 'b' */, 0x0B, 0x00 /* (to 0x026D s 320) */,
+ 0x08, /* fail */
+/* pos 0266: 314 */ 0xE6 /* 'f' -> */,
+/* pos 0267: 315 */ 0xF4 /* 't' -> */,
+/* pos 0268: 316 */ 0xE5 /* 'e' -> */,
+/* pos 0269: 317 */ 0xF2 /* 'r' -> */,
+/* pos 026a: 318 */ 0xBA /* ':' -> */,
+/* pos 026b: 319 */ 0x00, 0x2A /* - terminal marker 42 - */,
+/* pos 026d: 320 */ 0xE5 /* 'e' -> */,
+/* pos 026e: 321 */ 0xE6 /* 'f' -> */,
+/* pos 026f: 322 */ 0xEF /* 'o' -> */,
+/* pos 0270: 323 */ 0xF2 /* 'r' -> */,
+/* pos 0271: 324 */ 0xE5 /* 'e' -> */,
+/* pos 0272: 325 */ 0xBA /* ':' -> */,
+/* pos 0273: 326 */ 0x00, 0x2B /* - terminal marker 43 - */,
+/* pos 0275: 327 */ 0x00, 0x2C /* - terminal marker 44 - */,
+/* pos 0277: 328 */ 0xF3 /* 's' -> */,
+/* pos 0278: 329 */ 0xEF /* 'o' -> */,
+/* pos 0279: 330 */ 0xF2 /* 'r' -> */,
+/* pos 027a: 331 */ 0xBA /* ':' -> */,
+/* pos 027b: 332 */ 0x00, 0x2D /* - terminal marker 45 - */,
+/* pos 027d: 333 */ 0xE9 /* 'i' -> */,
+/* pos 027e: 334 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x0285 s 335) */,
+ 0x73 /* 's' */, 0x0D, 0x00 /* (to 0x028E s 343) */,
+ 0x08, /* fail */
+/* pos 0285: 335 */ 0xE5 /* 'e' -> */,
+/* pos 0286: 336 */ 0xE3 /* 'c' -> */,
+/* pos 0287: 337 */ 0xF4 /* 't' -> */,
+/* pos 0288: 338 */ 0xE9 /* 'i' -> */,
+/* pos 0289: 339 */ 0xEF /* 'o' -> */,
+/* pos 028a: 340 */ 0xEE /* 'n' -> */,
+/* pos 028b: 341 */ 0xBA /* ':' -> */,
+/* pos 028c: 342 */ 0x00, 0x2E /* - terminal marker 46 - */,
+/* pos 028e: 343 */ 0xF0 /* 'p' -> */,
+/* pos 028f: 344 */ 0xEC /* 'l' -> */,
+/* pos 0290: 345 */ 0xE1 /* 'a' -> */,
+/* pos 0291: 346 */ 0xF9 /* 'y' -> */,
+/* pos 0292: 347 */ 0xBA /* ':' -> */,
+/* pos 0293: 348 */ 0x00, 0x2F /* - terminal marker 47 - */,
+/* pos 0295: 349 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x029C s 350) */,
+ 0x6D /* 'm' */, 0x0E, 0x00 /* (to 0x02A6 s 359) */,
+ 0x08, /* fail */
+/* pos 029c: 350 */ 0xE5 /* 'e' -> */,
+/* pos 029d: 351 */ 0xF6 /* 'v' -> */,
+/* pos 029e: 352 */ 0xE1 /* 'a' -> */,
+/* pos 029f: 353 */ 0xF4 /* 't' -> */,
+/* pos 02a0: 354 */ 0xE9 /* 'i' -> */,
+/* pos 02a1: 355 */ 0xEF /* 'o' -> */,
+/* pos 02a2: 356 */ 0xEE /* 'n' -> */,
+/* pos 02a3: 357 */ 0xBA /* ':' -> */,
+/* pos 02a4: 358 */ 0x00, 0x30 /* - terminal marker 48 - */,
+/* pos 02a6: 359 */ 0xF0 /* 'p' -> */,
+/* pos 02a7: 360 */ 0xF4 /* 't' -> */,
+/* pos 02a8: 361 */ 0xF9 /* 'y' -> */,
+/* pos 02a9: 362 */ 0xAD /* '-' -> */,
+/* pos 02aa: 363 */ 0xE3 /* 'c' -> */,
+/* pos 02ab: 364 */ 0xE5 /* 'e' -> */,
+/* pos 02ac: 365 */ 0xEC /* 'l' -> */,
+/* pos 02ad: 366 */ 0xEC /* 'l' -> */,
+/* pos 02ae: 367 */ 0xF3 /* 's' -> */,
+/* pos 02af: 368 */ 0xBA /* ':' -> */,
+/* pos 02b0: 369 */ 0x00, 0x31 /* - terminal marker 49 - */,
+/* pos 02b2: 370 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x02B9 s 371) */,
+ 0x6F /* 'o' */, 0x0A, 0x00 /* (to 0x02BF s 376) */,
+ 0x08, /* fail */
+/* pos 02b9: 371 */ 0xEF /* 'o' -> */,
+/* pos 02ba: 372 */ 0xE1 /* 'a' -> */,
+/* pos 02bb: 373 */ 0xF4 /* 't' -> */,
+/* pos 02bc: 374 */ 0xBA /* ':' -> */,
+/* pos 02bd: 375 */ 0x00, 0x32 /* - terminal marker 50 - */,
+/* pos 02bf: 376 */ 0xEE /* 'n' -> */,
+/* pos 02c0: 377 */ 0xF4 /* 't' -> */,
+/* pos 02c1: 378 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x02C8 s 379) */,
+ 0x3A /* ':' */, 0x3C, 0x00 /* (to 0x0300 s 412) */,
+ 0x08, /* fail */
+/* pos 02c8: 379 */ 0x66 /* 'f' */, 0x0D, 0x00 /* (to 0x02D5 s 380) */,
+ 0x73 /* 's' */, 0x12, 0x00 /* (to 0x02DD s 387) */,
+ 0x76 /* 'v' */, 0x21, 0x00 /* (to 0x02EF s 397) */,
+ 0x77 /* 'w' */, 0x27, 0x00 /* (to 0x02F8 s 405) */,
+ 0x08, /* fail */
+/* pos 02d5: 380 */ 0xE1 /* 'a' -> */,
+/* pos 02d6: 381 */ 0xED /* 'm' -> */,
+/* pos 02d7: 382 */ 0xE9 /* 'i' -> */,
+/* pos 02d8: 383 */ 0xEC /* 'l' -> */,
+/* pos 02d9: 384 */ 0xF9 /* 'y' -> */,
+/* pos 02da: 385 */ 0xBA /* ':' -> */,
+/* pos 02db: 386 */ 0x00, 0x33 /* - terminal marker 51 - */,
+/* pos 02dd: 387 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x02E4 s 388) */,
+ 0x74 /* 't' */, 0x09, 0x00 /* (to 0x02E9 s 392) */,
+ 0x08, /* fail */
+/* pos 02e4: 388 */ 0xFA /* 'z' -> */,
+/* pos 02e5: 389 */ 0xE5 /* 'e' -> */,
+/* pos 02e6: 390 */ 0xBA /* ':' -> */,
+/* pos 02e7: 391 */ 0x00, 0x34 /* - terminal marker 52 - */,
+/* pos 02e9: 392 */ 0xF9 /* 'y' -> */,
+/* pos 02ea: 393 */ 0xEC /* 'l' -> */,
+/* pos 02eb: 394 */ 0xE5 /* 'e' -> */,
+/* pos 02ec: 395 */ 0xBA /* ':' -> */,
+/* pos 02ed: 396 */ 0x00, 0x35 /* - terminal marker 53 - */,
+/* pos 02ef: 397 */ 0xE1 /* 'a' -> */,
+/* pos 02f0: 398 */ 0xF2 /* 'r' -> */,
+/* pos 02f1: 399 */ 0xE9 /* 'i' -> */,
+/* pos 02f2: 400 */ 0xE1 /* 'a' -> */,
+/* pos 02f3: 401 */ 0xEE /* 'n' -> */,
+/* pos 02f4: 402 */ 0xF4 /* 't' -> */,
+/* pos 02f5: 403 */ 0xBA /* ':' -> */,
+/* pos 02f6: 404 */ 0x00, 0x36 /* - terminal marker 54 - */,
+/* pos 02f8: 405 */ 0xE5 /* 'e' -> */,
+/* pos 02f9: 406 */ 0xE9 /* 'i' -> */,
+/* pos 02fa: 407 */ 0xE7 /* 'g' -> */,
+/* pos 02fb: 408 */ 0xE8 /* 'h' -> */,
+/* pos 02fc: 409 */ 0xF4 /* 't' -> */,
+/* pos 02fd: 410 */ 0xBA /* ':' -> */,
+/* pos 02fe: 411 */ 0x00, 0x37 /* - terminal marker 55 - */,
+/* pos 0300: 412 */ 0x00, 0x38 /* - terminal marker 56 - */,
+/* pos 0302: 413 */ 0xE5 /* 'e' -> */,
+/* pos 0303: 414 */ 0xE9 /* 'i' -> */,
+/* pos 0304: 415 */ 0xE7 /* 'g' -> */,
+/* pos 0305: 416 */ 0xE8 /* 'h' -> */,
+/* pos 0306: 417 */ 0xF4 /* 't' -> */,
+/* pos 0307: 418 */ 0xBA /* ':' -> */,
+/* pos 0308: 419 */ 0x00, 0x39 /* - terminal marker 57 - */,
+/* pos 030a: 420 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0311 s 421) */,
+ 0x69 /* 'i' */, 0x1D, 0x00 /* (to 0x032A s 438) */,
+ 0x08, /* fail */
+/* pos 0311: 421 */ 0x66 /* 'f' */, 0x07, 0x00 /* (to 0x0318 s 422) */,
+ 0x74 /* 't' */, 0x08, 0x00 /* (to 0x031C s 425) */,
+ 0x08, /* fail */
+/* pos 0318: 422 */ 0xF4 /* 't' -> */,
+/* pos 0319: 423 */ 0xBA /* ':' -> */,
+/* pos 031a: 424 */ 0x00, 0x3A /* - terminal marker 58 - */,
+/* pos 031c: 425 */ 0xF4 /* 't' -> */,
+/* pos 031d: 426 */ 0xE5 /* 'e' -> */,
+/* pos 031e: 427 */ 0xF2 /* 'r' -> */,
+/* pos 031f: 428 */ 0xAD /* '-' -> */,
+/* pos 0320: 429 */ 0xF3 /* 's' -> */,
+/* pos 0321: 430 */ 0xF0 /* 'p' -> */,
+/* pos 0322: 431 */ 0xE1 /* 'a' -> */,
+/* pos 0323: 432 */ 0xE3 /* 'c' -> */,
+/* pos 0324: 433 */ 0xE9 /* 'i' -> */,
+/* pos 0325: 434 */ 0xEE /* 'n' -> */,
+/* pos 0326: 435 */ 0xE7 /* 'g' -> */,
+/* pos 0327: 436 */ 0xBA /* ':' -> */,
+/* pos 0328: 437 */ 0x00, 0x3B /* - terminal marker 59 - */,
+/* pos 032a: 438 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0331 s 439) */,
+ 0x73 /* 's' */, 0x0F, 0x00 /* (to 0x033C s 449) */,
+ 0x08, /* fail */
+/* pos 0331: 439 */ 0xE5 /* 'e' -> */,
+/* pos 0332: 440 */ 0xAD /* '-' -> */,
+/* pos 0333: 441 */ 0xE8 /* 'h' -> */,
+/* pos 0334: 442 */ 0xE5 /* 'e' -> */,
+/* pos 0335: 443 */ 0xE9 /* 'i' -> */,
+/* pos 0336: 444 */ 0xE7 /* 'g' -> */,
+/* pos 0337: 445 */ 0xE8 /* 'h' -> */,
+/* pos 0338: 446 */ 0xF4 /* 't' -> */,
+/* pos 0339: 447 */ 0xBA /* ':' -> */,
+/* pos 033a: 448 */ 0x00, 0x3C /* - terminal marker 60 - */,
+/* pos 033c: 449 */ 0xF4 /* 't' -> */,
+/* pos 033d: 450 */ 0xAD /* '-' -> */,
+/* pos 033e: 451 */ 0xF3 /* 's' -> */,
+/* pos 033f: 452 */ 0xF4 /* 't' -> */,
+/* pos 0340: 453 */ 0xF9 /* 'y' -> */,
+/* pos 0341: 454 */ 0xEC /* 'l' -> */,
+/* pos 0342: 455 */ 0xE5 /* 'e' -> */,
+/* pos 0343: 456 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x034A s 457) */,
+ 0x3A /* ':' */, 0x25, 0x00 /* (to 0x036B s 478) */,
+ 0x08, /* fail */
+/* pos 034a: 457 */ 0x69 /* 'i' */, 0x0A, 0x00 /* (to 0x0354 s 458) */,
+ 0x70 /* 'p' */, 0x0E, 0x00 /* (to 0x035B s 464) */,
+ 0x74 /* 't' */, 0x15, 0x00 /* (to 0x0365 s 473) */,
+ 0x08, /* fail */
+/* pos 0354: 458 */ 0xED /* 'm' -> */,
+/* pos 0355: 459 */ 0xE1 /* 'a' -> */,
+/* pos 0356: 460 */ 0xE7 /* 'g' -> */,
+/* pos 0357: 461 */ 0xE5 /* 'e' -> */,
+/* pos 0358: 462 */ 0xBA /* ':' -> */,
+/* pos 0359: 463 */ 0x00, 0x3D /* - terminal marker 61 - */,
+/* pos 035b: 464 */ 0xEF /* 'o' -> */,
+/* pos 035c: 465 */ 0xF3 /* 's' -> */,
+/* pos 035d: 466 */ 0xE9 /* 'i' -> */,
+/* pos 035e: 467 */ 0xF4 /* 't' -> */,
+/* pos 035f: 468 */ 0xE9 /* 'i' -> */,
+/* pos 0360: 469 */ 0xEF /* 'o' -> */,
+/* pos 0361: 470 */ 0xEE /* 'n' -> */,
+/* pos 0362: 471 */ 0xBA /* ':' -> */,
+/* pos 0363: 472 */ 0x00, 0x3E /* - terminal marker 62 - */,
+/* pos 0365: 473 */ 0xF9 /* 'y' -> */,
+/* pos 0366: 474 */ 0xF0 /* 'p' -> */,
+/* pos 0367: 475 */ 0xE5 /* 'e' -> */,
+/* pos 0368: 476 */ 0xBA /* ':' -> */,
+/* pos 0369: 477 */ 0x00, 0x3F /* - terminal marker 63 - */,
+/* pos 036b: 478 */ 0x00, 0x40 /* - terminal marker 64 - */,
+/* pos 036d: 479 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0374 s 480) */,
+ 0x69 /* 'i' */, 0x55, 0x00 /* (to 0x03C5 s 524) */,
+ 0x08, /* fail */
+/* pos 0374: 480 */ 0x72 /* 'r' */, 0x07, 0x00 /* (to 0x037B s 481) */,
+ 0x78 /* 'x' */, 0x37, 0x00 /* (to 0x03AE s 509) */,
+ 0x08, /* fail */
+/* pos 037b: 481 */ 0xE7 /* 'g' -> */,
+/* pos 037c: 482 */ 0xE9 /* 'i' -> */,
+/* pos 037d: 483 */ 0xEE /* 'n' -> */,
+/* pos 037e: 484 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0385 s 485) */,
+ 0x3A /* ':' */, 0x2B, 0x00 /* (to 0x03AC s 508) */,
+ 0x08, /* fail */
+/* pos 0385: 485 */ 0x72 /* 'r' */, 0x0D, 0x00 /* (to 0x0392 s 486) */,
+ 0x6C /* 'l' */, 0x11, 0x00 /* (to 0x0399 s 492) */,
+ 0x74 /* 't' */, 0x14, 0x00 /* (to 0x039F s 497) */,
+ 0x62 /* 'b' */, 0x16, 0x00 /* (to 0x03A4 s 501) */,
+ 0x08, /* fail */
+/* pos 0392: 486 */ 0xE9 /* 'i' -> */,
+/* pos 0393: 487 */ 0xE7 /* 'g' -> */,
+/* pos 0394: 488 */ 0xE8 /* 'h' -> */,
+/* pos 0395: 489 */ 0xF4 /* 't' -> */,
+/* pos 0396: 490 */ 0xBA /* ':' -> */,
+/* pos 0397: 491 */ 0x00, 0x41 /* - terminal marker 65 - */,
+/* pos 0399: 492 */ 0xE5 /* 'e' -> */,
+/* pos 039a: 493 */ 0xE6 /* 'f' -> */,
+/* pos 039b: 494 */ 0xF4 /* 't' -> */,
+/* pos 039c: 495 */ 0xBA /* ':' -> */,
+/* pos 039d: 496 */ 0x00, 0x42 /* - terminal marker 66 - */,
+/* pos 039f: 497 */ 0xEF /* 'o' -> */,
+/* pos 03a0: 498 */ 0xF0 /* 'p' -> */,
+/* pos 03a1: 499 */ 0xBA /* ':' -> */,
+/* pos 03a2: 500 */ 0x00, 0x43 /* - terminal marker 67 - */,
+/* pos 03a4: 501 */ 0xEF /* 'o' -> */,
+/* pos 03a5: 502 */ 0xF4 /* 't' -> */,
+/* pos 03a6: 503 */ 0xF4 /* 't' -> */,
+/* pos 03a7: 504 */ 0xEF /* 'o' -> */,
+/* pos 03a8: 505 */ 0xED /* 'm' -> */,
+/* pos 03a9: 506 */ 0xBA /* ':' -> */,
+/* pos 03aa: 507 */ 0x00, 0x44 /* - terminal marker 68 - */,
+/* pos 03ac: 508 */ 0x00, 0x45 /* - terminal marker 69 - */,
+/* pos 03ae: 509 */ 0xAD /* '-' -> */,
+/* pos 03af: 510 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x03B6 s 511) */,
+ 0x77 /* 'w' */, 0x0C, 0x00 /* (to 0x03BE s 518) */,
+ 0x08, /* fail */
+/* pos 03b6: 511 */ 0xE5 /* 'e' -> */,
+/* pos 03b7: 512 */ 0xE9 /* 'i' -> */,
+/* pos 03b8: 513 */ 0xE7 /* 'g' -> */,
+/* pos 03b9: 514 */ 0xE8 /* 'h' -> */,
+/* pos 03ba: 515 */ 0xF4 /* 't' -> */,
+/* pos 03bb: 516 */ 0xBA /* ':' -> */,
+/* pos 03bc: 517 */ 0x00, 0x46 /* - terminal marker 70 - */,
+/* pos 03be: 518 */ 0xE9 /* 'i' -> */,
+/* pos 03bf: 519 */ 0xE4 /* 'd' -> */,
+/* pos 03c0: 520 */ 0xF4 /* 't' -> */,
+/* pos 03c1: 521 */ 0xE8 /* 'h' -> */,
+/* pos 03c2: 522 */ 0xBA /* ':' -> */,
+/* pos 03c3: 523 */ 0x00, 0x47 /* - terminal marker 71 - */,
+/* pos 03c5: 524 */ 0xEE /* 'n' -> */,
+/* pos 03c6: 525 */ 0xAD /* '-' -> */,
+/* pos 03c7: 526 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x03CE s 527) */,
+ 0x77 /* 'w' */, 0x0C, 0x00 /* (to 0x03D6 s 534) */,
+ 0x08, /* fail */
+/* pos 03ce: 527 */ 0xE5 /* 'e' -> */,
+/* pos 03cf: 528 */ 0xE9 /* 'i' -> */,
+/* pos 03d0: 529 */ 0xE7 /* 'g' -> */,
+/* pos 03d1: 530 */ 0xE8 /* 'h' -> */,
+/* pos 03d2: 531 */ 0xF4 /* 't' -> */,
+/* pos 03d3: 532 */ 0xBA /* ':' -> */,
+/* pos 03d4: 533 */ 0x00, 0x48 /* - terminal marker 72 - */,
+/* pos 03d6: 534 */ 0xE9 /* 'i' -> */,
+/* pos 03d7: 535 */ 0xE4 /* 'd' -> */,
+/* pos 03d8: 536 */ 0xF4 /* 't' -> */,
+/* pos 03d9: 537 */ 0xE8 /* 'h' -> */,
+/* pos 03da: 538 */ 0xBA /* ':' -> */,
+/* pos 03db: 539 */ 0x00, 0x49 /* - terminal marker 73 - */,
+/* pos 03dd: 540 */ 0x72 /* 'r' */, 0x0A, 0x00 /* (to 0x03E7 s 541) */,
+ 0x75 /* 'u' */, 0x0F, 0x00 /* (to 0x03EF s 548) */,
+ 0x76 /* 'v' */, 0x39, 0x00 /* (to 0x041C s 574) */,
+ 0x08, /* fail */
+/* pos 03e7: 541 */ 0xF0 /* 'p' -> */,
+/* pos 03e8: 542 */ 0xE8 /* 'h' -> */,
+/* pos 03e9: 543 */ 0xE1 /* 'a' -> */,
+/* pos 03ea: 544 */ 0xEE /* 'n' -> */,
+/* pos 03eb: 545 */ 0xF3 /* 's' -> */,
+/* pos 03ec: 546 */ 0xBA /* ':' -> */,
+/* pos 03ed: 547 */ 0x00, 0x4A /* - terminal marker 74 - */,
+/* pos 03ef: 548 */ 0xF4 /* 't' -> */,
+/* pos 03f0: 549 */ 0xEC /* 'l' -> */,
+/* pos 03f1: 550 */ 0xE9 /* 'i' -> */,
+/* pos 03f2: 551 */ 0xEE /* 'n' -> */,
+/* pos 03f3: 552 */ 0xE5 /* 'e' -> */,
+/* pos 03f4: 553 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x03FB s 554) */,
+ 0x3A /* ':' */, 0x23, 0x00 /* (to 0x041A s 573) */,
+ 0x08, /* fail */
+/* pos 03fb: 554 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x0405 s 555) */,
+ 0x73 /* 's' */, 0x0E, 0x00 /* (to 0x040C s 561) */,
+ 0x77 /* 'w' */, 0x12, 0x00 /* (to 0x0413 s 567) */,
+ 0x08, /* fail */
+/* pos 0405: 555 */ 0xEF /* 'o' -> */,
+/* pos 0406: 556 */ 0xEC /* 'l' -> */,
+/* pos 0407: 557 */ 0xEF /* 'o' -> */,
+/* pos 0408: 558 */ 0xF2 /* 'r' -> */,
+/* pos 0409: 559 */ 0xBA /* ':' -> */,
+/* pos 040a: 560 */ 0x00, 0x4B /* - terminal marker 75 - */,
+/* pos 040c: 561 */ 0xF4 /* 't' -> */,
+/* pos 040d: 562 */ 0xF9 /* 'y' -> */,
+/* pos 040e: 563 */ 0xEC /* 'l' -> */,
+/* pos 040f: 564 */ 0xE5 /* 'e' -> */,
+/* pos 0410: 565 */ 0xBA /* ':' -> */,
+/* pos 0411: 566 */ 0x00, 0x4C /* - terminal marker 76 - */,
+/* pos 0413: 567 */ 0xE9 /* 'i' -> */,
+/* pos 0414: 568 */ 0xE4 /* 'd' -> */,
+/* pos 0415: 569 */ 0xF4 /* 't' -> */,
+/* pos 0416: 570 */ 0xE8 /* 'h' -> */,
+/* pos 0417: 571 */ 0xBA /* ':' -> */,
+/* pos 0418: 572 */ 0x00, 0x4D /* - terminal marker 77 - */,
+/* pos 041a: 573 */ 0x00, 0x4E /* - terminal marker 78 - */,
+/* pos 041c: 574 */ 0xE5 /* 'e' -> */,
+/* pos 041d: 575 */ 0xF2 /* 'r' -> */,
+/* pos 041e: 576 */ 0xE6 /* 'f' -> */,
+/* pos 041f: 577 */ 0xEC /* 'l' -> */,
+/* pos 0420: 578 */ 0xEF /* 'o' -> */,
+/* pos 0421: 579 */ 0xF7 /* 'w' -> */,
+/* pos 0422: 580 */ 0xBA /* ':' -> */,
+/* pos 0423: 581 */ 0x00, 0x4F /* - terminal marker 79 - */,
+/* pos 0425: 582 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0432 s 583) */,
+ 0x69 /* 'i' */, 0x92, 0x00 /* (to 0x04BA s 660) */,
+ 0x6C /* 'l' */, 0xA3, 0x00 /* (to 0x04CE s 672) */,
+ 0x6F /* 'o' */, 0xAC, 0x00 /* (to 0x04DA s 683) */,
+ 0x08, /* fail */
+/* pos 0432: 583 */ 0x64 /* 'd' */, 0x0A, 0x00 /* (to 0x043C s 584) */,
+ 0x67 /* 'g' */, 0x3B, 0x00 /* (to 0x0470 s 613) */,
+ 0x75 /* 'u' */, 0x61, 0x00 /* (to 0x0499 s 642) */,
+ 0x08, /* fail */
+/* pos 043c: 584 */ 0xE4 /* 'd' -> */,
+/* pos 043d: 585 */ 0xE9 /* 'i' -> */,
+/* pos 043e: 586 */ 0xEE /* 'n' -> */,
+/* pos 043f: 587 */ 0xE7 /* 'g' -> */,
+/* pos 0440: 588 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0447 s 589) */,
+ 0x3A /* ':' */, 0x2B, 0x00 /* (to 0x046E s 612) */,
+ 0x08, /* fail */
+/* pos 0447: 589 */ 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x0454 s 590) */,
+ 0x72 /* 'r' */, 0x0F, 0x00 /* (to 0x0459 s 594) */,
+ 0x62 /* 'b' */, 0x13, 0x00 /* (to 0x0460 s 600) */,
+ 0x6C /* 'l' */, 0x18, 0x00 /* (to 0x0468 s 607) */,
+ 0x08, /* fail */
+/* pos 0454: 590 */ 0xEF /* 'o' -> */,
+/* pos 0455: 591 */ 0xF0 /* 'p' -> */,
+/* pos 0456: 592 */ 0xBA /* ':' -> */,
+/* pos 0457: 593 */ 0x00, 0x50 /* - terminal marker 80 - */,
+/* pos 0459: 594 */ 0xE9 /* 'i' -> */,
+/* pos 045a: 595 */ 0xE7 /* 'g' -> */,
+/* pos 045b: 596 */ 0xE8 /* 'h' -> */,
+/* pos 045c: 597 */ 0xF4 /* 't' -> */,
+/* pos 045d: 598 */ 0xBA /* ':' -> */,
+/* pos 045e: 599 */ 0x00, 0x51 /* - terminal marker 81 - */,
+/* pos 0460: 600 */ 0xEF /* 'o' -> */,
+/* pos 0461: 601 */ 0xF4 /* 't' -> */,
+/* pos 0462: 602 */ 0xF4 /* 't' -> */,
+/* pos 0463: 603 */ 0xEF /* 'o' -> */,
+/* pos 0464: 604 */ 0xED /* 'm' -> */,
+/* pos 0465: 605 */ 0xBA /* ':' -> */,
+/* pos 0466: 606 */ 0x00, 0x52 /* - terminal marker 82 - */,
+/* pos 0468: 607 */ 0xE5 /* 'e' -> */,
+/* pos 0469: 608 */ 0xE6 /* 'f' -> */,
+/* pos 046a: 609 */ 0xF4 /* 't' -> */,
+/* pos 046b: 610 */ 0xBA /* ':' -> */,
+/* pos 046c: 611 */ 0x00, 0x53 /* - terminal marker 83 - */,
+/* pos 046e: 612 */ 0x00, 0x54 /* - terminal marker 84 - */,
+/* pos 0470: 613 */ 0xE5 /* 'e' -> */,
+/* pos 0471: 614 */ 0xAD /* '-' -> */,
+/* pos 0472: 615 */ 0xE2 /* 'b' -> */,
+/* pos 0473: 616 */ 0xF2 /* 'r' -> */,
+/* pos 0474: 617 */ 0xE5 /* 'e' -> */,
+/* pos 0475: 618 */ 0xE1 /* 'a' -> */,
+/* pos 0476: 619 */ 0xEB /* 'k' -> */,
+/* pos 0477: 620 */ 0xAD /* '-' -> */,
+/* pos 0478: 621 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x0482 s 622) */,
+ 0x62 /* 'b' */, 0x0E, 0x00 /* (to 0x0489 s 628) */,
+ 0x69 /* 'i' */, 0x13, 0x00 /* (to 0x0491 s 635) */,
+ 0x08, /* fail */
+/* pos 0482: 622 */ 0xE6 /* 'f' -> */,
+/* pos 0483: 623 */ 0xF4 /* 't' -> */,
+/* pos 0484: 624 */ 0xE5 /* 'e' -> */,
+/* pos 0485: 625 */ 0xF2 /* 'r' -> */,
+/* pos 0486: 626 */ 0xBA /* ':' -> */,
+/* pos 0487: 627 */ 0x00, 0x55 /* - terminal marker 85 - */,
+/* pos 0489: 628 */ 0xE5 /* 'e' -> */,
+/* pos 048a: 629 */ 0xE6 /* 'f' -> */,
+/* pos 048b: 630 */ 0xEF /* 'o' -> */,
+/* pos 048c: 631 */ 0xF2 /* 'r' -> */,
+/* pos 048d: 632 */ 0xE5 /* 'e' -> */,
+/* pos 048e: 633 */ 0xBA /* ':' -> */,
+/* pos 048f: 634 */ 0x00, 0x56 /* - terminal marker 86 - */,
+/* pos 0491: 635 */ 0xEE /* 'n' -> */,
+/* pos 0492: 636 */ 0xF3 /* 's' -> */,
+/* pos 0493: 637 */ 0xE9 /* 'i' -> */,
+/* pos 0494: 638 */ 0xE4 /* 'd' -> */,
+/* pos 0495: 639 */ 0xE5 /* 'e' -> */,
+/* pos 0496: 640 */ 0xBA /* ':' -> */,
+/* pos 0497: 641 */ 0x00, 0x57 /* - terminal marker 87 - */,
+/* pos 0499: 642 */ 0xF3 /* 's' -> */,
+/* pos 049a: 643 */ 0xE5 /* 'e' -> */,
+/* pos 049b: 644 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04A2 s 645) */,
+ 0x3A /* ':' */, 0x1A, 0x00 /* (to 0x04B8 s 659) */,
+ 0x08, /* fail */
+/* pos 04a2: 645 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x04A9 s 646) */,
+ 0x62 /* 'b' */, 0x0B, 0x00 /* (to 0x04B0 s 652) */,
+ 0x08, /* fail */
+/* pos 04a9: 646 */ 0xE6 /* 'f' -> */,
+/* pos 04aa: 647 */ 0xF4 /* 't' -> */,
+/* pos 04ab: 648 */ 0xE5 /* 'e' -> */,
+/* pos 04ac: 649 */ 0xF2 /* 'r' -> */,
+/* pos 04ad: 650 */ 0xBA /* ':' -> */,
+/* pos 04ae: 651 */ 0x00, 0x58 /* - terminal marker 88 - */,
+/* pos 04b0: 652 */ 0xE5 /* 'e' -> */,
+/* pos 04b1: 653 */ 0xE6 /* 'f' -> */,
+/* pos 04b2: 654 */ 0xEF /* 'o' -> */,
+/* pos 04b3: 655 */ 0xF2 /* 'r' -> */,
+/* pos 04b4: 656 */ 0xE5 /* 'e' -> */,
+/* pos 04b5: 657 */ 0xBA /* ':' -> */,
+/* pos 04b6: 658 */ 0x00, 0x59 /* - terminal marker 89 - */,
+/* pos 04b8: 659 */ 0x00, 0x5A /* - terminal marker 90 - */,
+/* pos 04ba: 660 */ 0xF4 /* 't' -> */,
+/* pos 04bb: 661 */ 0xE3 /* 'c' -> */,
+/* pos 04bc: 662 */ 0xE8 /* 'h' -> */,
+/* pos 04bd: 663 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04C4 s 664) */,
+ 0x3A /* ':' */, 0x0C, 0x00 /* (to 0x04CC s 671) */,
+ 0x08, /* fail */
+/* pos 04c4: 664 */ 0xF2 /* 'r' -> */,
+/* pos 04c5: 665 */ 0xE1 /* 'a' -> */,
+/* pos 04c6: 666 */ 0xEE /* 'n' -> */,
+/* pos 04c7: 667 */ 0xE7 /* 'g' -> */,
+/* pos 04c8: 668 */ 0xE5 /* 'e' -> */,
+/* pos 04c9: 669 */ 0xBA /* ':' -> */,
+/* pos 04ca: 670 */ 0x00, 0x5B /* - terminal marker 91 - */,
+/* pos 04cc: 671 */ 0x00, 0x5C /* - terminal marker 92 - */,
+/* pos 04ce: 672 */ 0xE1 /* 'a' -> */,
+/* pos 04cf: 673 */ 0xF9 /* 'y' -> */,
+/* pos 04d0: 674 */ 0xAD /* '-' -> */,
+/* pos 04d1: 675 */ 0xE4 /* 'd' -> */,
+/* pos 04d2: 676 */ 0xF5 /* 'u' -> */,
+/* pos 04d3: 677 */ 0xF2 /* 'r' -> */,
+/* pos 04d4: 678 */ 0xE9 /* 'i' -> */,
+/* pos 04d5: 679 */ 0xEE /* 'n' -> */,
+/* pos 04d6: 680 */ 0xE7 /* 'g' -> */,
+/* pos 04d7: 681 */ 0xBA /* ':' -> */,
+/* pos 04d8: 682 */ 0x00, 0x5D /* - terminal marker 93 - */,
+/* pos 04da: 683 */ 0xF3 /* 's' -> */,
+/* pos 04db: 684 */ 0xE9 /* 'i' -> */,
+/* pos 04dc: 685 */ 0xF4 /* 't' -> */,
+/* pos 04dd: 686 */ 0xE9 /* 'i' -> */,
+/* pos 04de: 687 */ 0xEF /* 'o' -> */,
+/* pos 04df: 688 */ 0xEE /* 'n' -> */,
+/* pos 04e0: 689 */ 0xBA /* ':' -> */,
+/* pos 04e1: 690 */ 0x00, 0x5E /* - terminal marker 94 - */,
+/* pos 04e3: 691 */ 0xF5 /* 'u' -> */,
+/* pos 04e4: 692 */ 0xEF /* 'o' -> */,
+/* pos 04e5: 693 */ 0xF4 /* 't' -> */,
+/* pos 04e6: 694 */ 0xE5 /* 'e' -> */,
+/* pos 04e7: 695 */ 0xF3 /* 's' -> */,
+/* pos 04e8: 696 */ 0xBA /* ':' -> */,
+/* pos 04e9: 697 */ 0x00, 0x5F /* - terminal marker 95 - */,
+/* pos 04eb: 698 */ 0xE9 /* 'i' -> */,
+/* pos 04ec: 699 */ 0x63 /* 'c' */, 0x07, 0x00 /* (to 0x04F3 s 700) */,
+ 0x67 /* 'g' */, 0x0C, 0x00 /* (to 0x04FB s 707) */,
+ 0x08, /* fail */
+/* pos 04f3: 700 */ 0xE8 /* 'h' -> */,
+/* pos 04f4: 701 */ 0xEE /* 'n' -> */,
+/* pos 04f5: 702 */ 0xE5 /* 'e' -> */,
+/* pos 04f6: 703 */ 0xF3 /* 's' -> */,
+/* pos 04f7: 704 */ 0xF3 /* 's' -> */,
+/* pos 04f8: 705 */ 0xBA /* ':' -> */,
+/* pos 04f9: 706 */ 0x00, 0x60 /* - terminal marker 96 - */,
+/* pos 04fb: 707 */ 0xE8 /* 'h' -> */,
+/* pos 04fc: 708 */ 0xF4 /* 't' -> */,
+/* pos 04fd: 709 */ 0xBA /* ':' -> */,
+/* pos 04fe: 710 */ 0x00, 0x61 /* - terminal marker 97 - */,
+/* pos 0500: 711 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x0507 s 712) */,
+ 0x74 /* 't' */, 0x48, 0x00 /* (to 0x054B s 754) */,
+ 0x08, /* fail */
+/* pos 0507: 712 */ 0xE5 /* 'e' -> */,
+/* pos 0508: 713 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x050F s 714) */,
+ 0x65 /* 'e' */, 0x36, 0x00 /* (to 0x0541 s 745) */,
+ 0x08, /* fail */
+/* pos 050f: 714 */ 0xEB /* 'k' -> */,
+/* pos 0510: 715 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x0517 s 716) */,
+ 0x3A /* ':' */, 0x2C, 0x00 /* (to 0x053F s 744) */,
+ 0x08, /* fail */
+/* pos 0517: 716 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x0521 s 717) */,
+ 0x6E /* 'n' */, 0x0F, 0x00 /* (to 0x0529 s 724) */,
+ 0x70 /* 'p' */, 0x15, 0x00 /* (to 0x0532 s 732) */,
+ 0x08, /* fail */
+/* pos 0521: 717 */ 0xE5 /* 'e' -> */,
+/* pos 0522: 718 */ 0xE1 /* 'a' -> */,
+/* pos 0523: 719 */ 0xE4 /* 'd' -> */,
+/* pos 0524: 720 */ 0xE5 /* 'e' -> */,
+/* pos 0525: 721 */ 0xF2 /* 'r' -> */,
+/* pos 0526: 722 */ 0xBA /* ':' -> */,
+/* pos 0527: 723 */ 0x00, 0x62 /* - terminal marker 98 - */,
+/* pos 0529: 724 */ 0xF5 /* 'u' -> */,
+/* pos 052a: 725 */ 0xED /* 'm' -> */,
+/* pos 052b: 726 */ 0xE5 /* 'e' -> */,
+/* pos 052c: 727 */ 0xF2 /* 'r' -> */,
+/* pos 052d: 728 */ 0xE1 /* 'a' -> */,
+/* pos 052e: 729 */ 0xEC /* 'l' -> */,
+/* pos 052f: 730 */ 0xBA /* ':' -> */,
+/* pos 0530: 731 */ 0x00, 0x63 /* - terminal marker 99 - */,
+/* pos 0532: 732 */ 0xF5 /* 'u' -> */,
+/* pos 0533: 733 */ 0xEE /* 'n' -> */,
+/* pos 0534: 734 */ 0xE3 /* 'c' -> */,
+/* pos 0535: 735 */ 0xF4 /* 't' -> */,
+/* pos 0536: 736 */ 0xF5 /* 'u' -> */,
+/* pos 0537: 737 */ 0xE1 /* 'a' -> */,
+/* pos 0538: 738 */ 0xF4 /* 't' -> */,
+/* pos 0539: 739 */ 0xE9 /* 'i' -> */,
+/* pos 053a: 740 */ 0xEF /* 'o' -> */,
+/* pos 053b: 741 */ 0xEE /* 'n' -> */,
+/* pos 053c: 742 */ 0xBA /* ':' -> */,
+/* pos 053d: 743 */ 0x00, 0x64 /* - terminal marker 100 - */,
+/* pos 053f: 744 */ 0x00, 0x65 /* - terminal marker 101 - */,
+/* pos 0541: 745 */ 0xE3 /* 'c' -> */,
+/* pos 0542: 746 */ 0xE8 /* 'h' -> */,
+/* pos 0543: 747 */ 0xAD /* '-' -> */,
+/* pos 0544: 748 */ 0xF2 /* 'r' -> */,
+/* pos 0545: 749 */ 0xE1 /* 'a' -> */,
+/* pos 0546: 750 */ 0xF4 /* 't' -> */,
+/* pos 0547: 751 */ 0xE5 /* 'e' -> */,
+/* pos 0548: 752 */ 0xBA /* ':' -> */,
+/* pos 0549: 753 */ 0x00, 0x66 /* - terminal marker 102 - */,
+/* pos 054b: 754 */ 0xF2 /* 'r' -> */,
+/* pos 054c: 755 */ 0xE5 /* 'e' -> */,
+/* pos 054d: 756 */ 0xF3 /* 's' -> */,
+/* pos 054e: 757 */ 0xF3 /* 's' -> */,
+/* pos 054f: 758 */ 0xBA /* ':' -> */,
+/* pos 0550: 759 */ 0x00, 0x67 /* - terminal marker 103 - */,
+/* pos 0552: 760 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x055C s 761) */,
+ 0x65 /* 'e' */, 0x14, 0x00 /* (to 0x0569 s 773) */,
+ 0x6F /* 'o' */, 0x47, 0x00 /* (to 0x059F s 811) */,
+ 0x08, /* fail */
+/* pos 055c: 761 */ 0xE2 /* 'b' -> */,
+/* pos 055d: 762 */ 0xEC /* 'l' -> */,
+/* pos 055e: 763 */ 0xE5 /* 'e' -> */,
+/* pos 055f: 764 */ 0xAD /* '-' -> */,
+/* pos 0560: 765 */ 0xEC /* 'l' -> */,
+/* pos 0561: 766 */ 0xE1 /* 'a' -> */,
+/* pos 0562: 767 */ 0xF9 /* 'y' -> */,
+/* pos 0563: 768 */ 0xEF /* 'o' -> */,
+/* pos 0564: 769 */ 0xF5 /* 'u' -> */,
+/* pos 0565: 770 */ 0xF4 /* 't' -> */,
+/* pos 0566: 771 */ 0xBA /* ':' -> */,
+/* pos 0567: 772 */ 0x00, 0x68 /* - terminal marker 104 - */,
+/* pos 0569: 773 */ 0xF8 /* 'x' -> */,
+/* pos 056a: 774 */ 0xF4 /* 't' -> */,
+/* pos 056b: 775 */ 0xAD /* '-' -> */,
+/* pos 056c: 776 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0579 s 777) */,
+ 0x64 /* 'd' */, 0x11, 0x00 /* (to 0x0580 s 783) */,
+ 0x69 /* 'i' */, 0x1A, 0x00 /* (to 0x058C s 794) */,
+ 0x74 /* 't' */, 0x1F, 0x00 /* (to 0x0594 s 801) */,
+ 0x08, /* fail */
+/* pos 0579: 777 */ 0xEC /* 'l' -> */,
+/* pos 057a: 778 */ 0xE9 /* 'i' -> */,
+/* pos 057b: 779 */ 0xE7 /* 'g' -> */,
+/* pos 057c: 780 */ 0xEE /* 'n' -> */,
+/* pos 057d: 781 */ 0xBA /* ':' -> */,
+/* pos 057e: 782 */ 0x00, 0x69 /* - terminal marker 105 - */,
+/* pos 0580: 783 */ 0xE5 /* 'e' -> */,
+/* pos 0581: 784 */ 0xE3 /* 'c' -> */,
+/* pos 0582: 785 */ 0xEF /* 'o' -> */,
+/* pos 0583: 786 */ 0xF2 /* 'r' -> */,
+/* pos 0584: 787 */ 0xE1 /* 'a' -> */,
+/* pos 0585: 788 */ 0xF4 /* 't' -> */,
+/* pos 0586: 789 */ 0xE9 /* 'i' -> */,
+/* pos 0587: 790 */ 0xEF /* 'o' -> */,
+/* pos 0588: 791 */ 0xEE /* 'n' -> */,
+/* pos 0589: 792 */ 0xBA /* ':' -> */,
+/* pos 058a: 793 */ 0x00, 0x6A /* - terminal marker 106 - */,
+/* pos 058c: 794 */ 0xEE /* 'n' -> */,
+/* pos 058d: 795 */ 0xE4 /* 'd' -> */,
+/* pos 058e: 796 */ 0xE5 /* 'e' -> */,
+/* pos 058f: 797 */ 0xEE /* 'n' -> */,
+/* pos 0590: 798 */ 0xF4 /* 't' -> */,
+/* pos 0591: 799 */ 0xBA /* ':' -> */,
+/* pos 0592: 800 */ 0x00, 0x6B /* - terminal marker 107 - */,
+/* pos 0594: 801 */ 0xF2 /* 'r' -> */,
+/* pos 0595: 802 */ 0xE1 /* 'a' -> */,
+/* pos 0596: 803 */ 0xEE /* 'n' -> */,
+/* pos 0597: 804 */ 0xF3 /* 's' -> */,
+/* pos 0598: 805 */ 0xE6 /* 'f' -> */,
+/* pos 0599: 806 */ 0xEF /* 'o' -> */,
+/* pos 059a: 807 */ 0xF2 /* 'r' -> */,
+/* pos 059b: 808 */ 0xED /* 'm' -> */,
+/* pos 059c: 809 */ 0xBA /* ':' -> */,
+/* pos 059d: 810 */ 0x00, 0x6C /* - terminal marker 108 - */,
+/* pos 059f: 811 */ 0xF0 /* 'p' -> */,
+/* pos 05a0: 812 */ 0xBA /* ':' -> */,
+/* pos 05a1: 813 */ 0x00, 0x6D /* - terminal marker 109 - */,
+/* pos 05a3: 814 */ 0xEE /* 'n' -> */,
+/* pos 05a4: 815 */ 0xE9 /* 'i' -> */,
+/* pos 05a5: 816 */ 0xE3 /* 'c' -> */,
+/* pos 05a6: 817 */ 0xEF /* 'o' -> */,
+/* pos 05a7: 818 */ 0xE4 /* 'd' -> */,
+/* pos 05a8: 819 */ 0xE5 /* 'e' -> */,
+/* pos 05a9: 820 */ 0xAD /* '-' -> */,
+/* pos 05aa: 821 */ 0xE2 /* 'b' -> */,
+/* pos 05ab: 822 */ 0xE9 /* 'i' -> */,
+/* pos 05ac: 823 */ 0xE4 /* 'd' -> */,
+/* pos 05ad: 824 */ 0xE9 /* 'i' -> */,
+/* pos 05ae: 825 */ 0xBA /* ':' -> */,
+/* pos 05af: 826 */ 0x00, 0x6E /* - terminal marker 110 - */,
+/* pos 05b1: 827 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x05BB s 828) */,
+ 0x69 /* 'i' */, 0x16, 0x00 /* (to 0x05CA s 842) */,
+ 0x6F /* 'o' */, 0x1E, 0x00 /* (to 0x05D5 s 852) */,
+ 0x08, /* fail */
+/* pos 05bb: 828 */ 0xF2 /* 'r' -> */,
+/* pos 05bc: 829 */ 0xF4 /* 't' -> */,
+/* pos 05bd: 830 */ 0xE9 /* 'i' -> */,
+/* pos 05be: 831 */ 0xE3 /* 'c' -> */,
+/* pos 05bf: 832 */ 0xE1 /* 'a' -> */,
+/* pos 05c0: 833 */ 0xEC /* 'l' -> */,
+/* pos 05c1: 834 */ 0xAD /* '-' -> */,
+/* pos 05c2: 835 */ 0xE1 /* 'a' -> */,
+/* pos 05c3: 836 */ 0xEC /* 'l' -> */,
+/* pos 05c4: 837 */ 0xE9 /* 'i' -> */,
+/* pos 05c5: 838 */ 0xE7 /* 'g' -> */,
+/* pos 05c6: 839 */ 0xEE /* 'n' -> */,
+/* pos 05c7: 840 */ 0xBA /* ':' -> */,
+/* pos 05c8: 841 */ 0x00, 0x6F /* - terminal marker 111 - */,
+/* pos 05ca: 842 */ 0xF3 /* 's' -> */,
+/* pos 05cb: 843 */ 0xE9 /* 'i' -> */,
+/* pos 05cc: 844 */ 0xE2 /* 'b' -> */,
+/* pos 05cd: 845 */ 0xE9 /* 'i' -> */,
+/* pos 05ce: 846 */ 0xEC /* 'l' -> */,
+/* pos 05cf: 847 */ 0xE9 /* 'i' -> */,
+/* pos 05d0: 848 */ 0xF4 /* 't' -> */,
+/* pos 05d1: 849 */ 0xF9 /* 'y' -> */,
+/* pos 05d2: 850 */ 0xBA /* ':' -> */,
+/* pos 05d3: 851 */ 0x00, 0x70 /* - terminal marker 112 - */,
+/* pos 05d5: 852 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x05DC s 853) */,
+ 0x6C /* 'l' */, 0x10, 0x00 /* (to 0x05E8 s 864) */,
+ 0x08, /* fail */
+/* pos 05dc: 853 */ 0xE3 /* 'c' -> */,
+/* pos 05dd: 854 */ 0xE5 /* 'e' -> */,
+/* pos 05de: 855 */ 0xAD /* '-' -> */,
+/* pos 05df: 856 */ 0xE6 /* 'f' -> */,
+/* pos 05e0: 857 */ 0xE1 /* 'a' -> */,
+/* pos 05e1: 858 */ 0xED /* 'm' -> */,
+/* pos 05e2: 859 */ 0xE9 /* 'i' -> */,
+/* pos 05e3: 860 */ 0xEC /* 'l' -> */,
+/* pos 05e4: 861 */ 0xF9 /* 'y' -> */,
+/* pos 05e5: 862 */ 0xBA /* ':' -> */,
+/* pos 05e6: 863 */ 0x00, 0x71 /* - terminal marker 113 - */,
+/* pos 05e8: 864 */ 0xF5 /* 'u' -> */,
+/* pos 05e9: 865 */ 0xED /* 'm' -> */,
+/* pos 05ea: 866 */ 0xE5 /* 'e' -> */,
+/* pos 05eb: 867 */ 0xBA /* ':' -> */,
+/* pos 05ec: 868 */ 0x00, 0x72 /* - terminal marker 114 - */,
+/* pos 05ee: 869 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x05F8 s 870) */,
+ 0x69 /* 'i' */, 0x13, 0x00 /* (to 0x0604 s 881) */,
+ 0x6F /* 'o' */, 0x21, 0x00 /* (to 0x0615 s 890) */,
+ 0x08, /* fail */
+/* pos 05f8: 870 */ 0xE9 /* 'i' -> */,
+/* pos 05f9: 871 */ 0xF4 /* 't' -> */,
+/* pos 05fa: 872 */ 0xE5 /* 'e' -> */,
+/* pos 05fb: 873 */ 0xAD /* '-' -> */,
+/* pos 05fc: 874 */ 0xF3 /* 's' -> */,
+/* pos 05fd: 875 */ 0xF0 /* 'p' -> */,
+/* pos 05fe: 876 */ 0xE1 /* 'a' -> */,
+/* pos 05ff: 877 */ 0xE3 /* 'c' -> */,
+/* pos 0600: 878 */ 0xE5 /* 'e' -> */,
+/* pos 0601: 879 */ 0xBA /* ':' -> */,
+/* pos 0602: 880 */ 0x00, 0x73 /* - terminal marker 115 - */,
+/* pos 0604: 881 */ 0xE4 /* 'd' -> */,
+/* pos 0605: 882 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x060C s 883) */,
+ 0x74 /* 't' */, 0x09, 0x00 /* (to 0x0611 s 887) */,
+ 0x08, /* fail */
+/* pos 060c: 883 */ 0xF7 /* 'w' -> */,
+/* pos 060d: 884 */ 0xF3 /* 's' -> */,
+/* pos 060e: 885 */ 0xBA /* ':' -> */,
+/* pos 060f: 886 */ 0x00, 0x74 /* - terminal marker 116 - */,
+/* pos 0611: 887 */ 0xE8 /* 'h' -> */,
+/* pos 0612: 888 */ 0xBA /* ':' -> */,
+/* pos 0613: 889 */ 0x00, 0x75 /* - terminal marker 117 - */,
+/* pos 0615: 890 */ 0xF2 /* 'r' -> */,
+/* pos 0616: 891 */ 0xE4 /* 'd' -> */,
+/* pos 0617: 892 */ 0xAD /* '-' -> */,
+/* pos 0618: 893 */ 0xF3 /* 's' -> */,
+/* pos 0619: 894 */ 0xF0 /* 'p' -> */,
+/* pos 061a: 895 */ 0xE1 /* 'a' -> */,
+/* pos 061b: 896 */ 0xE3 /* 'c' -> */,
+/* pos 061c: 897 */ 0xE9 /* 'i' -> */,
+/* pos 061d: 898 */ 0xEE /* 'n' -> */,
+/* pos 061e: 899 */ 0xE7 /* 'g' -> */,
+/* pos 061f: 900 */ 0xBA /* ':' -> */,
+/* pos 0620: 901 */ 0x00, 0x76 /* - terminal marker 118 - */,
+/* pos 0622: 902 */ 0xAD /* '-' -> */,
+/* pos 0623: 903 */ 0xE9 /* 'i' -> */,
+/* pos 0624: 904 */ 0xEE /* 'n' -> */,
+/* pos 0625: 905 */ 0xE4 /* 'd' -> */,
+/* pos 0626: 906 */ 0xE5 /* 'e' -> */,
+/* pos 0627: 907 */ 0xF8 /* 'x' -> */,
+/* pos 0628: 908 */ 0xBA /* ':' -> */,
+/* pos 0629: 909 */ 0x00, 0x77 /* - terminal marker 119 - */,
+/* total size 1579 bytes */
diff --git a/lib/misc/css-prop-constants.txt b/lib/misc/css-prop-constants.txt
new file mode 100644
index 000000000..308bc1f9f
--- /dev/null
+++ b/lib/misc/css-prop-constants.txt
@@ -0,0 +1,125 @@
+above
+absolute
+always
+armenian
+auto
+avoid
+baseline
+behind
+below
+bidi-override
+blink
+block
+bold
+bolder
+both
+bottom
+capitalize
+caption
+center
+circle
+close-quote
+code
+collapse
+continuous
+crosshair
+decimal-leading-zero
+decimal
+digits
+disc
+embed
+e-resize
+fixed
+georgian
+help
+hidden
+hide
+high
+higher
+icon
+inherit
+inline
+inline-block
+inline-table
+invert
+italic
+justify
+left
+lighter
+line-through
+list-item
+low
+lower
+lower-alpha
+lowercase
+lower-greek
+lower-latin
+lower-roman
+ltr
+menu
+message-box
+middle
+mix
+move
+ne-resize
+no-close-quote
+none
+no-open-quote
+no-repeat
+normal
+nowrap
+n-resize
+nw-resize
+oblique
+once
+open-quote
+outside
+overline
+pointer
+pre
+pre-line
+pre-wrap
+progress
+relative
+repeat
+repeat-x
+repeat-y
+right
+rtl
+scroll
+separate
+se-resize
+show
+silent
+small-caps
+small-caption
+spell-out
+square
+s-resize
+static
+status-bar
+sub
+super
+sw-resize
+table
+table-caption
+table-cell
+table-column
+table-column-group
+table-footer-group
+table-header-group
+table-row
+table-row-group
+text-bottom
+text-top
+text
+top
+transparent
+underline
+upper-alpha
+uppercase
+upper-latin
+upper-roman
+visible
+wait
+w-resize
\ No newline at end of file
diff --git a/lib/misc/css-propconst-lextable.h b/lib/misc/css-propconst-lextable.h
new file mode 100644
index 000000000..24b2f0f46
--- /dev/null
+++ b/lib/misc/css-propconst-lextable.h
@@ -0,0 +1,1110 @@
+ /* 0: above */
+ /* 1: absolute */
+ /* 2: always */
+ /* 3: armenian */
+ /* 4: auto */
+ /* 5: avoid */
+ /* 6: baseline */
+ /* 7: behind */
+ /* 8: below */
+ /* 9: bidi-override */
+ /* 10: blink */
+ /* 11: block */
+ /* 12: bold */
+ /* 13: bolder */
+ /* 14: both */
+ /* 15: bottom */
+ /* 16: capitalize */
+ /* 17: caption */
+ /* 18: center */
+ /* 19: circle */
+ /* 20: close-quote */
+ /* 21: code */
+ /* 22: collapse */
+ /* 23: continuous */
+ /* 24: crosshair */
+ /* 25: decimal-leading-zero */
+ /* 26: decimal */
+ /* 27: digits */
+ /* 28: disc */
+ /* 29: embed */
+ /* 30: e-resize */
+ /* 31: fixed */
+ /* 32: georgian */
+ /* 33: help */
+ /* 34: hidden */
+ /* 35: hide */
+ /* 36: high */
+ /* 37: higher */
+ /* 38: icon */
+ /* 39: inherit */
+ /* 40: inline */
+ /* 41: inline-block */
+ /* 42: inline-table */
+ /* 43: invert */
+ /* 44: italic */
+ /* 45: justify */
+ /* 46: left */
+ /* 47: lighter */
+ /* 48: line-through */
+ /* 49: list-item */
+ /* 50: low */
+ /* 51: lower */
+ /* 52: lower-alpha */
+ /* 53: lowercase */
+ /* 54: lower-greek */
+ /* 55: lower-latin */
+ /* 56: lower-roman */
+ /* 57: ltr */
+ /* 58: menu */
+ /* 59: message-box */
+ /* 60: middle */
+ /* 61: mix */
+ /* 62: move */
+ /* 63: ne-resize */
+ /* 64: no-close-quote */
+ /* 65: none */
+ /* 66: no-open-quote */
+ /* 67: no-repeat */
+ /* 68: normal */
+ /* 69: nowrap */
+ /* 70: n-resize */
+ /* 71: nw-resize */
+ /* 72: oblique */
+ /* 73: once */
+ /* 74: open-quote */
+ /* 75: outside */
+ /* 76: overline */
+ /* 77: pointer */
+ /* 78: pre */
+ /* 79: pre-line */
+ /* 80: pre-wrap */
+ /* 81: progress */
+ /* 82: relative */
+ /* 83: repeat */
+ /* 84: repeat-x */
+ /* 85: repeat-y */
+ /* 86: right */
+ /* 87: rtl */
+ /* 88: scroll */
+ /* 89: separate */
+ /* 90: se-resize */
+ /* 91: show */
+ /* 92: silent */
+ /* 93: small-caps */
+ /* 94: small-caption */
+ /* 95: spell-out */
+ /* 96: square */
+ /* 97: s-resize */
+ /* 98: static */
+ /* 99: status-bar */
+ /* 100: sub */
+ /* 101: super */
+ /* 102: sw-resize */
+ /* 103: table */
+ /* 104: table-caption */
+ /* 105: table-cell */
+ /* 106: table-column */
+ /* 107: table-column-group */
+ /* 108: table-footer-group */
+ /* 109: table-header-group */
+ /* 110: table-row */
+ /* 111: table-row-group */
+ /* 112: text-bottom */
+ /* 113: text-top */
+ /* 114: text */
+ /* 115: top */
+ /* 116: transparent */
+ /* 117: underline */
+ /* 118: upper-alpha */
+ /* 119: uppercase */
+ /* 120: upper-latin */
+ /* 121: upper-roman */
+ /* 122: visible */
+ /* 123: wait */
+ /* 124: w-resize */
+/* enum {
+ XXXX_ABOVE,
+ XXXX_ABSOLUTE,
+ XXXX_ALWAYS,
+ XXXX_ARMENIAN,
+ XXXX_AUTO,
+ XXXX_AVOID,
+ XXXX_BASELINE,
+ XXXX_BEHIND,
+ XXXX_BELOW,
+ XXXX_BIDI_OVERRIDE,
+ XXXX_BLINK,
+ XXXX_BLOCK,
+ XXXX_BOLD,
+ XXXX_BOLDER,
+ XXXX_BOTH,
+ XXXX_BOTTOM,
+ XXXX_CAPITALIZE,
+ XXXX_CAPTION,
+ XXXX_CENTER,
+ XXXX_CIRCLE,
+ XXXX_CLOSE_QUOTE,
+ XXXX_CODE,
+ XXXX_COLLAPSE,
+ XXXX_CONTINUOUS,
+ XXXX_CROSSHAIR,
+ XXXX_DECIMAL_LEADING_ZERO,
+ XXXX_DECIMAL,
+ XXXX_DIGITS,
+ XXXX_DISC,
+ XXXX_EMBED,
+ XXXX_E_RESIZE,
+ XXXX_FIXED,
+ XXXX_GEORGIAN,
+ XXXX_HELP,
+ XXXX_HIDDEN,
+ XXXX_HIDE,
+ XXXX_HIGH,
+ XXXX_HIGHER,
+ XXXX_ICON,
+ XXXX_INHERIT,
+ XXXX_INLINE,
+ XXXX_INLINE_BLOCK,
+ XXXX_INLINE_TABLE,
+ XXXX_INVERT,
+ XXXX_ITALIC,
+ XXXX_JUSTIFY,
+ XXXX_LEFT,
+ XXXX_LIGHTER,
+ XXXX_LINE_THROUGH,
+ XXXX_LIST_ITEM,
+ XXXX_LOW,
+ XXXX_LOWER,
+ XXXX_LOWER_ALPHA,
+ XXXX_LOWERCASE,
+ XXXX_LOWER_GREEK,
+ XXXX_LOWER_LATIN,
+ XXXX_LOWER_ROMAN,
+ XXXX_LTR,
+ XXXX_MENU,
+ XXXX_MESSAGE_BOX,
+ XXXX_MIDDLE,
+ XXXX_MIX,
+ XXXX_MOVE,
+ XXXX_NE_RESIZE,
+ XXXX_NO_CLOSE_QUOTE,
+ XXXX_NONE,
+ XXXX_NO_OPEN_QUOTE,
+ XXXX_NO_REPEAT,
+ XXXX_NORMAL,
+ XXXX_NOWRAP,
+ XXXX_N_RESIZE,
+ XXXX_NW_RESIZE,
+ XXXX_OBLIQUE,
+ XXXX_ONCE,
+ XXXX_OPEN_QUOTE,
+ XXXX_OUTSIDE,
+ XXXX_OVERLINE,
+ XXXX_POINTER,
+ XXXX_PRE,
+ XXXX_PRE_LINE,
+ XXXX_PRE_WRAP,
+ XXXX_PROGRESS,
+ XXXX_RELATIVE,
+ XXXX_REPEAT,
+ XXXX_REPEAT_X,
+ XXXX_REPEAT_Y,
+ XXXX_RIGHT,
+ XXXX_RTL,
+ XXXX_SCROLL,
+ XXXX_SEPARATE,
+ XXXX_SE_RESIZE,
+ XXXX_SHOW,
+ XXXX_SILENT,
+ XXXX_SMALL_CAPS,
+ XXXX_SMALL_CAPTION,
+ XXXX_SPELL_OUT,
+ XXXX_SQUARE,
+ XXXX_S_RESIZE,
+ XXXX_STATIC,
+ XXXX_STATUS_BAR,
+ XXXX_SUB,
+ XXXX_SUPER,
+ XXXX_SW_RESIZE,
+ XXXX_TABLE,
+ XXXX_TABLE_CAPTION,
+ XXXX_TABLE_CELL,
+ XXXX_TABLE_COLUMN,
+ XXXX_TABLE_COLUMN_GROUP,
+ XXXX_TABLE_FOOTER_GROUP,
+ XXXX_TABLE_HEADER_GROUP,
+ XXXX_TABLE_ROW,
+ XXXX_TABLE_ROW_GROUP,
+ XXXX_TEXT_BOTTOM,
+ XXXX_TEXT_TOP,
+ XXXX_TEXT,
+ XXXX_TOP,
+ XXXX_TRANSPARENT,
+ XXXX_UNDERLINE,
+ XXXX_UPPER_ALPHA,
+ XXXX_UPPERCASE,
+ XXXX_UPPER_LATIN,
+ XXXX_UPPER_ROMAN,
+ XXXX_VISIBLE,
+ XXXX_WAIT,
+ XXXX_W_RESIZE,
+}; */
+
+/* pos 0000: 0 */ 0x61 /* 'a' */, 0x40, 0x00 /* (to 0x0040 s 1) */,
+ 0x62 /* 'b' */, 0x76, 0x00 /* (to 0x0079 s 31) */,
+ 0x63 /* 'c' */, 0xD4, 0x00 /* (to 0x00DA s 76) */,
+ 0x64 /* 'd' */, 0x36, 0x01 /* (to 0x013F s 135) */,
+ 0x65 /* 'e' */, 0x61, 0x01 /* (to 0x016D s 162) */,
+ 0x66 /* 'f' */, 0x72, 0x01 /* (to 0x0181 s 174) */,
+ 0x67 /* 'g' */, 0x75, 0x01 /* (to 0x0187 s 179) */,
+ 0x68 /* 'h' */, 0x7B, 0x01 /* (to 0x0190 s 187) */,
+ 0x69 /* 'i' */, 0xA0, 0x01 /* (to 0x01B8 s 201) */,
+ 0x6A /* 'j' */, 0xE1, 0x01 /* (to 0x01FC s 235) */,
+ 0x6C /* 'l' */, 0xE6, 0x01 /* (to 0x0204 s 242) */,
+ 0x6D /* 'm' */, 0x53, 0x02 /* (to 0x0274 s 300) */,
+ 0x6E /* 'n' */, 0x80, 0x02 /* (to 0x02A4 s 322) */,
+ 0x6F /* 'o' */, 0xE6, 0x02 /* (to 0x030D s 385) */,
+ 0x70 /* 'p' */, 0x17, 0x03 /* (to 0x0341 s 417) */,
+ 0x72 /* 'r' */, 0x46, 0x03 /* (to 0x0373 s 441) */,
+ 0x73 /* 's' */, 0x76, 0x03 /* (to 0x03A6 s 462) */,
+ 0x74 /* 't' */, 0x10, 0x04 /* (to 0x0443 s 547) */,
+ 0x75 /* 'u' */, 0xA3, 0x04 /* (to 0x04D9 s 632) */,
+ 0x76 /* 'v' */, 0xDB, 0x04 /* (to 0x0514 s 665) */,
+ 0x77 /* 'w' */, 0xE0, 0x04 /* (to 0x051C s 672) */,
+ 0x08, /* fail */
+/* pos 0040: 1 */ 0x62 /* 'b' */, 0x10, 0x00 /* (to 0x0050 s 2) */,
+ 0x6C /* 'l' */, 0x1F, 0x00 /* (to 0x0062 s 12) */,
+ 0x72 /* 'r' */, 0x22, 0x00 /* (to 0x0068 s 17) */,
+ 0x75 /* 'u' */, 0x27, 0x00 /* (to 0x0070 s 24) */,
+ 0x76 /* 'v' */, 0x28, 0x00 /* (to 0x0074 s 27) */,
+ 0x08, /* fail */
+/* pos 0050: 2 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0057 s 3) */,
+ 0x73 /* 's' */, 0x08, 0x00 /* (to 0x005B s 6) */,
+ 0x08, /* fail */
+/* pos 0057: 3 */ 0xF6 /* 'v' -> */,
+/* pos 0058: 4 */ 0xE5 /* 'e' -> */,
+/* pos 0059: 5 */ 0x00, 0x00 /* - terminal marker 0 - */,
+/* pos 005b: 6 */ 0xEF /* 'o' -> */,
+/* pos 005c: 7 */ 0xEC /* 'l' -> */,
+/* pos 005d: 8 */ 0xF5 /* 'u' -> */,
+/* pos 005e: 9 */ 0xF4 /* 't' -> */,
+/* pos 005f: 10 */ 0xE5 /* 'e' -> */,
+/* pos 0060: 11 */ 0x00, 0x01 /* - terminal marker 1 - */,
+/* pos 0062: 12 */ 0xF7 /* 'w' -> */,
+/* pos 0063: 13 */ 0xE1 /* 'a' -> */,
+/* pos 0064: 14 */ 0xF9 /* 'y' -> */,
+/* pos 0065: 15 */ 0xF3 /* 's' -> */,
+/* pos 0066: 16 */ 0x00, 0x02 /* - terminal marker 2 - */,
+/* pos 0068: 17 */ 0xED /* 'm' -> */,
+/* pos 0069: 18 */ 0xE5 /* 'e' -> */,
+/* pos 006a: 19 */ 0xEE /* 'n' -> */,
+/* pos 006b: 20 */ 0xE9 /* 'i' -> */,
+/* pos 006c: 21 */ 0xE1 /* 'a' -> */,
+/* pos 006d: 22 */ 0xEE /* 'n' -> */,
+/* pos 006e: 23 */ 0x00, 0x03 /* - terminal marker 3 - */,
+/* pos 0070: 24 */ 0xF4 /* 't' -> */,
+/* pos 0071: 25 */ 0xEF /* 'o' -> */,
+/* pos 0072: 26 */ 0x00, 0x04 /* - terminal marker 4 - */,
+/* pos 0074: 27 */ 0xEF /* 'o' -> */,
+/* pos 0075: 28 */ 0xE9 /* 'i' -> */,
+/* pos 0076: 29 */ 0xE4 /* 'd' -> */,
+/* pos 0077: 30 */ 0x00, 0x05 /* - terminal marker 5 - */,
+/* pos 0079: 31 */ 0x61 /* 'a' */, 0x10, 0x00 /* (to 0x0089 s 32) */,
+ 0x65 /* 'e' */, 0x15, 0x00 /* (to 0x0091 s 39) */,
+ 0x69 /* 'i' */, 0x22, 0x00 /* (to 0x00A1 s 47) */,
+ 0x6C /* 'l' */, 0x2C, 0x00 /* (to 0x00AE s 59) */,
+ 0x6F /* 'o' */, 0x38, 0x00 /* (to 0x00BD s 66) */,
+ 0x08, /* fail */
+/* pos 0089: 32 */ 0xF3 /* 's' -> */,
+/* pos 008a: 33 */ 0xE5 /* 'e' -> */,
+/* pos 008b: 34 */ 0xEC /* 'l' -> */,
+/* pos 008c: 35 */ 0xE9 /* 'i' -> */,
+/* pos 008d: 36 */ 0xEE /* 'n' -> */,
+/* pos 008e: 37 */ 0xE5 /* 'e' -> */,
+/* pos 008f: 38 */ 0x00, 0x06 /* - terminal marker 6 - */,
+/* pos 0091: 39 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x0098 s 40) */,
+ 0x6C /* 'l' */, 0x09, 0x00 /* (to 0x009D s 44) */,
+ 0x08, /* fail */
+/* pos 0098: 40 */ 0xE9 /* 'i' -> */,
+/* pos 0099: 41 */ 0xEE /* 'n' -> */,
+/* pos 009a: 42 */ 0xE4 /* 'd' -> */,
+/* pos 009b: 43 */ 0x00, 0x07 /* - terminal marker 7 - */,
+/* pos 009d: 44 */ 0xEF /* 'o' -> */,
+/* pos 009e: 45 */ 0xF7 /* 'w' -> */,
+/* pos 009f: 46 */ 0x00, 0x08 /* - terminal marker 8 - */,
+/* pos 00a1: 47 */ 0xE4 /* 'd' -> */,
+/* pos 00a2: 48 */ 0xE9 /* 'i' -> */,
+/* pos 00a3: 49 */ 0xAD /* '-' -> */,
+/* pos 00a4: 50 */ 0xEF /* 'o' -> */,
+/* pos 00a5: 51 */ 0xF6 /* 'v' -> */,
+/* pos 00a6: 52 */ 0xE5 /* 'e' -> */,
+/* pos 00a7: 53 */ 0xF2 /* 'r' -> */,
+/* pos 00a8: 54 */ 0xF2 /* 'r' -> */,
+/* pos 00a9: 55 */ 0xE9 /* 'i' -> */,
+/* pos 00aa: 56 */ 0xE4 /* 'd' -> */,
+/* pos 00ab: 57 */ 0xE5 /* 'e' -> */,
+/* pos 00ac: 58 */ 0x00, 0x09 /* - terminal marker 9 - */,
+/* pos 00ae: 59 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00B5 s 60) */,
+ 0x6F /* 'o' */, 0x08, 0x00 /* (to 0x00B9 s 63) */,
+ 0x08, /* fail */
+/* pos 00b5: 60 */ 0xEE /* 'n' -> */,
+/* pos 00b6: 61 */ 0xEB /* 'k' -> */,
+/* pos 00b7: 62 */ 0x00, 0x0A /* - terminal marker 10 - */,
+/* pos 00b9: 63 */ 0xE3 /* 'c' -> */,
+/* pos 00ba: 64 */ 0xEB /* 'k' -> */,
+/* pos 00bb: 65 */ 0x00, 0x0B /* - terminal marker 11 - */,
+/* pos 00bd: 66 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x00C4 s 67) */,
+ 0x74 /* 't' */, 0x0D, 0x00 /* (to 0x00CD s 71) */,
+ 0x08, /* fail */
+/* pos 00c4: 67 */ 0xE4 /* 'd' -> */,
+/* pos 00c5: 68 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x00CA s 69) */,
+ 0x00, 0x0C /* - terminal marker 12 - */,
+/* pos 00ca: 69 */ 0xF2 /* 'r' -> */,
+/* pos 00cb: 70 */ 0x00, 0x0D /* - terminal marker 13 - */,
+/* pos 00cd: 71 */ 0x68 /* 'h' */, 0x07, 0x00 /* (to 0x00D4 s 72) */,
+ 0x74 /* 't' */, 0x06, 0x00 /* (to 0x00D6 s 73) */,
+ 0x08, /* fail */
+/* pos 00d4: 72 */ 0x00, 0x0E /* - terminal marker 14 - */,
+/* pos 00d6: 73 */ 0xEF /* 'o' -> */,
+/* pos 00d7: 74 */ 0xED /* 'm' -> */,
+/* pos 00d8: 75 */ 0x00, 0x0F /* - terminal marker 15 - */,
+/* pos 00da: 76 */ 0x61 /* 'a' */, 0x13, 0x00 /* (to 0x00ED s 77) */,
+ 0x65 /* 'e' */, 0x25, 0x00 /* (to 0x0102 s 90) */,
+ 0x69 /* 'i' */, 0x28, 0x00 /* (to 0x0108 s 95) */,
+ 0x6C /* 'l' */, 0x2B, 0x00 /* (to 0x010E s 100) */,
+ 0x6F /* 'o' */, 0x33, 0x00 /* (to 0x0119 s 110) */,
+ 0x72 /* 'r' */, 0x4D, 0x00 /* (to 0x0136 s 127) */,
+ 0x08, /* fail */
+/* pos 00ed: 77 */ 0xF0 /* 'p' -> */,
+/* pos 00ee: 78 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x00F5 s 79) */,
+ 0x74 /* 't' */, 0x0C, 0x00 /* (to 0x00FD s 86) */,
+ 0x08, /* fail */
+/* pos 00f5: 79 */ 0xF4 /* 't' -> */,
+/* pos 00f6: 80 */ 0xE1 /* 'a' -> */,
+/* pos 00f7: 81 */ 0xEC /* 'l' -> */,
+/* pos 00f8: 82 */ 0xE9 /* 'i' -> */,
+/* pos 00f9: 83 */ 0xFA /* 'z' -> */,
+/* pos 00fa: 84 */ 0xE5 /* 'e' -> */,
+/* pos 00fb: 85 */ 0x00, 0x10 /* - terminal marker 16 - */,
+/* pos 00fd: 86 */ 0xE9 /* 'i' -> */,
+/* pos 00fe: 87 */ 0xEF /* 'o' -> */,
+/* pos 00ff: 88 */ 0xEE /* 'n' -> */,
+/* pos 0100: 89 */ 0x00, 0x11 /* - terminal marker 17 - */,
+/* pos 0102: 90 */ 0xEE /* 'n' -> */,
+/* pos 0103: 91 */ 0xF4 /* 't' -> */,
+/* pos 0104: 92 */ 0xE5 /* 'e' -> */,
+/* pos 0105: 93 */ 0xF2 /* 'r' -> */,
+/* pos 0106: 94 */ 0x00, 0x12 /* - terminal marker 18 - */,
+/* pos 0108: 95 */ 0xF2 /* 'r' -> */,
+/* pos 0109: 96 */ 0xE3 /* 'c' -> */,
+/* pos 010a: 97 */ 0xEC /* 'l' -> */,
+/* pos 010b: 98 */ 0xE5 /* 'e' -> */,
+/* pos 010c: 99 */ 0x00, 0x13 /* - terminal marker 19 - */,
+/* pos 010e: 100 */ 0xEF /* 'o' -> */,
+/* pos 010f: 101 */ 0xF3 /* 's' -> */,
+/* pos 0110: 102 */ 0xE5 /* 'e' -> */,
+/* pos 0111: 103 */ 0xAD /* '-' -> */,
+/* pos 0112: 104 */ 0xF1 /* 'q' -> */,
+/* pos 0113: 105 */ 0xF5 /* 'u' -> */,
+/* pos 0114: 106 */ 0xEF /* 'o' -> */,
+/* pos 0115: 107 */ 0xF4 /* 't' -> */,
+/* pos 0116: 108 */ 0xE5 /* 'e' -> */,
+/* pos 0117: 109 */ 0x00, 0x14 /* - terminal marker 20 - */,
+/* pos 0119: 110 */ 0x64 /* 'd' */, 0x0A, 0x00 /* (to 0x0123 s 111) */,
+ 0x6C /* 'l' */, 0x0A, 0x00 /* (to 0x0126 s 113) */,
+ 0x6E /* 'n' */, 0x0E, 0x00 /* (to 0x012D s 119) */,
+ 0x08, /* fail */
+/* pos 0123: 111 */ 0xE5 /* 'e' -> */,
+/* pos 0124: 112 */ 0x00, 0x15 /* - terminal marker 21 - */,
+/* pos 0126: 113 */ 0xEC /* 'l' -> */,
+/* pos 0127: 114 */ 0xE1 /* 'a' -> */,
+/* pos 0128: 115 */ 0xF0 /* 'p' -> */,
+/* pos 0129: 116 */ 0xF3 /* 's' -> */,
+/* pos 012a: 117 */ 0xE5 /* 'e' -> */,
+/* pos 012b: 118 */ 0x00, 0x16 /* - terminal marker 22 - */,
+/* pos 012d: 119 */ 0xF4 /* 't' -> */,
+/* pos 012e: 120 */ 0xE9 /* 'i' -> */,
+/* pos 012f: 121 */ 0xEE /* 'n' -> */,
+/* pos 0130: 122 */ 0xF5 /* 'u' -> */,
+/* pos 0131: 123 */ 0xEF /* 'o' -> */,
+/* pos 0132: 124 */ 0xF5 /* 'u' -> */,
+/* pos 0133: 125 */ 0xF3 /* 's' -> */,
+/* pos 0134: 126 */ 0x00, 0x17 /* - terminal marker 23 - */,
+/* pos 0136: 127 */ 0xEF /* 'o' -> */,
+/* pos 0137: 128 */ 0xF3 /* 's' -> */,
+/* pos 0138: 129 */ 0xF3 /* 's' -> */,
+/* pos 0139: 130 */ 0xE8 /* 'h' -> */,
+/* pos 013a: 131 */ 0xE1 /* 'a' -> */,
+/* pos 013b: 132 */ 0xE9 /* 'i' -> */,
+/* pos 013c: 133 */ 0xF2 /* 'r' -> */,
+/* pos 013d: 134 */ 0x00, 0x18 /* - terminal marker 24 - */,
+/* pos 013f: 135 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0146 s 136) */,
+ 0x69 /* 'i' */, 0x1C, 0x00 /* (to 0x015E s 155) */,
+ 0x08, /* fail */
+/* pos 0146: 136 */ 0xE3 /* 'c' -> */,
+/* pos 0147: 137 */ 0xE9 /* 'i' -> */,
+/* pos 0148: 138 */ 0xED /* 'm' -> */,
+/* pos 0149: 139 */ 0xE1 /* 'a' -> */,
+/* pos 014a: 140 */ 0xEC /* 'l' -> */,
+/* pos 014b: 141 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0150 s 142) */,
+ 0x00, 0x1A /* - terminal marker 26 - */,
+/* pos 0150: 142 */ 0xEC /* 'l' -> */,
+/* pos 0151: 143 */ 0xE5 /* 'e' -> */,
+/* pos 0152: 144 */ 0xE1 /* 'a' -> */,
+/* pos 0153: 145 */ 0xE4 /* 'd' -> */,
+/* pos 0154: 146 */ 0xE9 /* 'i' -> */,
+/* pos 0155: 147 */ 0xEE /* 'n' -> */,
+/* pos 0156: 148 */ 0xE7 /* 'g' -> */,
+/* pos 0157: 149 */ 0xAD /* '-' -> */,
+/* pos 0158: 150 */ 0xFA /* 'z' -> */,
+/* pos 0159: 151 */ 0xE5 /* 'e' -> */,
+/* pos 015a: 152 */ 0xF2 /* 'r' -> */,
+/* pos 015b: 153 */ 0xEF /* 'o' -> */,
+/* pos 015c: 154 */ 0x00, 0x19 /* - terminal marker 25 - */,
+/* pos 015e: 155 */ 0x67 /* 'g' */, 0x07, 0x00 /* (to 0x0165 s 156) */,
+ 0x73 /* 's' */, 0x09, 0x00 /* (to 0x016A s 160) */,
+ 0x08, /* fail */
+/* pos 0165: 156 */ 0xE9 /* 'i' -> */,
+/* pos 0166: 157 */ 0xF4 /* 't' -> */,
+/* pos 0167: 158 */ 0xF3 /* 's' -> */,
+/* pos 0168: 159 */ 0x00, 0x1B /* - terminal marker 27 - */,
+/* pos 016a: 160 */ 0xE3 /* 'c' -> */,
+/* pos 016b: 161 */ 0x00, 0x1C /* - terminal marker 28 - */,
+/* pos 016d: 162 */ 0x6D /* 'm' */, 0x07, 0x00 /* (to 0x0174 s 163) */,
+ 0x2D /* '-' */, 0x09, 0x00 /* (to 0x0179 s 167) */,
+ 0x08, /* fail */
+/* pos 0174: 163 */ 0xE2 /* 'b' -> */,
+/* pos 0175: 164 */ 0xE5 /* 'e' -> */,
+/* pos 0176: 165 */ 0xE4 /* 'd' -> */,
+/* pos 0177: 166 */ 0x00, 0x1D /* - terminal marker 29 - */,
+/* pos 0179: 167 */ 0xF2 /* 'r' -> */,
+/* pos 017a: 168 */ 0xE5 /* 'e' -> */,
+/* pos 017b: 169 */ 0xF3 /* 's' -> */,
+/* pos 017c: 170 */ 0xE9 /* 'i' -> */,
+/* pos 017d: 171 */ 0xFA /* 'z' -> */,
+/* pos 017e: 172 */ 0xE5 /* 'e' -> */,
+/* pos 017f: 173 */ 0x00, 0x1E /* - terminal marker 30 - */,
+/* pos 0181: 174 */ 0xE9 /* 'i' -> */,
+/* pos 0182: 175 */ 0xF8 /* 'x' -> */,
+/* pos 0183: 176 */ 0xE5 /* 'e' -> */,
+/* pos 0184: 177 */ 0xE4 /* 'd' -> */,
+/* pos 0185: 178 */ 0x00, 0x1F /* - terminal marker 31 - */,
+/* pos 0187: 179 */ 0xE5 /* 'e' -> */,
+/* pos 0188: 180 */ 0xEF /* 'o' -> */,
+/* pos 0189: 181 */ 0xF2 /* 'r' -> */,
+/* pos 018a: 182 */ 0xE7 /* 'g' -> */,
+/* pos 018b: 183 */ 0xE9 /* 'i' -> */,
+/* pos 018c: 184 */ 0xE1 /* 'a' -> */,
+/* pos 018d: 185 */ 0xEE /* 'n' -> */,
+/* pos 018e: 186 */ 0x00, 0x20 /* - terminal marker 32 - */,
+/* pos 0190: 187 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0197 s 188) */,
+ 0x69 /* 'i' */, 0x08, 0x00 /* (to 0x019B s 191) */,
+ 0x08, /* fail */
+/* pos 0197: 188 */ 0xEC /* 'l' -> */,
+/* pos 0198: 189 */ 0xF0 /* 'p' -> */,
+/* pos 0199: 190 */ 0x00, 0x21 /* - terminal marker 33 - */,
+/* pos 019b: 191 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x01A2 s 192) */,
+ 0x67 /* 'g' */, 0x11, 0x00 /* (to 0x01AF s 197) */,
+ 0x08, /* fail */
+/* pos 01a2: 192 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x01A9 s 193) */,
+ 0x65 /* 'e' */, 0x08, 0x00 /* (to 0x01AD s 196) */,
+ 0x08, /* fail */
+/* pos 01a9: 193 */ 0xE5 /* 'e' -> */,
+/* pos 01aa: 194 */ 0xEE /* 'n' -> */,
+/* pos 01ab: 195 */ 0x00, 0x22 /* - terminal marker 34 - */,
+/* pos 01ad: 196 */ 0x00, 0x23 /* - terminal marker 35 - */,
+/* pos 01af: 197 */ 0xE8 /* 'h' -> */,
+/* pos 01b0: 198 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x01B5 s 199) */,
+ 0x00, 0x24 /* - terminal marker 36 - */,
+/* pos 01b5: 199 */ 0xF2 /* 'r' -> */,
+/* pos 01b6: 200 */ 0x00, 0x25 /* - terminal marker 37 - */,
+/* pos 01b8: 201 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x01C2 s 202) */,
+ 0x6E /* 'n' */, 0x0B, 0x00 /* (to 0x01C6 s 205) */,
+ 0x74 /* 't' */, 0x38, 0x00 /* (to 0x01F6 s 230) */,
+ 0x08, /* fail */
+/* pos 01c2: 202 */ 0xEF /* 'o' -> */,
+/* pos 01c3: 203 */ 0xEE /* 'n' -> */,
+/* pos 01c4: 204 */ 0x00, 0x26 /* - terminal marker 38 - */,
+/* pos 01c6: 205 */ 0x68 /* 'h' */, 0x0A, 0x00 /* (to 0x01D0 s 206) */,
+ 0x6C /* 'l' */, 0x0D, 0x00 /* (to 0x01D6 s 211) */,
+ 0x76 /* 'v' */, 0x25, 0x00 /* (to 0x01F1 s 226) */,
+ 0x08, /* fail */
+/* pos 01d0: 206 */ 0xE5 /* 'e' -> */,
+/* pos 01d1: 207 */ 0xF2 /* 'r' -> */,
+/* pos 01d2: 208 */ 0xE9 /* 'i' -> */,
+/* pos 01d3: 209 */ 0xF4 /* 't' -> */,
+/* pos 01d4: 210 */ 0x00, 0x27 /* - terminal marker 39 - */,
+/* pos 01d6: 211 */ 0xE9 /* 'i' -> */,
+/* pos 01d7: 212 */ 0xEE /* 'n' -> */,
+/* pos 01d8: 213 */ 0xE5 /* 'e' -> */,
+/* pos 01d9: 214 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x01DE s 215) */,
+ 0x00, 0x28 /* - terminal marker 40 - */,
+/* pos 01de: 215 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x01E5 s 216) */,
+ 0x74 /* 't' */, 0x0A, 0x00 /* (to 0x01EB s 221) */,
+ 0x08, /* fail */
+/* pos 01e5: 216 */ 0xEC /* 'l' -> */,
+/* pos 01e6: 217 */ 0xEF /* 'o' -> */,
+/* pos 01e7: 218 */ 0xE3 /* 'c' -> */,
+/* pos 01e8: 219 */ 0xEB /* 'k' -> */,
+/* pos 01e9: 220 */ 0x00, 0x29 /* - terminal marker 41 - */,
+/* pos 01eb: 221 */ 0xE1 /* 'a' -> */,
+/* pos 01ec: 222 */ 0xE2 /* 'b' -> */,
+/* pos 01ed: 223 */ 0xEC /* 'l' -> */,
+/* pos 01ee: 224 */ 0xE5 /* 'e' -> */,
+/* pos 01ef: 225 */ 0x00, 0x2A /* - terminal marker 42 - */,
+/* pos 01f1: 226 */ 0xE5 /* 'e' -> */,
+/* pos 01f2: 227 */ 0xF2 /* 'r' -> */,
+/* pos 01f3: 228 */ 0xF4 /* 't' -> */,
+/* pos 01f4: 229 */ 0x00, 0x2B /* - terminal marker 43 - */,
+/* pos 01f6: 230 */ 0xE1 /* 'a' -> */,
+/* pos 01f7: 231 */ 0xEC /* 'l' -> */,
+/* pos 01f8: 232 */ 0xE9 /* 'i' -> */,
+/* pos 01f9: 233 */ 0xE3 /* 'c' -> */,
+/* pos 01fa: 234 */ 0x00, 0x2C /* - terminal marker 44 - */,
+/* pos 01fc: 235 */ 0xF5 /* 'u' -> */,
+/* pos 01fd: 236 */ 0xF3 /* 's' -> */,
+/* pos 01fe: 237 */ 0xF4 /* 't' -> */,
+/* pos 01ff: 238 */ 0xE9 /* 'i' -> */,
+/* pos 0200: 239 */ 0xE6 /* 'f' -> */,
+/* pos 0201: 240 */ 0xF9 /* 'y' -> */,
+/* pos 0202: 241 */ 0x00, 0x2D /* - terminal marker 45 - */,
+/* pos 0204: 242 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x0211 s 243) */,
+ 0x69 /* 'i' */, 0x0E, 0x00 /* (to 0x0215 s 246) */,
+ 0x6F /* 'o' */, 0x2E, 0x00 /* (to 0x0238 s 269) */,
+ 0x74 /* 't' */, 0x64, 0x00 /* (to 0x0271 s 298) */,
+ 0x08, /* fail */
+/* pos 0211: 243 */ 0xE6 /* 'f' -> */,
+/* pos 0212: 244 */ 0xF4 /* 't' -> */,
+/* pos 0213: 245 */ 0x00, 0x2E /* - terminal marker 46 - */,
+/* pos 0215: 246 */ 0x67 /* 'g' */, 0x0A, 0x00 /* (to 0x021F s 247) */,
+ 0x6E /* 'n' */, 0x0D, 0x00 /* (to 0x0225 s 252) */,
+ 0x73 /* 's' */, 0x15, 0x00 /* (to 0x0230 s 262) */,
+ 0x08, /* fail */
+/* pos 021f: 247 */ 0xE8 /* 'h' -> */,
+/* pos 0220: 248 */ 0xF4 /* 't' -> */,
+/* pos 0221: 249 */ 0xE5 /* 'e' -> */,
+/* pos 0222: 250 */ 0xF2 /* 'r' -> */,
+/* pos 0223: 251 */ 0x00, 0x2F /* - terminal marker 47 - */,
+/* pos 0225: 252 */ 0xE5 /* 'e' -> */,
+/* pos 0226: 253 */ 0xAD /* '-' -> */,
+/* pos 0227: 254 */ 0xF4 /* 't' -> */,
+/* pos 0228: 255 */ 0xE8 /* 'h' -> */,
+/* pos 0229: 256 */ 0xF2 /* 'r' -> */,
+/* pos 022a: 257 */ 0xEF /* 'o' -> */,
+/* pos 022b: 258 */ 0xF5 /* 'u' -> */,
+/* pos 022c: 259 */ 0xE7 /* 'g' -> */,
+/* pos 022d: 260 */ 0xE8 /* 'h' -> */,
+/* pos 022e: 261 */ 0x00, 0x30 /* - terminal marker 48 - */,
+/* pos 0230: 262 */ 0xF4 /* 't' -> */,
+/* pos 0231: 263 */ 0xAD /* '-' -> */,
+/* pos 0232: 264 */ 0xE9 /* 'i' -> */,
+/* pos 0233: 265 */ 0xF4 /* 't' -> */,
+/* pos 0234: 266 */ 0xE5 /* 'e' -> */,
+/* pos 0235: 267 */ 0xED /* 'm' -> */,
+/* pos 0236: 268 */ 0x00, 0x31 /* - terminal marker 49 - */,
+/* pos 0238: 269 */ 0xF7 /* 'w' -> */,
+/* pos 0239: 270 */ 0x65 /* 'e' */, 0x05, 0x00 /* (to 0x023E s 271) */,
+ 0x00, 0x32 /* - terminal marker 50 - */,
+/* pos 023e: 271 */ 0xF2 /* 'r' -> */,
+/* pos 023f: 272 */ 0x2D /* '-' */, 0x08, 0x00 /* (to 0x0247 s 273) */,
+ 0x63 /* 'c' */, 0x18, 0x00 /* (to 0x025A s 279) */,
+ 0x00, 0x33 /* - terminal marker 51 - */,
+/* pos 0247: 273 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0254 s 274) */,
+ 0x67 /* 'g' */, 0x15, 0x00 /* (to 0x025F s 283) */,
+ 0x6C /* 'l' */, 0x18, 0x00 /* (to 0x0265 s 288) */,
+ 0x72 /* 'r' */, 0x1B, 0x00 /* (to 0x026B s 293) */,
+ 0x08, /* fail */
+/* pos 0254: 274 */ 0xEC /* 'l' -> */,
+/* pos 0255: 275 */ 0xF0 /* 'p' -> */,
+/* pos 0256: 276 */ 0xE8 /* 'h' -> */,
+/* pos 0257: 277 */ 0xE1 /* 'a' -> */,
+/* pos 0258: 278 */ 0x00, 0x34 /* - terminal marker 52 - */,
+/* pos 025a: 279 */ 0xE1 /* 'a' -> */,
+/* pos 025b: 280 */ 0xF3 /* 's' -> */,
+/* pos 025c: 281 */ 0xE5 /* 'e' -> */,
+/* pos 025d: 282 */ 0x00, 0x35 /* - terminal marker 53 - */,
+/* pos 025f: 283 */ 0xF2 /* 'r' -> */,
+/* pos 0260: 284 */ 0xE5 /* 'e' -> */,
+/* pos 0261: 285 */ 0xE5 /* 'e' -> */,
+/* pos 0262: 286 */ 0xEB /* 'k' -> */,
+/* pos 0263: 287 */ 0x00, 0x36 /* - terminal marker 54 - */,
+/* pos 0265: 288 */ 0xE1 /* 'a' -> */,
+/* pos 0266: 289 */ 0xF4 /* 't' -> */,
+/* pos 0267: 290 */ 0xE9 /* 'i' -> */,
+/* pos 0268: 291 */ 0xEE /* 'n' -> */,
+/* pos 0269: 292 */ 0x00, 0x37 /* - terminal marker 55 - */,
+/* pos 026b: 293 */ 0xEF /* 'o' -> */,
+/* pos 026c: 294 */ 0xED /* 'm' -> */,
+/* pos 026d: 295 */ 0xE1 /* 'a' -> */,
+/* pos 026e: 296 */ 0xEE /* 'n' -> */,
+/* pos 026f: 297 */ 0x00, 0x38 /* - terminal marker 56 - */,
+/* pos 0271: 298 */ 0xF2 /* 'r' -> */,
+/* pos 0272: 299 */ 0x00, 0x39 /* - terminal marker 57 - */,
+/* pos 0274: 300 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x027E s 301) */,
+ 0x69 /* 'i' */, 0x1B, 0x00 /* (to 0x0292 s 313) */,
+ 0x6F /* 'o' */, 0x26, 0x00 /* (to 0x02A0 s 319) */,
+ 0x08, /* fail */
+/* pos 027e: 301 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x0285 s 302) */,
+ 0x73 /* 's' */, 0x07, 0x00 /* (to 0x0288 s 304) */,
+ 0x08, /* fail */
+/* pos 0285: 302 */ 0xF5 /* 'u' -> */,
+/* pos 0286: 303 */ 0x00, 0x3A /* - terminal marker 58 - */,
+/* pos 0288: 304 */ 0xF3 /* 's' -> */,
+/* pos 0289: 305 */ 0xE1 /* 'a' -> */,
+/* pos 028a: 306 */ 0xE7 /* 'g' -> */,
+/* pos 028b: 307 */ 0xE5 /* 'e' -> */,
+/* pos 028c: 308 */ 0xAD /* '-' -> */,
+/* pos 028d: 309 */ 0xE2 /* 'b' -> */,
+/* pos 028e: 310 */ 0xEF /* 'o' -> */,
+/* pos 028f: 311 */ 0xF8 /* 'x' -> */,
+/* pos 0290: 312 */ 0x00, 0x3B /* - terminal marker 59 - */,
+/* pos 0292: 313 */ 0x64 /* 'd' */, 0x07, 0x00 /* (to 0x0299 s 314) */,
+ 0x78 /* 'x' */, 0x09, 0x00 /* (to 0x029E s 318) */,
+ 0x08, /* fail */
+/* pos 0299: 314 */ 0xE4 /* 'd' -> */,
+/* pos 029a: 315 */ 0xEC /* 'l' -> */,
+/* pos 029b: 316 */ 0xE5 /* 'e' -> */,
+/* pos 029c: 317 */ 0x00, 0x3C /* - terminal marker 60 - */,
+/* pos 029e: 318 */ 0x00, 0x3D /* - terminal marker 61 - */,
+/* pos 02a0: 319 */ 0xF6 /* 'v' -> */,
+/* pos 02a1: 320 */ 0xE5 /* 'e' -> */,
+/* pos 02a2: 321 */ 0x00, 0x3E /* - terminal marker 62 - */,
+/* pos 02a4: 322 */ 0x65 /* 'e' */, 0x0D, 0x00 /* (to 0x02B1 s 323) */,
+ 0x6F /* 'o' */, 0x13, 0x00 /* (to 0x02BA s 331) */,
+ 0x2D /* '-' */, 0x52, 0x00 /* (to 0x02FC s 370) */,
+ 0x77 /* 'w' */, 0x57, 0x00 /* (to 0x0304 s 377) */,
+ 0x08, /* fail */
+/* pos 02b1: 323 */ 0xAD /* '-' -> */,
+/* pos 02b2: 324 */ 0xF2 /* 'r' -> */,
+/* pos 02b3: 325 */ 0xE5 /* 'e' -> */,
+/* pos 02b4: 326 */ 0xF3 /* 's' -> */,
+/* pos 02b5: 327 */ 0xE9 /* 'i' -> */,
+/* pos 02b6: 328 */ 0xFA /* 'z' -> */,
+/* pos 02b7: 329 */ 0xE5 /* 'e' -> */,
+/* pos 02b8: 330 */ 0x00, 0x3F /* - terminal marker 63 - */,
+/* pos 02ba: 331 */ 0x2D /* '-' */, 0x0D, 0x00 /* (to 0x02C7 s 332) */,
+ 0x6E /* 'n' */, 0x20, 0x00 /* (to 0x02DD s 344) */,
+ 0x72 /* 'r' */, 0x32, 0x00 /* (to 0x02F2 s 362) */,
+ 0x77 /* 'w' */, 0x34, 0x00 /* (to 0x02F7 s 366) */,
+ 0x08, /* fail */
+/* pos 02c7: 332 */ 0x63 /* 'c' */, 0x0A, 0x00 /* (to 0x02D1 s 333) */,
+ 0x6F /* 'o' */, 0x16, 0x00 /* (to 0x02E0 s 346) */,
+ 0x72 /* 'r' */, 0x1E, 0x00 /* (to 0x02EB s 356) */,
+ 0x08, /* fail */
+/* pos 02d1: 333 */ 0xEC /* 'l' -> */,
+/* pos 02d2: 334 */ 0xEF /* 'o' -> */,
+/* pos 02d3: 335 */ 0xF3 /* 's' -> */,
+/* pos 02d4: 336 */ 0xE5 /* 'e' -> */,
+/* pos 02d5: 337 */ 0xAD /* '-' -> */,
+/* pos 02d6: 338 */ 0xF1 /* 'q' -> */,
+/* pos 02d7: 339 */ 0xF5 /* 'u' -> */,
+/* pos 02d8: 340 */ 0xEF /* 'o' -> */,
+/* pos 02d9: 341 */ 0xF4 /* 't' -> */,
+/* pos 02da: 342 */ 0xE5 /* 'e' -> */,
+/* pos 02db: 343 */ 0x00, 0x40 /* - terminal marker 64 - */,
+/* pos 02dd: 344 */ 0xE5 /* 'e' -> */,
+/* pos 02de: 345 */ 0x00, 0x41 /* - terminal marker 65 - */,
+/* pos 02e0: 346 */ 0xF0 /* 'p' -> */,
+/* pos 02e1: 347 */ 0xE5 /* 'e' -> */,
+/* pos 02e2: 348 */ 0xEE /* 'n' -> */,
+/* pos 02e3: 349 */ 0xAD /* '-' -> */,
+/* pos 02e4: 350 */ 0xF1 /* 'q' -> */,
+/* pos 02e5: 351 */ 0xF5 /* 'u' -> */,
+/* pos 02e6: 352 */ 0xEF /* 'o' -> */,
+/* pos 02e7: 353 */ 0xF4 /* 't' -> */,
+/* pos 02e8: 354 */ 0xE5 /* 'e' -> */,
+/* pos 02e9: 355 */ 0x00, 0x42 /* - terminal marker 66 - */,
+/* pos 02eb: 356 */ 0xE5 /* 'e' -> */,
+/* pos 02ec: 357 */ 0xF0 /* 'p' -> */,
+/* pos 02ed: 358 */ 0xE5 /* 'e' -> */,
+/* pos 02ee: 359 */ 0xE1 /* 'a' -> */,
+/* pos 02ef: 360 */ 0xF4 /* 't' -> */,
+/* pos 02f0: 361 */ 0x00, 0x43 /* - terminal marker 67 - */,
+/* pos 02f2: 362 */ 0xED /* 'm' -> */,
+/* pos 02f3: 363 */ 0xE1 /* 'a' -> */,
+/* pos 02f4: 364 */ 0xEC /* 'l' -> */,
+/* pos 02f5: 365 */ 0x00, 0x44 /* - terminal marker 68 - */,
+/* pos 02f7: 366 */ 0xF2 /* 'r' -> */,
+/* pos 02f8: 367 */ 0xE1 /* 'a' -> */,
+/* pos 02f9: 368 */ 0xF0 /* 'p' -> */,
+/* pos 02fa: 369 */ 0x00, 0x45 /* - terminal marker 69 - */,
+/* pos 02fc: 370 */ 0xF2 /* 'r' -> */,
+/* pos 02fd: 371 */ 0xE5 /* 'e' -> */,
+/* pos 02fe: 372 */ 0xF3 /* 's' -> */,
+/* pos 02ff: 373 */ 0xE9 /* 'i' -> */,
+/* pos 0300: 374 */ 0xFA /* 'z' -> */,
+/* pos 0301: 375 */ 0xE5 /* 'e' -> */,
+/* pos 0302: 376 */ 0x00, 0x46 /* - terminal marker 70 - */,
+/* pos 0304: 377 */ 0xAD /* '-' -> */,
+/* pos 0305: 378 */ 0xF2 /* 'r' -> */,
+/* pos 0306: 379 */ 0xE5 /* 'e' -> */,
+/* pos 0307: 380 */ 0xF3 /* 's' -> */,
+/* pos 0308: 381 */ 0xE9 /* 'i' -> */,
+/* pos 0309: 382 */ 0xFA /* 'z' -> */,
+/* pos 030a: 383 */ 0xE5 /* 'e' -> */,
+/* pos 030b: 384 */ 0x00, 0x47 /* - terminal marker 71 - */,
+/* pos 030d: 385 */ 0x62 /* 'b' */, 0x10, 0x00 /* (to 0x031D s 386) */,
+ 0x6E /* 'n' */, 0x14, 0x00 /* (to 0x0324 s 392) */,
+ 0x70 /* 'p' */, 0x15, 0x00 /* (to 0x0328 s 395) */,
+ 0x75 /* 'u' */, 0x1C, 0x00 /* (to 0x0332 s 404) */,
+ 0x76 /* 'v' */, 0x20, 0x00 /* (to 0x0339 s 410) */,
+ 0x08, /* fail */
+/* pos 031d: 386 */ 0xEC /* 'l' -> */,
+/* pos 031e: 387 */ 0xE9 /* 'i' -> */,
+/* pos 031f: 388 */ 0xF1 /* 'q' -> */,
+/* pos 0320: 389 */ 0xF5 /* 'u' -> */,
+/* pos 0321: 390 */ 0xE5 /* 'e' -> */,
+/* pos 0322: 391 */ 0x00, 0x48 /* - terminal marker 72 - */,
+/* pos 0324: 392 */ 0xE3 /* 'c' -> */,
+/* pos 0325: 393 */ 0xE5 /* 'e' -> */,
+/* pos 0326: 394 */ 0x00, 0x49 /* - terminal marker 73 - */,
+/* pos 0328: 395 */ 0xE5 /* 'e' -> */,
+/* pos 0329: 396 */ 0xEE /* 'n' -> */,
+/* pos 032a: 397 */ 0xAD /* '-' -> */,
+/* pos 032b: 398 */ 0xF1 /* 'q' -> */,
+/* pos 032c: 399 */ 0xF5 /* 'u' -> */,
+/* pos 032d: 400 */ 0xEF /* 'o' -> */,
+/* pos 032e: 401 */ 0xF4 /* 't' -> */,
+/* pos 032f: 402 */ 0xE5 /* 'e' -> */,
+/* pos 0330: 403 */ 0x00, 0x4A /* - terminal marker 74 - */,
+/* pos 0332: 404 */ 0xF4 /* 't' -> */,
+/* pos 0333: 405 */ 0xF3 /* 's' -> */,
+/* pos 0334: 406 */ 0xE9 /* 'i' -> */,
+/* pos 0335: 407 */ 0xE4 /* 'd' -> */,
+/* pos 0336: 408 */ 0xE5 /* 'e' -> */,
+/* pos 0337: 409 */ 0x00, 0x4B /* - terminal marker 75 - */,
+/* pos 0339: 410 */ 0xE5 /* 'e' -> */,
+/* pos 033a: 411 */ 0xF2 /* 'r' -> */,
+/* pos 033b: 412 */ 0xEC /* 'l' -> */,
+/* pos 033c: 413 */ 0xE9 /* 'i' -> */,
+/* pos 033d: 414 */ 0xEE /* 'n' -> */,
+/* pos 033e: 415 */ 0xE5 /* 'e' -> */,
+/* pos 033f: 416 */ 0x00, 0x4C /* - terminal marker 76 - */,
+/* pos 0341: 417 */ 0x6F /* 'o' */, 0x07, 0x00 /* (to 0x0348 s 418) */,
+ 0x72 /* 'r' */, 0x0B, 0x00 /* (to 0x034F s 424) */,
+ 0x08, /* fail */
+/* pos 0348: 418 */ 0xE9 /* 'i' -> */,
+/* pos 0349: 419 */ 0xEE /* 'n' -> */,
+/* pos 034a: 420 */ 0xF4 /* 't' -> */,
+/* pos 034b: 421 */ 0xE5 /* 'e' -> */,
+/* pos 034c: 422 */ 0xF2 /* 'r' -> */,
+/* pos 034d: 423 */ 0x00, 0x4D /* - terminal marker 77 - */,
+/* pos 034f: 424 */ 0x65 /* 'e' */, 0x07, 0x00 /* (to 0x0356 s 425) */,
+ 0x6F /* 'o' */, 0x1A, 0x00 /* (to 0x036C s 435) */,
+ 0x08, /* fail */
+/* pos 0356: 425 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x035B s 426) */,
+ 0x00, 0x4E /* - terminal marker 78 - */,
+/* pos 035b: 426 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x0362 s 427) */,
+ 0x77 /* 'w' */, 0x09, 0x00 /* (to 0x0367 s 431) */,
+ 0x08, /* fail */
+/* pos 0362: 427 */ 0xE9 /* 'i' -> */,
+/* pos 0363: 428 */ 0xEE /* 'n' -> */,
+/* pos 0364: 429 */ 0xE5 /* 'e' -> */,
+/* pos 0365: 430 */ 0x00, 0x4F /* - terminal marker 79 - */,
+/* pos 0367: 431 */ 0xF2 /* 'r' -> */,
+/* pos 0368: 432 */ 0xE1 /* 'a' -> */,
+/* pos 0369: 433 */ 0xF0 /* 'p' -> */,
+/* pos 036a: 434 */ 0x00, 0x50 /* - terminal marker 80 - */,
+/* pos 036c: 435 */ 0xE7 /* 'g' -> */,
+/* pos 036d: 436 */ 0xF2 /* 'r' -> */,
+/* pos 036e: 437 */ 0xE5 /* 'e' -> */,
+/* pos 036f: 438 */ 0xF3 /* 's' -> */,
+/* pos 0370: 439 */ 0xF3 /* 's' -> */,
+/* pos 0371: 440 */ 0x00, 0x51 /* - terminal marker 81 - */,
+/* pos 0373: 441 */ 0x65 /* 'e' */, 0x0A, 0x00 /* (to 0x037D s 442) */,
+ 0x69 /* 'i' */, 0x28, 0x00 /* (to 0x039E s 456) */,
+ 0x74 /* 't' */, 0x2A, 0x00 /* (to 0x03A3 s 460) */,
+ 0x08, /* fail */
+/* pos 037d: 442 */ 0x6C /* 'l' */, 0x07, 0x00 /* (to 0x0384 s 443) */,
+ 0x70 /* 'p' */, 0x0B, 0x00 /* (to 0x038B s 449) */,
+ 0x08, /* fail */
+/* pos 0384: 443 */ 0xE1 /* 'a' -> */,
+/* pos 0385: 444 */ 0xF4 /* 't' -> */,
+/* pos 0386: 445 */ 0xE9 /* 'i' -> */,
+/* pos 0387: 446 */ 0xF6 /* 'v' -> */,
+/* pos 0388: 447 */ 0xE5 /* 'e' -> */,
+/* pos 0389: 448 */ 0x00, 0x52 /* - terminal marker 82 - */,
+/* pos 038b: 449 */ 0xE5 /* 'e' -> */,
+/* pos 038c: 450 */ 0xE1 /* 'a' -> */,
+/* pos 038d: 451 */ 0xF4 /* 't' -> */,
+/* pos 038e: 452 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0393 s 453) */,
+ 0x00, 0x53 /* - terminal marker 83 - */,
+/* pos 0393: 453 */ 0x78 /* 'x' */, 0x07, 0x00 /* (to 0x039A s 454) */,
+ 0x79 /* 'y' */, 0x06, 0x00 /* (to 0x039C s 455) */,
+ 0x08, /* fail */
+/* pos 039a: 454 */ 0x00, 0x54 /* - terminal marker 84 - */,
+/* pos 039c: 455 */ 0x00, 0x55 /* - terminal marker 85 - */,
+/* pos 039e: 456 */ 0xE7 /* 'g' -> */,
+/* pos 039f: 457 */ 0xE8 /* 'h' -> */,
+/* pos 03a0: 458 */ 0xF4 /* 't' -> */,
+/* pos 03a1: 459 */ 0x00, 0x56 /* - terminal marker 86 - */,
+/* pos 03a3: 460 */ 0xEC /* 'l' -> */,
+/* pos 03a4: 461 */ 0x00, 0x57 /* - terminal marker 87 - */,
+/* pos 03a6: 462 */ 0x63 /* 'c' */, 0x22, 0x00 /* (to 0x03C8 s 463) */,
+ 0x65 /* 'e' */, 0x25, 0x00 /* (to 0x03CE s 468) */,
+ 0x68 /* 'h' */, 0x38, 0x00 /* (to 0x03E4 s 482) */,
+ 0x69 /* 'i' */, 0x39, 0x00 /* (to 0x03E8 s 485) */,
+ 0x6D /* 'm' */, 0x3C, 0x00 /* (to 0x03EE s 490) */,
+ 0x70 /* 'p' */, 0x4E, 0x00 /* (to 0x0403 s 503) */,
+ 0x71 /* 'q' */, 0x54, 0x00 /* (to 0x040C s 511) */,
+ 0x2D /* '-' */, 0x57, 0x00 /* (to 0x0412 s 516) */,
+ 0x74 /* 't' */, 0x5C, 0x00 /* (to 0x041A s 523) */,
+ 0x75 /* 'u' */, 0x6C, 0x00 /* (to 0x042D s 534) */,
+ 0x77 /* 'w' */, 0x76, 0x00 /* (to 0x043A s 539) */,
+ 0x08, /* fail */
+/* pos 03c8: 463 */ 0xF2 /* 'r' -> */,
+/* pos 03c9: 464 */ 0xEF /* 'o' -> */,
+/* pos 03ca: 465 */ 0xEC /* 'l' -> */,
+/* pos 03cb: 466 */ 0xEC /* 'l' -> */,
+/* pos 03cc: 467 */ 0x00, 0x58 /* - terminal marker 88 - */,
+/* pos 03ce: 468 */ 0x70 /* 'p' */, 0x07, 0x00 /* (to 0x03D5 s 469) */,
+ 0x2D /* '-' */, 0x0B, 0x00 /* (to 0x03DC s 475) */,
+ 0x08, /* fail */
+/* pos 03d5: 469 */ 0xE1 /* 'a' -> */,
+/* pos 03d6: 470 */ 0xF2 /* 'r' -> */,
+/* pos 03d7: 471 */ 0xE1 /* 'a' -> */,
+/* pos 03d8: 472 */ 0xF4 /* 't' -> */,
+/* pos 03d9: 473 */ 0xE5 /* 'e' -> */,
+/* pos 03da: 474 */ 0x00, 0x59 /* - terminal marker 89 - */,
+/* pos 03dc: 475 */ 0xF2 /* 'r' -> */,
+/* pos 03dd: 476 */ 0xE5 /* 'e' -> */,
+/* pos 03de: 477 */ 0xF3 /* 's' -> */,
+/* pos 03df: 478 */ 0xE9 /* 'i' -> */,
+/* pos 03e0: 479 */ 0xFA /* 'z' -> */,
+/* pos 03e1: 480 */ 0xE5 /* 'e' -> */,
+/* pos 03e2: 481 */ 0x00, 0x5A /* - terminal marker 90 - */,
+/* pos 03e4: 482 */ 0xEF /* 'o' -> */,
+/* pos 03e5: 483 */ 0xF7 /* 'w' -> */,
+/* pos 03e6: 484 */ 0x00, 0x5B /* - terminal marker 91 - */,
+/* pos 03e8: 485 */ 0xEC /* 'l' -> */,
+/* pos 03e9: 486 */ 0xE5 /* 'e' -> */,
+/* pos 03ea: 487 */ 0xEE /* 'n' -> */,
+/* pos 03eb: 488 */ 0xF4 /* 't' -> */,
+/* pos 03ec: 489 */ 0x00, 0x5C /* - terminal marker 92 - */,
+/* pos 03ee: 490 */ 0xE1 /* 'a' -> */,
+/* pos 03ef: 491 */ 0xEC /* 'l' -> */,
+/* pos 03f0: 492 */ 0xEC /* 'l' -> */,
+/* pos 03f1: 493 */ 0xAD /* '-' -> */,
+/* pos 03f2: 494 */ 0xE3 /* 'c' -> */,
+/* pos 03f3: 495 */ 0xE1 /* 'a' -> */,
+/* pos 03f4: 496 */ 0xF0 /* 'p' -> */,
+/* pos 03f5: 497 */ 0x73 /* 's' */, 0x07, 0x00 /* (to 0x03FC s 498) */,
+ 0x74 /* 't' */, 0x06, 0x00 /* (to 0x03FE s 499) */,
+ 0x08, /* fail */
+/* pos 03fc: 498 */ 0x00, 0x5D /* - terminal marker 93 - */,
+/* pos 03fe: 499 */ 0xE9 /* 'i' -> */,
+/* pos 03ff: 500 */ 0xEF /* 'o' -> */,
+/* pos 0400: 501 */ 0xEE /* 'n' -> */,
+/* pos 0401: 502 */ 0x00, 0x5E /* - terminal marker 94 - */,
+/* pos 0403: 503 */ 0xE5 /* 'e' -> */,
+/* pos 0404: 504 */ 0xEC /* 'l' -> */,
+/* pos 0405: 505 */ 0xEC /* 'l' -> */,
+/* pos 0406: 506 */ 0xAD /* '-' -> */,
+/* pos 0407: 507 */ 0xEF /* 'o' -> */,
+/* pos 0408: 508 */ 0xF5 /* 'u' -> */,
+/* pos 0409: 509 */ 0xF4 /* 't' -> */,
+/* pos 040a: 510 */ 0x00, 0x5F /* - terminal marker 95 - */,
+/* pos 040c: 511 */ 0xF5 /* 'u' -> */,
+/* pos 040d: 512 */ 0xE1 /* 'a' -> */,
+/* pos 040e: 513 */ 0xF2 /* 'r' -> */,
+/* pos 040f: 514 */ 0xE5 /* 'e' -> */,
+/* pos 0410: 515 */ 0x00, 0x60 /* - terminal marker 96 - */,
+/* pos 0412: 516 */ 0xF2 /* 'r' -> */,
+/* pos 0413: 517 */ 0xE5 /* 'e' -> */,
+/* pos 0414: 518 */ 0xF3 /* 's' -> */,
+/* pos 0415: 519 */ 0xE9 /* 'i' -> */,
+/* pos 0416: 520 */ 0xFA /* 'z' -> */,
+/* pos 0417: 521 */ 0xE5 /* 'e' -> */,
+/* pos 0418: 522 */ 0x00, 0x61 /* - terminal marker 97 - */,
+/* pos 041a: 523 */ 0xE1 /* 'a' -> */,
+/* pos 041b: 524 */ 0xF4 /* 't' -> */,
+/* pos 041c: 525 */ 0x69 /* 'i' */, 0x07, 0x00 /* (to 0x0423 s 526) */,
+ 0x75 /* 'u' */, 0x07, 0x00 /* (to 0x0426 s 528) */,
+ 0x08, /* fail */
+/* pos 0423: 526 */ 0xE3 /* 'c' -> */,
+/* pos 0424: 527 */ 0x00, 0x62 /* - terminal marker 98 - */,
+/* pos 0426: 528 */ 0xF3 /* 's' -> */,
+/* pos 0427: 529 */ 0xAD /* '-' -> */,
+/* pos 0428: 530 */ 0xE2 /* 'b' -> */,
+/* pos 0429: 531 */ 0xE1 /* 'a' -> */,
+/* pos 042a: 532 */ 0xF2 /* 'r' -> */,
+/* pos 042b: 533 */ 0x00, 0x63 /* - terminal marker 99 - */,
+/* pos 042d: 534 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x0434 s 535) */,
+ 0x70 /* 'p' */, 0x06, 0x00 /* (to 0x0436 s 536) */,
+ 0x08, /* fail */
+/* pos 0434: 535 */ 0x00, 0x64 /* - terminal marker 100 - */,
+/* pos 0436: 536 */ 0xE5 /* 'e' -> */,
+/* pos 0437: 537 */ 0xF2 /* 'r' -> */,
+/* pos 0438: 538 */ 0x00, 0x65 /* - terminal marker 101 - */,
+/* pos 043a: 539 */ 0xAD /* '-' -> */,
+/* pos 043b: 540 */ 0xF2 /* 'r' -> */,
+/* pos 043c: 541 */ 0xE5 /* 'e' -> */,
+/* pos 043d: 542 */ 0xF3 /* 's' -> */,
+/* pos 043e: 543 */ 0xE9 /* 'i' -> */,
+/* pos 043f: 544 */ 0xFA /* 'z' -> */,
+/* pos 0440: 545 */ 0xE5 /* 'e' -> */,
+/* pos 0441: 546 */ 0x00, 0x66 /* - terminal marker 102 - */,
+/* pos 0443: 547 */ 0x61 /* 'a' */, 0x0D, 0x00 /* (to 0x0450 s 548) */,
+ 0x65 /* 'e' */, 0x6C, 0x00 /* (to 0x04B2 s 607) */,
+ 0x6F /* 'o' */, 0x82, 0x00 /* (to 0x04CB s 620) */,
+ 0x72 /* 'r' */, 0x82, 0x00 /* (to 0x04CE s 622) */,
+ 0x08, /* fail */
+/* pos 0450: 548 */ 0xE2 /* 'b' -> */,
+/* pos 0451: 549 */ 0xEC /* 'l' -> */,
+/* pos 0452: 550 */ 0xE5 /* 'e' -> */,
+/* pos 0453: 551 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0458 s 552) */,
+ 0x00, 0x67 /* - terminal marker 103 - */,
+/* pos 0458: 552 */ 0x63 /* 'c' */, 0x0D, 0x00 /* (to 0x0465 s 553) */,
+ 0x66 /* 'f' */, 0x2F, 0x00 /* (to 0x048A s 574) */,
+ 0x68 /* 'h' */, 0x39, 0x00 /* (to 0x0497 s 586) */,
+ 0x72 /* 'r' */, 0x43, 0x00 /* (to 0x04A4 s 598) */,
+ 0x08, /* fail */
+/* pos 0465: 553 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x046F s 554) */,
+ 0x65 /* 'e' */, 0x0E, 0x00 /* (to 0x0476 s 560) */,
+ 0x6F /* 'o' */, 0x0F, 0x00 /* (to 0x047A s 563) */,
+ 0x08, /* fail */
+/* pos 046f: 554 */ 0xF0 /* 'p' -> */,
+/* pos 0470: 555 */ 0xF4 /* 't' -> */,
+/* pos 0471: 556 */ 0xE9 /* 'i' -> */,
+/* pos 0472: 557 */ 0xEF /* 'o' -> */,
+/* pos 0473: 558 */ 0xEE /* 'n' -> */,
+/* pos 0474: 559 */ 0x00, 0x68 /* - terminal marker 104 - */,
+/* pos 0476: 560 */ 0xEC /* 'l' -> */,
+/* pos 0477: 561 */ 0xEC /* 'l' -> */,
+/* pos 0478: 562 */ 0x00, 0x69 /* - terminal marker 105 - */,
+/* pos 047a: 563 */ 0xEC /* 'l' -> */,
+/* pos 047b: 564 */ 0xF5 /* 'u' -> */,
+/* pos 047c: 565 */ 0xED /* 'm' -> */,
+/* pos 047d: 566 */ 0xEE /* 'n' -> */,
+/* pos 047e: 567 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x0483 s 568) */,
+ 0x00, 0x6A /* - terminal marker 106 - */,
+/* pos 0483: 568 */ 0xE7 /* 'g' -> */,
+/* pos 0484: 569 */ 0xF2 /* 'r' -> */,
+/* pos 0485: 570 */ 0xEF /* 'o' -> */,
+/* pos 0486: 571 */ 0xF5 /* 'u' -> */,
+/* pos 0487: 572 */ 0xF0 /* 'p' -> */,
+/* pos 0488: 573 */ 0x00, 0x6B /* - terminal marker 107 - */,
+/* pos 048a: 574 */ 0xEF /* 'o' -> */,
+/* pos 048b: 575 */ 0xEF /* 'o' -> */,
+/* pos 048c: 576 */ 0xF4 /* 't' -> */,
+/* pos 048d: 577 */ 0xE5 /* 'e' -> */,
+/* pos 048e: 578 */ 0xF2 /* 'r' -> */,
+/* pos 048f: 579 */ 0xAD /* '-' -> */,
+/* pos 0490: 580 */ 0xE7 /* 'g' -> */,
+/* pos 0491: 581 */ 0xF2 /* 'r' -> */,
+/* pos 0492: 582 */ 0xEF /* 'o' -> */,
+/* pos 0493: 583 */ 0xF5 /* 'u' -> */,
+/* pos 0494: 584 */ 0xF0 /* 'p' -> */,
+/* pos 0495: 585 */ 0x00, 0x6C /* - terminal marker 108 - */,
+/* pos 0497: 586 */ 0xE5 /* 'e' -> */,
+/* pos 0498: 587 */ 0xE1 /* 'a' -> */,
+/* pos 0499: 588 */ 0xE4 /* 'd' -> */,
+/* pos 049a: 589 */ 0xE5 /* 'e' -> */,
+/* pos 049b: 590 */ 0xF2 /* 'r' -> */,
+/* pos 049c: 591 */ 0xAD /* '-' -> */,
+/* pos 049d: 592 */ 0xE7 /* 'g' -> */,
+/* pos 049e: 593 */ 0xF2 /* 'r' -> */,
+/* pos 049f: 594 */ 0xEF /* 'o' -> */,
+/* pos 04a0: 595 */ 0xF5 /* 'u' -> */,
+/* pos 04a1: 596 */ 0xF0 /* 'p' -> */,
+/* pos 04a2: 597 */ 0x00, 0x6D /* - terminal marker 109 - */,
+/* pos 04a4: 598 */ 0xEF /* 'o' -> */,
+/* pos 04a5: 599 */ 0xF7 /* 'w' -> */,
+/* pos 04a6: 600 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x04AB s 601) */,
+ 0x00, 0x6E /* - terminal marker 110 - */,
+/* pos 04ab: 601 */ 0xE7 /* 'g' -> */,
+/* pos 04ac: 602 */ 0xF2 /* 'r' -> */,
+/* pos 04ad: 603 */ 0xEF /* 'o' -> */,
+/* pos 04ae: 604 */ 0xF5 /* 'u' -> */,
+/* pos 04af: 605 */ 0xF0 /* 'p' -> */,
+/* pos 04b0: 606 */ 0x00, 0x6F /* - terminal marker 111 - */,
+/* pos 04b2: 607 */ 0xF8 /* 'x' -> */,
+/* pos 04b3: 608 */ 0xF4 /* 't' -> */,
+/* pos 04b4: 609 */ 0x2D /* '-' */, 0x05, 0x00 /* (to 0x04B9 s 610) */,
+ 0x00, 0x72 /* - terminal marker 114 - */,
+/* pos 04b9: 610 */ 0x62 /* 'b' */, 0x07, 0x00 /* (to 0x04C0 s 611) */,
+ 0x74 /* 't' */, 0x0B, 0x00 /* (to 0x04C7 s 617) */,
+ 0x08, /* fail */
+/* pos 04c0: 611 */ 0xEF /* 'o' -> */,
+/* pos 04c1: 612 */ 0xF4 /* 't' -> */,
+/* pos 04c2: 613 */ 0xF4 /* 't' -> */,
+/* pos 04c3: 614 */ 0xEF /* 'o' -> */,
+/* pos 04c4: 615 */ 0xED /* 'm' -> */,
+/* pos 04c5: 616 */ 0x00, 0x70 /* - terminal marker 112 - */,
+/* pos 04c7: 617 */ 0xEF /* 'o' -> */,
+/* pos 04c8: 618 */ 0xF0 /* 'p' -> */,
+/* pos 04c9: 619 */ 0x00, 0x71 /* - terminal marker 113 - */,
+/* pos 04cb: 620 */ 0xF0 /* 'p' -> */,
+/* pos 04cc: 621 */ 0x00, 0x73 /* - terminal marker 115 - */,
+/* pos 04ce: 622 */ 0xE1 /* 'a' -> */,
+/* pos 04cf: 623 */ 0xEE /* 'n' -> */,
+/* pos 04d0: 624 */ 0xF3 /* 's' -> */,
+/* pos 04d1: 625 */ 0xF0 /* 'p' -> */,
+/* pos 04d2: 626 */ 0xE1 /* 'a' -> */,
+/* pos 04d3: 627 */ 0xF2 /* 'r' -> */,
+/* pos 04d4: 628 */ 0xE5 /* 'e' -> */,
+/* pos 04d5: 629 */ 0xEE /* 'n' -> */,
+/* pos 04d6: 630 */ 0xF4 /* 't' -> */,
+/* pos 04d7: 631 */ 0x00, 0x74 /* - terminal marker 116 - */,
+/* pos 04d9: 632 */ 0x6E /* 'n' */, 0x07, 0x00 /* (to 0x04E0 s 633) */,
+ 0x70 /* 'p' */, 0x0D, 0x00 /* (to 0x04E9 s 641) */,
+ 0x08, /* fail */
+/* pos 04e0: 633 */ 0xE4 /* 'd' -> */,
+/* pos 04e1: 634 */ 0xE5 /* 'e' -> */,
+/* pos 04e2: 635 */ 0xF2 /* 'r' -> */,
+/* pos 04e3: 636 */ 0xEC /* 'l' -> */,
+/* pos 04e4: 637 */ 0xE9 /* 'i' -> */,
+/* pos 04e5: 638 */ 0xEE /* 'n' -> */,
+/* pos 04e6: 639 */ 0xE5 /* 'e' -> */,
+/* pos 04e7: 640 */ 0x00, 0x75 /* - terminal marker 117 - */,
+/* pos 04e9: 641 */ 0xF0 /* 'p' -> */,
+/* pos 04ea: 642 */ 0xE5 /* 'e' -> */,
+/* pos 04eb: 643 */ 0xF2 /* 'r' -> */,
+/* pos 04ec: 644 */ 0x2D /* '-' */, 0x07, 0x00 /* (to 0x04F3 s 645) */,
+ 0x63 /* 'c' */, 0x14, 0x00 /* (to 0x0503 s 651) */,
+ 0x08, /* fail */
+/* pos 04f3: 645 */ 0x61 /* 'a' */, 0x0A, 0x00 /* (to 0x04FD s 646) */,
+ 0x6C /* 'l' */, 0x12, 0x00 /* (to 0x0508 s 655) */,
+ 0x72 /* 'r' */, 0x15, 0x00 /* (to 0x050E s 660) */,
+ 0x08, /* fail */
+/* pos 04fd: 646 */ 0xEC /* 'l' -> */,
+/* pos 04fe: 647 */ 0xF0 /* 'p' -> */,
+/* pos 04ff: 648 */ 0xE8 /* 'h' -> */,
+/* pos 0500: 649 */ 0xE1 /* 'a' -> */,
+/* pos 0501: 650 */ 0x00, 0x76 /* - terminal marker 118 - */,
+/* pos 0503: 651 */ 0xE1 /* 'a' -> */,
+/* pos 0504: 652 */ 0xF3 /* 's' -> */,
+/* pos 0505: 653 */ 0xE5 /* 'e' -> */,
+/* pos 0506: 654 */ 0x00, 0x77 /* - terminal marker 119 - */,
+/* pos 0508: 655 */ 0xE1 /* 'a' -> */,
+/* pos 0509: 656 */ 0xF4 /* 't' -> */,
+/* pos 050a: 657 */ 0xE9 /* 'i' -> */,
+/* pos 050b: 658 */ 0xEE /* 'n' -> */,
+/* pos 050c: 659 */ 0x00, 0x78 /* - terminal marker 120 - */,
+/* pos 050e: 660 */ 0xEF /* 'o' -> */,
+/* pos 050f: 661 */ 0xED /* 'm' -> */,
+/* pos 0510: 662 */ 0xE1 /* 'a' -> */,
+/* pos 0511: 663 */ 0xEE /* 'n' -> */,
+/* pos 0512: 664 */ 0x00, 0x79 /* - terminal marker 121 - */,
+/* pos 0514: 665 */ 0xE9 /* 'i' -> */,
+/* pos 0515: 666 */ 0xF3 /* 's' -> */,
+/* pos 0516: 667 */ 0xE9 /* 'i' -> */,
+/* pos 0517: 668 */ 0xE2 /* 'b' -> */,
+/* pos 0518: 669 */ 0xEC /* 'l' -> */,
+/* pos 0519: 670 */ 0xE5 /* 'e' -> */,
+/* pos 051a: 671 */ 0x00, 0x7A /* - terminal marker 122 - */,
+/* pos 051c: 672 */ 0x61 /* 'a' */, 0x07, 0x00 /* (to 0x0523 s 673) */,
+ 0x2D /* '-' */, 0x08, 0x00 /* (to 0x0527 s 676) */,
+ 0x08, /* fail */
+/* pos 0523: 673 */ 0xE9 /* 'i' -> */,
+/* pos 0524: 674 */ 0xF4 /* 't' -> */,
+/* pos 0525: 675 */ 0x00, 0x7B /* - terminal marker 123 - */,
+/* pos 0527: 676 */ 0xF2 /* 'r' -> */,
+/* pos 0528: 677 */ 0xE5 /* 'e' -> */,
+/* pos 0529: 678 */ 0xF3 /* 's' -> */,
+/* pos 052a: 679 */ 0xE9 /* 'i' -> */,
+/* pos 052b: 680 */ 0xFA /* 'z' -> */,
+/* pos 052c: 681 */ 0xE5 /* 'e' -> */,
+/* pos 052d: 682 */ 0x00, 0x7C /* - terminal marker 124 - */,
+/* total size 1327 bytes */
diff --git a/lib/misc/dlo/dlo.c b/lib/misc/dlo/dlo.c
index 6d113fdfc..a310a5c3a 100644
--- a/lib/misc/dlo/dlo.c
+++ b/lib/misc/dlo/dlo.c
@@ -534,8 +534,8 @@ lws_display_render_dump_ids(lws_dll2_owner_t *ids)
lwsl_notice(" id: '%s' (not present)\n", id->id);
else
lwsl_notice(" id: '%s', (%d,%d), %dx%d\n", id->id,
- id->box.x.whole, id->box.y.whole,
- id->box.w.whole, id->box.h.whole);
+ (int)id->box.x.whole, (int)id->box.y.whole,
+ (int)id->box.w.whole, (int)id->box.h.whole);
} lws_end_foreach_dll(d);
}
diff --git a/lib/misc/lhp-ss.c b/lib/misc/lhp-ss.c
new file mode 100644
index 000000000..27c30a37b
--- /dev/null
+++ b/lib/misc/lhp-ss.c
@@ -0,0 +1,241 @@
+/*
+ * libwebsockets - small server side websockets and web server implementation
+ *
+ * Copyright (C) 2010 - 2022 Andy Green
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * SS bindings for html5 parser
+ */
+
+#include
+
+LWS_SS_USER_TYPEDEF
+ lws_flow_t flow;
+ lhp_ctx_t lhp; /* html ss owns html parser */
+ lws_dl_rend_t drt;
+ lws_sorted_usec_list_t sul;
+ lws_display_render_state_t *rs;
+ struct lws_context *cx;
+} htmlss_t;
+
+static void
+lws_lhp_ss_html_parse(lws_sorted_usec_list_t *sul)
+{
+ htmlss_t *m = lws_container_of(sul, htmlss_t, sul);
+ lws_stateful_ret_t r;
+ size_t zero = 0;
+
+ do {
+ if (lws_flow_feed(&m->flow)) {
+ lwsl_notice("%s: returning from flow_feed\n", __func__);
+ return;
+ }
+
+ // lwsl_notice("%s: html_parse in len %d\n", __func__, (int)m->flow.len);
+
+ /* creates display list objects from html */
+ r = lws_lhp_parse(&m->lhp, (const uint8_t **)&m->flow.data,
+ (size_t *)&m->flow.len);
+
+ lws_flow_req(&m->flow);
+
+ if ((r & LWS_SRET_WANT_INPUT) && !m->flow.len && !m->lhp.await_css_done) {
+ if (m->flow.state == LWSDLOFLOW_STATE_READ) {
+ lwsl_warn("%s: returning to await more input\n", __func__);
+ return;
+ }
+ lwsl_warn("%s: inferring we are finished\n", __func__);
+ break;
+ }
+
+ if (r & LWS_SRET_AWAIT_RETRY) {
+ if (!m->lhp.await_css_done)
+ lws_sul_schedule(m->cx, 0, &m->sul, lws_lhp_ss_html_parse, 1);
+
+ return;
+ }
+
+ if (r & (LWS_SRET_NO_FURTHER_OUT | LWS_SRET_FATAL)) {
+ lwsl_warn("%s: r 0x%x\n", __func__, r);
+ break;
+ }
+ } while (1);
+
+ /* Finalize the html parse and clean up */
+
+ lwsl_notice("%s: DESTROYING the lhp\n", __func__);
+
+ m->lhp.flags = LHP_FLAG_DOCUMENT_END;
+ lws_lhp_parse(&m->lhp, (const uint8_t **)NULL, &zero);
+ lws_lhp_destruct(&m->lhp);
+ m->rs->html = 2; /* html completed.. rs outlives the html ss and priv */
+
+ lws_display_dl_dump(m->drt.dl);
+
+ /* schedule starting the render */
+
+ lws_sul_schedule(m->cx, 0, &m->rs->sul, m->lhp.ssevcb, 1);
+ lws_ss_destroy(&m->ss);
+}
+
+void
+lws_lhp_ss_html_parse_from_lhp(lhp_ctx_t *lhp)
+{
+ htmlss_t *m = lws_container_of(lhp, htmlss_t, lhp);
+
+ lws_lhp_ss_html_parse(&m->sul);
+}
+
+/* secure streams payload interface */
+
+static lws_ss_state_return_t
+htmlss_rx(void *userobj, const uint8_t *buf, size_t len, int flags)
+{
+ htmlss_t *m = (htmlss_t *)userobj;
+ lws_ss_state_return_t r = LWSSSSRET_OK;
+
+ if (len &&
+ lws_buflist_append_segment(&m->flow.bl, buf, len) < 0)
+ return LWSSSSRET_DISCONNECT_ME;
+
+ lwsl_notice("%s: buflen size %d\n", __func__,
+ (int)lws_buflist_total_len(&m->flow.bl));
+
+ if (flags & LWSSS_FLAG_EOM) {
+ m->flow.state = LWSDLOFLOW_STATE_READ_COMPLETED;
+ r = LWSSSSRET_DISCONNECT_ME;
+ }
+
+ lws_sul_schedule(m->cx, 0, &m->sul, lws_lhp_ss_html_parse, 1);
+
+ return r;
+}
+
+static lws_ss_state_return_t
+htmlss_state(void *userobj, void *sh, lws_ss_constate_t state,
+ lws_ss_tx_ordinal_t ack)
+{
+ htmlss_t *m = (htmlss_t *)userobj;
+
+ switch (state) {
+ case LWSSSCS_CREATING:
+ break;
+
+ case LWSSSCS_DISCONNECTED:
+ m->flow.state = LWSDLOFLOW_STATE_READ_COMPLETED;
+ m->flow.h = NULL;
+ break;
+
+ case LWSSSCS_DESTROYING:
+ lws_lhp_destruct(&m->lhp);
+ lws_buflist_destroy_all_segments(&m->flow.bl);
+ m->drt.dl = NULL;
+ break;
+
+ default:
+ break;
+ }
+
+ return LWSSSSRET_OK;
+}
+
+static LWS_SS_INFO("__default", htmlss_t)
+ .rx = htmlss_rx,
+ .state = htmlss_state,
+ .manual_initial_tx_credit = 1024
+};
+
+/* prep rs->displaylist, rs->ic */
+
+int
+lws_lhp_ss_browse(struct lws_context *cx, lws_display_render_state_t *rs,
+ const char *url, sul_cb_t render)
+{
+ struct lws_ss_handle *h = NULL;
+ lws_ss_info_t ssi;
+ int32_t w = 64 * 1024;
+ htmlss_t *m;
+
+ /* fetch via SS */
+#if defined(LWS_PLAT_BAREMETAL) || defined(LWS_PLAT_FREERTOS)
+ w = 4096;
+#endif
+
+ ssi = ssi_htmlss_t;
+ ssi.manual_initial_tx_credit = w;
+
+ if (lws_ss_create(cx, 0, &ssi, NULL, &h, NULL, NULL)) {
+ lwsl_err("%s: ss create failed\n", __func__);
+ return 1; /* failed */
+ }
+
+ m = (htmlss_t *)lws_ss_to_user_object(h);
+ m->cx = cx;
+ m->flow.h = h;
+ m->flow.window = w;
+
+ m->drt.dl = &rs->displaylist;
+ m->drt.w = rs->ic->wh_px[0].whole;
+ m->drt.h = rs->ic->wh_px[1].whole;
+
+ m->rs = rs;
+ m->rs->html = 1; /* render must wait for html to complete */
+
+ if (lws_lhp_construct(&m->lhp, lhp_displaylist_layout, &m->drt, rs->ic)) {
+ lwsl_err("%s: lhp create %s failed\n", __func__, url);
+ goto bail1;
+ }
+
+ m->lhp.user1 = cx;
+ m->lhp.base_url = strdup(url);
+ m->lhp.ssevcb = render;
+ m->lhp.ssevsul = &rs->sul;
+ m->lhp.sshtmlevcb = lws_lhp_ss_html_parse;
+ m->lhp.sshtmlevsul = &m->sul;
+ m->lhp.ids = &rs->ids;
+
+ if (lws_ss_set_metadata(m->ss, "endpoint", url, strlen(url))) {
+ lwsl_err("%s: failed to use metadata %s\n", __func__, url);
+ goto bail2;
+ }
+
+ if (lws_ss_set_metadata(m->ss, "ua", "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0", 76)) {
+ lwsl_err("%s: failed to use metadata ua\n", __func__);
+ goto bail2;
+ }
+
+ if (lws_ss_set_metadata(m->ss, "acc", "text/html,image/jpeg,image/png,", 30)) {
+ lwsl_err("%s: failed to use metadata ua\n", __func__);
+ goto bail2;
+ }
+
+ if (lws_ss_client_connect(m->ss))
+ goto bail2;
+
+ return 0;
+
+bail2:
+ lws_lhp_destruct(&m->lhp);
+
+bail1:
+ lws_ss_destroy(&h);
+
+ return 1;
+}
diff --git a/lib/misc/lhp.c b/lib/misc/lhp.c
new file mode 100644
index 000000000..59a227d84
--- /dev/null
+++ b/lib/misc/lhp.c
@@ -0,0 +1,2146 @@
+/*
+ * libwebsockets - small server side websockets and web server implementation
+ *
+ * Copyright (C) 2010 - 2022 Andy Green
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Stream parser for HTML 5
+ * https://w3c.github.io/html-reference/syntax.html
+ *
+ */
+
+#include
+
+#define FAIL_CHAR 0x08
+static uint8_t css_lextable[] = { /* the css property names */
+ #include "css-lextable.h"
+};
+
+static uint8_t css_propconst_lextable[] = { /* the css property values */
+ #include "css-propconst-lextable.h"
+};
+
+#define LHP_AC_GRANULE 512
+
+enum {
+ /* html */
+
+ LHPS_INIT, /* default css injection */
+
+ LHPS_OUTER,
+ LHPS_TAG,
+ LHPS_BAD_TAG,
+ LHPS_DO_START_ELEM,
+ LHPS_ATTRIB,
+ LHPS_ATTRIB_VAL,
+ LHPS_AMP,
+ LHPS_AMPHASH,
+ LHPS_AMPHASH_HEX,
+ LHPS_SCOMMENT1,
+ LHPS_SCOMMENT2,
+ LHPS_COMMENT,
+ LHPS_ECOMMENT1,
+ LHPS_ECOMMENT2,
+
+ /* css */
+
+ LCSPS_CSS_OUTER,
+ LCSPS_CCOM_S1,
+ LCSPS_CCOM_E1,
+ LCSPS_CCOM,
+ LCSPS_CSS_OUTER_TAG1,
+ LCSPS_CSS_NAMES,
+ LCSPS_CSS_DEF_NAME,
+ LCSPS_CSS_DEF_VALUE,
+ LCSPS_SCOMMENT1,
+ LCSPS_SCOMMENT2,
+ LCSPS_COMMENT,
+ LCSPS_ECOMMENT1,
+ LCSPS_ECOMMENT2,
+
+ LCSPS_CSS_STANZA,
+};
+
+/*
+ * 17 well-known colours specified by CSS 2.1
+ * https://www.w3.org/TR/CSS21/syndata.html#value-def-color
+ */
+
+#if 0
+static struct cols {
+ const char * const name;
+ uint32_t rgba;
+} cols[] = {
+ { "maroon", LWSDC_RGBA(0x80, 0x00, 0x00, 255) },
+ { "red", LWSDC_RGBA(0xff, 0x00, 0x00, 255) },
+ { "orange", LWSDC_RGBA(0xff, 0xa5, 0x00, 255) },
+ { "yellow", LWSDC_RGBA(0xff, 0xff, 0x00, 255) },
+ { "olive", LWSDC_RGBA(0x80, 0x80, 0x00, 255) },
+ { "purple", LWSDC_RGBA(0x80, 0x00, 0x80, 255) },
+ { "fuchsia", LWSDC_RGBA(0xff, 0x00, 0xff, 255) },
+ { "white", LWSDC_RGBA(0xff, 0xff, 0xff, 255) },
+ { "lime", LWSDC_RGBA(0x00, 0xff, 0x00, 255) },
+ { "green", LWSDC_RGBA(0x00, 0x80, 0x00, 255) },
+ { "navy", LWSDC_RGBA(0x00, 0x00, 0x80, 255) },
+ { "blue", LWSDC_RGBA(0x00, 0x00, 0xff, 255) },
+ { "aqua", LWSDC_RGBA(0x00, 0xff, 0xff, 255) },
+ { "teal", LWSDC_RGBA(0x00, 0x80, 0x80, 255) },
+ { "black", LWSDC_RGBA(0x00, 0x00, 0x00, 255) },
+ { "silver", LWSDC_RGBA(0xc0, 0xc0, 0xc0, 255) },
+ { "gray", LWSDC_RGBA(0x80, 0x80, 0x80, 255) },
+};
+#endif
+
+/*
+ * "void elements" are html elements that don't have a scope, and so don't
+ * have a scope closure
+ */
+static const char * const void_elems[] = {
+ "area", "base", "br", "col", "command", "embed", "hr", "img",
+ "input", "keygen", "link", "meta", "param", "source", "track", "wbr"
+};
+static const uint8_t void_elems_lens[] = /* lengths for the table above */
+ { 4, 4, 2, 3, 7, 5, 2, 3, 5, 6, 4, 4, 5, 6, 5, 3 };
+
+static const char *const default_css =
+ "/* lws_lhp default css */"
+ "html, address,blockquote, dd, div,dl, dt, fieldset, form, frame, "
+ "frameset, h1, h2, h3, h4, h5, h6, noframes, ol, p, ul, center, "
+ "dir, hr, menu, pre { top: 0px; right: 0px; bottom: 0px; left: 0px;"
+ " unicode-bidi: embed; color: #000;"
+ "padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px;"
+ "margin-top: 2px; margin-left: 2px; margin-bottom: 2px; margin-right: 2px;"
+ "position: static; width: auto; height: auto;"
+ "}\n"
+ "div { display: block; width: auto; }\n"
+ "body { display: block}\n"
+ "li { display: list-item }\n"
+ "head { display: none }\n"
+ "table { display: table; }\n"
+ "tr { display: table-row }\n"
+ "thead { display: table-header-group }\n"
+ "tbody { display: table-row-group }\n"
+ "tfoot { display: table-footer-group }\n"
+ "col { display: table-column }\n"
+ "colgroup { display: table-column-group }\n"
+ "td, th { display: table-cell }\n"
+ "caption { display: table-caption }\n"
+ "th { font-weight: bolder; text-align: center }\n"
+ "caption { text-align: center }\n"
+ "body { margin: 8px }\n"
+ "h1 { font-size: 2em; margin: .67em 0 }\n"
+ "h2 { font-size: 1.5em; margin: .75em 0 }\n"
+ "h3 { font-size: 1.17em; margin: .83em 0 }\n"
+ "h4, p, blockquote, ul, fieldset, form, ol, dl, dir, menu "
+ "{ margin: 1.12em 0 }\n"
+ "h5 { font-size: .83em; margin: 1.5em 0 }\n"
+ "h6 { font-size: .75em; margin: 1.67em 0 }\n"
+ "h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder }\n"
+ "blockquote { margin-left: 40px; margin-right: 40px }\n"
+ "i, cite, em, var, address { font-style: italic }\n"
+ " pre, tt, code, kbd, samp { font-family: monospace }\n"
+ "pre { white-space: pre }\n"
+ "button, textarea, input, select { display: inline-block }\n"
+ "big { font-size: 1.17em }\n"
+ "small, sub, sup { font-size: .83em }\n"
+ "sub { vertical-align: sub }\n"
+ "sup { vertical-align: super }\n"
+ "table { border-spacing: 2px; padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px }\n"
+ "thead, tbody, tfoot { vertical-align: middle }\n"
+ "td, th, tr { vertical-align: inherit; width: auto; padding-top: 2px; padding-left: 2px; padding-bottom: 2px; padding-right: 2px; margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px }\n"
+ "s, strike, del { text-decoration: line-through }\n"
+ "hr { border: 1px inset }\n"
+ "ol, ul, dir, menu, dd { margin-left: 40px }\n"
+ "ol { list-style-type: decimal }\n"
+ "ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 }\n"
+ "u, ins { text-decoration: underline }\n"
+ "br:before { content: \"A\"; white-space: pre-line }\n"
+ "center { text-align: center }\n"
+ ":link, :visited { text-decoration: underline }\n"
+ ":focus { outline: thin dotted invert }\n"
+
+ "BDO[DIR=\"ltr\"] { direction: ltr; unicode-bidi: bidi-override }"
+ "BDO[DIR=\"rtl\"] { direction: rtl; unicode-bidi: bidi-override }"
+
+ "*[DIR=\"ltr\"] { direction: ltr; unicode-bidi: embed }"
+ "*[DIR=\"rtl\"] { direction: rtl; unicode-bidi: embed }"
+
+ "@media print {"
+ " h1 { page-break-before: always }\n"
+ " h1, h2, h3, h4, h5, h6 { page-break-after: avoid }\n"
+ " ul, ol, dl { page-break-before: avoid }\n"
+ "}\n"
+;
+
+
+
+static int
+lhp_clean_atr(lws_dll2_t *d, void *user)
+{
+ lhp_atr_t *atr = lws_container_of(d, lhp_atr_t, list);
+
+ lws_dll2_remove(d);
+ lws_free(atr);
+
+ return 0;
+}
+
+static void
+lhp_clean_level(lhp_pstack_t *ps)
+{
+ lws_dll2_foreach_safe(&ps->atr, NULL, lhp_clean_atr);
+ lws_dll2_remove(&ps->list);
+
+ lws_free(ps);
+}
+
+int
+lws_lhp_construct(lhp_ctx_t *ctx, lhp_callback cb, void *user,
+ const lws_surface_info_t *ic)
+{
+ lhp_pstack_t *ps = lws_zalloc(sizeof(*ps), __func__);
+
+ if (!ps)
+ return 1;
+
+ memset(ctx, 0, sizeof(*ctx) - sizeof(ctx->buf));
+ ctx->user = user;
+ ctx->ic = *ic;
+
+ /*
+ * these are done implicitly by the memset above
+ * ctx->state = LHPS_INIT;
+ * ctx->sp = 0;
+ */
+
+ ps->cb = cb;
+ lws_dll2_add_tail(&ps->list, &ctx->stack);
+
+ return 0;
+}
+
+static int
+lhp_clean_stack(lws_dll2_t *d, void *user)
+{
+ lhp_pstack_t *ps = lws_container_of(d, lhp_pstack_t, list);
+
+ lhp_clean_level(ps);
+ return 0;
+}
+
+static const lws_fx_t c_254= { 2,54000000 }, c_10 = { 10,0 },
+ c_72 = { 72,0 }, c_6 = { 6,0 }, c_100 = { 100,0 };
+
+/*
+ * We need to go backward until we reach an absolute length for the reference
+ * axis, then base off that and go forward applying relative operations (like %)
+ * on it in order.
+ */
+
+static int
+lws_css_compute_cascaded_length(lhp_ctx_t *ctx, int ref, lhp_pstack_t *ps,
+ lws_fx_t *t1)
+{
+ lhp_pstack_t *psb = ps, *psmap[20];
+ const struct lcsp_atr *atrmap[20];
+ lws_fx_t t2;
+ int amp = 0;
+
+ do {
+ const struct lcsp_atr *a;
+
+ psb = lws_css_get_parent_block(ctx, psb);
+ if (!psb)
+ break;
+
+ a = (ref == LWS_LHPREF_WIDTH) ? psb->css_width : psb->css_height;
+ if (!a)
+ /* skip levels that don't change it */
+ continue;
+
+ if (amp + 1 == LWS_ARRAY_SIZE(atrmap))
+ /* uhh... */
+ break;
+
+ psmap[amp] = psb;
+ atrmap[amp++] = a;
+
+ if (a->unit == LCSP_UNIT_LENGTH_PERCENT ||
+ a->unit == LCSP_UNIT_ANGLE_REL_DEG ||
+ a->unit == LCSP_UNIT_NONE)
+ /* need earlier info to compute... keep going back */
+ continue;
+
+ break;
+ } while (1);
+
+ /*
+ * We have the path back through the elements to the first
+ * absolute one
+ */
+
+ while (amp-- > 0) {
+ if (atrmap[amp]->unit != LCSP_UNIT_LENGTH_PERCENT) {
+ *t1 = *lws_csp_px(atrmap[amp], psmap[amp]);
+ } else
+ if (amp)
+ lws_fx_div(t1,
+ lws_fx_mul(&t2, &atrmap[amp]->u.i, t1),
+ &c_100);
+ }
+
+ return 0;
+}
+
+const lws_fx_t *
+lws_csp_px(const lcsp_atr_t *a, lhp_pstack_t *ps)
+{
+ lhp_ctx_t *ctx = lws_container_of(ps->list.owner, lhp_ctx_t, stack);
+ const lws_display_font_t *f = ps->font;
+ lws_fx_t t1, t2, t3;
+ int ref;
+
+ if (!a)
+ return NULL;
+
+ ref = lhp_prop_axis(a);
+
+ switch (a->unit) {
+ case LCSP_UNIT_LENGTH_EM:
+ return lws_fx_mul((lws_fx_t *)&a->r, &a->u.i, &f->em);
+
+ case LCSP_UNIT_LENGTH_EX:
+ return lws_fx_mul((lws_fx_t *)&a->r, &a->u.i, &f->ex);
+
+ case LCSP_UNIT_LENGTH_IN: /* (inches * 2.54 * hwmm) / hwpx */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+ return lws_fx_div((lws_fx_t *)&a->r, lws_fx_mul(&t2,
+ lws_fx_mul(&t3, &a->u.i, &c_254),
+ &ctx->ic.wh_mm[ref]), &ctx->ic.wh_px[ref]);
+
+ case LCSP_UNIT_LENGTH_CM: /* (cm * 10 * hwmm) / hwpx */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+ return lws_fx_div((lws_fx_t *)&a->r,
+ lws_fx_mul(&t2,
+ lws_fx_mul(&t3, &a->u.i, &c_10),
+ &ctx->ic.wh_mm[ref]), &ctx->ic.wh_px[ref]);
+ case LCSP_UNIT_LENGTH_MM: /* (mm * hwmm) / hwpx */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+ return lws_fx_div((lws_fx_t *)&a->r, lws_fx_mul(&t2,
+ &a->u.i, &ctx->ic.wh_mm[ref]), &ctx->ic.wh_px[ref]);
+
+ case LCSP_UNIT_LENGTH_PT: /* ((pt * 2.54 * hwmm) / hwpx ) / 72 */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+ return lws_fx_div((lws_fx_t *)&a->r, lws_fx_div(&t1,
+ lws_fx_mul(&t2, lws_fx_mul(&t3,
+ &a->u.i, &c_254),
+ &ctx->ic.wh_mm[ref]),
+ &ctx->ic.wh_px[ref]), &c_72);
+
+ case LCSP_UNIT_LENGTH_PC: /* ((pc * 2.54 * hwmm) / hwpx ) / 6 */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+ return lws_fx_div((lws_fx_t *)&a->r, lws_fx_div(&t1,
+ lws_fx_mul(&t2, lws_fx_mul(&t3,
+ &a->u.i, &c_254), &ctx->ic.wh_mm[ref]),
+ &ctx->ic.wh_px[ref]), &c_6);
+ case LCSP_UNIT_LENGTH_PX: /* px */
+ return &a->u.i;
+
+ case LCSP_UNIT_LENGTH_PERCENT: /* (percent * psb->w) / 100 */
+ if (ref == LWS_LHPREF_NONE)
+ break;
+
+ t1.whole = 0;
+ t1.frac = 0;
+
+ lws_css_compute_cascaded_length(ctx, ref, ps, &t1);
+
+ return lws_fx_div((lws_fx_t *)&a->r,
+ lws_fx_mul(&t2, &a->u.i, &t1), &c_100);
+
+ default:
+ break;
+ }
+
+ return &a->u.i;
+}
+
+static lhp_atr_t *
+lhp_atr_new(lhp_ctx_t *ctx, size_t name_len, size_t value_len)
+{
+ lhp_pstack_t *ps = lws_container_of(ctx->stack.tail, lhp_pstack_t, list);
+
+ /* create the element name attribute */
+ lhp_atr_t *a = lws_malloc(sizeof(*a) + name_len + 1 + value_len + 1,
+ "html_elem_atr");
+ size_t n;
+
+ if (!a)
+ return NULL;
+
+ if (!ps->atr.count) {
+ /* only check the tag string, not the attributes */
+ ctx->u.f.void_element = 0;
+
+ /*
+ * mark ps that are elements that contain others for layout as
+ * being the parent block
+ */
+ if ((name_len == 4 && !strncmp(ctx->buf, "body", 4)) ||
+ (name_len == 3 && !strncmp(ctx->buf, "div", 3)))
+ ps->is_block = 1;
+
+ for (n = 0; n < LWS_ARRAY_SIZE(void_elems); n++)
+ if (ctx->npos == void_elems_lens[n] &&
+ !strncmp(void_elems[n], ctx->buf, (size_t)ctx->npos))
+ ctx->u.f.void_element = 1;
+ }
+
+ lws_dll2_clear(&a->list);
+ a->name_len = name_len;
+ a->value_len = value_len;
+ ctx->buf[ctx->npos] = '\0';
+ memcpy(&a[1], ctx->buf, (unsigned int)ctx->npos + 1u);
+ *(((uint8_t *)&a[1]) + name_len) = '\0';
+ lws_dll2_add_tail(&a->list, &ps->atr);
+
+ ctx->npos = 0;
+
+ return a;
+}
+
+static int
+hspace(uint8_t c)
+{
+ return c == ' ' || c == 9 || c == 10 || c == 12 || c == 13;
+}
+
+void
+lhp_uni_emit(lhp_ctx_t *ctx)
+{
+ /* emit */
+ if (ctx->temp <= 0x7f) {
+ ctx->buf[ctx->npos++] = (char)(ctx->temp & 0x7f);
+ return;
+ }
+ if (ctx->temp <= 0x7ff) {
+ ctx->buf[ctx->npos++] = (char)(0xc0 | ((uint8_t)(ctx->temp >> 6) & 0x1f));
+ goto a;
+ }
+ if (ctx->temp <= 0xffff) {
+ ctx->buf[ctx->npos++] = (char)(0xe0 | ((uint8_t)(ctx->temp >> 12) & 0xf));
+ goto b;
+ }
+ if (ctx->temp <= 0x10ffff) {
+ ctx->buf[ctx->npos++] = (char)(0xf0 | ((uint8_t)(ctx->temp >> 18) & 7));
+ ctx->buf[ctx->npos++] = (char)(0x80 | ((uint8_t)(ctx->temp >> 12) & 0x3f));
+ }
+b:
+ ctx->buf[ctx->npos++] = (char)(0x80 | ((uint8_t)(ctx->temp >> 6) & 0x3f));
+a:
+ ctx->buf[ctx->npos++] = (char)(0x80 | ((uint8_t)(ctx->temp) & 0x3f));
+}
+
+static int
+lcsp_append_cssval_int(lhp_ctx_t *ctx)
+{
+ lcsp_atr_t *atr = lwsac_use_zero(&ctx->cssac, sizeof(*atr), LHP_AC_GRANULE);
+ if (!atr)
+ return 1;
+
+ /* add this prop value atr to the def */
+
+ //lwsl_err("%s: tf %d.%u\n", __func__, ctx->tf.whole, ctx->tf.frac);
+ atr->u.i = ctx->tf;
+ atr->unit = ctx->unit;
+
+ lws_dll2_add_tail(&atr->list, &ctx->def->atrs);
+
+ return 0;
+}
+
+static int
+lcsp_append_cssval_color(lhp_ctx_t *ctx)
+{
+ lcsp_atr_t *atr = lwsac_use_zero(&ctx->cssac, sizeof(*atr), LHP_AC_GRANULE);
+ unsigned int r, g, b, a = 0xff;
+
+ if (!atr)
+ return 1;
+
+ /* add this prop value atr to the def */
+
+ switch (ctx->temp_count) {
+ case 3:
+ r = (ctx->temp >> 8) & 0xf;
+ g = (ctx->temp >> 4) & 0xf;
+ b = ctx->temp & 0xf;
+ atr->u.rgba = (a << 24) | (b << 20) | (b << 16) |
+ (g << 12) | (g << 8) | (r << 4) | r;
+ break;
+ case 4:
+ r = (ctx->temp >> 12) & 0xf;
+ g = (ctx->temp >> 8) & 0xf;
+ b = (ctx->temp >> 4) & 0xf;
+ a = ctx->temp & 0xf;
+ atr->u.rgba = (a << 28) | (a << 24) | (b << 20) | (b << 16) |
+ (g << 12) | (g << 8) | (r << 4) | r;
+ break;
+ case 6:
+ r = (ctx->temp >> 16) & 0xff;
+ g = (ctx->temp >> 8) & 0xff;
+ b = (ctx->temp) & 0xff;
+ atr->u.rgba = (a << 24) | (b << 16) | (g << 8) | r;
+ break;
+ case 8:
+ r = (ctx->temp >> 24) & 0xff;
+ g = (ctx->temp >> 16) & 0xff;
+ b = (ctx->temp >> 8) & 0xff;
+ a = (ctx->temp) & 0xff;
+ atr->u.rgba = (a << 24) | (b << 16) | (g << 8) | r;
+ break;
+ }
+
+ // lwsl_err("%s: %d, 0x%08x, 0x%08x\n", __func__, ctx->temp_count, ctx->temp, atr->u.rgba);
+
+ atr->unit = LCSP_UNIT_RGBA;
+
+ lws_dll2_add_tail(&atr->list, &ctx->def->atrs);
+
+ ctx->u.f.color = 0;
+ ctx->temp = 0;
+ ctx->temp_count = 0;
+
+ return 0;
+}
+
+static int
+lcsp_append_cssval_string(lhp_ctx_t *ctx)
+{
+ lcsp_atr_t *atr;
+ char *v, *c = &ctx->buf[0];
+
+ if (c[0] == '\"' || c[0] == '\'') {
+ c++;
+ ctx->npos--;
+ }
+ if (ctx->npos && (c[ctx->npos - 1] == '\"' || c[ctx->npos - 1] == '\''))
+ ctx->npos--;
+
+ atr = lwsac_use_zero(&ctx->cssac, sizeof(*atr) + (size_t)ctx->npos + 1u,
+ LHP_AC_GRANULE);
+ if (!atr)
+ return 1;
+
+ v = (char *)&atr[1];
+ atr->value_len = (size_t)ctx->npos;
+ memcpy(v, c, (size_t)ctx->npos);
+ v[ctx->npos] = '\0';
+
+ //lwsl_notice("%s: %s\n", __func__, v);
+
+ lws_dll2_add_tail(&atr->list, &ctx->def->atrs);
+
+ return 0;
+}
+
+static int
+lws_css_cascade_atr_match(lhp_ctx_t *ctx, const char *tag, size_t tag_len)
+{
+ lws_start_foreach_dll(struct lws_dll2 *, q, ctx->css.head) {
+ lcsp_stanza_t *stz = lws_container_of(q, lcsp_stanza_t, list);
+
+ /* ... does this stanza mention our name? */
+
+ lws_start_foreach_dll(struct lws_dll2 *, z, stz->names.head) {
+ lcsp_names_t *nm = lws_container_of(z, lcsp_names_t,
+ list);
+ const char *p = (const char *)&nm[1];
+ size_t nl = nm->name_len;
+
+ if (nl && *p == '.') { /* match .mycss as mycss */
+ p++;
+ nl--;
+ }
+
+ if (nl == tag_len && !memcmp(p, tag, tag_len)) {
+
+ lcsp_stanza_ptr_t *sp = lwsac_use_zero(
+ &ctx->cascadeac,
+ sizeof(*sp), LHP_AC_GRANULE);
+ if (!sp)
+ return 1;
+
+ sp->stz = stz;
+ lws_dll2_add_tail(&sp->list,
+ &ctx->active_stanzas);
+ break;
+ }
+
+ } lws_end_foreach_dll(z);
+
+ } lws_end_foreach_dll(q);
+
+ return 0;
+}
+
+const char *
+lws_html_get_atr(lhp_pstack_t *ps, const char *aname, size_t aname_len)
+{
+ /* look for src= attribute */
+ lws_start_foreach_dll(struct lws_dll2 *, p,
+ lws_dll2_get_head(&ps->atr)) {
+ const lhp_atr_t *at = lws_container_of(p,
+ lhp_atr_t, list);
+ const char *ats = (const char *)&at[1];
+
+ if (at->name_len == aname_len && !strcmp(ats, aname))
+ return ats + aname_len + 1;
+
+ } lws_end_foreach_dll(p);
+
+ return NULL;
+}
+
+/*
+ * Produce an ordered list of css stanzas that apply to the current html
+ * parsing context, accounting for class="xxx" at each level
+ */
+
+static int
+lws_css_cascade(lhp_ctx_t *ctx)
+{
+ lws_dll2_owner_clear(&ctx->active_stanzas);
+ lwsac_free(&ctx->cascadeac);
+ lws_dll2_owner_clear(&ctx->active_atr);
+ lwsac_free(&ctx->propatrac);
+ ctx->in_body = 0;
+
+ /* let's proceed through the html element stack that applies */
+
+ lws_start_foreach_dll(struct lws_dll2 *, p, ctx->stack.head) {
+ lhp_pstack_t *ps = lws_container_of(p, lhp_pstack_t, list);
+
+ /*
+ * if there is a css definition for the html entity at this
+ * stack level, add its stanza to the results
+ */
+
+ lws_start_foreach_dll(struct lws_dll2 *, ha, ps->atr.head) {
+ lhp_atr_t *a = lws_container_of(ha, lhp_atr_t, list);
+ struct lws_tokenize ts;
+
+ memset(&ts, 0, sizeof(ts));
+
+ if (ha == ps->atr.head) {
+ ts.start = (const char *)&a[1];
+ ts.len = a->name_len;
+ }
+
+
+ if (a->name_len == 5 &&
+ !strcmp((const char *)&a[1], "class")) {
+ ts.start = ((const char *)&a[1]) + 5 + 1;
+ ts.len = a->value_len;
+ }
+
+ do {
+ ts.e = (int8_t)lws_tokenize(&ts);
+ if (ts.e == LWS_TOKZE_TOKEN) {
+
+ if (ha == ps->atr.head &&
+ ts.token_len == 4 &&
+ !memcmp(ts.token, "body", 4))
+ ctx->in_body = 1;
+
+ /*
+ * let's look through the css stanzas
+ * for a tag match
+ */
+
+ if (lws_css_cascade_atr_match(ctx,
+ ts.token, ts.token_len))
+ return 1;
+ }
+
+ } while (ts.e > 0);
+
+ } lws_end_foreach_dll(ha);
+
+ /*
+ * ... fill layout-related CSS lookups into the element
+ * stack item... these are all pointers to the attribute
+ * not necessarily computed scalars. Eg lws_csp_px() can be
+ * used later to resolve atr like 50% to pixel values.
+ */
+
+ ps->css_position = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_POSITION);
+ ps->css_width = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_WIDTH);
+ ps->css_height = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_HEIGHT);
+ ps->css_display = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_DISPLAY);
+
+ ps->css_border_radius[0] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_TOP_LEFT_RADIUS);
+ ps->css_border_radius[1] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_TOP_RIGHT_RADIUS);
+ ps->css_border_radius[2] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_BOTTOM_LEFT_RADIUS);
+ ps->css_border_radius[3] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BORDER_BOTTOM_RIGHT_RADIUS);
+
+ ps->css_background_color = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BACKGROUND_COLOR);
+ ps->css_color = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_COLOR);
+
+ ps->css_pos[CCPAS_TOP] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_TOP);
+ ps->css_pos[CCPAS_RIGHT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_RIGHT);
+ ps->css_pos[CCPAS_BOTTOM] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_BOTTOM);
+ ps->css_pos[CCPAS_LEFT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_LEFT);
+
+ ps->css_margin[CCPAS_TOP] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_TOP);
+ ps->css_margin[CCPAS_RIGHT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_RIGHT);
+ ps->css_margin[CCPAS_BOTTOM] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_BOTTOM);
+ ps->css_margin[CCPAS_LEFT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_MARGIN_LEFT);
+
+ ps->css_padding[CCPAS_TOP] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_TOP);
+ ps->css_padding[CCPAS_RIGHT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_RIGHT);
+ ps->css_padding[CCPAS_BOTTOM] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_BOTTOM);
+ ps->css_padding[CCPAS_LEFT] = lws_css_cascade_get_prop_atr(ctx, LCSP_PROP_PADDING_LEFT);
+
+ } lws_end_foreach_dll(p);
+
+ return 0;
+}
+
+void
+lws_lhp_destruct(lhp_ctx_t *ctx)
+{
+ if (ctx->base_url) {
+ free((void *)ctx->base_url);
+ ctx->base_url = NULL;
+ }
+ lws_dll2_foreach_safe(&ctx->stack, NULL, lhp_clean_stack);
+ lws_dll2_owner_clear(&ctx->active_stanzas);
+ lws_dll2_owner_clear(&ctx->active_atr);
+ lwsac_free(&ctx->propatrac);
+ lwsac_free(&ctx->cascadeac);
+ lwsac_free(&ctx->cssac);
+}
+
+void
+lws_lhp_tag_dlo_id(lhp_ctx_t *ctx, lhp_pstack_t *ps, lws_dlo_t *dlo)
+{
+ const char *pname;
+
+ /* Deal with ID matching */
+
+ pname = lws_html_get_atr(ps, "id", 2);
+ if (!pname)
+ return;
+
+ lws_start_foreach_dll(struct lws_dll2 *, d, lws_dll2_get_head(ctx->ids)) {
+ lws_display_id_t *id = lws_container_of(d, lws_display_id_t, list);
+
+ if (!strcmp(pname, id->id)) {
+ dlo->id = id;
+ id->exists = 1;
+ lwsl_debug("%s: %s tagged\n", __func__, pname);
+ return;
+ }
+
+ } lws_end_foreach_dll(d);
+}
+
+lws_stateful_ret_t
+lws_lhp_parse(lhp_ctx_t *ctx, const uint8_t **buf, size_t *len)
+{
+ lhp_pstack_t *ps1, *ps = lws_container_of(ctx->stack.tail,
+ lhp_pstack_t, list);
+ struct lws_context *cx = (struct lws_context *)ctx->user1;
+ lws_dl_rend_t *drt = (lws_dl_rend_t *)ctx->user;
+ lws_stateful_ret_t r;
+ const uint8_t *rbuf;
+ size_t rsize;
+ lhp_atr_t *a;
+
+ if (ctx->await_css_done && !ctx->is_css)
+ return LWS_SRET_AWAIT_RETRY;
+
+ assert(drt);
+
+ if (!*len && ctx->is_css && ctx->await_css_done && ctx->finish_css)
+ goto finish_css;
+
+ while (*len) {
+ uint8_t c = *(*buf)++;
+
+ (*len)--;
+
+ if (ctx->state == LHPS_DO_START_ELEM) {
+ /* we are retrying the inner callback */
+ (*len)++;
+ (*buf)--;
+ }
+
+ // lwsl_notice("%s: %d, '%c', %02X\n", __func__, ctx->state, c, c);
+
+ switch (ctx->state) {
+
+ case LHPS_INIT:
+
+ /* default css injection first, then... */
+
+ ctx->state = LCSPS_CSS_OUTER;
+ ctx->u.f.default_css = 1;
+ /*
+ * recurse (there's no stack usage to speak of) to
+ * do the default css parse first, CSS doesn't have a
+ * way to recurse further.
+ */
+ rbuf = (const uint8_t *)default_css;
+ rsize = strlen(default_css);
+ r = lws_lhp_parse(ctx, &rbuf, &rsize);
+ if (r >= LWS_SRET_FATAL) {
+ lwsl_err("%s: css parse fail\n", __func__);
+ return r;
+ }
+ ctx->u.f.default_css = 0;
+ ctx->npos = 0;
+ ctx->state = LHPS_OUTER;
+
+ /* fallthru */
+
+ case LHPS_OUTER:
+ switch (c) {
+ case '<':
+ ctx->u.s = 0;
+ ctx->u.f.first = 1;
+
+ ctx->tag = NULL;
+ ctx->tag_len = 0;
+
+ ctx->state = LHPS_TAG;
+
+ if (ctx->stack.count == LHP_MAX_ELEMS_NEST /* sanity */) {
+ lwsl_err("%s: MAX_ELEMS_NEST\n", __func__);
+ ps->cb(ctx, LHPCB_FAILED);
+ return LWS_SRET_FATAL;
+
+ }
+
+ ps1 = lws_zalloc(sizeof(*ps1), __func__);
+ if (!ps1)
+ goto oom;
+
+ /* inherit user and cb to start with */
+ ps1->user = ps->user;
+ ps1->cb = ps->cb;
+ lws_dll2_owner_clear(&ps1->atr);
+ lws_dll2_add_tail(&ps1->list, &ctx->stack);
+ ps = ps1;
+ break;
+
+ case '&':
+ ctx->state = LHPS_AMP;
+ ctx->temp_count = 0;
+ continue;
+
+ case '\t':
+ case '\n':
+ c = ' ';
+ /* fallthru */
+ default:
+ if (c != ' ' || !ctx->npos ||
+ ctx->buf[ctx->npos - 1] != ' ')
+ ctx->buf[ctx->npos++] = (char)c;
+ break;
+ }
+
+ if (ctx->npos &&
+ (ctx->state != LHPS_OUTER ||
+ ctx->npos >= LHP_STRING_CHUNK - 4)) {
+ if (ctx->in_body && (ctx->npos != 1 || ctx->buf[0] != ' ')) {
+ lws_css_cascade(ctx);
+ ps->cb(ctx, LHPCB_CONTENT);
+ }
+ ctx->npos = 0;
+ }
+ break;
+
+ case LHPS_TAG:
+ if (c == '!' && ctx->u.f.first) {
+ ctx->state = LHPS_SCOMMENT1;
+ ctx->u.f.first = 0;
+ break;
+ }
+
+ if (c == '/' && ctx->u.f.first) {
+ /* remove the level we just prepared for this */
+ lhp_clean_level(ps);
+ ps = lws_container_of(ctx->stack.tail,
+ lhp_pstack_t, list);
+ ctx->u.f.closing = 1;
+ ctx->u.f.first = 0;
+ break;
+ }
+ ctx->u.f.first = 0;
+
+ /* it implies the end of the tag name */
+
+ if (hspace(c) || c == '/' || c == '>') {
+ if (!ctx->u.f.tag_used && ctx->npos && !ctx->u.f.closing) {
+ a = lhp_atr_new(ctx, (size_t)ctx->npos, 0);
+ if (!a)
+ goto oom;
+ ctx->tag = (const char *)&a[1];
+ ctx->tag_len = a->name_len;
+
+ ctx->u.f.tag_used = 1;
+
+ if (ctx->tag_len == 8 &&
+ !strncasecmp(ctx->buf, "!doctype", 8))
+ ctx->u.f.doctype = 1;
+ }
+
+ if (c != '/' && c != '>') {
+
+ /* after that, there may be attributes */
+ ctx->state = LHPS_ATTRIB;
+ break;
+ }
+
+ /* "
+ "\n"
+ "libwebsockets.org
\n"
+ "A bunch of normal text, long enough that it is going to want to wrap
"
+ "bold, normal
\n"
+ "
"
+ "\n"
+ "