/* Generated by re2c */
#line 1 "encodings/unicode_group_M_x_encoding_policy_substitute.re"
// re2c $INPUT -o $OUTPUT -x --encoding-policy substitute
#include <stdio.h>
#include "utf16.h"
#define YYCTYPE unsigned short
bool scan(const YYCTYPE * start, const YYCTYPE * const limit)
{
	__attribute__((unused)) const YYCTYPE * YYMARKER; // silence compiler warnings when YYMARKER is not used
#	define YYCURSOR start
M:
	
#line 14 "encodings/unicode_group_M_x_encoding_policy_substitute.c"
{
	YYCTYPE yych;
	yych = *YYCURSOR;
	if (yych <= 0x0F35) {
		if (yych <= 0x0AC6) {
			if (yych <= 0x08D2) {
				if (yych <= 0x06E4) {
					if (yych <= 0x05C5) {
						if (yych <= 0x05BD) {
							if (yych <= 0x0482) {
								if (yych <= 0x02FF) goto yy1;
								if (yych <= 0x036F) goto yy3;
							} else {
								if (yych <= 0x0489) goto yy3;
								if (yych >= 0x0591) goto yy3;
							}
						} else {
							if (yych <= 0x05C0) {
								if (yych == 0x05BF) goto yy3;
							} else {
								if (yych != 0x05C3) goto yy3;
							}
						}
					} else {
						if (yych <= 0x065F) {
							if (yych <= 0x060F) {
								if (yych == 0x05C7) goto yy3;
							} else {
								if (yych <= 0x061A) goto yy3;
								if (yych >= 0x064B) goto yy3;
							}
						} else {
							if (yych <= 0x06D5) {
								if (yych == 0x0670) goto yy3;
							} else {
								if (yych <= 0x06DC) goto yy3;
								if (yych >= 0x06DF) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x07F3) {
						if (yych <= 0x0711) {
							if (yych <= 0x06E9) {
								if (yych <= 0x06E6) goto yy1;
								if (yych <= 0x06E8) goto yy3;
							} else {
								if (yych <= 0x06ED) goto yy3;
								if (yych >= 0x0711) goto yy3;
							}
						} else {
							if (yych <= 0x07A5) {
								if (yych <= 0x072F) goto yy1;
								if (yych <= 0x074A) goto yy3;
							} else {
								if (yych <= 0x07B0) goto yy3;
								if (yych >= 0x07EB) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0823) {
							if (yych <= 0x0815) {
								if (yych == 0x07FD) goto yy3;
							} else {
								if (yych != 0x081A) goto yy3;
							}
						} else {
							if (yych <= 0x0828) {
								if (yych <= 0x0824) goto yy1;
								if (yych <= 0x0827) goto yy3;
							} else {
								if (yych <= 0x082D) goto yy3;
								if (yych <= 0x0858) goto yy1;
								if (yych <= 0x085B) goto yy3;
							}
						}
					}
				}
			} else {
				if (yych <= 0x09E3) {
					if (yych <= 0x0980) {
						if (yych <= 0x093D) {
							if (yych <= 0x0903) {
								if (yych != 0x08E2) goto yy3;
							} else {
								if (yych <= 0x0939) goto yy1;
								if (yych <= 0x093C) goto yy3;
							}
						} else {
							if (yych <= 0x0957) {
								if (yych != 0x0950) goto yy3;
							} else {
								if (yych <= 0x0961) goto yy1;
								if (yych <= 0x0963) goto yy3;
							}
						}
					} else {
						if (yych <= 0x09C6) {
							if (yych <= 0x09BC) {
								if (yych <= 0x0983) goto yy3;
								if (yych >= 0x09BC) goto yy3;
							} else {
								if (yych <= 0x09BD) goto yy1;
								if (yych <= 0x09C4) goto yy3;
							}
						} else {
							if (yych <= 0x09CD) {
								if (yych <= 0x09C8) goto yy3;
								if (yych >= 0x09CB) goto yy3;
							} else {
								if (yych == 0x09D7) goto yy3;
								if (yych >= 0x09E2) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x0A4D) {
						if (yych <= 0x0A3C) {
							if (yych <= 0x0A00) {
								if (yych == 0x09FE) goto yy3;
							} else {
								if (yych <= 0x0A03) goto yy3;
								if (yych >= 0x0A3C) goto yy3;
							}
						} else {
							if (yych <= 0x0A46) {
								if (yych <= 0x0A3D) goto yy1;
								if (yych <= 0x0A42) goto yy3;
							} else {
								if (yych <= 0x0A48) goto yy3;
								if (yych >= 0x0A4B) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0A75) {
							if (yych <= 0x0A6F) {
								if (yych == 0x0A51) goto yy3;
							} else {
								if (yych <= 0x0A71) goto yy3;
								if (yych >= 0x0A75) goto yy3;
							}
						} else {
							if (yych <= 0x0ABB) {
								if (yych <= 0x0A80) goto yy1;
								if (yych <= 0x0A83) goto yy3;
							} else {
								if (yych == 0x0ABD) goto yy1;
								if (yych <= 0x0AC5) goto yy3;
							}
						}
					}
				}
			}
		} else {
			if (yych <= 0x0CC4) {
				if (yych <= 0x0BBD) {
					if (yych <= 0x0B3D) {
						if (yych <= 0x0AF9) {
							if (yych <= 0x0ACD) {
								if (yych != 0x0ACA) goto yy3;
							} else {
								if (yych <= 0x0AE1) goto yy1;
								if (yych <= 0x0AE3) goto yy3;
							}
						} else {
							if (yych <= 0x0B03) {
								if (yych != 0x0B00) goto yy3;
							} else {
								if (yych == 0x0B3C) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0B55) {
							if (yych <= 0x0B48) {
								if (yych <= 0x0B44) goto yy3;
								if (yych >= 0x0B47) goto yy3;
							} else {
								if (yych <= 0x0B4A) goto yy1;
								if (yych <= 0x0B4D) goto yy3;
							}
						} else {
							if (yych <= 0x0B63) {
								if (yych <= 0x0B57) goto yy3;
								if (yych >= 0x0B62) goto yy3;
							} else {
								if (yych == 0x0B82) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x0C45) {
						if (yych <= 0x0BD6) {
							if (yych <= 0x0BC8) {
								if (yych <= 0x0BC2) goto yy3;
								if (yych >= 0x0BC6) goto yy3;
							} else {
								if (yych <= 0x0BC9) goto yy1;
								if (yych <= 0x0BCD) goto yy3;
							}
						} else {
							if (yych <= 0x0C04) {
								if (yych <= 0x0BD7) goto yy3;
								if (yych >= 0x0C00) goto yy3;
							} else {
								if (yych <= 0x0C3D) goto yy1;
								if (yych <= 0x0C44) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0C61) {
							if (yych <= 0x0C4D) {
								if (yych != 0x0C49) goto yy3;
							} else {
								if (yych <= 0x0C54) goto yy1;
								if (yych <= 0x0C56) goto yy3;
							}
						} else {
							if (yych <= 0x0C83) {
								if (yych <= 0x0C63) goto yy3;
								if (yych >= 0x0C81) goto yy3;
							} else {
								if (yych == 0x0CBC) goto yy3;
								if (yych >= 0x0CBE) goto yy3;
							}
						}
					}
				}
			} else {
				if (yych <= 0x0DC9) {
					if (yych <= 0x0D3C) {
						if (yych <= 0x0CD6) {
							if (yych <= 0x0CC9) {
								if (yych <= 0x0CC5) goto yy1;
								if (yych <= 0x0CC8) goto yy3;
							} else {
								if (yych <= 0x0CCD) goto yy3;
								if (yych >= 0x0CD5) goto yy3;
							}
						} else {
							if (yych <= 0x0CFF) {
								if (yych <= 0x0CE1) goto yy1;
								if (yych <= 0x0CE3) goto yy3;
							} else {
								if (yych <= 0x0D03) goto yy3;
								if (yych >= 0x0D3B) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0D4D) {
							if (yych <= 0x0D45) {
								if (yych <= 0x0D3D) goto yy1;
								if (yych <= 0x0D44) goto yy3;
							} else {
								if (yych != 0x0D49) goto yy3;
							}
						} else {
							if (yych <= 0x0D61) {
								if (yych == 0x0D57) goto yy3;
							} else {
								if (yych <= 0x0D63) goto yy3;
								if (yych <= 0x0D81) goto yy1;
								if (yych <= 0x0D83) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x0E33) {
						if (yych <= 0x0DD7) {
							if (yych <= 0x0DD4) {
								if (yych <= 0x0DCA) goto yy3;
								if (yych >= 0x0DCF) goto yy3;
							} else {
								if (yych == 0x0DD6) goto yy3;
							}
						} else {
							if (yych <= 0x0DF3) {
								if (yych <= 0x0DDF) goto yy3;
								if (yych >= 0x0DF2) goto yy3;
							} else {
								if (yych == 0x0E31) goto yy3;
							}
						}
					} else {
						if (yych <= 0x0EB3) {
							if (yych <= 0x0E4E) {
								if (yych <= 0x0E3A) goto yy3;
								if (yych >= 0x0E47) goto yy3;
							} else {
								if (yych == 0x0EB1) goto yy3;
							}
						} else {
							if (yych <= 0x0ECD) {
								if (yych <= 0x0EBC) goto yy3;
								if (yych >= 0x0EC8) goto yy3;
							} else {
								if (yych <= 0x0F17) goto yy1;
								if (yych <= 0x0F19) goto yy3;
								if (yych >= 0x0F35) goto yy3;
							}
						}
					}
				}
			}
		}
	} else {
		if (yych <= 0x2CEE) {
			if (yych <= 0x180A) {
				if (yych <= 0x1064) {
					if (yych <= 0x0F97) {
						if (yych <= 0x0F3F) {
							if (yych <= 0x0F38) {
								if (yych == 0x0F37) goto yy3;
							} else {
								if (yych <= 0x0F39) goto yy3;
								if (yych >= 0x0F3E) goto yy3;
							}
						} else {
							if (yych <= 0x0F85) {
								if (yych <= 0x0F70) goto yy1;
								if (yych <= 0x0F84) goto yy3;
							} else {
								if (yych <= 0x0F87) goto yy3;
								if (yych >= 0x0F8D) goto yy3;
							}
						}
					} else {
						if (yych <= 0x103E) {
							if (yych <= 0x0FC5) {
								if (yych <= 0x0F98) goto yy1;
								if (yych <= 0x0FBC) goto yy3;
							} else {
								if (yych <= 0x0FC6) goto yy3;
								if (yych >= 0x102B) goto yy3;
							}
						} else {
							if (yych <= 0x105D) {
								if (yych <= 0x1055) goto yy1;
								if (yych <= 0x1059) goto yy3;
							} else {
								if (yych != 0x1061) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x135F) {
						if (yych <= 0x108D) {
							if (yych <= 0x1070) {
								if (yych <= 0x1066) goto yy1;
								if (yych <= 0x106D) goto yy3;
							} else {
								if (yych <= 0x1074) goto yy3;
								if (yych >= 0x1082) goto yy3;
							}
						} else {
							if (yych <= 0x1099) {
								if (yych == 0x108F) goto yy3;
							} else {
								if (yych <= 0x109D) goto yy3;
								if (yych >= 0x135D) goto yy3;
							}
						}
					} else {
						if (yych <= 0x1753) {
							if (yych <= 0x1731) {
								if (yych <= 0x1711) goto yy1;
								if (yych <= 0x1714) goto yy3;
							} else {
								if (yych <= 0x1734) goto yy3;
								if (yych >= 0x1752) goto yy3;
							}
						} else {
							if (yych <= 0x17B3) {
								if (yych <= 0x1771) goto yy1;
								if (yych <= 0x1773) goto yy3;
							} else {
								if (yych <= 0x17D3) goto yy3;
								if (yych == 0x17DD) goto yy3;
							}
						}
					}
				}
			} else {
				if (yych <= 0x1B73) {
					if (yych <= 0x1A54) {
						if (yych <= 0x191F) {
							if (yych <= 0x1886) {
								if (yych <= 0x180D) goto yy3;
								if (yych >= 0x1885) goto yy3;
							} else {
								if (yych == 0x18A9) goto yy3;
							}
						} else {
							if (yych <= 0x193B) {
								if (yych <= 0x192B) goto yy3;
								if (yych >= 0x1930) goto yy3;
							} else {
								if (yych <= 0x1A16) goto yy1;
								if (yych <= 0x1A1B) goto yy3;
							}
						}
					} else {
						if (yych <= 0x1AAF) {
							if (yych <= 0x1A7C) {
								if (yych != 0x1A5F) goto yy3;
							} else {
								if (yych == 0x1A7F) goto yy3;
							}
						} else {
							if (yych <= 0x1B04) {
								if (yych <= 0x1ABE) goto yy3;
								if (yych >= 0x1B00) goto yy3;
							} else {
								if (yych <= 0x1B33) goto yy1;
								if (yych <= 0x1B44) goto yy3;
								if (yych >= 0x1B6B) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0x1CE8) {
						if (yych <= 0x1BF3) {
							if (yych <= 0x1BA0) {
								if (yych <= 0x1B7F) goto yy1;
								if (yych <= 0x1B82) goto yy3;
							} else {
								if (yych <= 0x1BAD) goto yy3;
								if (yych >= 0x1BE6) goto yy3;
							}
						} else {
							if (yych <= 0x1CCF) {
								if (yych <= 0x1C23) goto yy1;
								if (yych <= 0x1C37) goto yy3;
							} else {
								if (yych != 0x1CD3) goto yy3;
							}
						}
					} else {
						if (yych <= 0x1CF9) {
							if (yych <= 0x1CF3) {
								if (yych == 0x1CED) goto yy3;
							} else {
								if (yych <= 0x1CF4) goto yy3;
								if (yych >= 0x1CF7) goto yy3;
							}
						} else {
							if (yych <= 0x1DFA) {
								if (yych <= 0x1DBF) goto yy1;
								if (yych <= 0x1DF9) goto yy3;
							} else {
								if (yych <= 0x1DFF) goto yy3;
								if (yych <= 0x20CF) goto yy1;
								if (yych <= 0x20F0) goto yy3;
							}
						}
					}
				}
			}
		} else {
			if (yych <= 0xAA7A) {
				if (yych <= 0xA827) {
					if (yych <= 0xA673) {
						if (yych <= 0x3029) {
							if (yych <= 0x2D7F) {
								if (yych <= 0x2CF1) goto yy3;
								if (yych >= 0x2D7F) goto yy3;
							} else {
								if (yych <= 0x2DDF) goto yy1;
								if (yych <= 0x2DFF) goto yy3;
							}
						} else {
							if (yych <= 0x309A) {
								if (yych <= 0x302F) goto yy3;
								if (yych >= 0x3099) goto yy3;
							} else {
								if (yych <= 0xA66E) goto yy1;
								if (yych <= 0xA672) goto yy3;
							}
						}
					} else {
						if (yych <= 0xA801) {
							if (yych <= 0xA69F) {
								if (yych <= 0xA67D) goto yy3;
								if (yych >= 0xA69E) goto yy3;
							} else {
								if (yych <= 0xA6EF) goto yy1;
								if (yych <= 0xA6F1) goto yy3;
							}
						} else {
							if (yych <= 0xA806) {
								if (yych <= 0xA802) goto yy3;
								if (yych >= 0xA806) goto yy3;
							} else {
								if (yych == 0xA80B) goto yy3;
								if (yych >= 0xA823) goto yy3;
							}
						}
					}
				} else {
					if (yych <= 0xA953) {
						if (yych <= 0xA8F1) {
							if (yych <= 0xA8B3) {
								if (yych <= 0xA87F) goto yy1;
								if (yych <= 0xA881) goto yy3;
							} else {
								if (yych <= 0xA8C5) goto yy3;
								if (yych >= 0xA8E0) goto yy3;
							}
						} else {
							if (yych <= 0xA925) {
								if (yych == 0xA8FF) goto yy3;
							} else {
								if (yych <= 0xA92D) goto yy3;
								if (yych >= 0xA947) goto yy3;
							}
						}
					} else {
						if (yych <= 0xA9E5) {
							if (yych <= 0xA9B2) {
								if (yych <= 0xA97F) goto yy1;
								if (yych <= 0xA983) goto yy3;
							} else {
								if (yych <= 0xA9C0) goto yy3;
								if (yych >= 0xA9E5) goto yy3;
							}
						} else {
							if (yych <= 0xAA42) {
								if (yych <= 0xAA28) goto yy1;
								if (yych <= 0xAA36) goto yy3;
							} else {
								if (yych <= 0xAA43) goto yy3;
								if (yych <= 0xAA4B) goto yy1;
								if (yych <= 0xAA4D) goto yy3;
							}
						}
					}
				}
			} else {
				if (yych <= 0xD804) {
					if (yych <= 0xAAEA) {
						if (yych <= 0xAAB6) {
							if (yych <= 0xAAB0) {
								if (yych <= 0xAA7D) goto yy3;
								if (yych >= 0xAAB0) goto yy3;
							} else {
								if (yych <= 0xAAB1) goto yy1;
								if (yych <= 0xAAB4) goto yy3;
							}
						} else {
							if (yych <= 0xAABF) {
								if (yych <= 0xAAB8) goto yy3;
								if (yych >= 0xAABE) goto yy3;
							} else {
								if (yych == 0xAAC1) goto yy3;
							}
						}
					} else {
						if (yych <= 0xABEB) {
							if (yych <= 0xAAF6) {
								if (yych <= 0xAAEF) goto yy3;
								if (yych >= 0xAAF5) goto yy3;
							} else {
								if (yych <= 0xABE2) goto yy1;
								if (yych <= 0xABEA) goto yy3;
							}
						} else {
							if (yych <= 0xD800) {
								if (yych <= 0xABED) goto yy3;
								if (yych >= 0xD800) goto yy4;
							} else {
								if (yych <= 0xD801) goto yy1;
								if (yych <= 0xD802) goto yy5;
								if (yych <= 0xD803) goto yy6;
								goto yy7;
							}
						}
					}
				} else {
					if (yych <= 0xD836) {
						if (yych <= 0xD81B) {
							if (yych <= 0xD807) {
								if (yych <= 0xD805) goto yy8;
								if (yych <= 0xD806) goto yy9;
								goto yy10;
							} else {
								if (yych <= 0xD819) goto yy1;
								if (yych <= 0xD81A) goto yy11;
								goto yy12;
							}
						} else {
							if (yych <= 0xD833) {
								if (yych == 0xD82F) goto yy13;
							} else {
								if (yych <= 0xD834) goto yy14;
								if (yych >= 0xD836) goto yy15;
							}
						}
					} else {
						if (yych <= 0xDB40) {
							if (yych <= 0xD839) {
								if (yych == 0xD838) goto yy16;
							} else {
								if (yych <= 0xD83A) goto yy17;
								if (yych >= 0xDB40) goto yy18;
							}
						} else {
							if (yych <= 0xFDFF) {
								if (yych == 0xFB1E) goto yy3;
							} else {
								if (yych <= 0xFE0F) goto yy3;
								if (yych <= 0xFE1F) goto yy1;
								if (yych <= 0xFE2F) goto yy3;
							}
						}
					}
				}
			}
		}
	}
yy1:
	++YYCURSOR;
yy2:
#line 14 "encodings/unicode_group_M_x_encoding_policy_substitute.re"
	{ return YYCURSOR == limit; }
#line 638 "encodings/unicode_group_M_x_encoding_policy_substitute.c"
yy3:
	++YYCURSOR;
#line 13 "encodings/unicode_group_M_x_encoding_policy_substitute.re"
	{ goto M; }
#line 643 "encodings/unicode_group_M_x_encoding_policy_substitute.c"
yy4:
	yych = *++YYCURSOR;
	if (yych <= 0xDEDF) {
		if (yych == 0xDDFD) goto yy3;
		goto yy2;
	} else {
		if (yych <= 0xDEE0) goto yy3;
		if (yych <= 0xDF75) goto yy2;
		if (yych <= 0xDF7A) goto yy3;
		goto yy2;
	}
yy5:
	yych = *++YYCURSOR;
	if (yych <= 0xDE0F) {
		if (yych <= 0xDE04) {
			if (yych <= 0xDE00) goto yy2;
			if (yych <= 0xDE03) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDE06) goto yy3;
			if (yych <= 0xDE0B) goto yy2;
			goto yy3;
		}
	} else {
		if (yych <= 0xDE3E) {
			if (yych <= 0xDE37) goto yy2;
			if (yych <= 0xDE3A) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDE3F) goto yy3;
			if (yych <= 0xDEE4) goto yy2;
			if (yych <= 0xDEE6) goto yy3;
			goto yy2;
		}
	}
yy6:
	yych = *++YYCURSOR;
	if (yych <= 0xDD23) goto yy2;
	if (yych <= 0xDD27) goto yy3;
	if (yych <= 0xDF45) goto yy2;
	if (yych <= 0xDF50) goto yy3;
	goto yy2;
yy7:
	yych = *++YYCURSOR;
	if (yych <= 0xDE2B) {
		if (yych <= 0xDD26) {
			if (yych <= 0xDC7E) {
				if (yych <= 0xDC02) {
					if (yych <= 0xDBFF) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDC37) goto yy2;
					if (yych <= 0xDC46) goto yy3;
					goto yy2;
				}
			} else {
				if (yych <= 0xDCBA) {
					if (yych <= 0xDC82) goto yy3;
					if (yych <= 0xDCAF) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDCFF) goto yy2;
					if (yych <= 0xDD02) goto yy3;
					goto yy2;
				}
			}
		} else {
			if (yych <= 0xDD7F) {
				if (yych <= 0xDD46) {
					if (yych <= 0xDD34) goto yy3;
					if (yych <= 0xDD44) goto yy2;
					goto yy3;
				} else {
					if (yych == 0xDD73) goto yy3;
					goto yy2;
				}
			} else {
				if (yych <= 0xDDC0) {
					if (yych <= 0xDD82) goto yy3;
					if (yych <= 0xDDB2) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDDC8) goto yy2;
					if (yych <= 0xDDCC) goto yy3;
					goto yy2;
				}
			}
		}
	} else {
		if (yych <= 0xDF46) {
			if (yych <= 0xDEFF) {
				if (yych <= 0xDE3E) {
					if (yych <= 0xDE37) goto yy3;
					if (yych <= 0xDE3D) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDEDE) goto yy2;
					if (yych <= 0xDEEA) goto yy3;
					goto yy2;
				}
			} else {
				if (yych <= 0xDF3C) {
					if (yych <= 0xDF03) goto yy3;
					if (yych <= 0xDF3A) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDF3D) goto yy2;
					if (yych <= 0xDF44) goto yy3;
					goto yy2;
				}
			}
		} else {
			if (yych <= 0xDF61) {
				if (yych <= 0xDF4D) {
					if (yych <= 0xDF48) goto yy3;
					if (yych <= 0xDF4A) goto yy2;
					goto yy3;
				} else {
					if (yych == 0xDF57) goto yy3;
					goto yy2;
				}
			} else {
				if (yych <= 0xDF6C) {
					if (yych <= 0xDF63) goto yy3;
					if (yych <= 0xDF65) goto yy2;
					goto yy3;
				} else {
					if (yych <= 0xDF6F) goto yy2;
					if (yych <= 0xDF74) goto yy3;
					goto yy2;
				}
			}
		}
	}
yy8:
	yych = *++YYCURSOR;
	if (yych <= 0xDDB7) {
		if (yych <= 0xDC5E) {
			if (yych <= 0xDC34) goto yy2;
			if (yych <= 0xDC46) goto yy3;
			if (yych <= 0xDC5D) goto yy2;
			goto yy3;
		} else {
			if (yych <= 0xDCC3) {
				if (yych <= 0xDCAF) goto yy2;
				goto yy3;
			} else {
				if (yych <= 0xDDAE) goto yy2;
				if (yych <= 0xDDB5) goto yy3;
				goto yy2;
			}
		}
	} else {
		if (yych <= 0xDE40) {
			if (yych <= 0xDDDB) {
				if (yych <= 0xDDC0) goto yy3;
				goto yy2;
			} else {
				if (yych <= 0xDDDD) goto yy3;
				if (yych <= 0xDE2F) goto yy2;
				goto yy3;
			}
		} else {
			if (yych <= 0xDEB7) {
				if (yych <= 0xDEAA) goto yy2;
				goto yy3;
			} else {
				if (yych <= 0xDF1C) goto yy2;
				if (yych <= 0xDF2B) goto yy3;
				goto yy2;
			}
		}
	}
yy9:
	yych = *++YYCURSOR;
	if (yych <= 0xDE0A) {
		if (yych <= 0xDDD9) {
			if (yych <= 0xDC3A) {
				if (yych <= 0xDC2B) goto yy2;
				goto yy3;
			} else {
				if (yych <= 0xDDD0) goto yy2;
				if (yych <= 0xDDD7) goto yy3;
				goto yy2;
			}
		} else {
			if (yych <= 0xDDE3) {
				if (yych <= 0xDDE0) goto yy3;
				goto yy2;
			} else {
				if (yych <= 0xDDE4) goto yy3;
				if (yych <= 0xDE00) goto yy2;
				goto yy3;
			}
		}
	} else {
		if (yych <= 0xDE46) {
			if (yych <= 0xDE39) {
				if (yych <= 0xDE32) goto yy2;
				goto yy3;
			} else {
				if (yych <= 0xDE3A) goto yy2;
				if (yych <= 0xDE3E) goto yy3;
				goto yy2;
			}
		} else {
			if (yych <= 0xDE5B) {
				if (yych <= 0xDE47) goto yy3;
				if (yych <= 0xDE50) goto yy2;
				goto yy3;
			} else {
				if (yych <= 0xDE89) goto yy2;
				if (yych <= 0xDE99) goto yy3;
				goto yy2;
			}
		}
	}
yy10:
	yych = *++YYCURSOR;
	if (yych <= 0xDD3B) {
		if (yych <= 0xDCA7) {
			if (yych <= 0xDC37) {
				if (yych <= 0xDC2E) goto yy2;
				if (yych <= 0xDC36) goto yy3;
				goto yy2;
			} else {
				if (yych <= 0xDC3F) goto yy3;
				if (yych <= 0xDC91) goto yy2;
				goto yy3;
			}
		} else {
			if (yych <= 0xDD30) {
				if (yych <= 0xDCA8) goto yy2;
				if (yych <= 0xDCB6) goto yy3;
				goto yy2;
			} else {
				if (yych <= 0xDD36) goto yy3;
				if (yych == 0xDD3A) goto yy3;
				goto yy2;
			}
		}
	} else {
		if (yych <= 0xDD8E) {
			if (yych <= 0xDD45) {
				if (yych == 0xDD3E) goto yy2;
				goto yy3;
			} else {
				if (yych == 0xDD47) goto yy3;
				if (yych <= 0xDD89) goto yy2;
				goto yy3;
			}
		} else {
			if (yych <= 0xDD92) {
				if (yych <= 0xDD8F) goto yy2;
				if (yych <= 0xDD91) goto yy3;
				goto yy2;
			} else {
				if (yych <= 0xDD97) goto yy3;
				if (yych <= 0xDEF2) goto yy2;
				if (yych <= 0xDEF6) goto yy3;
				goto yy2;
			}
		}
	}
yy11:
	yych = *++YYCURSOR;
	if (yych <= 0xDEEF) goto yy2;
	if (yych <= 0xDEF4) goto yy3;
	if (yych <= 0xDF2F) goto yy2;
	if (yych <= 0xDF36) goto yy3;
	goto yy2;
yy12:
	yych = *++YYCURSOR;
	if (yych <= 0xDF50) {
		if (yych == 0xDF4F) goto yy3;
		goto yy2;
	} else {
		if (yych <= 0xDF87) goto yy3;
		if (yych <= 0xDF8E) goto yy2;
		if (yych <= 0xDF92) goto yy3;
		goto yy2;
	}
yy13:
	yych = *++YYCURSOR;
	if (yych <= 0xDC9C) goto yy2;
	if (yych <= 0xDC9E) goto yy3;
	goto yy2;
yy14:
	yych = *++YYCURSOR;
	if (yych <= 0xDD82) {
		if (yych <= 0xDD6C) {
			if (yych <= 0xDD64) goto yy2;
			if (yych <= 0xDD69) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDD72) goto yy3;
			if (yych <= 0xDD7A) goto yy2;
			goto yy3;
		}
	} else {
		if (yych <= 0xDDA9) {
			if (yych <= 0xDD84) goto yy2;
			if (yych <= 0xDD8B) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDDAD) goto yy3;
			if (yych <= 0xDE41) goto yy2;
			if (yych <= 0xDE44) goto yy3;
			goto yy2;
		}
	}
yy15:
	yych = *++YYCURSOR;
	if (yych <= 0xDE75) {
		if (yych <= 0xDE3A) {
			if (yych <= 0xDDFF) goto yy2;
			if (yych <= 0xDE36) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDE6C) goto yy3;
			if (yych <= 0xDE74) goto yy2;
			goto yy3;
		}
	} else {
		if (yych <= 0xDE9A) {
			if (yych == 0xDE84) goto yy3;
			goto yy2;
		} else {
			if (yych == 0xDEA0) goto yy2;
			if (yych <= 0xDEAF) goto yy3;
			goto yy2;
		}
	}
yy16:
	yych = *++YYCURSOR;
	if (yych <= 0xDC22) {
		if (yych <= 0xDC07) {
			if (yych <= 0xDBFF) goto yy2;
			if (yych <= 0xDC06) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDC18) goto yy3;
			if (yych <= 0xDC1A) goto yy2;
			if (yych <= 0xDC21) goto yy3;
			goto yy2;
		}
	} else {
		if (yych <= 0xDD2F) {
			if (yych == 0xDC25) goto yy2;
			if (yych <= 0xDC2A) goto yy3;
			goto yy2;
		} else {
			if (yych <= 0xDD36) goto yy3;
			if (yych <= 0xDEEB) goto yy2;
			if (yych <= 0xDEEF) goto yy3;
			goto yy2;
		}
	}
yy17:
	yych = *++YYCURSOR;
	if (yych <= 0xDCCF) goto yy2;
	if (yych <= 0xDCD6) goto yy3;
	if (yych <= 0xDD43) goto yy2;
	if (yych <= 0xDD4A) goto yy3;
	goto yy2;
yy18:
	yych = *++YYCURSOR;
	if (yych <= 0xDCFF) goto yy2;
	if (yych <= 0xDDEF) goto yy3;
	goto yy2;
}
#line 15 "encodings/unicode_group_M_x_encoding_policy_substitute.re"

}
static const unsigned int chars_M [] = {0x300,0x36f,  0x483,0x489,  0x591,0x5bd,  0x5bf,0x5bf,  0x5c1,0x5c2,  0x5c4,0x5c5,  0x5c7,0x5c7,  0x610,0x61a,  0x64b,0x65f,  0x670,0x670,  0x6d6,0x6dc,  0x6df,0x6e4,  0x6e7,0x6e8,  0x6ea,0x6ed,  0x711,0x711,  0x730,0x74a,  0x7a6,0x7b0,  0x7eb,0x7f3,  0x7fd,0x7fd,  0x816,0x819,  0x81b,0x823,  0x825,0x827,  0x829,0x82d,  0x859,0x85b,  0x8d3,0x8e1,  0x8e3,0x903,  0x93a,0x93c,  0x93e,0x94f,  0x951,0x957,  0x962,0x963,  0x981,0x983,  0x9bc,0x9bc,  0x9be,0x9c4,  0x9c7,0x9c8,  0x9cb,0x9cd,  0x9d7,0x9d7,  0x9e2,0x9e3,  0x9fe,0x9fe,  0xa01,0xa03,  0xa3c,0xa3c,  0xa3e,0xa42,  0xa47,0xa48,  0xa4b,0xa4d,  0xa51,0xa51,  0xa70,0xa71,  0xa75,0xa75,  0xa81,0xa83,  0xabc,0xabc,  0xabe,0xac5,  0xac7,0xac9,  0xacb,0xacd,  0xae2,0xae3,  0xafa,0xaff,  0xb01,0xb03,  0xb3c,0xb3c,  0xb3e,0xb44,  0xb47,0xb48,  0xb4b,0xb4d,  0xb56,0xb57,  0xb62,0xb63,  0xb82,0xb82,  0xbbe,0xbc2,  0xbc6,0xbc8,  0xbca,0xbcd,  0xbd7,0xbd7,  0xc00,0xc04,  0xc3e,0xc44,  0xc46,0xc48,  0xc4a,0xc4d,  0xc55,0xc56,  0xc62,0xc63,  0xc81,0xc83,  0xcbc,0xcbc,  0xcbe,0xcc4,  0xcc6,0xcc8,  0xcca,0xccd,  0xcd5,0xcd6,  0xce2,0xce3,  0xd00,0xd03,  0xd3b,0xd3c,  0xd3e,0xd44,  0xd46,0xd48,  0xd4a,0xd4d,  0xd57,0xd57,  0xd62,0xd63,  0xd82,0xd83,  0xdca,0xdca,  0xdcf,0xdd4,  0xdd6,0xdd6,  0xdd8,0xddf,  0xdf2,0xdf3,  0xe31,0xe31,  0xe34,0xe3a,  0xe47,0xe4e,  0xeb1,0xeb1,  0xeb4,0xebc,  0xec8,0xecd,  0xf18,0xf19,  0xf35,0xf35,  0xf37,0xf37,  0xf39,0xf39,  0xf3e,0xf3f,  0xf71,0xf84,  0xf86,0xf87,  0xf8d,0xf97,  0xf99,0xfbc,  0xfc6,0xfc6,  0x102b,0x103e,  0x1056,0x1059,  0x105e,0x1060,  0x1062,0x1064,  0x1067,0x106d,  0x1071,0x1074,  0x1082,0x108d,  0x108f,0x108f,  0x109a,0x109d,  0x135d,0x135f,  0x1712,0x1714,  0x1732,0x1734,  0x1752,0x1753,  0x1772,0x1773,  0x17b4,0x17d3,  0x17dd,0x17dd,  0x180b,0x180d,  0x1885,0x1886,  0x18a9,0x18a9,  0x1920,0x192b,  0x1930,0x193b,  0x1a17,0x1a1b,  0x1a55,0x1a5e,  0x1a60,0x1a7c,  0x1a7f,0x1a7f,  0x1ab0,0x1abe,  0x1b00,0x1b04,  0x1b34,0x1b44,  0x1b6b,0x1b73,  0x1b80,0x1b82,  0x1ba1,0x1bad,  0x1be6,0x1bf3,  0x1c24,0x1c37,  0x1cd0,0x1cd2,  0x1cd4,0x1ce8,  0x1ced,0x1ced,  0x1cf4,0x1cf4,  0x1cf7,0x1cf9,  0x1dc0,0x1df9,  0x1dfb,0x1dff,  0x20d0,0x20f0,  0x2cef,0x2cf1,  0x2d7f,0x2d7f,  0x2de0,0x2dff,  0x302a,0x302f,  0x3099,0x309a,  0xa66f,0xa672,  0xa674,0xa67d,  0xa69e,0xa69f,  0xa6f0,0xa6f1,  0xa802,0xa802,  0xa806,0xa806,  0xa80b,0xa80b,  0xa823,0xa827,  0xa880,0xa881,  0xa8b4,0xa8c5,  0xa8e0,0xa8f1,  0xa8ff,0xa8ff,  0xa926,0xa92d,  0xa947,0xa953,  0xa980,0xa983,  0xa9b3,0xa9c0,  0xa9e5,0xa9e5,  0xaa29,0xaa36,  0xaa43,0xaa43,  0xaa4c,0xaa4d,  0xaa7b,0xaa7d,  0xaab0,0xaab0,  0xaab2,0xaab4,  0xaab7,0xaab8,  0xaabe,0xaabf,  0xaac1,0xaac1,  0xaaeb,0xaaef,  0xaaf5,0xaaf6,  0xabe3,0xabea,  0xabec,0xabed,  0xfb1e,0xfb1e,  0xfe00,0xfe0f,  0xfe20,0xfe2f,  0x101fd,0x101fd,  0x102e0,0x102e0,  0x10376,0x1037a,  0x10a01,0x10a03,  0x10a05,0x10a06,  0x10a0c,0x10a0f,  0x10a38,0x10a3a,  0x10a3f,0x10a3f,  0x10ae5,0x10ae6,  0x10d24,0x10d27,  0x10f46,0x10f50,  0x11000,0x11002,  0x11038,0x11046,  0x1107f,0x11082,  0x110b0,0x110ba,  0x11100,0x11102,  0x11127,0x11134,  0x11145,0x11146,  0x11173,0x11173,  0x11180,0x11182,  0x111b3,0x111c0,  0x111c9,0x111cc,  0x1122c,0x11237,  0x1123e,0x1123e,  0x112df,0x112ea,  0x11300,0x11303,  0x1133b,0x1133c,  0x1133e,0x11344,  0x11347,0x11348,  0x1134b,0x1134d,  0x11357,0x11357,  0x11362,0x11363,  0x11366,0x1136c,  0x11370,0x11374,  0x11435,0x11446,  0x1145e,0x1145e,  0x114b0,0x114c3,  0x115af,0x115b5,  0x115b8,0x115c0,  0x115dc,0x115dd,  0x11630,0x11640,  0x116ab,0x116b7,  0x1171d,0x1172b,  0x1182c,0x1183a,  0x119d1,0x119d7,  0x119da,0x119e0,  0x119e4,0x119e4,  0x11a01,0x11a0a,  0x11a33,0x11a39,  0x11a3b,0x11a3e,  0x11a47,0x11a47,  0x11a51,0x11a5b,  0x11a8a,0x11a99,  0x11c2f,0x11c36,  0x11c38,0x11c3f,  0x11c92,0x11ca7,  0x11ca9,0x11cb6,  0x11d31,0x11d36,  0x11d3a,0x11d3a,  0x11d3c,0x11d3d,  0x11d3f,0x11d45,  0x11d47,0x11d47,  0x11d8a,0x11d8e,  0x11d90,0x11d91,  0x11d93,0x11d97,  0x11ef3,0x11ef6,  0x16af0,0x16af4,  0x16b30,0x16b36,  0x16f4f,0x16f4f,  0x16f51,0x16f87,  0x16f8f,0x16f92,  0x1bc9d,0x1bc9e,  0x1d165,0x1d169,  0x1d16d,0x1d172,  0x1d17b,0x1d182,  0x1d185,0x1d18b,  0x1d1aa,0x1d1ad,  0x1d242,0x1d244,  0x1da00,0x1da36,  0x1da3b,0x1da6c,  0x1da75,0x1da75,  0x1da84,0x1da84,  0x1da9b,0x1da9f,  0x1daa1,0x1daaf,  0x1e000,0x1e006,  0x1e008,0x1e018,  0x1e01b,0x1e021,  0x1e023,0x1e024,  0x1e026,0x1e02a,  0x1e130,0x1e136,  0x1e2ec,0x1e2ef,  0x1e8d0,0x1e8d6,  0x1e944,0x1e94a,  0xe0100,0xe01ef,  0x0,0x0};
static unsigned int encode_utf16 (const unsigned int * ranges, unsigned int ranges_count, unsigned int * s)
{
	unsigned int * const s_start = s;
	for (unsigned int i = 0; i < ranges_count; i += 2)
		for (unsigned int j = ranges[i]; j <= ranges[i + 1]; ++j)
		{
			if (j <= re2c::utf16::MAX_1WORD_RUNE)
				*s++ = j;
			else
			{
				*s++ = re2c::utf16::lead_surr(j);
				*s++ = re2c::utf16::trail_surr(j);
			}
		}
	return s - s_start;
}

int main ()
{
	unsigned int * buffer_M = new unsigned int [4538];
	YYCTYPE * s = (YYCTYPE *) buffer_M;
	unsigned int buffer_len = encode_utf16 (chars_M, sizeof (chars_M) / sizeof (unsigned int), buffer_M);
	/* convert 32-bit code units to YYCTYPE; reuse the same buffer */
	for (unsigned int i = 0; i < buffer_len; ++i) s[i] = buffer_M[i];
	if (!scan (s, s + buffer_len))
		printf("test 'M' failed\n");
	delete [] buffer_M;
	return 0;
}
